设为首页收藏本站language 语言切换
查看: 911|回复: 0
收起左侧

[分享] BGP各种报文格式

[复制链接]
 成长值: 63415
发表于 2024-5-22 14:58:35 | 显示全部楼层 |阅读模式
本帖最后由 小乔 于 2024-5-22 14:59 编辑

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

                               
登录/注册后可看大图

表7-1 BGP报文头格式字段解释
字段名
长度
含义
Marker
16字节
用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全“FF”)。
Length
2个字节(无符号位)
BGP消息总长度(包括报文头在内),以字节为单位。长度范围是19~4096。
Type
1个字节(无符号位)
BGP消息的类型。Type有5个可选值,表示BGP报文头后面所接的5类报文。
  • 1:OPEN
  • 2:UPDATE
  • 3:NOTIFICATION
  • 4:KEEPALIVE
  • 5:REFRESH


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

                               
登录/注册后可看大图

表7-2 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  |  Parm.Value (variable)+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
  • Parm.Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。
  • Parm.Length:占1个字节(无符号位),为Parameter Value的长度。
  • Parm.Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parm.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单播能力与路由刷新能力,其他能力需要另外设定。




OPEN报文扩展
随着BGP能力在不断地增加,当前一个BGP会话协商多种能力时,OPEN报文长度可能超过255字节,可以通过配置peer extended-open-message命令使用OPEN报文扩展格式,如下所示。
图7-6 OPEN报文扩展格式

                               
登录/注册后可看大图

表7-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的值可为0(不发KEEPALIVE报文)或大于等于3,系统的默认为180。
BGP Identifier
4个字节(无符号位)
发送者的router id。
Non-Ext OP Len.
1个字节(无符号位)
固定值为255。
Non-Ext OP Type
1个字节(无符号位)
IANA已经注册了可选参数扩展长度类型码255作为BGP OPEN报文扩展可选参数类型。
Extended Opt.Parm.Length
2个字节(无符号位)
扩展可选参数长度,表示Optional Parameters(可选参数)的长度。
Optional Parameters
可变
此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元。
0               7               15              23+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|  Parm.Type    |           Parm.Length         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+~              Parm.Value (variable)            ~|                                               |
  • Parm.Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。
  • Parm.Length:占2个字节(无符号位),为Parameter Value的长度。
  • Parm.Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parm.Value是表示所支持的各种协商能力的列表,列表中的每一个单元是如下的一个TLV三元组:
    +------------------------------+| Capability Code (1 octet)    |+------------------------------+| Capability Length (2 octet)  |+------------------------------+| Capability Value (variable)  |+------------------------------+
    • Capability Code:所支持的能力编号,占1个字节。Code为1时,表示支持的地址族能力;Code为2时,表示支持REFRESH能力。
    • Capability Length:表示Capability Value的长度,占2个字节。
    • 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个字节,发送者应将其设置为0,在接受的时候忽略;
      SAFI:子地址族标识(Address Family Identifier),占1个字节,能力所支持的子地址族标识信息,用以和AFI一同确定网络层协议和IP地址间的关系。
      Capability Code为2表示支持路由刷新能力,即Route Refresh Capability。此能力的code为2,length为0,无value部分。
      需要说明的是,只有在能力协商中使能了支持Route Refresh Capability,设备才能处理REFRESH报文。默认情况下,支持IPv4单播能力与路由刷新能力。




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

                               
登录/注册后可看大图

表7-4 UPDATE报文格式字段解释
字段名
长度
含义
Withdrawn Routes Length
2个字节(无符号位)
标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。
Withdrawn Routes
变长
包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。
  • Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由。
  • Prefix:传送的IP地址前缀必须用整字节表示。例如:假定待撤销的路由为192.168.200.200,其编码用16进制表示可如下:

                                   
    登录/注册后可看大图

Total Path Attribute Length
2个字节(无符号位)
标明Path Attributes的长度。其值为零时,表示没有路由及其路由属性要通告。
Path Attributes
变长
包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。其编码采用TLV格式。如下所示。
图7-8 BGP路径属性TLV格式

                               
登录/注册后可看大图

其中,Attr.TYPE占2个字节(无符号位),包括1字节的Flags(无符号位)和1字节的Type Code(无符号位)。
图7-9 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个字节(无符号位),表示属性的类型号。设置如表7-5。
Attr.Value:根据不同属性的类型填写不同内容。
Network Layer Reachability Information(NLRI)
变长
包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length、the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同。

表7-5 路由属性的类型号列表
属性类型
属性值
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 Communities
扩展团体属性


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

                               
登录/注册后可看大图

表7-6 NOTIFICATION报文格式字段解释
字段名
长度
含义
Error code
1字节
定义错误的类型,非特定的错误类型用零表示。详细错误码参见表7-7。
Error subcode
1字节
指定错误细节编号,非特定的错误细节编号用零表示。
Data
可变长
指定错误数据内容。

表7-7 错误码解释
错误码
错误子码
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:没有特别的错误子码定义
1:在OpenSent状态下接收到意外消息
2:在OpenConfirm状态下接收到意外消息
3:在Established状态下接收到意外消息
6:终止
1:前缀超过最大值。
2:管理关闭
3:删除邻居
4:管理重置
5:连接失败
6:其他配置改变
7:连接冲突
8:资源短缺
9:BFD断开连接


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

                               
登录/注册后可看大图

表7-8 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报文格式如图7-12所示。
图7-12 REFRESH报文格式

                               
登录/注册后可看大图

表7-9 REFRESH报文格式字段解释
字段名
长度
含义
AFI
2字节(无符号位)
表示地址族id,与OPEN报文中的定义相同。
Res.
1字节(无符号位)
所有位应全为零,在接收报文时,此位被忽略。
SAFI
1字节(无符号位)
与OPEN报文中的定义相同。



您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-3 00:51 , Processed in 0.056798 second(s), 13 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表