边界网关协议 - BGP【基础】

目录

协议特性

BGP基本术语

BGP的协议报文

BGP状态机

BGP邻居建立条件


边界网关协议(Border Gateway Protocol),简称BGP。是一种用来在路由选择域(也可以叫做自治系统 --- AS)之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。是一种外部网关协议(EGP)。

首先来了解一下自治系统 --- AS

  • 一组同一个管理机构进行管理,对外呈现统一选路策略的路由器的集合。

  • AS编号(一段时间内)

    • 由两个字节组成,取值范围是0 - 65535,其中0和65535保留。

    • 其中1 - 64511属于公有AS编号(由统一机构管理,收费下发),64512 - 65534属于私有AS编号(开放使用)。

  • 后来出现了新的AS编号,由4个字节组成。

协议特性

  1. BGP协议只负责将路由从一个AS传输到另一个AS。而路由在AS内的传输靠IGP协议(内部网关协议)。

  2. BGP是路径矢量协议,一跳就是一个自治系统

    • 当一条路由传入某个AS,该路由的下一跳会变为上一个AS出接口的地址。而这条路由在AS内传播时,下一跳不变。

  3. 具有防环机制。

  4. 基于TCP协议传输,端口号是179。

  5. 只能(必须)手动配置邻居。

  6. BGP协议第一次发送完整路由表,后续只会发送增量更新。

  7. 具有多种属性可以用来控制路由选择。

  8. 支持CIDP(无类域间路由,即子网汇总)和路由聚合。

  9. 支持路由过滤和路由策略。

BGP基本术语

BGP Speaker(BGP发言者)

  • 运行BGP协议的路由器。

BGP Peer(BGP对等体)

两个相互之间存在TCP连接、相互交换路由信息的BGP Speaker之间互称为BGP Peer。可以是两个路由器直连的情况,也能使非直连的情况。

又分为EBGP对等体和IBGP对等体。

  • EBGP对等体

    • 跨AS间的邻居,一般情况下是物理上直连的设备。

    • BGP发言者从EBGP对等体获得的路由信息会向自己的所有BGP对等体通告(包括IBGP和EBGP)。

  • IBGP对等体

    • 同一个AS内的邻居。

BGP的协议报文

BGP报文由BGP报文头和具体报文内容两部分组成。

BGP头部

  • Marker

    • 占16字节,用于检查BGP对等体的同步信息是否完整,以及用于BGP验证的计算。不使用验证时所有比特均为1(十六进制则全F)。

  • Length

    • 两个字节,表示该BGP数据包的总长度,取值范围是19 - 4096个字节(19就是只包含头部的数据包)。

  • Type

    • 占一个字节,用于标志该BGP数据包的种类。

      • 该值为1,表示该数据包为open包。

      • 该值为2,表示该数据包为update包。

      • 该值为3,表示该数据包为notification包。

      • 该值为4,表示该数据包为keepalive包。

      • 该值为5,表示该数据包为router-refresh包。

open报文

用于建立BGP对等体间的连接,正常情况下收发一次。

  • Version

    • 一个字节,表示使用的BGP协议的版本号。

  • My AS

    • 两个字节,表示发送者当前所处的AS区域编号。

  • Hold Time

    • 两个字节,发送者自己设定的hold time值(单位为秒),用于协商BGP对等体间保持建立连接关系,发送keepalive或update等报文的时间间隔。BGP的状态机必须在收到对等体的open报文后,对发出的open报文和收到的open报文两者的hold time时间作比较,选择较小的时间作为协商结果使用。Hold Time的值可为0,为0时表示不发keepalive报文,可用时间最小为3秒,华为设备默认为180秒。

  • BGP Identifier

    • 四个字节,代表发送该数据包的路由器的route id。

  • Opt Parm Len

    • 一个字节,表示Optional Parameters(可选参数)的长度。如果此值为0,表示没有可选参数。

  • Optional Parameters

    • BGP可选参数列表。

Update报文

携带路由更新信息。

  • Withdrawn Routes Length

    • 两个字节,标明Withdrawn Routes部分的长度。其值为零时,表示没有撤销的路由。

  • Withdrawn Routes

    • 可变长度,包含要撤销的路由列表,列表中的每个单元包含1字节的Length域和可变长度的Prefix域。

  • Total Path Attribute Length

    • 两个字节,标明Path Attributes部分和Network Layer Reachability Information两部分的长度。其值为零时,表示没有路由及其路由属性要通告。

  • Path Attributes

    • 可变长度,包含要更新的路由属性列表,按其类型号从小到大的顺序排序,填写更新的路由的所有属性。每一个属性单元包括属性类型,属性长度,属性值三部分。

  • Network Layer Reachability Information(NLRI)

    • 可变长度,包含要更新的地址前缀列表。

notfication报文

当BGP检测到错误,将会发送这个消息,之后会断开连接。

  • Error code

    • 一个字节,定义错误的类型,非特定的错误类型用零表示。

  • Error subcode

    • 一个字节,指定错误细节编号,非特定的错误细节编号用零表示。

  • Data

    • 指定错误数据内容。

Keepalive报文

keepalive报文用于保持BGP连接。该报文只有BGP报文头,没有具体内容,故其报文长度应固定为19个字节。

  • 周期发送保活报文的时间是Hold Time的三分之一。在华为中为60秒。

  • 若连续发送三个保活报文而没有得到回复,则认为对方宕机。断开邻居关系。

router-refresh报文

在改变路由策略后,要求对等体重新发送指定地址族的完整路由表信息。但是只有支持路由刷新功能的路由器才会发出和响应这个报文。

因为,在BGP协议中,一个路由器配置了路由策略,它会将这个路由策略告诉给自己的邻居,此时邻居就可以根据策略发送路由。但取消策略时,将不告知取消的消息,此时邻居还是依据已有策略发送路由,导致路由器学习不全。所以需要在取消策略时使用这个报文获取完整路由。

  • AFI

    • 两个字节,表示地址族id。

  • Res.

    • 一个字节,所有为应全为零,在接收报文时,此位被忽略。

  • SAFI

    • 一个字节,与UPDATE报文中的定义相同。

补充

  • 地址族(BGP版本不同,使用的地址族也就不同)

    • 在BGP中,使用IPv4。

    • 在BGP4+中,使用IPv6。

BGP状态机

Idle

  • 空闲状态,此状态将会停留30秒。

  • 初始化开始准备TCP连接并监视远程对等体,准备同时建立邻居关系。

connect

  • TCP建立连接中的状态,此状态表示在建立TCP连接时,本端为被动方。

  • 等待对方的连接建立请求,但若收不到连接建立请求,本端将进入Active状态,尝试主动建立连接。

Active

  • TCP建立连接中的状态,此状态表示在建立TCP连接时,本端为主动方。

  • 将会向对方发起TCP连接请求,既使连接建立失败,也将反复进行连接尝试。

open-sent

  • 开始发送状态,进入此状态表示已经完成了TCP的三次握手。

  • 发出open报文,协商相应参数建立对等体关系。收到对方open报文后进入open-confirm状态。

open-confirm

  • 开始确认状态。

  • 发出Keepalive报文,等待对方的Keepalive报文。

established

  • 已连接状态。

  • 收到对方的Keepalive报文,邻居建立完成。此状态后进行周期保活。

BGP邻居建立条件

IBGP邻居建立条件

  1. 双方接口up,TCP可达。建议使用环回口建立邻居关系,更加稳定。

  2. 使用环回口建立邻居关系时,需要修改更新源为环回。因为在BGP中,指定哪个接口建立邻居,对方就只会识别指定接口IP地址的BGP报文。而在实际发送数据时,使用的默认都是物理口,所以地址也是物理接口的IP地址,导致建立不了邻居关系。

  3. 使用环回口建立邻居关系时,因为没有动态路由协议和静态路由的情况下,双方都没有对方环回口的路由,导致网络不可达。所以需要配置路由(静态、动态都行)。

  4. IBGP邻居可以不用直连。

EBGP邻居建立条件

特殊的是,EBGP建立连接时,其发送的数据包TTL值默认为1。而IBGP则是255。

  1. 双方接口up,TCP可达。建议使用物理口建立邻居关系,因为该情况下双方直连,故TTL为1造成不了影响。这种方式简单快捷。

  2. 当然,也可以使用环回口建邻。过程比较麻烦,不建议。环回口建邻有以下条件:

    • 因为TTL默认为1,所以使用环回口建邻路由不可达。此时需要修改TTL值,使得路由可达。否则无法完成TCP三次握手以及后续操作。

    • 路由可达,还包括双方有到达对方环回的路由。

    • 与IBGP建立邻居关系相同,也需要修改更新源。

BGP邻居表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值