BGP报文格式分析

BGP报文种类:

在这里插入图片描述
由于BGP是承载在TCP之上的协议,在建立一个BGP对等体之前必须建立标准的TCP三次握手,并且在目标端打开一个到端口为179的连接,TCP能够提供可靠的传输方式,可以进行重传、确认及排序功能。BGP不需要开发确认报文,因为所有的确认都由TCP层来提供,从而可以减少BGP的报文数量,BGP 所有报文均采用单播的方式来发送,因此不能够自动地发现邻居。

BGP的运行是通过消息驱动的,共有Open、Update、Notification、Keepalive和Route-Refresh等5种消息类型:

  1. Open消息:是TCP连接建立后发送的第一个消息,用于建立BGP对等体之间的连接关系。对等体在接收到Open消息并协商成功后,将发送Keepalive消息确认并保持连接的有效性。确认后,对等体间可以进行Update、Notification、Keepalive和Route-Refresh消息的交换。
  2. Update消息:用于在对等体之间交换路由信息。一条Update消息可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
    • 一条Update消息可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update消息里的路由属性适用于该Update消息中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。
    • 一条Update消息可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚的定义了BGP Speaker之间先前通告过的路由。
    • 一条Update消息可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。
  3. Keepalive消息:BGP会周期性的向对等体发出Keepalive消息,用来保持连接的有效性。
  4. Notification消息:当BGP检测到错误状态时,就向对等体发出Notification消息,之后BGP连接会立即中断。
  5. Route-Refresh消息:通过OPEN消息告知BGP peer本地支持路由刷新能力(Route-Refresh capability)。在所有BGP路由器使能Route-Refresh能力的情况下,如果BGP的入口路由策略发生了变化,本地BGP路由器会向对等体发布Route-Refresh消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

BGP报头:

在这里插入图片描述
每个BGP报文都有一个通用的BGP报头,再后面封装其他内容:

  1. Marker(标记):16字节,固定为1。
  2. Length(长度):两字节无符号整数。指定了消息的全长,包括头部。
  3. Type(类型):1 字节,指示报文类型:
    • Open
    • Update
    • Keepalive
    • Notification
    • Route-Refresh

抓包信息如下:
在这里插入图片描述

1. Open报文结构:

在这里插入图片描述
Open报文在BGP报头之后:

  1. Version:BGP的版本号。对于BGPv4来说,其值为4。
  2. My Autonomous System:本地AS编号。通过比较两端的AS编号可以确定是EBGP连接还是IBGP连接。
  3. Hold Time:在建立对等体关系时两端要协商Hold time,并保持一致。如果两端所配置的Hold time时间不同,则BGP会选择较小的值作为协商的结果。如果在这个时间内未收到对端发来的Keepalive消息,则认为BGP连接中断。如果保持时间为0,则标识不发送Keepalive报文。默认保持时间是Keepalive Time的3倍,180s。
  4. BGP Identifier:BGP路由器的Router ID,以IP地址的形式表示,用来识别BGP路由器。
  5. Opt Parm Len(Optional Parameters Length):可选参数的长度。如果为0则没有可选参数。
  6. Optional Parameters:是一个可选参数用于BGP验证或多协议扩展(Multiprotocol Extensions)等功能。每一个参数为一个(Parameter Type-Parameter Length-Parameter Value)三元组,其实也是就TLV字段。这个字段用于公布一些可选功能的支持,如多协议扩展能力(这也是为什么叫做MP-BGP的原因)、路由刷新能力、四字节AS号等能力,具体可以参考下表:
    在这里插入图片描述

报文抓包如下:
在这里插入图片描述

2. Update报文结构:

在这里插入图片描述
具体字段:

  1. Withdrawn Routes Length :(2字节无符号整数) 不可达路由长度,表示Withdrawn Routes字段的数据长度。如果Withdrawn Routes Length字段数值为0,则表示Withdrawn Routes字段没有任何数据,在UPDATE消息中不会被显示。
  2. Withdrawn Routes :(变长) 撤销路由。该字段包括一系列的IP地址前缀信息,以<length, prefix>的格式来表示,比如<19,198.18.160.0>表示一个198.18.160.0 255.255.224.0的网络。
  3. Path Attribute Length :(2字节无符号整数) 路由属性长度,表示Path Attribute字段的数据长度。如果Path Attribute Length数值为0,则表示Path Attribute字段没有任何数据,在UPDATE消息中不会被显示。
  4. Path Attributes:可变长字段,列出与下面NLRL(Network Layer Reachability Information,路由信息)相关的属性,每个路径属性都由可变长的三元组(属性类型、属性长度、属性值)组成,为BGP提供选择最短路径、检查路由环路以及决定路由策略的信息,如图所示。属性类型是一个2Byte
    的字段,包含1Byte 的属性标记、1Byte 的属性类型代码字段:
    在这里插入图片描述
    从该字段的格式前两位标记字段来看,可以将属性分为四种组合,即公认必遵、公认任意、可选过渡、可选非过渡:
    • 属性的第0位表示属性是公认的还是可选的(0:公认,1:可选)。
    • 属性的第1位表示属性是过渡还是非过渡(0: 非过渡,1:过渡),公认属性总是可过渡的,所以第1位总是置为1。
    • 属性的第2位表示可选过渡属性中的信息是完全的还是部分的(0:完全,1:部分)。
    • 属性的第3位表示属性的长度(0:一个字节,1:两个字节)。
    • 第4到第7位未被使用,总是为0。
    • 第8到第15位是属性类型的代码,具体对照表见下表:
    在这里插入图片描述
  5. Network Layer Reachability Information :(变长) 网络可达信息。包括一系列的IP地址前缀。格式与撤消路由字段一样<length, prefix>。

路由更新信息如下:
在这里插入图片描述
路由撤销信息如下:
在这里插入图片描述

3. Keepalive报文结构:

  1. Keepalive 报文的组成只包括一个BGP数据报头。
  2. 缺省情况下,发送KeepAlive 的时间间隔为 60 秒,为Hold Time定时器的1/3,用于检测TCP连接是否正常。每次从邻居处接收到KeepAlive 报文将重置Hold Time定时器,如果Hold Time定时器超时,就认为对等体Down掉。
  3. Keepalive信息是不能够低于1s, 如果保持时间协商为0,那么不会发送Keepalive 消息。在发送消息的时间间隔内,如果BGP发送过Update消息,就会抑制Keepalive消息的发送。

抓包如下:
在这里插入图片描述

4. Notifaction报文结构:

在这里插入图片描述

具体字段:

  1. Errorcode:错误码。1字节长的字段。每个不同的错误都使用唯一的代码表示,而每一个错误码都可以拥有一个或多个错误子码,但如果某些错误码并不存在错误子码的话,则该错误子码字段以全0表示。
  2. Errsubcode:错误子码。
  3. Data:可变长字段,包含了与错误有关的数据,用来诊断差错原因,比如非法的AS号、认证失败等。

下表中列举了可能存在的错误代码及错误子码:
在这里插入图片描述
报文抓包:当对方取消连接后发出的通知信息
在这里插入图片描述

5. refresh报文结构

在这里插入图片描述
具体字段:

  1. AF1:2字节,表示地址族id,与UPDATE报文中的定义相同,1表示IPv4。
  2. Res.:1字节,所有为应全为零,在接收报文时,此位被忽略。
  3. SAFI:1字节,与UPDATE报文中的定义相同。

通过设置具体的地址族,对相应地址族的报文进行刷新,本地BGP路由器可以通过手动触发,向对等体发布Route-refresh 消息,收到此消息的对等体会将其路由信息重新发给本地BGP路由器。这样,可以在不中断BGP连接,这种方式也称为软重置。

华为设备命令:refresh bgp xxx import
在这里插入图片描述

注意:软重置不会断开BGP连接关系,硬重置时则会(reset)。

报文抓包:IPv4单播为例
在这里插入图片描述

参考资料:华为hedex文档、《HCIE路由交换学习指南》

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值