BGP路由协议(二):报文的类型和格式
###BGP报文结构
BGP是承载在TCP之上的协议,建立一个BGP对等体之前,必须建立标准的TCP三次握手,并且在目标端打开一个端口为179的连接,TCP能够提供可靠的传输方式,可以进行重传、确认、以及排序功能。
BGP不需要开发确认报文,因为所有的确认都有TCP层提供,从而可以减少BGP报文数量
BGP所有报文均采用单播方式发送,因此不能自动发现邻居
BGP的五种报文类型:
- Open
- Keeplive
- Update
- Notification
- Route-refresh
###BGP报文头部
所有BGP报文都一个相同格式的头部,共19byte
- 标记 16字节 Market 该字段被保留用于协议兼容性,用于检测BGP对等体之间的同步丢失情况,并且在支持验证功能的情况下进行消息验证。如果消息类型为Open或Open消息中未包含验证消息,标志字段将被设置为全1,否则,标识字段值通过某些计算得到(作为验证进程的一部分)
- 长度 Length 2字节 表示该BGP报文的长度
- 类型 Type 表示该BGP报文的类型
a. Open报文
b. Update报文
c. Notification报文
d. Keepalive报文
###Open报文
BGP路由建立对等体关系后,TCP正确连接,双方开始交互Open报文,Open报文包含以下信息:
- 设备所处的AS号
- BGP版本号
- Router-ID
- 可选参数
报文字段: - 版本 Version BGP协议的版本 BGPv4版本的字段为4
- My AS号 2|4 Bytes BGP报文发送方所处的AS号
- 保留时间 Hold Time 2Bytes (默认180s,一般为keepalive的3倍) 多长时间(s)内必须收到对方Keepalive报文或Update报文,否则该对等体视为无效(保活时间需要双方协商,双方配置的值可以不同,但是最终双方均只认可值更小的保活时间)。最小为0,表示BGP连接被认为永远为UP。对等体之间不会发送Keepalive报文来检测邻居是否失效
- 路由器标识符 Router-ID 32bit的BGP路由器标识符
- 选参数长度 Optional Parameters Length 指示了BGP报文中,可选参数字段的长度(字节数),字段值为0表示该消息中没有包含的可选参数字段
- 可选参数 Optional Parameters Open报文可以包含多个可选参数,每个可选参数使用类型(Type)、长度(Length)、值(Value)的三元组格式描述
###Update报文
BGP路由器使用Update报文向其对等体通告路由信息:
- 一个Update报文中通告一条或多条拥有相同路径属性的路由
- 拥有不同路径属性的BGP路由需要不同的Update报文来通告
- 用于撤销一条或多条BGP路由
Update报文字段: - 撤销路由的长度 Withdrawn Routes Length
- 撤销的路由条目 Withdraw Routes
- 总路径属性长度 Total Path Attribute Length
- 路径属性 Path Attributes
- 网络层可达信息 Network Layer Reachability Information
###Keepalive报文
BGP基于TCP工作,但是不依赖TCP的保活机制,而是使用周期性发送Keepalive报文来了解对等体的存活情况。
- BGP会为对等体维护一个保活计时器(Hold Timer)。华为产品保活计时器时间默认为180s,Keepalive报文周期默认为保活计时器的1/3,60s
- Keepalive报文用于确认对方发送的Open报文
###Notification报文
当BGP检测到一个错误时,它可以使用Notification报文来告知对等体
Notification报文字段:
- 错误代码 Error Code
- 错误子代码 Error Subcode
- 数据 Data
###查看BGP对等体
当两台需建立对等体关系的BGP路由器完成配置后,双方需首先建立TCP连接,TCP连接建立完成后双方开始交换Open报文,如果一方认可对方发送过来的Open报文,则使用Keepalive报文进行回应。如果路由器收到了BGP对等体发来的、用于确认自己先前发送的Open报文的Keepalive报文,这意味着对方已经认可了自己所发的Open报文中的相关参数,则该路由器认为已经与对方完成了BGP对等体关系建立,此时双方便可以开始交互Update报文,而Update报文中便包含路由器所通告的路由信息
#查看BGP对等体
display bgp peer
###BGP路由表
-
- 表示可用的路由
-
表示优选路由
- i 表示从IBGP对等体学习到的路由
#查看BGP路由表
display bgp routing-table
#查看某条路由的完整信息
display bgp routing-table 10.1.1.1
###将路由发布到BGP
三种方法发部路由到BGP
- network
- import-route
- aggregate
关于BGP中的network与import-route命令,还存在另一个差异。在BGP的众多路径属性中,有一个属性是所有BGP路由都必须携带的,那就是Origin属性,该属性用于描述一条路由是如何被发布到BGP的(路由的来源),使用以上两个命令将路由发布到BGP时,路由的Origin属性是不同的
与众多动态路由协议一样,BGP同样支持路由的手工汇总,在BGP配置视图中,使用aggregate命令,可执行BGP路由手工汇总。该命令生效的前提是,设备已经通过BGP学习到了明细路由,之后再使用该命令,则可使设备向BGP发布指定的汇总路由