2.6 BGP消息格式

BGP消息是在TCP报文段中使用TCP端口179进行承载的,其最大长度是4 096个8位组,最小长度是19个8位组,所有BGP消息都有一个相同的头部(如图2-43所示)。对不同类型的BGP消息来说,数据部分可能位于该头部之后,也可能不位于该头部之后。

img114

图2-43 BGP消息头部

• 标志(marker)字段长16个8位组,用于检测BGP对等体之间的同步丢失情况,并且在支持验证功能的情况下进行消息验证。如果消息类型为Open或Open消息中未包含验证信息,标志字段将被设置为全1;否则,标志字段值通过某些计算得到(作为验证进程的一部分)。

• 长度(length)字段长2个8位组,指示消息的全部长度(包括头部),以8位组为单位。

• 类型(type)字段长1个8位组,指示消息的类型。表2-6列出了各种可能类型的代码。

表2-6 BGP类型代码

img115a

2.6.1 Open(打开)消息

Open消息的格式如图2-44所示,该消息是TCP连接建立后发出的第一条消息。如果接收到的Open消息是可接受的,则发送一条Keepalive消息,以确认该Open消息。确认了Open消息之后,BGP连接就处于Established(建立)状态,并能发送Update、Keepalive及Notification消息。

img115b

图2-44 BGP打开(Open)消息的格式

BGP的Open消息包含了以下字段。

• 版本(Version):该字段长为1个8位组,用于指定发起者所运行的BGP版本。

• 我的自治系统(My Autonomous System):该字段长为2个8位组,用于指定发起者的AS号。

• 保持时间(Hold Time):该字段长为2个8位组,用于表示发送端建议的保持时间的秒数。接收端将该字段的值与其配置的保持时间进行对比,要么接受较小的保持时间值,要么拒绝该连接。保持时间必须为0或至少3秒钟。

• BGP标识符(BGP Identifier):发起者的路由器IP。Cisco路由器将路由器ID设置为最大的环回接口IP地址,如果没有配置环回接口,则设置为最大的物理接口IP地址。

• 可选参数长度(Optional Parameters Length):该字段长为1个8位组,用于表示后面可选参数(Optional Parameters)字段的长度(以8位组为单位)。如果该字段的值为0,那么就表示该消息中无可选参数字段。

• 可选参数(Optional Parameters):该可变长度字段包含了一个可选参数列表,每个参数都由一个长为1个8位组的类型字段、一个长为1个8位组的长度字段以及一个可变长度的包含参数值的字段组成。

2.6.2 Update(更新)消息

Update消息的格式如图2-45所示,该消息用来向对等体宣告一条可行路由、撤销多条不可行路由或两者。

BGP的Update消息包括以下字段。

• 不可行路由的长度(Unfeasible Routes Length):该字段长为2个8位组,用于指示随后被撤销路由(Withdraw Routes)字段的长度(以8位组为单位)。该字段值为0时表示没有路由要被撤销,且Update消息中无被撤销路由(Withdraw Routes)字段。

• 被撤销路由(Withdraw Routes):该可变长度字段包含了一个要退出服务的路由列表,列表中的每条路由都以(长度,前缀)二元组形式加以表示。其中,长度表示的是前缀的长度,前缀表示的则是被撤销路由的IP地址前缀,如果该二元组中的长度部分为0,则前缀部分将匹配所有路由。

• 整个路径属性的长度(Total Path Attribute Length):该字段长为2个8位组,用于指示随后的路径属性(Path Attributes)字段的长度(以8位组为单位)。该字段值为0时表示Update消息中未包含路径属性和NLRI。

• 路径属性(Path Attributes):该可变长度字段列出了与随后字段NLRI相关的属性信息。每个路径属性都以可变长度的三元组(属性类型,属性长度,属性值)加以表示,该三元组中的属性类型部分是一个长为2个8位组的字段,由4个标记bit、 4个未使用bit以及1个属性类型代码组成(参见图2-46)。

img116a

图2-45 BGP Update消息的格式

img116b

图2-46 路径属性字段中的属性类型部分的格式

• 网络层可达性信息(Network Layer Reachability Information):该可变长度字段包含了一个(长度,前缀)二元组。其中,长度部分以bit为单位表示后面的前缀长度,前缀部分则是NLRI的IP地址前缀。如果长度部分的值为0,则表示前缀将匹配所有IP地址。

表2-7列出了最常用的属性类型代码以及每种属性类型可能的属性值。

表2-7 属性类型及相应的属性值*

img117a

*除表中所列之外还有其他属性类型,但都属于其他厂商(非Cisco)的专用属性类型,因而超出了本书的讨论范围。

2.6.3 Keepalive(保持激活)消息

Keepalive消息以保持时间的1/3(但不得小于1秒钟)为周期进行交换,如果协商后的保持时间为0,则表示不发送Keepalive消息。

Keepalive消息仅包含长为19个8位组的BGP消息头部,不包含其他数据。

2.6.4 Notification(通告)消息

Notification消息的格式如图2-47所示,在检测到差错条件之后就发送该消息。该消息发出后,将立即关闭BGP连接。

img117b

图2-47 BGP Notification消息的格式

BGP的Notification消息包括以下字段。

• 差错代码(Error Code):该字段长为1个8位组,用于指示差错类型。

• 差错子代码(Error Subcode):该字段长为1个8位组,提供了更精确的差错信息。表2-8列出了各种可能的差错代码及相应的差错子代码。

• 数据(Data):该可变长度字段用于诊断差错原因,该字段的内容与差错代码及差错子代码相关。

表2-8 BGP Notification消息的差错代码和差错子代码

img118