基于网络负载的路由协议

网络工程 BGP 多路复用器 负载均衡
2022-02-28 15:56:39

我正在为以下场景寻找网络协议建议:

我想要一个负载平衡路由协议,可以根据当前负载改变路由器的成本。

例如:

Router A 可以通过Router B 和Router C 到达Router D

路由器 B 变得饱和,并使用负载平衡路由协议路由器 B 向其所有对等方发送有关其当前负载的更新。

然后路由器 A 将路由器 C 优先于路由器 B,因为它的负载较小。

这可能吗?也许是 BGP 或 MPLS-TE?

谢谢,

1个回答

是的——这样的特性存在于几个协议中,我将举几个例子。但是,它们并没有被广泛使用,因为在实际使用中它们几乎总是一个糟糕的主意。

首先 - 没有真正的路由器单独忙碌的概念,而是特定路由器组之间的链接忙碌。这个想法通常是通过使一些上游链路选择表面上使用较少且(通常)不太受欢迎的路径来响应繁忙的链路。请记住,我使用了首选而不是直接一词,因为选择链接的方式可能包括许多潜在因素。

所以 - 让我们看几个简单的例子:Cisco 的 EIGRP 和 MPLS 自动带宽

在 EIGRP 的情况下,您可能知道 DUAL 算法实际上根据称为 K1-K5 的几个值做出最终度量确定(并因此做出路由决策)。这些实际上是协议携带的各种值的乘数这些值本身是(最小路径)带宽、(附加)链路延迟、(最小)链路可靠性和(最大)链路利用率。这一切都在这里详细解释。同样,这些 K 值是这些值的整数乘数,而不是值本身。更重要的是,默认情况下,这五个值中的三个实际上保留为零,而另外两个保留为 1。此处的净效果是忽略了链路可靠性和链路利用率,而实际使用的是链路带宽和延迟。为什么要有这些属性?因为它们是在链接上静态定义的。在使用所有这些值的早期部署中,很快发现这些值的可变性可能导致更大网络中的波动不稳定。更糟糕的是,利用率特别是造成了一种振荡条件,其中流量往往会从繁忙的链接转移,只是导致另一组链接变得繁忙,这反过来又会重定向回原始链接。这里的问题是网络可能永远不会处于完全稳定/可预测的状态。这基本上意味着繁忙的链接实际上通常会导致网络不稳定 - 这意味着一组用户的缓慢只会导致潜在的大量用户的不可预测的性能。类似地,链路质量确定倾向于将带有少量 CRC 错误的电路放大到网络范围的收敛事件中。至少这个 CPU 会被搅动,但最坏的情况是它可能(并且确实)自己产生中断。

在 MPLS 的情况下,实现是完全不同的,但许多问题是相同的。在这种情况下,RSVP-TE 用于建立 TE 隧道/LSP(标签交换路径)——对于不熟悉的人,它们是跨 MPLS 网络的特殊信号路径。这些路径是单向的,本质上是在入口和出口路由器之间建立的,基于通过传统度量信息和扩展的 TE 特定数据了解介入网络的许多因素,该数据携带链路状态路由协议(IS-IS 或 OSPF) . 这些因素可以包括带宽、链路亲和性/着色属性、显式路径(即哪些中间节点应该是航路点)以及传统的一维 IGP 度量(即标准链路成本)。

RSVP 实际上提供了通过网络发送这些 TE LSP 的机制。根据标准,入口路由器请求在通往入口的路上的路由器将用信号返回它们对路径的接受或提供准入控制以拒绝建议的路径。

如前所述,可以使用一系列标准,但如果我们关注 RSVP 带宽,我们可以看到您的用例在行动中。顺便说一句,RSVP 带宽是基于每个链接设置的静态属性。如果给定的 LSP 被配置为请求带宽预留,则该值用于中间路由器的准入控制。如果给定的请求链路具有带宽,那么它是被允许的,并且该链路上的总可预留带宽按预留量递减。如果剩余的可预留量不足,则拒绝请求并尝试不同的路径。

举个例子 - 考虑四个路由器的菱形/正方形拓扑:A、B、C 和 D。A 连接到 B 和 C,D 连接到 B 和 C。路径 A -> B -> D 都是 10G,而路径 A -> C -> D 都是 1G。换句话说,在正常情况下,标准 IGP 将通过 A->B 链接引导所有流量,而 A->C 链接作为备用。但是,在这种情况下,已经有通过 A->B 运行的 LSP 在 10G 中保留了 9.5G。当 A 尝试为 D 建立一个新的 LSP 时,它会发现它无法通过首选路径发出新的 750M LSP 信号,因此将通过 C 的低速路径发出信号。

所以... 需要注意几点:首先,给定 LSP 上请求的带宽通常是静态的价值。其次,没有什么(默认情况下)限制给定的 LSP 传输超过其保留的内容,或者相反,使未使用的带宽可用于其他路径。实际上,接口上的带宽值本身只是一个整数。以千比特为单位考虑它很方便,但这不是绝对必要的。同样的情况是,虽然简单的情况是链路上的带宽是按照先到先得的原则分配的,但对于某些类型的流量,都可以允许超额预订(例如,允许对某些流量进行 8 Gb 的预订) LSP 位于 1 Gb 的链路上)并且还为不同的 LSP 提供相对优先级(......所以一个 LSP 可以撞到另一个 LSP,如果没有其他路径可用,甚至可能使其脱机)。

所以 - 考虑到所有这些(......关于 TE 的内容还有很多),自动带宽的想法是入口路由器从初始预留开始,但实际上测量进入隧道的带宽量。当入口看到实际使用情况时,它实际上会定期重新发送路径。如果实际利用率低于初始预留,则中间节点知道我们的 LSP 遍历的链路上现在有更多带宽可用。如果实际利用率更高,则更新保留,或者如果可用带宽不足,则选择备用链路。

原则上这一切听起来不错,但同样,这并不能很好地映射到现实世界。最初的问题之一是无法保证最佳有效的带宽分配,事实上,供应商实施通常可以选择在其他等效的候选路径中查找并选择使用最少、使用最多或只是随机选择. 实际上有正式的证据表明这些方法最终基本上是等效的,并且在统计上可能是次优的。与上面提到的 EIGRP 案例非常相似,问题在于当网络试图移动流量时,中间链路上的负载条件往往会导致持续的不稳定和振荡。在许多情况下,这导致了更少的确定性和更大的不稳定性。

有人认为,使用可以通过强制重新发送 LSP 信号来更智能地响应负载条件的中央控制器可以很好地工作。这往往遵循一组更具体和有界的用例(...例如,通过未充分利用的用户站点的链接重定向峰值备份流量),而不是允许通用算法在整个网络中发疯。这可能是所谓的 SDN 的更好用例之一,尽管它比我们目前对该术语的使用早了 10 到 15 年。

这里有关于 MPLS-TE 和自动带宽的很好的介绍,但是,如前所述,TE 的整体主题可能会变得非常深入,并且也会根据供应商的实施而有所不同(..甚至在供应商内部基于硬件平台功能等) .

然而,关键是,虽然根据观察到的流量负载动态地重新发送信号网络听起来是个好主意,但实际上网络几乎不会受益,而且通常会因这种方法而变得不稳定。工程师基于观察到的负载。根据观察到的数据进行谨慎的更改。当它带来稳定性的大幅下降时,性能的轻微提升是无用的。