[学习笔记] - BGP

BGP

  • 可靠性
  • 稳定性
  • 可扩展性
  • 灵活性

概述

路由分以下2种

  • IGP:内部网关协议
    • 距离矢量协议:RIP
    • 内部网关路由选择协议:IGRP
    • 高级距离矢量协议:EIGRP
    • 链路状态协议:OSPF
    • 中间系统:IS-IS
  • EGP:外部网关协议
    • BGP
      • EBGP
      • IBGP
IGP IBGP
在每一台路由器上都改变前缀的下一跳,以指向一个直连的地址 不改变前缀的下一跳属性
自动地发现并形成邻居关系 需要手工配置
提供有关如何穿越一个给定的AS或达到一个给定地点的信息 提供有关一个地点上的可用信息,但并不指明如何到达它

IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换,而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换,BGP则是EGP的一种

  • BGP是Border Gateway Protocol的简称
  • BGP是一种增强的路径矢量路由协议
  • BGP是拥有丰富的策略控制技术的外部网关协议
  • BGP多运行于AS于AS之间

使用TCP作为其传输层协议

  • BGP使用TCP作为其传输层协议,提高了协议的可靠性,且不需要专门的机制来确保连接的可控性
    • 监听端口179
  • 进行AS之间的路由选择,对协议稳定性要求较高
  • BGP对等体之间必须在逻辑上连通

  • 支持CIDR
  • 触发式路由增量更新
  • 从设计上避免了环路发生
  • 增强型路径矢量路由协议
    • BGP通过携带AS路径信息来标记途径的AS
  • 无环路
    • AS之间:BGP通过携带AS路径信息来标记途径的AS,带有本地AS号的路由将被丢弃
    • AS内部:BGP在AS内学到的路由不再通告给AS内部的BGP邻居

路由策略丰富,能够对路由实现灵活的过滤和选择,可防止路由震荡(路由衰减)。易于扩展

IBGP EBGP
全连接 不需要全连接
通告Local Pref,不修改AS_PATH 修改AS_PATH
不需要直连的连通性 默认需要,但是一半不需要共享共同的IGP
需要保持前缀同步 不需要同步
IBGP路由不会重分布到IGP 没有限制

自治系统AS

  • 由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合
  • 每个自治区都有唯一的自治系统的编号,由IANA分配
  • 1-64511是注册的公网编号,64512-65535是私有编号

  • IBGP:当BGP运行于同一AS内部时
  • EBGP:当BGP运行于不同AS之间时

工作原理

  1. 通过TCP建立BGP连接,发送Open消息
  2. 连接建立后,如果有路由需要发送或路由变化时,发送Update消息通告对端
  3. 稳定后要定时发送Keepalive消息以保持BGP连接的有效性
  4. 当本地BGP在运行中发现错误时,要发送Notification消息通告BGP对等体
  5. Route-Refresh消息同来通知对等体自己支持路由刷新

报文类型

Open报文

  • 协商BGP参数:试图建立BGP邻居关系的2个路由在建立TCP会话之后开始交换OPEN信息以确认能否形成邻居关系,时TCP建立后发送的第一个信息
    • BGP版本
    • AS号
1
Header - Message - Data
  • Header:
    • Marker(16B)
    • Length(2B)
    • Type(1B)
  • Open:
    • Version(1B)
    • My AS(2B)
    • Hold Time(2B)
    • BGP Identifier(4B)
    • Opt Param Len(1B)
    • Optional Parameters(variable)

建立邻居

邻居建立不起来可能有以下原因

  • 邻居没用达到此路由器产生的BGP数据包源地址的路由条目
  • 邻居的对等体配置了错误的IP地址
  • 邻居没有通过neighbor语句配置此邻居
  • AS号码不匹配

Update报文

  • 交换路由信息:该报文则是邻居之间用于交换路由信息的报文,其中包括
    • 撤销路由信息
    • 可达路由信息
    • 及其各种路由属性
1
Header - Update - Data
  • Header:
    • Marker(16B)
    • Length(2B)
    • Type(1B)
  • Open:
    • 不可达
      • Withdrawn Routes Length(2B)
      • Withdrawn Routes(可变长度)
    • 可达
      • Path Attribute Length(2B)
      • Path Attribute(可变长度)
      • Network Layer Reachability Information(可变长度)

更新路由,交换网络层可达性信息

  • 一个UPDATE消息一次只能通告一个路由,但他可以携带多个路径属性。
  • 一个UPDATE消息一次也可通告多条路由,但他的路径属性必须相同。
  • 一个UPDATE消息可以同时列出多个被撤销的路由

Keepalive报文

  • 保持邻居关系:该报文用于BGP邻居关系的维护,为周期性交换的报文,用于判断对等体之间的可达性
1
Header - Data
  • Header:
    • Marker(16B)
    • Length(2B)
    • Type(1B)

维持邻居

Notification报文

  • 差错通知:BGP的差错检测机制,一旦检测到任何形式的差错,BGP Speaker会发送一个Notification报文,随后与之相关的邻居关系将被关闭
1
Header - Notification - Data
  • Header:
    • Marker(16B)
    • Length(2B)
    • Type(1B)
  • Notification:
    • Error Code(1B)
    • Error SubCode(1B)
    • Data(可变长度)

报错


Error Code 错误类型
1 消息头错误
2 OPEN信息错误
3 UPDATE信息错误
4 保持时间超时
5 状态机错误
6 终止
错误子码
  • 消息头错误代码
    • 1:连接非同步
    • 2:错误的消息长度
    • 3:错误的消息类型
  • OPEN信息错误代码
    • 1:不支持的版本号
    • 2:错误的对等体AS号
    • 3:错误的BGIP ID
    • 4:不支持的可选参数
    • 5:认证失败/表示反对
    • 6:不可接受的保持时间
  • UPDATE消息错误字码
    • 1:畸形的属性列表
    • 2:无法识别的公认属性
    • 3:缺少的公认属性
    • 4:属性标识位错误
    • 5:属性长度错误
    • 6:无效的ORIGIN属性
    • 7:AS路由环路/表示反对
    • 8:无效的下一跳属性
    • 9:可选属性错误
    • 10:无效的网络字段
    • 11:畸形的AS_PATH

Route-Refresh报文

  • 用于在改变路由策略后请求对等体重新发送路由信息
1
Header - Route-Refresh - Data
  • Header:
    • Marker(16B)
    • Length(2B)
    • Type(1B)
  • Route-Refresh:
    • AFI(2B)
    • Res.(1B)
    • SAFI(1B)

状态级

对等体之间的交互原则

  • IBGP路由:只发布给EBGP对等体
    • 防止环路产生
    • IBGP全互联:维护路由表,这样才能传递,但是需要维护更多会话
    • 是否传递给EBGP需要依靠IGP和BGP同步的情况决定,防止路由黑洞
      • BGP同步:会先检测IGP路由表,只有在IGP也知道这条IBGP路由时,它才会被加入到路由表,并发布给EBGP对等体
  • EBGP路由:发布给所有EBGP和IBGP对等体
    • 保证IBGP下一跳可达
  • 只将最优路由发布给对等体
  • 只发送更新的BGP路由

连接一建立,BGP Speaker将把自己产生的所有BGP路由通告给新对等体
多条路径时,BGP Speaker只选最优的给自己使用
BGP Speaker只把自己使用的最优路由通告给对等体

IBGP 对等体之间不一定是物理上直连的,但必须保证逻辑上全连接,就是 tcp 连接能够建立即可。

Peer

任意的两个路由为了交换 BGP 路由信息而形成 TCP 连接叫做 Peers 或者 Neighbors。

BGP对等体交换完BGP全部路由表以后,以后就只发增量更新。BGP在BGP表中有一个版本号,在所有的BGP peers中都相同,BGP路由表变化以后就会引起版本号的改变。

成为BGP路由

  • network命令:network路由信息
  • import命令:引入路由信息

BGP数据库

  • IP路由表:全局路由信息库,包括所有IP路由信息
  • BGP路由表:BGP路由信息库,包括本地BGP Speaker选择的路由信息
  • 邻居表:对等体邻居清单列表
  • Adj-RIP-In:对等体宣告给本地Speaker的未处理的路由信息库
  • Adj-RIB-Out:本地Speaker宣告给指定对等体的路由信息库
  1. 输入策略引擎
  2. 路径选择
  3. 输出策略引擎

BGP属性

BGP路由属性是一套参数,它是对特定的路由进一步的描述,简单来说就是一组描述BGP前缀特效的参数

  • 公认必遵(Well-known mandatory)
    • 所有BGP路由器都可以识别,且必须存在于Update消息中
    • 如果缺少这种属性,路由信息就会出错
  • 公认任意(Well-known discretionary)
    • 所有BGP路由器都可以识别,但不要求必须存在于Update消息中
    • 就算缺少这类属性,路由信息也不会出错
  • 可选过度(Optional transitive)
    • 在AS之间具有可传递性的属性
    • BGP路由器可以选择是否在Update消息中携带这种属性,接受的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性
  • 可选非过度(Optional non-transitive)
    • BGP路由器可以选择是否在Update消息中携带这种属性,如果接受的BGP路由器不支持此属性,则相应的这类属性会被忽略,且不会传递给其他对等体

  • Origin
    • Well-known mandatory
    • 用来定义路径信息的来源
    • IGP
      • 通过路由始发AS的IGP得到的路由信息,network命令
      • 标识符为i
    • EGP
      • 通过EGP得到的路由信息
      • 标识符为e
    • Incomplete
      • 通过其他方式学习到的路由信息,import命令
      • 标识符为?
  • AS_PATH
    • Well-known mandatory
    • 按矢量顺序记录某条路由从本地到目的地地址所要经过的所有AS编号
  • Next hop
    • Well-known mandatory
    • 记录了路由的下一跳信息
      • ~ IBGP - IBGP
      • ~ IBGP - EBGP
      • ~ EBGP - IBGP
  • MED(Multi_Exit_Disc)
    • Optional non-transitive
    • 相当于IGP的代价值,用于判断流量进入AS时的最佳路由,即用来影响邻居AS流量进入本AS的最佳路径
  • Local-Preference
    • Well-known discretionary
    • 表明路由器的BGP优先级,用于判断流量离开AS时的最佳路由
  • Atomic-Aggregate
    • Well-known discretionary
  • Aggregator
    • Optional transitive
  • Community
    • Optional transitive
    • 用于标识具有相同特征的BGP路由
      • 自定义团体属性
      • 公共团体属性
        • Internet
        • No_Advertise: 路由器收到带有这一团体值的路由后,不应把该路由通告给任何BGP对等体
        • No_Export: 路由器收到带有这一团体值的路由后,不应把该路由通告给一个联盟之外的对等体
          • 本AS传递
        • No_Export_Subconfed: 路由器收到带有这一团体值的路由后,可以把该路由通告给他的IBGP对等体,但不应该通告给任何EBGP对等体
  • Originator-ID
    • Optional non-transitive
    • 由第一个RR创建,且不被后续RR修改
  • Cluster-List
    • Optional non-transitive
  • MP_Reach_NLRI
  • MP_Unreach_NLRI
  • Extended_Communities

BGP选路规则

  • 如果此路由的下一跳不可达,忽略
  • 路径未同步,但同步功能被启用
  • 被入境策略拒绝,并且配置了入境温和重置
  • 路由被惩罚

  • 优先选首选值(PrefVal)最高的路由
    • 比较路由传入的路由器的PrefVal
    • 在被传入路由器上修改
  • 优先本地优先级(Local_Pref)最高的路由
    • 默认100,默认没有才会加上
    • 仅在IBGP对等体之间传递
    • 在传出路由器上设置
  • 优先选本地生成的路由
    • 优先聚合路由
    • 优先network > import
  • 优先选AS路径(AS_PATH)最短的路由
  • 比较Origin属性,依次优先选Origin类型为IGP,EGP,Incomplete的路由
  • 优先选MED值最低的路由
    • 仅在相邻2个AS之间传递
    • 这样可以影响其他AS选择,也就是我来帮你选
  • 优先选EBGP邻居学来的路由
  • 优先选BGP下一跳IGP Metric较小的路由
  • 当以上全部相同,则为等价路由,可以负载分担
    • AS_PATH必须相同,当负载分担时,以下3条原则无效
    • 优先选Cluster_List最短的路由
    • 优先选Originator_ID或者Router_ID最小的路由器发布的路由
    • 比较对等体的IP Address,优先选具有较小IP Address的对等体学来的路由

BGP收敛

  • 所有路由都被接受
  • 所有路由都被安装到路由选择表中
  • 所有对等体的表版本的计数都必须等于BGP表的表版本的技术
  • 所有对等体的BGP的输入队列和输出队列都必须为0

BGP 收敛完成的时候,以后再有路由更新的时候,BGP 只发送增量路由。BGP 路由携带了丰富的属性,这些属性可以对路由进行过滤、选择和控制,正是这一特性使得 BGP 是如此简明而又如此灵活和强大。

BGP扩展属性

BGP安全特性

  • MD5认证
  • GTSM
    • TTL安全保护机制
  • 限制从对等体接受的路由数量
  • AS_PATH长度保护

路由衰减

用来解决路由不稳定的问题,路由不稳定主要表现形式时路由震荡(route flaps),即路由表中的某条路由反复消失和重现。发生路由震荡时,路由协议就会向邻居发布路由更新,收到更新报文的路由器需要重新计算路由并修改路由表。所以频繁的路由震荡会消耗大量的带宽资源和CPU资源。

在多数情况下,BGP协议都应用于复杂的网络环境中,路由变化十分频繁,为了防止持续的路由震荡带来的不利影响,BGP使用衰减来抑制不稳定的路由

BGP衰减使用惩罚值来衡量一条路由的稳定性,惩罚值越高则说明路由越不稳定。路由每发生一次震荡(激活->未激活),BGP便会给此路由增加一定惩罚值(1000),当惩罚值超过抑制阈值时,此路由被抑制,不加入到路由表中,也不再向其他BGP对等体发布更新报文

被抑制的路由每经过一段时间(900s),惩罚值便会减少一半,这个时间成为半衰期。当惩罚值降到再使用阈值时,此路由变为可用并被加入到路由表中,同时向其他BGP对等体发布更新报文

BGP扩展

因为BGP使用TCP,并不需要真实线缆连接来建立拓扑,所以可能会产生路由黑洞,也就是IBGP内部没有全互联造成的,需要使用反射器或联盟来防止路由黑洞。

全互联也就是只传第一次路由,这样就不会有环路产生

BGP反射器

防止环路

  • EBGP:通过AS_PATH属性,丢弃从EBGP对等体接收到的在AS_PATH属性里包含自身AS号的任何更新信息
  • IBGP:BGP路由器不会将任何从IBGP对等体接收到的更新信息传递给其他IBGP对等体
    • 带来的问题:为保证更新信息可以到达所有IBGP对等体
    • IBGP Speaker之间要保证会话的全互联

  • 路由反射:降低对指定路由器IBGP路由通告机制的限制,允许将从IBGP对等体接收到的更新信息传给某些IBGP对等体
  • 联盟:将大的AS分成若干小的AS,而小AS之间建立EBGP对等体关系

解决水平分割造成的问题,要保证没用回路


路由反射器

  • 允许将IBGP邻居学习到的路由发送给特定IBGP邻居,打破了IBGP邻居关系全互联的需求,减少IBGP会话数量
  • 包括路由反射器(RR)和客户机

  • 路由反射器RR(Route Reflector):允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR
  • 客户机(Client):与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
  • 非客户机(Non-Client):既不是RR也不是客户机的IBGP设备。在AS内部所有非客户机与所有RR之间仍然必须建立全连接关系。
  • 始发者(Originator):在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
  • 集群(Cluster):路由反射器及其客户机的集合。Cluster_List属性用于防止集群间产生路由环路。

对等体之间的关系

  • 客户机只需要维护RR之间的IBGP会话
  • RR与RR之间需要建立IBGP全互联
  • 非客户端和非客户端需要建立IBGP全互联
  • RR与非客户端之间需要建立IBGP全互联

反射规则

在向IBGP邻居发布学习到的路由信息时,RR按照以下规则发布路由

  • 从EBGP对等体学习到的路由,发布给所有的非客户机和客户机
  • 从非客户机IBGP对等体学习到的路由,发布给此RR的所有客户机
  • 从客户机学习到的路由,发布给非RR的所有非客户机和客户机(除了发送方)

防环机制

  • Originator_ID属性
    • 该属性为可选非过度
    • 用于集群内的防环
    • 由路由反射器(RR)产生,携带了本地AS内该路由发送者的RouterID

用于防止在反射器和客户机/非客户机之间产生环路

  • 长4个字节,属性类型为9,是由路由反射器(RR)产生的,携带了本地AS内部路由发起者的RouterID。
  • 当一条路由第一次被RR反射的时候,RR将Originator_ID属性加入到这条路由,表示这条路由的始发路由器。如果一条路由中已经存在了Originator_ID属性,则RR将不会创建新的Originator_ID。
  • 当其他BGP Speaker接收到这条路由的时候,将比较收到的Originator_ID和本地RouterID做比较,若相同,BGP Speaker会忽略掉这条路由,不做处理

当一个AS内存在多台RR为CLient提供冗余时,RR间的路由更新很有可能会形成环路,为防止该现象,引入了Cluster的概念

  • Cluster_List属性
    • 该属性为可选非过度
    • 用于集群间的防环
    • 由路由反射器(RR)产生,记录反射路由经过的集群
    • 属性类型是10,由一系列Cluster_ID组成,描述了一条路由所经过的反射器路径,和AS_PATH有相似之处
    • 当RR接收到一条更新路由时,RR会坚持Cluster_List,如果Cluster_List中已经有本地Cluster_ID,丢弃该路由,如果没用本地Cluster_ID,将其加入Cluster_List,然后反射该更新路由

通过4字节的Cluster_ID来标识Cluster,通常会使用Lookback地址作为ClusterID,一个Cluster里可以包括一个或多个RR,一个Client可以同时属于多个Cluster。传递时把ClusterID放进Cluster_List

备份RR

  • 相同集群的路由反射器要共享相同的Cluster_ID
  • Cluster_List的应用保证了同一AS内的不同RR之间不出现路由循环

BGP联盟

将一个AS划分为若干个子AS,每个子AS内部建立IBGP全连接关系,子AS之间建立类似EBGP连接关系,称为联盟EBGP

联盟AS内仍然需要保证IGP的连通性,才能保证数据包的正确转发。

联盟打破了水平分割

联盟防环机制

AS_CONFED_SEQUENCE, AS_CONFED_SET使用子AS的号码防环

  • AS_CONFED_SEQUENCE
    • 有顺序,类似AS_PATH
  • AS_CONFED_SET
    • 无顺序
反射器 联盟
不需要改变现有网络拓扑,兼容性好 需要改变逻辑拓扑
配置方便,客户机不知道自己时客户机 所有设备需要重新配置,且需要支持联盟功能
集群与集群之间仍需要全连接 联盟的子AS之间时特殊的EBGP连接,不需要全连接
在大型网络中应用广泛 应用较少

BGP路由聚合

  • 只向对等体发送聚合后的路由,从而减少对等体的路由条目
  • 明细路由如果发送路由震荡,不会对网络造成影响
  • 路由聚合分为自动聚合和手动聚合

使用Aggregator(AS,RouterID)表示聚合发生在哪个AS的哪个路由上

自动聚合

  • 对BGP引入的路由进行有类聚合
  • 配置聚合后,明细路由在路由表中将被抑制
  • 不能对network发布的路由进行聚合
  • 只对BGP引入的路由进行聚合

手动聚合

  • 对BGP本地路由进行聚合,可以控制聚合路由的属性,以及决定是否发布具体路由

BGP增强特性

BGP ORF

使能BGP基于前缀的ORF功能

  • 基于本地的入口策略构建对端的出口策略,实现BGP按需发布路由
  • 包括基于前缀的ORF和VPN ORF

Active Route Advertise

路由必须同时满足在BGP协议层面优选与路由管理层面活跃两个条件,才能向邻居发布

  • 默认情况下路由只需在BGP中优选即可向邻居发布,配置了此特性之后,路由必须同时满足在BGP协议层面优选与在路由管理层面活跃两个条件,才能向邻居发布

按组打包

  • 将所有拥有共同出口策略的BGP邻居当作是一个打包组
  • 每条待发送路由只能被打包一次然后发给组内所有邻居

4字节AS号概念

4字节AS号特性是将AS号的编码范围由2字节扩大为4字节

  • 协议扩展
    • 定义了一种新的Open能力码用于进行BGP连接的能力协商
    • 2种新的可选过度属性,AS4_PATH和AS4_Aggregator属性
    • 定义AS_TRANS(保留值23456)用于衔接2字节AS和4字节AS

Internet设计理念

优化BGP能力

  • 建立对等体会话
    • IBGP & EBGP
    • 安全机制
    • IBGP是否要全互联
  • 路由更新起源
    • 引入或者network
  • 优化路由策略
    • 可配置输出或者输入策略
    • ORF
  • 路由过滤和属性控制
  • 发送接受路由进行过滤
    • 属性控制
  • 路由聚合
    • 所见路由表规模

提高BGP可用性

  • 冗余
    • 路径要冗余
    • RR冗余
  • 流量对称
    • 科学的设计网络,具体策略的应用以保证来去流量路径一致
  • 负载均衡
    • 当有多条路径存在时,可考虑通过适当策略实现流量的分载负担,以充分利用宽带

控制AS内部路由

  • 非BGP路由与BGP路由之间的交互
    • 一般情况下,非BGP路由可以通过路由引入或者network分发到BGP路由表种,对于分发到BGP中的路由,以使适合路由加载到BGP路由表中
  • 默认路由
    • 对于默认路由的发放,可以通过策略默认路由根据某些具体条件来下方默认路由
  • 策略路由
    • 通过策略路由来优化流量路径

控制大型AS

  • BGP按组打包
  • 路由反射器
  • 联盟
    • 通过路由反射器和联盟,减少IBGP会话数量,优化BGP大型网络

设计稳定的Internet

  • 减少不稳定路由的产生
    • 使用稳定的IGP路由协议
    • 提升路由器的性能
    • 减少人为失误
    • 扩展链路带宽
  • 提供BGP稳定性
    • 应用新的BGP策略,使用BGP软复位
    • 对于不稳定的路由,对其进行合理的惩罚,以减少对BGP的冲击

BGP指令

1
2
3
4
5
6
# 邻居表
show ip bgp summary
# BGP转发表
show ip bgp
# IP路由表
show ip route

参考