《重识云原生系列》专题索引:
为保证 IBGP 对等体之间的连通性,需要在 IBGP 对等体之间建立全连接关系。假设在一个 AS 内部有 n 台设备,那么建立的 IBGP 连接数就为 n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和 CPU 资源的消耗都很大。在 IBGP 对等体间使用路由反射器可以解决以上问题。
如图,在一个 AS 内部关于路由反射器有以下几种角色:
路由反射器示意图
同一集群内的客户机只需要与该集群的 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 邻居发布路由规则如下:
路由反射器和它的客户机组成一个集群(Cluster),使用 AS 内唯一的 Cluster ID 作为标识。为了防止集群间产生路由环路,路由反射器使用 Cluster_List 属性,记录路由经过的所有集群的 ClusterID。
Originator ID 由 RR 产生,使用的 Router ID 的值标识路由的始发者,用于防止集群内产生路由环路。
为增加网络的可靠性,防止单点故障对网络造成影响,有时需要在一个集群中配置一个以上的 RR。
由于 RR 打破了从 IBGP 对等体收到的路由不能传递给其他 IBGP 对等体的限制,所以同一集群内的 RR 之间中可能存在环路。这时, 该集群中的所有 RR 必须使用相同的 Cluster ID,以避免 RR 之间的路由环路。
如图,路由反射器 RR1 和 RR2 在同一个集群内,配置了相同的 Cluster ID。
一个 AS 中可以存在多个集群,各个集群的 RR 之间建立 IBGP 对等体。当 RR 所处的网络层不同时,可以将较低网络层次的 RR 配成客户机,形成分级 RR。当 RR 所处的网络层相同时,可以将不同集群的 RR 全连接,形成同级 RR。
在实际的 RR 部署中,常用的是分级 RR 的场景。如图, ISP 为 AS100 提供 Internet 路由。AS100内部分为两个集群,其中 Cluster1 内的四台设备是核心路由器,采用备份 RR 的形式保证可靠性。
如图,一个骨干网被分成多个集群。各集群的 RR 互为非客户机关系,并建立全连接。此时虽然每个客户机只与所在集群的 RR 建立 IBGP 连接,但所有 RR 和客户机都能收到全部路由信息。
解决 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 的负担。
路由反射器和联盟的比较:
在大规模的网络中, BGP 路由表十分庞大,给设备造成了很大的负担,同时使发生路由振荡的几率也大大增加,影响网络的稳定性。
路由聚合是将多条路由合并的机制,它通过只向对等体发送聚合后的路由而不发送所有的具体路由的方法,减小路由表的规模。并且被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。
BGP 在 IPv4 网络中支持自动聚合和手动聚合两种方式,而 IPv6 网络中仅支持手动聚合方式:
为了避免路由聚合可能引起的路由环路, BGP 设计了 AS_Sst 属性。AS_Sst 属性是一种无序的AS_Path 属性,标明聚合路由所经过的 AS 号。当聚合路由重新进入 AS_Sst 属性中列出的任何一个 AS 时, BGP 将会检测到自己的 AS 号在聚合路由的 AS_Sst 属性中,于是会丢弃该聚合路由,从而避免了路由环路的形成。
当 BGP 应用于复杂的网络环境时,路由振荡十分频繁。为了防止频繁的路由振荡带来的不利影响,BGP 使用路由衰减来抑制不稳定的路由。
路由振荡指路由表中添加一条路由后,该路由又被撤销的过程。当发生路由振荡时,设备就会向邻居发布路由更新,收到更新报文的设备需要重新计算路由并修改路由表。所以频繁的路由振荡会消耗大量的带宽资源和 CPU 资源,严重时会影响到网络的正常工作。
路由衰减使用惩罚值(Penalty value)来衡量一条路由的稳定性,惩罚值越高说明路由越不稳定。
如图所示,路由每发生一次振荡, BGP 便会给此路由增加 1000 的惩罚值,其余时间惩罚值会慢慢下降。当惩罚值超过抑制阈值(suppress value)时,此路由被抑制,不加入到路由表中,也不再向其他 BGP 对等体发布更新报文。被抑制的路由每经过一段时间,惩罚值便会减少一半,这个时间称为半衰期(half-life)。当惩罚值降到再使用阈值(reuse value)时,此路由变为可用并被加入到路由表中,同时向其他 BGP 对等体发布更新报文。从路由被抑制到路由恢复可用的时间称为抑制时间(suppress time)。
路由衰减只对 EBGP 路由起作用,对 IBGP 路由不起作用。这是因为 IBGP 路由可能含有本 AS 的路由,而 IGP 网络要求 AS 内部路由表尽可能一致。如果路由衰减对 IBGP 路由起作用,那么当不同设备的衰减参数不一致时,将会导致路由表不一致。
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 选路。
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收敛。
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
BGP 的平滑重启 GR(Graceful Restart)和不间断路由 NSR(Non-Stop Routing)作为高可靠性的解决方案,其根本目的都是为了保证用户业务在设备故障的时候不受影响或者影响最小。
BGP GR 技术保证了在设备重启或者主备倒换过程中转发层面能够继续指导数据的转发,同时控制层面邻居关系的重建以及路由计算等动作不会影响转发层面的功能,从而避免了路由震荡引发的业务中断,提高了整网的可靠性。
GR 相关概念:
BGP GR的过程是:
NSR 是一种控制平面倒换而邻居不感知的可靠性技术,适用于设备具有主用主控板和备用主控板的场景。与 GR 相比, NSR 具有不需要邻居协助,不存在互通性问题的优点。
BGP 使用认证和 GTSM(Generalized TTL Security Mechanism)两个方法保证 BGP 对等体间的交互安全。
BGP 认证分为 MD5 认证和 Keychain认证,对 BGP 对等体关系进行认证是提高安全性的有效手段。MD5 认证只能为 TCP 连接设置认证密码,而 Keychain 认证除了可以为 TCP 连接设置认证密码外,还可以对 BGP 协议报文进行认证。
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协议总结(比较详细,好理解)_Looo~ye的博客-CSDN博客_bgp协议
BGP协议详解(一)_liboyang990814的博客-CSDN博客_bgp协议