bgp协议原理及配置(BGP协议原理-报文详解)
BGP对等体间通过以下5种报文进行交互,其中Keepalive报文为周期性发送,其余报文为触发式发送:
- OPEN报文:用于建立BGP对等体连接。
- Update报文:用于在对等体之间交换路由信息。
- Notification报文:用于中断BGP连接。
- Keepalive报文:用于保持BGP连接。
- Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
Marker(标记):16字节,固定为1。
Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
Type(类型):1 字节,指示报文类型,如OPEN、UPDATE报文等 。
1 – OPEN
2 – UPDATE
3 – NOTIFICATION
4 – KEEPALIVE
5 – ROUTE-REFRESH
2.2 BGP Open报文
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消息的交换。
2.3 BGP Keepalive报文
KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等体之间的交换频率以保证对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送KeepAlive 报文,表明该连接是否还可保持。
缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
2.4 BGP UPDATE报文
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了。
2.5 BGP NOTIFICATION报文
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个字节,其中已经包括消息头。)
2.6 BGP NOTIFICATION报文
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路由表进行动态刷新,并应用新的路由策略。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com