Marker (16 bytes) Length (2 bytes) Type (1 byte)
Marker – 信息包含信息接收端可预测值。
Length – 包含协议头的信息长度。
Type –信息类型。信息可能是:Open、Update、Notification、Keepalive。
打开(Open)分组,用来与相邻的另一个BGP发言人建立联系
更新(Update)分组,用来发送某一路由的信息,以及列出多条要撤销的路由
保活(Keepalive)分组,用来确认打开分组和周期性地证实邻站关系
通知(Notification)分组,用来发送检测到的差错
在传输协议连接建立之后,各端发送的第一个信息是 OPEN 信息。如果 OPEN 信息可以接收,会返回发送确认 OPEN 信息的 KEEPALIVE 信息。一旦 OPEN 信息获得确认,UPDATE、KEEPALIVE 和 NOTIFICATION 信息进行相互交换。
BGP的报文结构如下所示
标记 |
长度 |
类型 |
报文数据(变长) |
16字节 2字节 1字节
BGP的报文分成报文与报文数据两部分,其中,BGP报文数据根据不同的报文类型有所不同,报文头由以下3个字段构成:
(1)标记(Marker)字段。标记字段由16个字节构成。标记字段的值是一个通信双方(对等路由器) 都可认可的字节串,双方都统一使用改制来标识一个合法的BGP报文的开始。通常,标记字段用于承载鉴别信息。对于通信双方,在任何情况下标记的值都必须保持一致。标记字段用于报文接收的同步。由于BGP报文用过TCP来简化,而TCP 协议是一个无结构的流(stream)传输协议。在TCP协议上部位高层提供数据流的结构识别,因此也无法为BGP标识两个报文之间的边界。由于传输协议不指定报文边界,因此,为了确保发送方和接收方的报文边界准确保持同步,BGO要求在每个报文的开头放置了一个双方已知的序列,接收方通过该序列来检验报文头的正确性。
(2)报文长度,16比特,制定了以字节为单位计算的报文总长度。最小的报文为19i节,最大允许报文长度为4096字节。
(3)报文类型,1字节,指出报文所属的类型。
BGP的路由更新消息一BGP报文形式在路由器间交换,BGP为了实现其功能定义了4种报文类型。
代码 |
类型 |
说明 |
1 |
OPEN |
初始化对等路由器间的通信 |
2 |
UPDATE |
更新:通告或撤销路由 |
3 |
NOTIFICATION |
对不正确BGP报文的通知 |
4 |
KEEPALIVE |
测试与对等路由器的连接性 |
(1)打开(OPEN)报文
当两个BGP对等路由器之间建立以一个TCP连接以后,就分别发送一个打开报文,声明各自的自治系统号,并确定其他操作参数。
路由器接受到来自对等路由器的OPEN 报文时,BGP将发送一个KEEPALIVE报文。在路由器之间交换选路信息之前,通信双方都必须发送一个OPEN报文,并接受一个KEEPALIVE报文。KEEPALIVE报文可以用作对OPEN报文的确认。
(2)更新(UPDATE)报文
对等的BGP路由器之间创建了TCP连接,并成功接收到对OPEN报文的KEEPALIVE确定报文,对等路由器之间就可以使用路由更新消息报文来通告网络的可达性信息。通告的的内容可以是新的可达的目的网络,也可以是通告撤销原来的某些目的网络的可达性。
(3)保持激活(KEEPALIVE)报文
保持激活报文用于在两个BGP对等路由器之间定期测试网络连接性,并证实对等路由器的正常工作。由于TCP协议本身没有提供自动的连接状态的通知机制,对等路由器之间定制交换KEEPALIVE报文可以使BGP实体能够检测TCP连接是否工作正常。保持激活报文仅包含标准的BGP报文头(类型4),报文长度为19字节。
(4)通知(NOTIFICATION)报文
BGP在发现错误时(或需要进行控制时),可以利用通知报文来通知对等路由器。一旦通知报文,路由器检测来检查到了出现的错误,BGP就会向对等路由器发送一个通知报文,然后关闭TCP连接终止通信。