BGP的5种报文类型

2025-06-27 20:11:23 8154

一、概述

BGP对等体的建立、更新和删除等交互过程主要有5种报文、6种状态机和5个原则。

二、BGP的5种报文格式

BGP-4协议有5种报文:Open(建立)、Update(更新)、Notification(通知)、Keepalive(保持活跃)和Route-refresh(路由刷新),其中Keepalive报文为周期性发送,其余报文为触发式发送。

Open报文:用于建立BGP对等体的连接,类似于OSPF和IS-IS中通过Hello报文建立邻居关系一样。Update报文:用于在对等体之间交换路由信息,类似于OSPF中的LSU报文。Notification报文:用于中断BGP连接。Keepalive报文:用于保持BGP对等体连接,类似于在OSPF和IS-IS中通过Hello报文维护邻居关系。Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备才会发送和响应此报文。

这5种BGP报文有相同的报文头部,其格式如下图所示

各字段解释如下表所示

字段说明Marker占16字节,用于标明BGP报文边界,固定值为所有比特均为"1",相当于一个报文的头部标识符。Length占2字节,标识BGP报文总长度(包括报头在内),以字节为单位。Type 占1字节,标识BGP报文的类型。其取值为16进制的1~5,分别表示Open、Update、Notification、Keepalive和Route-refresh消息。其中,前4种报文在RFC1771中定义,而第5种报文在RFC2918中定义。

1、Open报文格式

Open(建立)是TCP连接建立后发送的第一个报文,包含本地Speaker信息及用于后面与对等体间建立TCP会话的信息,用于建立BGP对等体之间的连接关系。其报文格式如下图所示。Open报文中的各字段信息必须在对等体之间进行路由信息交换之前协商确定好。

下表格是各字段的解释

字段说明Version表示本地设备使用的BGP版本,占1字节。对于BGP-4来说,其值为4。My autonomous system表示本地AS号,占2字节或4字节。通过比较两端的AS号可以确定是EBGP连接(不同时)还是IBGP连接(相同时)。Hold time标识对等体与本设备保持连接的时间,占2字节,以秒为单位。在建立对等体关系时两端要协商Hold Time,并保持一致。如果在这个时间内未收到对端发来的Keepalive消息或Update消息,则认为BGP连接中断。BGP identifier标识BGP路由器的路由器ID,占4字节,采用点分十进制格式d的IP地址的形式,用来识别BGP路由器。Opt Parm Len(Optional Parameters Length)可选参数的长度,占1字节,标识可选参数的总长度,如果为0则没有可选参数。Optional parameters可选参数,长度可变,用于多协议扩展(Multiprotocol Extensions)等功能,如BGP验证信息。

2、Update报文格式

在BGP对等体之间成功建立了BGP会话后,双方就可开始利用Update(更新)报文进行路由信息交换了,包括要向对等体通告的每条路由信息。但Update报文既可以发布可达路由信息,也可以撤销不可达路由信息。其报文格式如下图所示。

一条Update报文可以通告一类具有相同路径属性的可达路由,这些路由放在NLRI(Network Layer Reachabl Information,网络层可达信息)字段中,Path Attributes字段携带了这些路由的属性,BGP根据这些属性进行路由的选择。同时Update报文还可以携带多条不可达路由信息,被撤销的路由放在Withdrawn Routes字段中,用来通知对等体要撤销的路由。各字段解释如下。

字段说明Unfeasible routes length标识不可达路由(Withdrawn routes)字段的长度,占2字节,以字节为单位,包含通知对等体从它的BGP路由表中撤销的当前不可达路由的数量。如果为0则说明没有要撤销的路由,也就没有下面的Withdrawn routes字段。Withdrawn routes不可达路由列表,长度可变,包含要从对等体BGP路由表中撤销的当前不可达路由的网络地址及前缀。Total path attribute length标识路径属性(Path attributes)字段的长度,占2字节,以字节为单位。如果为0则说明没有下面的Path attributes字段。Path atributes与NLRI字段相关的所有路径属性列表,每个路径属性由一个TLV(Type-Length-Value)3元组构成,长度可变。BGP正是根据这些属性值来避免环路,进行选路、协议扩展等。NLRI(Network Layer Reachability Information)标识网络层可达信息,包含要向对等体通告的每条可达路由的前缀,长度可变。这些可达路由信息来自本地Adj-RIB-In(Adjacent Routing Information Base,Incoming,入方向邻接路由信息库),然后又将加入到对端Adj-RIB-In中。

3、Notification报文格式

当BGP检测到错误状态时,就会向对等体发出Notification(通知)报文,之后BGP连接会立即中断。其报文格式下图所示。

字段说明Error code差错码,占1字节,指定错误类型。包括消息头出错、Open消息错误、Update消息错误、保持计时器超时、状态机错误、连接终止共6类,对应十六进制中的1~6。Error subcode差错子码,占1字节,描述错误类型的详细消息。Data错误消息内容,可变长度,用于辅助发现错误的原因。它的内容依赖于具体的差错码和差错子码,记录的是出错部分的数据。

主要Notification报文差错码、差错子码可见下表

错误代码子错误代码错误说明11Marker错误12报文长度错误13报文类型错误21不支持的BGP版本号22Peer AS错误23BGP Identify错误24不支持的可选参数25验证失败26不可接受的保持时间27不支持的协商能力31畸形的属性列表(报文过大)32不可识别的公认属性33缺省公认属性34属性标识错误35属性长度错误36无效的源属性37AS号环路38无效的下一跳属性39可选属性错误310无效的网络层信息311畸形的AS-Path属性40保持计时器超时50状态机错误61路由前缀超限62管理员关闭63邻居重新配置64管理员重新连接65拒接连接66其他配置变更67连接冲突68资源不足69BFS通知邻居Down

4、Keepalive报文格式

BGP会周期性地向对等体发出Keepalive(保持活跃)报文,用来保持对等体连接的有效性。其报文格式中仅包含BGP的报文头部,没有附加其他任何字段。

5、Route-refresh报文格式

Route-refresh(路由刷新)报文用来要求对等体重新发送指定地址族的路由信息。其报文格式如下图所示

字段说明AFIAddress Family Identifier,地址族标识,占2字节,用于标识所采用的地址族类型。不同类型地址族对应的AFI值可见上一章BGP概述中最后一张表格。Res保留,占1个字节,必须置0。SAFISubsequent Address Family Identifier,子地址族标识,占1个字节,用于标识子地址族类型。不同类型子地址族对应的SAFI值可见上一章BGP概述中最后一张表格。

以上就是本章的全部内容了,感谢大家的浏览观看!文章若有错误或疑问可联系博主删除更改,文章种部分内容源自教材《华为路由器学习指南》感兴趣可购买相关书籍浏览。