2. BGP报文分类

BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:

2.1 BGP 报文头

bgp协议原理及配置(BGP协议原理-报文详解)(1)

Marker(标记):16字节,固定为1。

Length(长度):两字节无符号整数。指定了消息的全长,包括头部。

Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等 。

1 – OPEN

2 – UPDATE

3 – NOTIFICATION

4 – KEEPALIVE

5 – ROUTE-REFRESH

2.2 BGP Open报文

bgp协议原理及配置(BGP协议原理-报文详解)(2)

Version:BGP的版本号。对于BGPv4来说,其值为4。

My Autonomous System:本地AS编号。通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。

Hold Time:在建立对等体关系时两端要协商Hold time,并保持一致。如果两端所配置的Hold time时间不同,则BGP会选择较小的值作为协商的结果。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。

BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用来识别BGP路由器。如果没有通过命令router id进行配置,则按照如下规则进行选择:优选Loopback接口地址中最大的地址作为Router ID,如果没有Loopback接口配置了IP地址,则从其它配置了IP地址的物理接口中选择一个最大IP地址的作为Router ID。

Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。

Optional Parameters:是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。每一个参数为一个(Parameter Type-Parameter Length-Parameter Value)三元组。

对等体在接收到Open消息后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-refresh消息的交换。

bgp协议原理及配置(BGP协议原理-报文详解)(3)

2.3 BGP Keepalive报文

bgp协议原理及配置(BGP协议原理-报文详解)(4)

KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等体之间的交换频率以保证对方保持定时器不超时为限。

当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送KeepAlive 报文,表明该连接是否还可保持。

缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。

bgp协议原理及配置(BGP协议原理-报文详解)(5)

2.4 BGP UPDATE报文

bgp协议原理及配置(BGP协议原理-报文详解)(6)

UPDATE消息被用作在BGP对等体之间传递路由信息。多条可达路由信息可以被通告到相应的对等体上,或者多条不可达路由信息被撤消。UPDATE消息由以下五个部分组成:

Withdrawn Routes Length :(2字节无符号整数) 不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn Routes Length字段数值为0,则表示Withdrawn Routes字段没有任何数据,在UPDATE消息中不会被显示。

Withdrawn Routes :(变长) 撤销路由。该字段包括一系列的IP地址前缀信息,以<length, prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0 255.255.224.0的网络。

Path Attribute Length :(2字节无符号整数) 路由属性长度,表示Path Attribute字段的数据长度。如果Path Attribute Length数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。

Path Attributes :(变长) 路径属性。每个路径属性都是由三元组所组成:<attribute type, attribute length, attribute value>。

Network Layer Reachability Information :(变长) 网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>。

最小UPDATE消息的长度为23个字节(19字节的报文头 2字节的撤消路由长度 2字节的路径属性长度)。这样的UPDATE消息被称之为End-of-RIB,用于BGP GR。

一条UPDATE消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI字段里的所有目的地(用IP前缀表示)。

一条UPDATE消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGP Speaker之间先前通告过的路由。

一条UPDATE消息可以只用于撤销路由,这样就不需要包括路径属性或者网络可达信息。相反,也可以只用于通告可达路由,就不需要携带Withdrawn Routes了。

bgp协议原理及配置(BGP协议原理-报文详解)(7)

bgp协议原理及配置(BGP协议原理-报文详解)(8)

bgp协议原理及配置(BGP协议原理-报文详解)(9)

2.5 BGP NOTIFICATION报文

bgp协议原理及配置(BGP协议原理-报文详解)(10)

Notification报文主要在发生错误或对等体连接被关闭的情况下使用,该消息携带各种错误码(如定时器超时等),以及错误子码和错误信息。

Errorcode:错误码。1字节长的字段。每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。

Errsubcode:错误子码。

消息头错误子码:

1 – 连接非同步

2 – 错误的消息长度

3 – 错误的消息类型

OPEN消息错误子码:

1 – 不支持的版本号

2 – 错误的对等体AS号

3 – 错误的BGP ID

4 – 不支持的可选参数

5 – RFC1771里被定义为认证失败,RFC4271里则对此表示反对。具体请参考RFC1771/RFC4271

6 – 不可接受的保持时间(Hold Time)

UPDATE消息错误子码:

1 – 畸形的属性列表

2 – 无法识别的公认属性

3 – 缺少的公认属性

4 – 属性标志位错误

5 – 属性长度错误

6 – 无效的ORIGIN属性

7 – RFC1771里被定义为AS路由环路,RFC4271里对此表示反对。具体请参考RFC1771/RFC4271

8 – 无效的下一跳属性

9 – 可选属性错误

10 – 无效的网络字段

11 – 畸形的AS_PATH

Data:依赖于不同的错误码和错误子码,用于标识错误原因。是一个可变长的字段,被NOTIFICATION用作诊断错误的原因。注:Data字段的长度可以由以下公式来决定:消息长度=21+Data长度 (NOTIFICATION消息最小长度为21个字节,其中已经包括消息头。)

bgp协议原理及配置(BGP协议原理-报文详解)(11)

bgp协议原理及配置(BGP协议原理-报文详解)(12)

2.6 BGP NOTIFICATION报文

bgp协议原理及配置(BGP协议原理-报文详解)(13)

AFI(Address Family Identifier):地址族标识符(2字节)。

Res.(Reserved field):保留区域(1字节),发送方应将其设置为0,接收方应当忽略该区域的信息。

SAFI(Subsequent Address Family Identifier):子地址族标识符(8字节)。

在所有BGP路由器使能Route-refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

bgp协议原理及配置(BGP协议原理-报文详解)(14)

bgp协议原理及配置(BGP协议原理-报文详解)(15)

,