BGP报文及格式(2)
BGP的5种报文
1、Open报文 用于对等体参数协商;
2、Keepalive报文 用于维护对等体邻居;
3、Update报文 用于通告可达路由和不可达路由;
4、Notification报文 用于错误信息通告,断开对等体邻居;
5、Route-refresh报文 用于请求对等体重新发送路由信息;
BGP所有报文均采用单播的方式发送,因此需要手动指定对等体,不能像IGP协议通过组播方式自动发现邻居;
BGP不需要开发确认报文,通过TCP来提供重传、确认及排序功能,因此建立BGP对等体之前必须先建立TCP连接;
一、BGP报头
1、Marker
2、Length:2字节,表示BGP报文总长度;
3、Type:1字节,表示BGP报文类型:
(1)Open
(2)Keepalive
(3)Update
(4)Notificaiton
(5)Route-refresh
二、Open报文及格式
Open报文,用于对等体参数协商;
建立TCP连接后,对等体互相发送Open报文进行能力协商;
1、Version:1字节,表示BGP版本,缺省为BGP4;
2、My AS:2字节,表示发送端对等体的AS号;
3、Hold Time:2字节,表示发送端对等体的保持时间,缺省为KeepAlive时间的3倍,180s;
如果在保持时间内没有收到Keepalive或Update报文,则认为邻居失效;
如果对等体之间协商的保持时间不一致,将会采用较短的时间作为保持时间;
如果保持时间为0,对等体之间不发送Keepalive报文,BGP连接永远UP;
4、BGP identifier:4字节,表示对等体的RouterID;
RouterID优选Loopback地址大的,其次是物理接口地址大的;
5、Opt Param Len:1字节,表示可选参数字段长度;
6、Optional parameters:用于BGP能力协商,如4字节AS号、路由刷新、BGP多协议扩展等;
在向对等体发送Open消息的时候,对等体之间根据可选参数进行能力协商,如果对等体之间都支持就可以使用该能力;
如果一端对等体不支持该能力,会发送Notification报文,说明对等体不支持该能力,BGP邻居会重建;
三、KeepAlive报文及格式
KeepAlive报文,用于维护对等体邻居关系;
缺省为保持时间180s的1/3倍60s,Update报文会抑制KeepAlive报文的发送;
如果保持时间为0,那么不会发送KeepAlive消息;
KeepAlive报文只包含BGP报头;
四、Update报文
Update报文,用来通告可达路由和不可达路由;
可达路由携带路径属性;
不可达路由只携带不可达路由前缀和前缀长度;
1、Withdrawn Routes Length:2字节,表示不可达路由的长度;
2、Withdrawn Routes:表示不可达路由的前缀和前缀长度;
3、NLRI:表示可达路由的前缀和前缀长度;
4、Path Attribute Length:2字节,表示可达路由携带的路径属性长度;
5、Path Attribute :表示可达路由携带的路径属性;
五、Notification报文
Notification报文,用于错误信息通告,然后断开 BGP邻居;
Notification报文由错误代码、错误子代码以及数据字段构成;
1、Error Code:1字节,表示每个错误对应的错误码,每个错误码可以包含多个错误子代码;
2、Error SubCode:1字节,表示每个错误码对应的错误子代码;
3、Data:包含了错误相关信息,用来诊断差错原因;
六、Route-Refresh报文
Route-Refresh报文,用于请求对等体重新发送路由信息;
对等体之间发送Open报文进行能力协商时,会进行路由刷新能力协商;
当BGP的邻居入口路由策略改变后,会自动向邻居发送Refresh消息请求对等体重新发送路由信息;
当BGP的邻居出口路由策略改变后,BGP会向邻居重新发送路由信息;