赞
踩
BGP报文头部
Marker:值固定为1
Length:整个BGP报文的长度,Header+Message+Data
Type:1—Open,2—Update,3—Notification,4—KeepAlive
Open报文
协商BGP参数,主要包括BGP版本,AS号等信息。试图建立BGP邻居关系的两个路由器在建立了TCP回话之后开始交换OPEN信息以确认能否形成邻居关系,是TCP建立后发送的第一个消息。
Version:BGP的版本号。对于BGPv4来说,其值为4。
My Autonomous System:本地AS编号。通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。
Hold Time:在建立对等体关系时两端要协商Hold time(180s),并保持一致。如果两端所配置的Holdtime时间不同,则BGP会选择较小的值作为协商的结果。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。
BGP Identifier:BGP路由器的RouterID,以IP地址的形式表示,用来识别BGP路由器。在VRP5.30系统中,如果没有通过命令routerid进行配置,则按照如下规则进行选择:优选Loopback接口地址中最大的地址作为RouterID,如果没有Loopback接口配置了IP地址,则从其它配置了IP地址的物理接口中选择一个最大IP地址的作为Router ID。
Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。
Optional Parameters:是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。每一个参数为一个(ParameterType-Parameter Length-Parameter Value)三元组。
对等体在接收到Open消息后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-refresh消息的交换。
Update报文
前面两部分表示路由撤销信息,后面三部分表示路由可达信息;
路由可达信息携带各种属性;
但是路由撤销信息就不需要携带各种属性了,因为这时候是撤销了;
UPDATE消息被用作在BGP对等体之间传递路由信息。多条可达路由信息可以被通告到相应的对等体上,或者多条不可达路由信息被撤消。UPDATE消息由以下五个部分组成:
Withdrawn Routes Length :(2字节无符号整数) 不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn RoutesLength字段数值为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 AttributeLength数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。
Path Attributes :(变长) 路径属性。每个路径属性都是由三元组所组成:<attribute type, attribute length,attribute value>。
Network Layer Reachability Information :(变长)网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>。(路由信息)
一条Update消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI(NetworkLayer Reachability Information)字段里的所有目的地(用IP前缀表示)。
一条Update消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGPSpeaker之间先前通告过的路由。
一条Update消息可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
KeepAlive报文
KeepAlive报文主要用于对等体路由器间的运行状态以及链路的可用性确认。KeepAlive 报文的组成只包括一个BGP数据报头。 KeepAlive 消息在对等体之间的交换频率以保证对方保持定时器不超时为限。
当一台路由器与其邻居建立BGP连接之后,将以Keepalive-interval设定的时间间隔周期性地向对等体发送KeepAlive报文,表明该连接是否还可保持。
缺省情况下,发送KeepAlive 的时间间隔为 60 秒,Hold Time是180秒。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
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个字节,其中已经包括消息头。)
Route-Rrefresh报文
主要字段的解释如下:
AFI(Address Family Identifier):地址族标识符(2字节)。比如,IPv4,IPv6,VPNv4,VPNv6等。
Res.(Reservedfield):保留区域(1字节),发送方应将其设置为0,接收方应当忽略该区域的信息。
SAFI(Subsequent Address Family Identifier):子地址族标识符(8字节)。比如,单播,组播。
在所有BGP路由器使能Route-refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。
使用refresh bgp peer_address import即可以触发该报文的发送,对等体收到该报文后,就会发送update报文,发送完整路由信息;
如果使用命令refresh bgp peer_address export,则会在该路由器上直接发送update完整路由信息,此时就不需要route refresh报文了;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。