【BGP协议-1】

BGP概述

路由协议通常分成内部网关协议IGP和外部网关协议EGP。

IGP重点:发现和计算路由。
EGP重点:控制路由的传播和选择最佳路由。

BGP特征

  1. TCP(端口179),通过Keepalive报文检验TCP连接。

  2. 拥有自己的BGP邻居表,BGP表,路由表 。

    路由表: 去往目的地最近的路径。通过metrics比较,从BGP表中选择的最优路由。
    BGP表: BGP转发数据库,包含路由器从每一个邻居学到的所有路由。

  3. 采用触发更新和增量更新,只发送更新的路由。

  4. 为了保证BGP免受攻击,支持MD5和Keychain验证BGP邻居。

    MD5: 为TCP连接设置验证密码。
    Keychain: 为TCP连接设置验证密码,对BGP报文进行验证。

  5. BGP采用路由聚合和路由衰减防止路由震荡,提高网络稳定性。

    路由聚合: 将多条路由合并,只向对等体发送合并后路由。
    路由衰减: 使用惩罚值来衡量稳定性。
    路由震荡: 路由表中的某条路由反复消失和出现。

  6. BGP易扩展,能够适应网络新技术的发展。

  7. 携带AS路径信息防止路由环路,使用属性Attribute描述路径。

BGP术语

  1. 对等体Peer: 两台路由器之间建立了TCP连接,并相互交换报文时,称它们为对等体或邻居。
    对等体组: 若干采用相同更新策略的BGP对等体构成。

  2. 自治系统AS: 拥有同一路由策略,在同一技术管理部门下运行的一组路由器或主机。BGP网络中每个AS都被分配了一个唯一的AS号。

    AS号由互联网数字分配机构IANA分配,分为2字节AS号和4字节AS号。
    2字节AS号:1 ~ 65535(64512 ~ 65536私有使用)
    4字节AS号:1 ~ 424967295
    支持4字节AS号的设备与支持2字节的AS号的设备兼容。

  3. 内外部BGP: BGP在一个AS内运行称为内部BGP(IBGP);BGP在AS之间运行称为外部BGP(EBGP)。如图1所示,R1与R4之间运行EBGP,R2和R3之间运行IBGP。
    IBGP和EBGP

图1. IBGP和EBGP
  1. 网络层可达性信息NLRI: 包含在BGP更新报文中,用于发布可达路由和下一跳信息。由一个或多个前缀长度和前缀长度二元组构成。

    网络前缀: 与地址网络部分相对应的IP地址部分,如A类地址前缀8位,B类地址前缀是16位。
    网络前缀长度: 子网掩码,如网络前缀长度24,对应子网掩码255.255.255.0。

  2. IBGP水平分割: 通过IBGP学习到的路由不能通告给其他IBGP邻居,防止AS内产生环路。为此,AS内所有IBGP对等体需建立全连接。但IBGP对等体建立全连接后,路由器需维护大量TCP和BGP连接,因此设计了路由反射器和BGP联盟。

    全连接: AS内每两个IBGP邻居之间就要建立邻居关系。
    路由反射器: 一个AS内,一台路由器作为RR反射器,其他路由器作为客户机与RR建立IBGP连接,客户机只需与RR交换路由信息。
    BGP联盟: 一个AS划分为多个子AS,每个子AS内部建立IBGP全连接,子AS之间建立联盟EBGP连接关系。

1.BGP报文类型

BGP报文类型主要包括打开Open、存活Keepalive、更新Update、路由刷新Route-refresh、通知Notification。其中,Keepalive为周期性发送,其他报文为触发性发送。这些报文具有相同报文头部,长度为19字节。
在这里插入图片描述

图2. BGP报文头部格式
  • 标记Marker:16字节。标记BGP报文边界,用来检查BGP对等体同步信息是否完整,支持验证功能来验证报文。不使用验证时,所有比特为1。
  • 长度Length:2字节。BGP报文总长度(包括包头在内),值为19 ~ 4096。
  • 类型Type:1字节。BGP报文类型。数值1 ~ 5分别表示Open、Update、Notification、Keepalive、Route-refresh。前四种在RFC1771中定义,type=5的消息在RFC2918中定义。

1.1 Open报文

TCP连接建立后发送的第一个报文,用于建立对等体之间的连接关系。
在这里插入图片描述

图3. BGP Open报文格式
  • 版本 Version:1字节,BGP版本号,如BGP-4版本号为4。
  • 我的自治系统 My AS:2字节,BGP邻居建立时发起者的AS号。通过比较两端AS号,可以确定是EBGP还是IBGP。
  • 保持时间 Hold Time:2字节,默认时间为180s,在保存时间内,如果没有收到对方的Keepalive包或者Upadte包,则将断开BGP邻居关系。建立对等体时协商,选择Open报文中时间较小的一方。
  • BGP标识符 BGP Identifier:4字节,发送者的BGP路由ID(在BGP网络中唯一)。
  • 可选参数长度 Opt Parm Len:1字节。如果为0标识没有可选参数。
  • 可选参数 Optional Parameters:可变长度,用于BGP验证或多协议扩展等功能。每个参数由1字节类型字段、1字节长度字段和一个包含参数值的可变长字段确定,及TLV(Type-Length-Value)。

1.2 Update报文

对等体之间交换路由信息,既可以发布可达路由信息又可以撤销不可达路由信息。
在这里插入图片描述

图4. BGP Upadte报文格式
  • 不可用路由长度 Unfeasible Routes Length:2字节,表明撤销路由长度。
  • 撤销路由 Withdrawn Routes Length:可变长度,包含不可达路由的列表。
  • 全部路径属性长度 Total Path Attribute Length:2字节,路径属性字段的长度。如果为0说明说明没有可达路由。
  • 路径属性 Path Attributes:可变长度,网络层可达信息NLRI相关的属性列表,包括AS_PATH、本地优先级和起源。是BGP用于进行路由控制和决策的重要信息。
  • 网络层可达信息 Network Layer Reachability Information:可变长度,是可达路由的前缀和前缀长度的二元组。

1.3 Notification报文

BGP检测到错误状态时发送,中断BGP连接。
在这里插入图片描述

图5. BGP Notification报文格式
  • 错误编码Error Code:1字节,错误类型。
  • 错误字码Error Subcode:1字节,错误类型更详细的信息。
  • 数据Data:可变长度,用于诊断错误的原因。

1.4 Keepalive报文:

周期性向对等体发送(默认周期60s),用于保持连接的有效性。报文格式只包含BGP包头,保持时间默认180s。

1.5 Route-refresh报文

用于动态请求路由的发布者重新发布Upadte报文,进行路由更新。
在这里插入图片描述

图6. BGP Route-refresh报文格式

2.BGP邻居状态机

BGP对等体的交互过程中存在6种状态机:空闲Idle、连接Connect、活跃Active、Open报文发送OpenSent、Open报文确认OpenConfirm、连接已建立Established。

任何状态下,收到Notification报文或者TCP拆链通知等Error事件后,都会转成Idle状态。
在这里插入图片描述

图7. BGP 建立邻居的6种状态机

2.1. Idle

BGP初始状态,在该状态下,BGP拒绝邻居发送的连接请求。只有收到本设备的Start请求后,才尝试和其他对等体进行TCP连接,并转至Connect状态。

2.2 Connect

BGP启动重传定时器Connect Retry,等待TCP完成连接。

TCP连接失败:BGP向对等体发送Open报文,转OpenSent状态。
TCP连接成功:BGP转至Active状态。
重传定时器连接超时:继续尝试和对等体建立连接,停留在Connect状态。

2.3 Active

BGP试图建立TCP连接。

TCP连接成功:向对等体发送Open报文,关闭重传定时器,转至OpenSent状态。
TCP连接失败:停留在Active状态。
重传定时器超时:转至Connect状态。

2.4 OpenSent

收到Open报文并检查AS号和版本号等信息。

信息正确:BGP向对等体发送Keepalive报文,转至OpenConfirm状态。
信息错误:BGP向对等体发送Notification报文,转至Idle状态。

2.5 OpenConfirm

BGP等待Keepalive或Notification报文。

收到Keepalive报文进入Established状态。
收到Notification报文进入Idle状态。

2.6 Established

BGP可以和对等体交换Update、Notification、Keepalive报文,并可以开始路由选择。

收到Notification报文进入Idle状态。
收到TCP拆链通知,BGP断开连接进入Idle状态。
收到Route-Refresh报文不改变BGP状态。
收到正确Keepalive或Update报文,保持BGP连接,重置时间计时器。
收到错误Keepalive或Upadte报文,向对端发送Notification,进入Idle状态。

3.BGP路径属性

3.1 公认必遵 Well-Known Mandatory

所有BGP设备都可以识别此类属性,且必须存在Upadte报文中,缺少此类属性,路由信息就会出错。

  • Origin: 属性类型代码=1,说明了路由来源。
    优先级:Incomplete < EGP < IGP
  • AS_Path: 属性类型代码=2,记录了BGP路由从本地到目的地址经过的所有AS号。
    可以有效避免路由环路,BGP会优选路径较短的路由。
  • Next_Hop: 属性类型代码=3,BGP路由的下一跳。
    EBGP会话中下一跳就是通告该路由的邻居路由器的源地址。
    IBGP会话中起源于AS内部的路由器的下一跳就是通告该路由器的邻居路由器的源地址。
    IBGP会话中通告EBGP学到的路由传递给本AS的IBGP邻居时,下一跳保持不变。

在这里插入图片描述

图8. BGP 路由传递的Next_Hop属性

3.2 公认任意 Well-Known Discretionary

所有BGP设备都可以识别此类属性,但是不要求必须存在Update报文中,缺少此类属性,路由信息不会出错。

  • 本地优先级Local_Pref: 属性代码=5,仅在IBGP对等体之间交换,不通告给其他AS,表明BGP设备优先级。当BGP路由器通过不同IBGP对等体学习到目的地相同但路径不同的多条路由时,优先选择Local_Pref高的路由。

3.3 可选过渡 Optional Transitive

BGP设备可以不识别此类属性,但是会接收并通告给其他对等体。团体属性,分为标准团体属性和扩展团体属性。

  • 标准团体属性: 属性代码=8,标识具有相同特征的BGP路由。
  • 扩展团体属性: 属性代码=16,

3.4 可选非过渡 Optional Nontransitive

BGP设备可以不识别此类属性,会自动忽略该属性不通告给其他对等体。

  • MED: 属性代码=4,判断流量进入AS时的最佳路由。
    运行BGP的设备通过不同EBGP学习到目的地址相同但下一跳不同的路由时,优先选择MED小的。
  • Originator_ID: 属性代码=9,防止引入路由反射器之后出现的环路,当反射器收到路由信息中的Originator_ID就是自己的路由ID时,发现环路丢弃路由。
    注意:BGP防环措施有两个,EBGP通过AS_Path;IBGP水平分割即Originator_ID。
  • Cluster_List: 属性代码=10,路由反射器及客户机组成的一个集群(Cluster)。防止集群间产生路由环路,路由反射器使用Cluster_List属性记录路由经过的所有集群的Cluster ID。

4.BGP路由引入和发布策略

BGP本身不发现路由,为实现AS间互通则将其他路由引入BGP路由表中。

  1. BGP协议路由引入方式
    • Import: 按协议类型引入OSPF、IS-IS、RIP、直连路由和静态路由到BGP路由表。
    • Network: 将指定前缀和掩码的一条路由引入BGP路由表,该方式比前者引入更精准。

当一个AS需要引入其他AS路由时,AS边缘路由器会在IGP路由表中引入BGP路由,使用路由策略,进行路由过滤和路由属性设置。

  1. BGP路由发布策略:
    • 从IBGP对等体学习到的BGP路由只发布给EBGP对等体,即水平分割
    • 从EBGP对等体学习到的BGP路由发布给所有EBGP和IBGP对等体。
    • 当存在多条到达相同目的地的有效路由时,只发布最优路由给对等体。
    • 路由更新时只发送更新的BGP路由
    • BGP路由器会接收所有对等体发送的路由

5.BGP路由选择

在BGP路由表中,可能包含多条通往相同目的地的有效信息,BGP会选择其中一条路由作为最优路由,并将路由发布给其对等体。以下按优先顺序给出了路由器在BGP路由选择中的判定过程。

  1. 优选协议首选值PrefVal最高的路由。
  2. 优选本地优先级Local_Pref最高的路由。
  3. 依次优选手动聚合路由>自动聚合路由>Network引入路由>import-route引入路由>对等体学习路由
  4. 优选AS路径最短的路由。
  5. 优选Origin类型IGP>EGP>Incomplete
  6. 对于来自同一AS路由,优选MED最低路由。
  7. 依次选从EBGP和IBGP学习来的路由。
  8. 优选到BGP下一跳IGP度量值最小的路由。
  9. 优选Cluster_List最短的路由。
  10. 优选Router_ID最小的路由。若携带Originator_ID则优选Originator_ID最小的。
  11. 优选从最小IP Address的对等体学习到的路由。

6.BGP路由衰减

路由衰减用来解决路由不稳定问题。路由不稳定主要表现为路由震荡,及路由表中某条路由反复出现和形式。路由衰减只适用于EBGP路由。
在这里插入图片描述

图9. 路由衰减工作示意图

术语:

  • 惩罚值 Penalty Value:衡量路由稳定性,越高越不稳定。
  • 半衰期 Half-life:每过一个半衰期,抑制值减半,默认15min。
  • 再使用阈值 Reuse Value:当一条被抑制的路由惩罚值低于该值,路由恢复使用,默认750.
  • 抑制阈值 Suppress Value:超过该值,路由被抑制不加入路由表,不向对等体发布更新报文,默认2000。惩罚值达到惩罚值上线后不会增加,在VRP系统中默认16000。
  • 抑制时间 Suppress Time:从路由被抑制到路由恢复可用的时间。被抑制路由超过最大抑制时间后,不管惩罚值为多少都会恢复使用。

BGP路由衰减特点:

  1. 路由发生震荡(路由器收到该路由的撤销报文或更新报文),惩罚值+1000。
  2. 惩罚值超过抑制阈值,此路由被抑制,不发布更新报文也不加入IP路由表。
  3. 路由若被打上d标签,说明路由最后收到的Upadte报文;h标签说明路由最后收到撤销报文。
  4. 被抑制路由每过一段时间惩罚值减一半。
  5. d标签路由:惩罚值<再使用阈值,去掉标签,恢复可用优选后加入IP路由表,向BGP对等体发布。
  6. h标签路由:惩罚值=0,路由从BGP路由表删除。

7.BGP路由聚合

路由聚合是将多条路由合并的机制,只向对等体发送聚合后的路由,减小了路由表规模;同时聚合后的路由如果发生了路由震荡,也不会对网络产生影响。
BGP在IPv网络中支持自动聚合和手动聚合两种方式。

  • 自动聚合: BGP按照自然网段聚合路由,并且只向对等体发送聚合后的路由。
  • 手动聚合: 对BGP本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。
    自动聚合路由优先级<手动聚合路由优先级

8.BGP路由反射器

  1. 路由反射器产生背景:
    为保证IGBP对等体的连通性,需要在对等体之间建立全连接,但当设备数目很多时,全连接会造成网络资源和CPU资源消耗巨大,因此引入路由反射器RR概念。
  2. 相关术语:
    • 路由反射器RR: 在客户机之间传递信息的路由器。
    • 客户机Client: 与路由反射器形成反射邻居关系的IBGP设备。
    • 非客户机Non-Client: AS内既不是路由反射器又不是客户机的路由器。
      非客户机与路由反射器之间,以及所有的非客户机之间建立全连接。
    • 集群Cluster: 路由反射器和其客户机组成。
      在这里插入图片描述
图10. BGP 路由反射器
  1. RR路由发布规则:
    • 从非客户机学习到的路由发布给所有客户机。
    • 从客户机学习到的路由发布给所有非客户机和客户机(除本机)。
    • 从EBGP对等体学习到的路由发布给所有客户机和非客户机。
    • BGP路由反射器的出现从本质上打破了BGP水平分割原则(从IBGP对等体学习到的路由不发布它的给IBGP对等体),采用独有的Cluster_List属性和Originator_ID属性防止环路。

为了增强网络可靠性和防止单点故障,可以在一个集群内配置多个路由反射器。
在这里插入图片描述

图11. 多路由反射器

路由反射器工作原理:客户机1收到从EBGP对等体发来的一条更新路由后,通过IBGP通告给给RR1和RR2。RR1和RR2接收到路由后,将Cluster_ID加入到Cluster_List前面,并向客户机2和3反射,同时相互反射。RR1和RR2接收路由后检查集群列表发现自己的Cluster_ID于是丢弃该路由,避免环路。

9.BGP联盟

  1. BGP联盟产生背景:
    解决AS内部IBGP网络连接激增问题。
  2. 联盟原理:
    将一个AS划分为多个子AS。每个子AS内部建立IBGP全连接,子AS之间建立EBGP连接关系。联盟外部AS依旧认为联盟是一个AS。每个路由器的联盟ID是其原AS号。
  3. 建立联盟好处:
    • 保留原有IBGP属性。
    • 联盟相关属性在传出联盟时会自动删除,管理员无需在出口处配置过滤子AS号等信息的操作。
      在这里插入图片描述
图12. BGP联盟

AS200使用联盟后背划分成3个子AS——AS65001、AS65002、AS65003,使用AS200作为联盟ID。IBGP连接数量从10条减少到4条。

路由反射器与联盟的区别:

影响方面路由反射器联盟
网络拓扑设计不需要改变现有网络拓扑,兼容性好需要改变现有网络拓扑
网络设备配置只需对反射器设备进行配置,方便对所有设备进行配置
AS内部全连接路由反射器集群与集群之间全连接子AS之间是EBGP,不需要全连接
技术适用网络规模中大型网络规模大型网络规模
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值