BGP报文格式详解

    技术2025-11-11  17

    BGP边界网关路由协议

    一、BGP协议概述 使用范围:BGP范围,使用在AS之间的路由协议 协议的特点:路径矢量型(高级的距离矢量型),没有具体的协议算法,要说非得有个算法的话,那么人就是最好的BGP协议的算法 是否携带网络掩码:携带,并且支持VLSM、CIDR 数据包的封装:基于TCP封装,端口号179

    AS:自制系统 AS的分类:公有AS和私有AS,公有AS的范围是1-64511,私有AS的范围是64512-65535

    二、BGP协议的特点 1、BGP协议是一种路径矢量型路由协议 2、BGP协议的版本:V1、V2、V3、V4、V4+

    V1、V2、V3是有类别,不携带子网掩码V4是无类别,携带子网掩码,仅仅支持IPV4单播路由传递V4+支持IPV4单播路由、IPV6单播路由、IPV4组播路由、IPV6组播路由、VPNV4和VPNV6路由等(默认仅仅支持IPV4单播路由,若是需要传递其他的路由,则需要手动开启传递其他协议路由功能)

    3、BGP更新地址:单播更新,由于BGP协议是基于TCP封装,之所以使用单播更新,也就导致BGP不能自动建立邻居关系而可以非直连建立邻居关系。 4、BGP的更新方式:触发更新(当路由信息发生改变时,才发出跟新信息)、增量跟新(当路由信息发生改变了,才发出更信息),在这里没有周期跟新的原因是,防止大量的更新早成网络的不稳定,而且BGP学习路由的观点是,只要学习到路由的时间越长那就说明这条路由越稳定。 5、BGP协议拥有大量的属性,用来选路,这样就体现出了BGP协议的灵活性 6、BGP协议支持路由认证 7、BGP协议支持路由聚合 8、BGP协议只能运行在一个路由器上,因为BGP协议非常消耗路由器资源(只支持一个进程)

    三、BGP协议的消息数据包以及报文格式 BGP报文格式

    Marker:占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的技术。不使用验证时,所用比特都是1length:占2字节,BGP消息总长度,包括报文头在内,以字节为单位Type:占1字节,BGP消息类型,消息值得范围是1-5 1、OPEN建立BGP邻居关系,只发送一次

    邻居建立的条件 1、router-id必须不同 2、BGP认证一致 3、指定正确的AS号 4、建立TCP三次握手的两端路由可达

    OPEN报文格式

    1、Version:协议的版本号 2、My Autonomous System:发送者自己的AS号 3、Hold Time:死亡时间,在收到BGP对等体的OPEN报文后,对收到的BGP报文和发出BGP报文二者的Hold Time时间作比较,选择较小的作为协商结果,默认Hold Time时间为180s 4、BGP Identifier:发送者的router-id 5、Opt Parm Len:表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。 6、Optional Parameters:此值为BGP可选参数列表,每一个可选参数是一个TLV格式的单元

    Parm. Type:占1个字节(无符号位),为可选参数类型。我们现在的实现中,只在type值为2时有意义,表示携带的参数为协商能力。Parm. Length:占1个字节(无符号位),为Parameter Value的长度。Parameter. Value:根据Parm.Type的不同值填写不同的参数内容,在Parm.Type为2表示协商能力时,Parameter.Value是表示所支持的各种协商能力的列表,列表中的每一个单元是如下的一个TLV三元组:

    2、keepalive:保活,维持BGP邻居关系。周期发送,默认周期时间为60s,保持时间为180s。 3、update用于通告路由

    1、unfeasible Routes Length:标明不可行的 Routes部分的长度。其值为零时,表示没有撤销的路由。 2、Withdrawn Routes:包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。

    Length:待撤销路由的掩码。其值为零时,表示匹配所有的路由。Prefix:传送的IP地址前缀必须用整字节表示。

    3、Total Path Attribute Length:标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告。 4、Path Attributes:包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。其编码采用TLV格式 5、Network Layer Reachability Information(NLRI):包含要更新的地址前缀列表,每一个地址前缀单元由一个LV二元组(prefix length, the prefix of the reachable route)组成,其编码填写方法与Withdrawn Routes的填写方法相同。

    4、notification:错误报告

    Error code:占1个字节(无符号位),定义错误的类型,非特定的错误类型用零表示。 Error subcode:占1个字节(无符号位),指定错误细节编号,非特定的错误细节编号用零表示。 Data:指定错误数据内容。

    5、refresh:该报文用于BGP路由的动态刷新

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

    四、BGP的状态机

    Idle状态:是BGP初始化状态,开始尝试和对等体进行一次TCP连接Connect状态:TCP连接成功,进入OpenSent状态;若是TCP连接由于某些原因而导致失败,则将会进入Active状态,尝试再次TCP连接;在这里有个连接重传计时器,当第一次没有连接成功,那么连接重传计时器将会翻倍;若是收到notification报错报文后,直接回到Idle状态OpenSent状态:该状态下发送OPEN包,协商参数,当参数协商完成后进入OpenConfirmOpenConfirm状态:发送和接收keeplive包extablished状态:邻居建立完成 注意:在建立邻居的整个的过程中不发送Update包。
    Processed: 0.017, SQL: 9