BGP原理的概述
BGP协议是一种距离矢量(Distance vector)的路由协议,但是比起RIP等典型的距离矢量协议,又有很多增强的性能。BGP使用TCP作为传输协议,使用端口号179。在通信时,要先建立TCP会话,这样数据传输的可靠性就由TCP协议来保证,而在BGP的协议中就不用再使用差错控制和重传的机制,从而简化了复杂的程度。另外,BGP使用增量的、触发性的路由更新,而不是一般的距离矢量协议的整个路由表的、周期性的更新,这样节省了更新所占用的带宽。BGP还使用“保留”信号(Keepalive)来监视TCP会话的连接。而且,BGP还有多种衡量路由路径的度量标准(称为路由属性),可以更加准确的判断出最优的路径。
BGP使用TCP作为其承载协议建立连接。因此与IGP逐跳路由器建立邻居不同,BGP可以跨越多跳路由器建立邻居关系。
BGP和IGP协议对比
协议的分类
IGP(Interior gateway protocols)——内部网关协议,定义为在一个自治系统内部使用的路由协议(包括动态路由协议和静态路由)。IGP的功能是完成数据包在AS内部的路由选择,或者说,是讲述数据包如何穿过本地AS的。RIPv1&v2,OSPF,ISIS都是典型的IGP。
EGP(Exterior gateway protocols)——外部网关协议,定义为在多个自治系统之间使用的路由协议。它主要完成数据包在AS间的路由选择,或者说,讲述数据包为了到达目的IP,需要通过哪些AS。BGP就是一种EGP。
2字节长度的AS号码,即1-65535。其中1-64511为公有AS,64512-65534为私有AS。在2009年1月之后,IANA决定使用4字节长度AS,范围是65536-4294967295
应用场景
IGP只作用于本地AS内部,而对其他AS一无所知。它负责将数据包发到主机所在的网段(segment)
EGP作用于各AS之间,它只了解AS的整体结构,而不了解各个AS内部的拓扑结构。它只负责将数据包发到相应的AS中,余下的工作便交给IGP来做。
BGP报文类型的全面解析
1、open报文:负责和对等体建立邻居关系
2、update报文:被用来在对等体之间传递路由信息(包括可达路由或者不可达路由)
3、Notification报文:检测到错误的时候,就发送该消息给对等体
4、Keepalive报文:周期性每60秒发送,用来维护TCP/IP连接
5、Route-refresh报文:表示自己支持路由刷新能力
BGP的报文类型
Open报文
里面比较重要的字段
version v4版本
My AS 代表是我该设备的AS号码
router id 代表该设备的BGP的router id
Hold time时间 从0开始一直增加到180s,最小可以为0,这种情况下BGP连接被认为永远是up,对等体之间
不会发送keepalive报文来检测邻居是否失效
可选字段和可变长字段
Keepalive报文
缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。
Update报文
前面两部分表示路由撤销信息,后面三部分表示路由可达信息
路由可达信息携带各种属性
但是路由撤销信息就不需要携带各种属性了,因为这时候是撤销了
Notification报文
Notification报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误码(如定时器超时等),以及错误子码和错误信息。
Route-refresh报文
可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略
BGP协议当中IBGP邻居关系建立
运行在相同AS内的BGP路由器建立的邻居关系为IBGP(Internal BGP)邻居关系
RTB的配置
bgp 345
router-id 1.1.1.1
peer 2.2.2.2 as-number 345
peer 2.2.2.2 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization ###默认配置
peer 2.2.2.2 enable ###默认生成
RTC的配置
bgp 345
router-id 2.2.2.2
peer 1.1.1.1 as-number 345
peer 1.1.1.1 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 1.1.1.1 enable ###默认生成
注意点:
IBGP的关系 一般建议用loopback建立
loopback比较稳定
可以实现冗余备份
BGP协议当中EBGP邻居关系建立
运行在不同AS之间的BGP路由器建立的邻居关系为EBGP(External BGP)邻居关系
RTB的配置
bgp 345
router-id 1.1.1.1
peer 12.1.1.2 as-number 200
#
ipv4-family unicast
undo synchronization
peer 12.1.1.2 enable ###默认生成
#
RTD的配置
#
bgp 200
peer 12.1.1.1 as-number 345
#
ipv4-family unicast
undo synchronization
peer 12.1.1.1 enable ###默认生成
#
注意点:
一般建立ebgp关系的时候 建议大家用物理接口建立 如果用loopback的话 需要修改ttl的数值
peer 1.1.1.1 ebgp-max-hop 2
默认情况下建立ebgp的时候,我们发送数据包的TTL值为1
BGP协议的状态机的详细概述
Idle:空闲状态,BGP系统发出start事件(就是管理员配置BGP的过程),BGP初始化资源,复位连接计时器(32s),发起TCP连接,同时转入Connect状态
Connect:在此状态,BGP发起第一个TCP连接,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就转入Active状态。(TCP连接失败两种情况:1.收到TCP参数协商失败的回复,则进入Active状态,2.对方长时间没有回复,超时,则保持在Connect状态
Active:BGP总是在试图建立TCP连接,如果连接计时器超时,就退回到Connect状态,如果TCP连接成功,就转入OpenSent状态,如果TCP连接失败,就继续保持在Active状态,并继续发起TCP连接。
OpenSent:BGP也已经发送了第一个Open报文,BGP就在等待其对等体发送Open报文。并对收到的Open报文进行正确性检查,如果有错误,系统就会发送一条出错通知消息并退回到Idle状态,如果没有错误,BGP就开始发送Keepalive报文,并复位Keepalive计时器(180s),开始计时。同时转入OpenConfirm状态。
OpenConfirm:BGP等待一个Keepalive报文,如果收到了一个Keepalive报文,就转入Established阶段
Established:BGP对等体交换update、keepalive、route-refresh报文
以后会周期性发送keepalive报文(60s)
如果收到notification报文或者收到TCP拆除链接通知,BGP转至idle状态
BGP的路由生成方式network
Network命令是逐条将IP路由表中已经存在的路由引入到BGP路由表中
通过display命令在RTC上查看是否学到BGP发布的路由条目
BGP的路由生成方式import
Import命令是根据运行的路由协议(RIP,OSPF,ISIS等)将路由引入到BGP路由表中,同时import命令还可以引入直连和静态路由
通过display命令在RTC上查看是否学到BGP引入的路由条目