《重识云原生系列》专题索引:
- 第一章——不谋全局不足以谋一域
- 第二章计算第1节——计算虚拟化技术总述
- 第三章云存储第1节——分布式云存储总述
- 第四章云网络第一节——云网络技术发展简述
- 第四章云网络4.2节——相关基础知识准备
- 第四章云网络4.3节——重要网络协议
- 第四章云网络4.3.1节——路由技术简述
- 第四章云网络4.3.2节——VLAN技术
- 第四章云网络4.3.3节——RIP协议
- 第四章云网络4.3.4节——OSPF协议
- 第四章云网络4.3.4.3节——OSPF协议工作原理
- 第四章云网络4.3.4.4节——[转载]OSPF域内路由
- 第四章云网络4.3.4.5节——[转载]OSPF外部路由
- 第四章云网络4.3.4.6节——[转载]OSPF特殊区域之Stub和Totally Stub区域详解及配置
- 第四章云网络4.3.4.7节——[转载]OSPF特殊区域之NSSA和Totally NSSA详解及配置
- 第四章云网络4.3.5节——EIGRP协议
- 第四章云网络4.3.6节——IS-IS协议
- 第四章云网络4.3.7节——BGP协议
- 第四章云网络4.3.7.2节——BGP协议概述
- 第四章云网络4.3.7.3节——BGP协议实现原理
- 第四章云网络4.3.7.4节——高级特性
- 第四章云网络4.3.7.5节——实操
- 第四章云网络4.3.7.6节——MP-BGP协议
- 第四章云网络4.3.8节——策略路由
- 第四章云网络4.3.9节——Graceful Restart(平滑重启)技术
4 BGP高级特性
4.1 路由反射器
为保证 IBGP 对等体之间的连通性,需要在 IBGP 对等体之间建立全连接关系。假设在一个 AS 内部有 n 台设备,那么建立的 IBGP 连接数就为 n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和 CPU 资源的消耗都很大。在 IBGP 对等体间使用路由反射器可以解决以上问题。
4.1.1 路由反射器相关角色
如图,在一个 AS 内部关于路由反射器有以下几种角色:
路由反射器示意图
- 路由反射器 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 属性用于防止集群间产生路由环路。
4.1.2 路由反射器原理
同一集群内的客户机只需要与该集群的 RR 直接交换路由信息,因此客户机只需要与 RR 之间建立IBGP 连接,不需要与其他客户机建立 IBGP 连接,从而减少了 IBGP 连接数量。如图所示,在AS65000 内一台设备作为 RR,三台设备作为客户机,形成 Cluster1。此时 AS65000 中 IBGP 的连接数从配置 RR 前的 10 条减少到 4 条,不仅简化了设备的配置,也减轻了网络和 CPU 的负担。
RR 突破了“从 IBGP 对等体获得的 BGP 路由, BGP 设备只发布给它的 EBGP 对等体。”的限制,并采用独有的 Cluster_List 属性和 Originator_ID 属性防止路由环路。RR 向 IBGP 邻居发布路由规则如下:
- 从非客户机学到的路由,发布给所有客户机。
- 从客户机学到的路由,发布给所有非客户机和客户机(发起此路由的客户机除外)。
- 从 EBGP 对等体学到的路由,发布给所有的非客户机和客户机。
4.1.2.1 Cluster_List属性
路由反射器和它的客户机组成一个集群(Cluster),使用 AS 内唯一的 Cluster ID 作为标识。为了防止集群间产生路由环路,路由反射器使用 Cluster_List 属性,记录路由经过的所有集群的 ClusterID。
- 当一条路由第一次被 RR 反射的时候, RR 会把本地 Cluster ID 添加到 Cluster List 的前面。如果没有 Cluster_List 属性, RR 就创建一个。
- 当 RR 接收到一条更新路由时, RR 会检查 Cluster List。如果 Cluster List 中已经有本地 ClusterID,丢弃该路由;如果没有本地 Cluster ID,将其加入 Cluster List,然后反射该更新路由。
4.1.2.2 Originator_ID属性
Originator ID 由 RR 产生,使用的 Router ID 的值标识路由的始发者,用于防止集群内产生路由环路。
- 当一条路由第一次被 RR 反射的时候, RR 将 Originator_ID 属性加入这条路由,标识这条路由的发起设备。如果一条路由中已经存在了 Originator_ID 属性,则 RR 将不会创建新的Originator_ID 属性。
- 当设备接收到这条路由的时候,将比较收到的 Originator ID 和本地的 Router ID,如果两个 ID相同,则不接收此路由。
4.1.3 备份路由反射器
为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的 RR。
由于 RR 打破了从 IBGP 对等体收到的路由不能传递给其他 IBGP 对等体的限制,所以同一集群内的 RR 之间中可能存在环路。这时, 该集群中的所有 RR 必须使用相同的 Cluster ID,以避免 RR 之间的路由环路。
如图,路由反射器 RR1 和 RR2 在同一个集群内,配置了相同的 Cluster ID。
- 当客户机 Client1 从 EBGP 对等体接收到一条更新路由,它将通过 IBGP 向 RR1 和 RR2 通告这条路由。
- RR1 和 RR2 在接收到该更新路由后,将本地 Cluster ID 添加到 Cluster List 前面,然后向其他的客户机(Client2、 Client3)反射,同时相互反射。
- RR1 和 RR2 在接收到该反射路由后,检查 Cluster List,发现自己的 Cluster ID 已经包含在Cluster List 中。于是 RR1 和 RR2 丢弃该更新路由,从而避免了路由环路。
4.1.4 多集群路由反射器
一个 AS 中可以存在多个集群,各个集群的 RR 之间建立 IBGP 对等体。当 RR 所处的网络层不同时,可以将较低网络层次的 RR 配成客户机,形成分级 RR。当 RR 所处的网络层相同时,可以将不同集群的 RR 全连接,形成同级 RR。
4.1.5 分级路由反射器
在实际的 RR 部署中,常用的是分级 RR 的场景。如图, ISP 为 AS100 提供 Internet 路由。AS100内部分为两个集群,其中 Cluster1 内的四台设备是核心路由器,采用备份 RR 的形式保证可靠性。
4.1.6 同级路由反射器
如图,一个骨干网被分成多个集群。各集群的 RR 互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的 RR 建立 IBGP 连接,但所有 RR 和客户机都能收到全部路由信息。
4.2 BGP 联盟
解决 AS 内部的 IBGP 网络连接激增问题,除了使用路由反射器之外,还可以使用联盟(Confederation)。联盟将一个 AS 划分为若干个子 AS。每个子 AS 内部建立 IBGP 全连接关系,
子 AS 之间建立联盟 EBGP 连接关系,但联盟外部 AS 仍认为联盟是一个 AS。配置联盟后,原 AS号将作为每个路由器的联盟 ID。这样有两个好处:一是可以保留原有的 IBGP 属性,包括 Local Preference 属性、 MED 属性和 NEXT_HOP 属性等;二是联盟相关的属性在传出联盟时会自动被删除,即管理员无需在联盟的出口处配置过滤子 AS 号等信息的操作。
联盟示意图
如图所示, AS100 使用联盟后被划分为 3 个子 AS:AS65001、 AS65002 和 AS65003,使用 AS100作为联盟 ID。此时 IBGP 的连接数量从 10 条减少到 4 条,不仅简化了设备的配置,也减轻了网络和 CPU 的负担。而 AS100 外的 BGP 设备因为仅知道 AS100 的存在,并不知道 AS100 内部的联盟关系,所以不会增加 CPU 的负担。
路由反射器和联盟的比较:
4.3 路由聚合
在大规模的网络中, BGP 路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。
路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。
BGP 在 IPv4 网络中支持自动聚合和手动聚合两种方式,而 IPv6 网络中仅支持手动聚合方式:
- 自动聚合:对 BGP 引入的路由进行聚合。配置自动聚合后, BGP 将按照自然网段聚合路由(例如非自然网段 A 类地址 10.1.1.1/24 和 10.2.1.1/24 将聚合为自然网段 A 类地址 10.0.0.0/8),并且 BGP 向对等体只发送聚合后的路由。
- 手动聚合:对 BGP 本地路由表中存在的路由进行聚合。手动聚合可以控制聚合路由的属性,以及决定是否发布具体路由。
为了避免路由聚合可能引起的路由环路, BGP 设计了 AS_Sst 属性。AS_Sst 属性是一种无序的AS_Path 属性,标明聚合路由所经过的 AS 号。当聚合路由重新进入 AS_Sst 属性中列出的任何一个 AS 时, BGP 将会检测到自己的 AS 号在聚合路由的 AS_Sst 属性中,于是会丢弃该聚合路由,从而避免了路由环路的形成。
4.4 路由衰减
当 BGP 应用于复杂的网络环境时,路由振荡十分频繁。为了防止频繁的路由振荡带来的不利影响,BGP 使用路由衰减来抑制不稳定的路由。
路由振荡指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和 CPU 资源,严重时会影响到网络的正常工作。
路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。
如图所示,路由每发生一次振荡, BGP 便会给此路由增加 1000 的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他 BGP 对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他 BGP 对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。
路由衰减只对 EBGP 路由起作用,对 IBGP 路由不起作用。这是因为 IBGP 路由可能含有本 AS 的路由,而 IGP 网络要求 AS 内部路由表尽可能一致。如果路由衰减对 IBGP 路由起作用,那么当不同设备的衰减参数不一致时,将会导致路由表不一致。
4.5 BGP 与 BFD 联动
BGP 协议通过周期性的向对等体发送报文来实现邻居检测机制。但这种机制检测到故障所需时间比较长,超过 1 秒钟。当数据的传输速度达到 Gbit/s 级别时,这种机制的检测时间将导致大量数据丢失,无法满足网络高可靠性的需求。BGP 与 BFD(Bidirectional Forwarding Detection)联动可以利用 BFD 的毫秒级快速检测机制解决上述问题。
BGP与BFD联动组网图
如图所示, RouterA 和 RouterB 分别属于 AS100 和 AS200,两台路由器直接相连并建立 EBGP连接,并配置 BGP 与 BFD 联动。当 RouterA 和 RouterB 之间的链路发生故障时, BFD 利用毫秒级检测机制感知到 BFD 会话状态由 Up 变为 down,并通知 RouterA 和 RouterB。RouterA 和 RouterB处理邻居 Down 事件,重新进行 BGP 选路。
4.6 BGP Tracking
BGP Tracking 可以为 BGP 提供快速的链路故障检测, 加速 BGP 网络的收敛速度。当使能了 BGP Tracking 功能的 BGP 对等体之间的链路发生故障时, BGP Tracking 将快速感知到达邻居的路由的不可达,并由路由管理模块通知到 BGP,从而实现快速收敛。
与 BFD 特性相比, BGP Tracking 配置简单,只需在本地配置而不需要全网配置。但是由于 BGP Tracking 是路由层面的感知方式,而 BFD 是链路层面的感知方式,所以 BGP Tracking 收敛速度比BFD 慢,不适用于对收敛时间要求较高的语音等业务。
应用
如图所示, RouterA、 RouterB 和 RouterC 之间建立了 IGP 连接, RouterA 和 RouterC 之间建立了IBGP 邻居,在 RouterA 上配置了 BGP Tracking 功能。当 RouterA 和 RouterB 之间的链路发生故障时,首先 IGP 进行快速收敛,然后 BGP Tracking 将感知到达 RouterC 的路由不可达,并通知 RouterA上的 BGP,最后 RouterA 中断与 RouterC 之间的 BGP 连接。
BGP Tracking组网图
说明:
如果IBGP邻居的建立依赖于IGP路由,应配置从BGP Tracking发现邻居不可达到BGP中断连接的时间间隔,使该时间间隔大于IGP路由收敛时间。否则,在闪断导致的IGP路由震荡恢复之前,可能BGP邻居关系就已经中断了,这样将导致不必要的BGP收敛。
4.7 BGP Auto FRR
BGP Auto FRR(BGP Auto Fast ReRoute)是一种链路故障保护措施,应用于有主备链路的网络拓扑结构中,可以使 BGP 的两个邻居切换或者两个下一跳切换达到亚秒级的收敛速度。
BGP Auto FRR 对于从不同对等体学到的相同前缀的路由,利用最优路由作为主链路进行转发,并自动将次优路由作为备份链路。当主链路出现故障的时候,系统快速响应 BGP 路由不可达的通知,并将转发路径切换到备份链路上保证数据转发。在 BGP 收敛后, BGP Auto FRR 再将流量按 BGP选出的最佳路由指导转发。
应用
如图所示, RouterD 将学到的 BGP 路由发往 AS100 中的 RouterB 和 RouterC,然后 RouterB 和RouterC 通过反射器将路由发到 RouterA 上, RouterA 上收到下一跳为 RouterB 和 RouterC 的份路由,配置策略优选其中一条链路上收到的路由,这里假设在 RouterA 上优选从 RouterB 发来的路由,主链路是 LinkB,备份链路是 LinkC。
BGP Auto FRR示意图
在 RouterA 上使能 Auto FRR,当域内 LinkB 经过的节点或者链路出现故障的时候, RouterA 上到RouterB 的下一跳信息就会失效,触发转发平面迅速将从 RouterA 到 RouterD 流量快速切换到 LinkC上,优先保证流量不丢失。同时, RouterA 重新进行 BGP 选路,优选从 RouterC 发来的路由并更新 FIB
4.8 BGP GR 和 NSR
BGP 的平滑重启 GR(Graceful Restart)和不间断路由 NSR(Non-Stop Routing)作为高可靠性的解决方案,其根本目的都是为了保证用户业务在设备故障的时候不受影响或者影响最小。
4.8.1 BGP GR
BGP GR 技术保证了在设备重启或者主备倒换过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由震荡引发的业务中断,提高了整网的可靠性。
GR 相关概念:
- GR Restarter:指由管理员触发或故障触发后,以 GR 方式重启的设备。
- GR Helper:GR Restarter 的邻居,协助 GR Restarter 进行 GR 的设备。
- GR Time:是 GR Helper 检测到 GR Restarter 重启或者主备倒换后,保持转发信息不删除的时间。
BGP GR的过程是:
- 利用 BGP 的能力协商机制, GR Restarter 和 GR Helper 了解彼此的 GR 能力,建立有 GR 能力的会话。
- 当 GR Helper 检查到 GR Restarter 重启或者主备倒换后,不删除和 GR Restarter 相关的路由和转发表项,也不通知其他邻居,而是等待重建 BGP 连接。
- GR Restarter 在 GR Time 超时前与重启前的所有 GR Helper 新建立好邻居关系。
4.8.2 BGP NSR
NSR 是一种控制平面倒换而邻居不感知的可靠性技术,适用于设备具有主用主控板和备用主控板的场景。与 GR 相比, NSR 具有不需要邻居协助,不存在互通性问题的优点。
4.9 BGP 安全性
BGP 使用认证和 GTSM(Generalized TTL Security Mechanism)两个方法保证 BGP 对等体间的交互安全。
4.9.1 BGP认证
BGP 认证分为 MD5 认证和 Keychain认证,对 BGP 对等体关系进行认证是提高安全性的有效手段。MD5 认证只能为 TCP 连接设置认证密码,而 Keychain 认证除了可以为 TCP 连接设置认证密码外,还可以对 BGP 协议报文进行认证。
4.9.2 BGP GTSM
BGP GTSM 检测 IP 报文头中的 TTL(time-to-live)值是否在一个预先设置好的特定范围内,并对不符合 TTL 值范围的报文进行允许通过或丢弃的操作,从而实现了保护 IP 层以上业务,增强系统安全性的目的。
例如将 IBGP 对等体的报文的 TTL 的范围设为 254 至 255。当攻击者模拟合法的 BGP 协议报文,对设备不断的发送报文进行攻击时, TTL 值必然小于 254。如果没有使能 BGP GTSM 功能,设备收到这些报文后,发现是发送给本机的报文,会直接上送控制层面处理。这时将会因为控制层面处理大量攻击报文,导致设备 CPU 占用率高,系统异常繁忙。如果使能 BGP GTSM 功能,系统会对所有 BGP 报文的 TTL 值进行检查。丢弃 TTL 值小于 254 的攻击报文,从而避免了网络攻击报文占用 CPU。
参考链接
BGP协议原理(一)BGP协议基本概念:BGP作用与特点、BGP邻居关系建立与配置_Skye_Zheng的博客-CSDN博客_bgp协议作用
【网络干货】最全BGP路由协议技术详解 - 知乎
BGP协议总结(比较详细,好理解)_Looo~ye的博客-CSDN博客_bgp协议
边界网关协议_百度百科
BGP协议详解(一)_liboyang990814的博客-CSDN博客_bgp协议
BGP协议介绍 - 知乎
BGP报文及格式(2) - 简书
【干货】万字详解BGP路由技术原理及配置命令! - 知乎
32张图详解BGP路由协议:BGP基本概念、BGP对等体、BGP报文类型、BGP状态机等 - 知乎
BGP优雅重启(Graceful Restart) - 知乎