BGP学习总结
BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建立对等体关系,BGP需要手工显式的指定对等体关系。
一、常见术语
1、 BGP的发言者:发送BGP消息的路由器叫做BGP的发言者。
2、 BGP对等体:相互交换BGP消息的路由器叫做BGP的对等体。
3、 IBGP对等体:同一个自治系统内的对等体关系。
4、 EBGP对等体:不同自治系统间的对等体关系。
二、BGP的通告原则:
1、 当多条路径存在时,BGP的发言者首选最优的路由供自己使用。
2、 BGP发言者只把自己使用的最优的路由通告给其他对等体。
3、 BGP发言者从EBGP获得路由信息向它的EBGP和IBGP对等体通告。
4、 BGP发言者从IBGP对等体获得的路由信息不会再向它的IBGP邻居通告。
5、 BGP发言者从IBGP获得的路由信息是否通告给EBGP对等体,要依IBGP与EBGP同步情况而定。
6、 对等体关系建立后,BGP发言者将自己的所有的BGP路由通告给新想相邻体。
三、BGP的消息类型和功能
1、 open消息:用来建立BGP对等体间的关系并协商参数。
2、 keepalive消息:用来对open消息确认,周期性的发送keepalive消息向对等体通告自己的存在,保持对等体的关系。
3、 nitification:错误日志,当有错误发生的时候,会向对等体发送notification报文,并且断开TCP连接,并回到idle状态。
4、 update消息:用来更新路由条目。
5、 route-fresh消息:向对等体请发送求指定地址族的路由信息。
四、BGP的状态机制
1、 idle状态:初始状态,不接受任何BGP的连接,等待start事件的产生,start事件产生后,系统开启connectRetry定时器。
2、 connect状态:连接状态,系统等待TCP连接建立完成,如果建立成功后,系统拆除connectRetry定时器,并发送open消息,此时进入open-sent状态。
3、 Active状态:活跃状态,。如果有start事件的产生,但是TCP连接并没有建立成功,此时系统进入Active状态。
4、 Open-sent:open消息发送状态,表示已经发送open消息,等待对等体的open消息。
5、 Open-confirm:open消息确认状态。收到对等体的open消息已经发送确认消息,等待对等体对自己的open消息确认的keepalive消息。
6、 Established:连接已建立,此时对等体可以发送update消息报文进行路由的更新了。
五、BGP的路由属性
1、 公认必遵属性:所有BGP路由器都能够识别这种属性,并且这种属性必须存在于update报文中,如果缺少这种属性,路由会出错,主要包括:origin属性、as-path属性、next-hop属性。
2、 公认可选属性:所有的BGP路由都能够识别这种属性,但是这种属性不要求一定存在于update消息中,主要包括:Local_pref属性等。
3、 可选传递:在AS之间具有可传递的属性,BGP路由器都可以不支持此属性,但它仍会接受有此属性的路由,并通告给其他的路由器,主要包括:commutity属性等。
4、 可选非传递属性:如果BGP路由器不支持此属性,则此属性可以被忽略,主要包括MED、CLUESTER_LIST属性。
Origin属性:路由的源属性,BGP路由的来源主要有三种,第一:通过引入IGP路由实现,即Incomeplete,第二:通过network方式注入BGP,即IGP,通过EGP协议学习,这个可以忽略了。
As-path:指示出了该路由信息经过了哪些AS路径,主要作用是保证AS间无环路,一般当本自治系统的路由离开自治系统的时候会添加本自治系统的号码,BGP路由选路的时候,会优先选择AS-PATH短的路由。
Next-hop属性:下一跳属性,需要注意的是当边界设备学习到EGP对等体发布的路由的时候,传递给IBGP对等体的时候,不会修改路由的下一跳。
5、 local_pref:本地优先级,当一个AS有多条到达外部AS的路径的时候,BGP会优先选择本地优先级高的路由,本地优先级只在本AS内有效,只能影响进入本AS的流量,不会影响离开本AS的流量。
6、 MED属性:BGP的MED属性相当于IGP协议的度量值,当有多条路由进入本AS的时候,用来告知EBGP对等体哪条路由最优,默认的MED值为100,值越小越优。
需要注意的是med值仅在两个AS之间传递,不会传递到第三个AS。
7、 preferred-value值:首选值,为从不同对等体接收的路由分配不同的preferred-value值,从而可以改变指定对等体学到路由的优先级,这是h3c的私有属性,改属性仅在本地有效,不随路由信息传播。
六、BGP状态机
Idle 状态:即空闲状态,不接受任何BGP的连接,等待Start事件的产生,如果有start事件产生,若有start事件产生,系统开启ConnectRetry定时器,向邻居发起TCP连接,并将状态变为Connect。
Connect状态:即连接状态,在Connect状态,系统会等待TCP连接建立完成。如果TCP状态为established,则拆除ConnectRetry定时器,并发送Open消息,将状态置为Open-sent,若TCP建立失败,则重置ConnectRetry定时器并转为Active状态。
Active状态:即活跃状态,如果已经有启动事件但是TCP建立连接没有完成,则处于Active状态,该状态时,系统会响应ConnectRetry定时器,变为connect状态,此时如果TCP建立完成,则发送open消息,状态变为Open-sent。
Opent-sent状态:即Open消息已发送,在该状态中系统已经向邻居发送了open消息,等待邻居的open消息,如果没有错误发送,收到邻居的open消息后,将进入Open-confirm状态。
Open-confirm状态:Open消息确认状态,该状态表明系统已经发送了keepalive消息,等待对方的keepalive消息,如果收到了keepalive,则进入established状态,如果keepalive定时器超时,则重置HoldTime定时器,如果收到notification消息,则断开连接。
Established状态:连接建立状态,此时说明BGP连接建立完成了,可以发送Update消息交换路由信息。
可以利用邻居状态机描述BGP连接的建立和维护,它将有以下的6中状态:
1.ldle (空闲)状态
BGP总以ldle状态为起点,该状态拒绝所有入站的连接。只有在BGP起动之后,BGP进程将初始化所有BGP资源,初始化去往邻居的TCP连接,监听来自邻居的TCP初始化消息,并更改为连接状态。启动事件一般是配置BGP进程。
2. Connect(连接)状态
进入Connect状态后,BGP进程将一直等待TCP连接的完成(三次握手),当TCP连接建立成功,BGP将会向邻居发送Open消息,并进入OpenSent(打开发送)状态。如果TCP会话没有建立,BGP将继续监听邻居初始化的连接,开启连接重试定时器,迁移到Active(激活)状态。Connect→→OpenSent(TCP连接建立);Connect→→Active(TCP连接暂未建立)。
3.Active(激活)状态
该状态下,BGP进程继续尝试和邻居建立TCP连接,如果TCP连接建立成功,BGP进程清除连接重试定时器,完成初始化过程,并向邻居发送Open报文,迁移到OpenSent(打开发送)状态。
如果连接重试定时器到期BGP进程依然处在激活状态,进程将返回连接状态,监听邻居发起的TCP会话,这个过程将反复循环,直到监听到由邻居发起的TCP会话。
4.OpenSent(打开发送)状态
进入了该状态,已经发送了Open消息,BGP将一直等待来自邻居的Open消息。一旦接收到Open消息后,将检查该消息的每一个字段,如果有差错,将会发送Notification消息迁入Idle状态。
如果接收到的Open消息没错,就会发送Keepalive消息并商讨Keepalive定时器和Keepalive发送的时间。并迁移到OpenConfirm(打开确认)状态。
5.OpenConfirm(打开确认)状态
进入了这个状态下,BGP进程将等待邻居确认的Keepalive或Notification消息。如果接收到的是Keepalive消息则迁移到Established(建立)状态,如果是Notification消息那么就将迁移到Idle状态。
6.Established(建立)状态
进入了这个状态就说明了BGP的对等连接正式建立了,对等体之间交互Update,Keepalive和Notification消息,如果接受到的是Update或Keepalive消息,则重启保持定时器,如果接受到一个Notification消息,则会迁移到Idle状态。
注:①Q:长时间停留在Active或ldle状态,可能的原因是什么?
A:a)本路由器没有到达BGP Open报文中源IP地址的路由(debug ip bgp输出:no route)
b)neighbor命令中配置了错误的IP地址(debug ip bgp输出:no route)
c)neighbor命令中没有配置更新源地址(debug ip bgp输出:Connection refused by remote host)
d)在建立eBGP邻居是的neighbor命令中没有考虑到TTL值问题
e)没有配置neighbor命令
f)AS号配置错误(debug ip bgp输出:Connection refused by remote host)
②我们在实际网络中操作BGP时,为了避免路由动荡,可以使用命令router(config-router)# neighbor A.B.C.D shutdown来暂时的关闭BGP邻居,此时邻居配置未删除但是路由丢失。
③查看命令show ip bgp summary #观察最后1列显示为空白或数字,表示该邻居正常建立。
查看命令show ip bgp neighbors #观察BGP State显示为Established表示邻居正常建立。
汇总贴:http://bbs.51cto.com/thread-919144-1.html
1.png (92.45 KB)
2012-5-30 08:25
2.png (49.57 KB)
2012-5-30 08:25