03、BGP报文格式

BGP报文格式

BGP报文由BGP报文头和具体报文内容两部分组成。BGP的运行是通过消息驱动的,共有如下所示的5种消息类型,这些消息有相同的报文头。这些消息通过TCP协议进行传播(端口号是179)。消息最长为4096字节,最短为19字节(只包含报文头)。BGP报文头包括三部分,总长19字节。

报文头格式

BGP这五种报文具有相同的报文头格式。如图1所示。

图1 报文头格式

表1 BGP报文头格式字段解释

字段名

长度

含义

Marker

16字节

用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

Length

2个字节(无符号位)

BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。

Type

1个字节(无符号位)

BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。

表2 TYPE值

TYPE值

报文类型

1

OPEN

2

UPDATE

3

NOTIFICATION

4

KEEPALIVE

5

REFRESH

OPEN报文

如果BGP报文头中的TYPE为1,则该报文为OPEN报文。报文头后面所接的报文内容如下,OPEN报文用于建立BGP连接。OPEN报文格式如图2所示。

图2 OPEN报文格式

表3 OPEN报文格式字段解释

字段名

长度

含义

Version

1个字节(无符号位)

表示协议的版本号,现在BGP的版本号为4。

My Autonomous System

2个字节(无符号位)

发送者自己的AS域号

Hold Time

2个字节(无符号位)

发送者自己设定的hold time值(单位:秒),用于协商BGP对等体间保持建立连接关系,发送KEEPALIVE或UPDATE等报文的时间间隔。BGP的状态机必须在收到对等体的OPEN报文后,对发出的OPEN报文和收到的OPEN报文两者的hold time时间作比较,选择较小的时间作为协商结果。Hold Time的值可为零(不发KEEPALIVE报文)或大于等于3,系统的默认为180。

BGP Identifier

4个字节(无符号位)

发送者的router id。

Opt Parm Len

1个字节(无符号位)

表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。

Optional Parameters

可变

此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元。

0               7              15
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
|  Parm. Type   | Parm. Length  |  Parameter Value (variable)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
  • Parm. Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。
  • Parm. Length:占1个字节(无符号位),为Parameter Value的长度。
  • Parameter. Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parameter.Value是表示所支持的各种协商能力的列表,列表中的每一个单元是如下的一个TLV三元组:

    +------------------------------+
    | Capability Code (1 octet)    |
    +------------------------------+
    | Capability Length (1 octet)  |
    +------------------------------+
    | Capability Value (variable)  |
    +------------------------------+
    • Capability Code:所支持的能力编号,占1个字节。Code为1时,表示支持的地址族能力;Code为2时,表示支持REFRESH能力。
    • Capability Length:表示Capability Value的长度,占1个字节。
    • Capability Value:根据Code值的不同其内容与长度也不同。

      Capability Code为1:

      Capability Value值是一个TLV三元组,共占4个字节:

      0       7      15      23      31
      +-------+-------+-------+-------+
      |      AFI      | Res.  | SAFI  |
      +-------+-------+-------+-------+

      AFI:地址族标识(Address Family Identifier),占2个字节,能力所支持地址族标识信息,用以和SAFI一同确定网络层协议和IP地址间的关系,编码方式与多协议扩展中的规定相同。其值按照相关RFC中ADDRESS FAMILY NUMBERS的定义;

      Res:保留位,占1个字节,发送者应将其设置为零,在接受的时候忽略;

      SAFI:子地址族标识(Address Family Identifier),占1个字节,能力所支持的子地址族标识信息,用以和AFI一同确定网络层协议和IP地址间的关系,编码方式与多协议扩展中的规定相同。其值按照相关RFC中ADDRESS FAMILY NUMBERS的定义。

      Capability Code为2

      表示支持路由刷新能力,即Route Refresh Capability。此能力的code为2,length为零,无value部分。

      需要说明的是,只有在能力协商中使能了支持Route Refresh Capability,设备才能处理REFRESH报文。我们的实现是默认情况下,支持IPv4单播能力与路由刷新能力,其他能力需要另外设定。

表4 AFI及SAFI编码说明

AFI编码

AFI说明

SAFI编码

SAFI说明

说明

1

IPv4地址族

1

单播

IPv4单播

2

组播

IPv4组播

128

VPN

IPv4的L3VPN

2

IPv6地址族

1

单播

IPv6单播

2

组播

IPv6组播

128

VPN

IPv6的L3VPN

196

二层

128

VPN

L2VPN的BGP方式

UPDATE报文

如果BGP报文头中的TYPE为2,则该报文为UPDATE报文。报文头后面所接的报文内容如下,UPDATE报文用于通告路由。UPDATE报文格式如图3所示。

图3 UPDATE报文格式

表5 UPDATE报文格式字段解释

字段名

长度

含义

Withdrawn Routes Length

2个字节(无符号位)

标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。

Withdrawn Routes

变长

包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。

  • Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由。

  • Prefix:传送的IP地址前缀必须用整字节表示。例如:假定待撤销的路由为192.168.200.200,其编码用16进制表示可如下:

    Mask掩码(十进制) Length Prefix

    32 20 C0 A8 C8 C8

    25 19 C0 A8 C8 80

    20 14 C0 A8 C0

    15 0F C0 A8

Total Path Attribute Length

2个字节(无符号位)

标明Path Attributes的长度。其值为零时,表示没有路由及其路由属性要通告。

Path Attributes

变长

包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。其编码采用TLV格式。如下所示。

图4 BGP路径属性TLV格式

其中,Attr.TYPE占2个字节(无符号位),包括1字节的Flags(无符号位)和1字节的Type Code(无符号位)。

图5 TLV结构-Type

Attr.Flags:占1个字节(8个bit),表示属性的标记,其每个bit位的意义如下显示:

O: Optional bit, 属性的可选性。决定属性是否为必携带属性。带可选属性(optional)设为1,公认属性(well-known)设为零。

T: Transitive bit 属性的可传递性。对于可选属性,是可传递的设为1,非可传递的设为0。对于公认属性必须设为1。

P: Partial bit 属性的局部性。对于可传递的可选属性是局部的设为1,是完全的设为零。对于非可传递的可选属性和公认属性,必须设为零。

E: Extended Length bit 决定该属性的长度的字段(即Attr. Length)是否需要扩展。不需要扩展则设为零,Attr. Length占1个字节;需要扩展则设为1,Attr. Length占2个字节。

U: Unused bits 低4位没有使用,发送时必须全部设为零,并且在接收时被忽略。

Attr.Type Code:占1个字节(无符号位),表示属性的类型号。设置如表6

Attr.Value:根据不同属性的类型填写属性值。

Network Layer Reachability Information(NLRI)

变长

包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同。

表6 路由属性的类型号列表

属性类型

属性值

1:Origin

IGP

EGP

Incomplete

2:As_Path

AS_SET

AS_SEQUENCE

AS_CONFED_SET

AS_CONFED_SEQUENCE

3:Next_Hop

下一跳的IP地址

4:Multi_Exit_Disc

MED用于判断流量进入AS时的最佳路由

5:Local_Pref

Local_Pref用于判断流量离开AS时的最佳路由

6:Atomic_Aggregate

BGP Speaker选择聚合后的路由,而非具体的路由

7:Aggregator

发起聚合的Router ID和AS号

8:Community

团体属性

9:Originator_ID

反射路由发起者的Router ID

10:Cluster_List

反射路由经过的反射器列表

14:MP_REACH_NLRI

多协议可达NLRI

15:MP_UNREACH_NLRI

多协议不可达NLRI

16:Extended Communtities

扩展团体属性

NOTIFICATION报文

如果BGP报文头中的TYPE为3,则该报文为NOTIFICATION报文。报文头后面所接的报文内容如下,NOTIFICATION报文用于处理BGP进程中的各种错误。NOTIFICATION报文格式如图6所示。

图6 NOTIFICATION报文格式

表7 NOTIFICATION报文格式字段解释

字段名

长度

含义

Error code

1字节

定义错误的类型,非特定的错误类型用零表示。详细错误码参见表8

Error subcode

1字节

指定错误细节编号,非特定的错误细节编号用零表示。

Data

可变长

指定错误数据内容。

表8 BGP的错误码解释

错误码

错误子码

1:消息头错误

1:连接未同步

2:错误的消息长度

3:错误的消息类型

2:Open消息错误

1:不支持的版本号

2:错误的对等AS

3:错误的BGP标识符

4:不支持的可选参数

5:认证失败

6:不可接受的保持时间

7:不支持的能力

3:Update消息错误

1:畸形属性列表

2:不可识别的公认属性

3:缺少公认属性

4:属性标志错误

5:属性长度错误

6:无效Origin属性

7:AS路由环路

8:无效Next_Hop属性

9:可选属性错误

10:无效网络字段

11:畸形AS_Path

4:Hold Timer超时

0:没有特别的错误子码定义。

5:有限状态机错误

0:没有特别的错误子码定义。

6:终止

1:前缀超过最大值。

2:管理关闭

3:删除邻居

4:管理重置

5:连接失败

6:其他配置改变

7:连接冲突

8:资源短缺

9:BFD断开连接

KEEPALIVE报文

如果BGP报文头中的TYPE为4,则该报文为KEEPALIVE报文。KEEPALIVE报文用于保持BGP连接。KEEPALIVE报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节。KEEPALIVE报文格式如图7所示。

图7 KEEPALIVE报文格式

表9 KEEPALIVE报文格式字段解释

字段名

长度

含义

Marker

16字节

用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。

Length

2字节

BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。

Type

1字节

BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。Keepalive消息类型为4。

REFRESH报文

如果BGP报文头中的TYPE为5,则该报文为REFRESH报文。报文头后面所接的报文内容如下,REFRESH报文用于动态的请求BGP路由发布者重新发布UPDATE报文,进行路由更新。REFRESH报文格式如图8所示。

图8 REFRESH报文格式

表10 REFRESH报文格式字段解释

字段名

长度

含义

AFI

2字节(无符号位)

表示地址族id,与OPEN报文中的定义相同。

Res.

1字节(无符号位)

所有位应全为零,在接收报文时,此位被忽略。

SAFI

1字节(无符号位)

与OPEN报文中的定义相同。

posted @ 2024-04-15 16:42  博雅塔之客  阅读(42)  评论(0编辑  收藏  举报