BGP数据包结构
open:用来建立最初的BGP连接。(包含hold-time,router-id)
Keepalive:对等体之间周期性的交换这些消息以保持会话有效。(默认60秒)
Update:对等体之间使用这些消息来交换网络层可达性信息。
Notification:这些消息用来通知出错信息。
=========================================================
所有的BGP分组共享同样的公有首部,在学习不同类型的分组之前,先讨论公共首部,如下图所示,这个首部的字段如下。
Marker:这个16字节标记字段保留给鉴别用
Length:这个2字节字段定义包括首部在内的报文总长度
Type:这个1字节段定义分组的类型,用数值1至4定义BGP消息类型
=========================================================
打开消息:主要是利用此报文建立邻居,运行BGP的路由器打开与邻居的TCP连接,并发送打开报文,如果邻居接受这种邻居关系,由响应保活报文。打开报文格式如下所示。
版本:这个1字节字段定义BGP的版本,当前的版本是4
自治系统:这个2字节字段定义自治系统号。
保持时间:这个2字节字段定义一方从另一方收到保活报文或更新报文之前所经过的最大秒数,若路由器在保持时间的期间内没有收到这些报文中的一个,就认为对方是不工作的。
BGP协议标识:这是2字节字段,这定义发送打开报文的路由器,为此,这个路由器通常使用它的IP地址中的一个作为BGP标识符。
选项长度:打开报文还可以包含某些选项参数,若包含,则这个1字节字段定义选项参数总长度,若没有选项参数,则这个字段的值为0
选项参数:若选项参数长度的值不是0,则表示有某些选项参数,每一个选项参数本身又有两个字段,参数长度和参数值,到现在已定义的唯一的选项参数是鉴别。
如下图是采用Wireshark采集到的BGP的打开消息报文。
=========================================================
更新报文:更新报文是BGP协议的核心,路由器使用它来撤销以前已通知的终点和宣布到一个新终点的路由,或两者都有,应该注意:BGP可以撤销好几个在以前曾通知过的终点,但在单个更新报文中则只能通知一个新终点,如下所示。
不可行路由长度:这个2字节字段定义下一字段的长度。
撤销路由:这个字段列出必须从以前通知的清单中删除的所有路由
路径属性长度:这个2字节字段定义下一个字段的长度
路径属性:这个字段定义到这个报文宣布可达性的网络路径属性
网络层可达性信息:这个字段定义这个报文真正通知的网络。它有一个长度字段和一个IP地址前缀,长度定义前缀中的位数。前缀定义这个网络地址的共同部分。例如,若这个网络是123.1.10.0/24,则网络前缀是24而前缀是123.1.10。
下图为,是采用Wireshark采集到的BGP的更新消息报文。
==========================================================
Keepalive报文:是用来告诉对方自己是工作的,保活报文只包括公共首部,如下图所示。
下图为,是采用ethereal采集到的BGP的保活报文。
======================================================
通知报文:当检测出差错状态或路由器打算关闭连接时,路由器就发送通知报文,如下图所示。
差错码:这个1字节字段定义差错的种类
差错子码:这个1字节字段进一步定义每一种差错的类型
差错数据:这个字段可用来给出关于该差错的更多的诊断信息
具体的差错码,如下表所示。
下图为,是采用Wireshark采集到的BGP的通知报文。