如果路由器收到两个相同前缀的 BGP 更新,并且这两个更新都是聚合路径,路由器如何决定采用哪一个?让我们说它需要根据 AS Path 长度来决定(我知道还有其他标准,但让我们说它们都是平等的,现在它达到了 AS Path 指标,需要基于它来决定)。那么它是如何保证最短路径的呢?由于聚合,As 路径可能会隐藏一些 ASN。
聚合路由在 BGP 中的表现如何?
BGP 有一组固定的选择路径的标准。如果 AS 路径属性没有选择单个路径,路径选择算法接下来将使用路径源类型,优先选择 IGP 而不是 EGP。
这里是对 BGP 路径选择算法的完整解释。
默认情况下,聚合路由器会忽略聚合网络中的 ASN。这个想法是聚合路由本身是由聚合 AS 发起的,因此原始 AS 的 ASN 是无关紧要的。
(我会在这里暂停一下,说它可能与不同的供应商不同地工作——尽管上述对 Cisco 来说是准确的)
但是,在聚合时,您可以使用关键字as-set告诉聚合路由器在 AS-PATH 属性中也包含源 ASN。但问题是,它们应该按什么顺序排列?
与创建确定聚合路由中 ASN 顺序的复杂方法不同,所有 ASN 都包含在称为 AS-SET 的结构中。这样,接收聚合路由的路径上的任何路由器都知道涉及哪些 ASN。而且,eBGP 的环路预防机制(如果我在收到的广告中看到我的 ASN,我会忽略该广告)仍然有效。
在视觉上看到它会有所帮助......直到我阅读Mike Pennington 对这个问题的回答后,它才对我产生了影响,我建议阅读它作为你问题的后续。无论哪种方式,这是他的答案和视觉效果的一部分:
在下面的示例中,AS65500 将来自 AS65000 和 AS65001 的 eBGP 公告聚合到 10.1.0.0/23。聚合AS65000和AS65001的公告后,AS65500发送
NETWORK: 10.1.2.0/23 AS-PATH: 65500和NETWORK: 10.1.0.0/23 AS-PATH: 65500 {65000, 65001}(聚合)。通常,AS 将在将较大地址块的一部分委托给客户时进行聚合。当您为多个 ASN 聚合空间时,构建有序列表没有意义;例如,下面聚合的有序 AS-PATH 将是
65500 [65000, 65001]或65500 [65001, 65000]。然而,这两个有序列表都是无意义的,因为排序与聚合无关(即两个自治系统都直接连接到 AS 65500)。排序意味着一个对聚合没有意义的序列。无序列表(即数学集合)对 AS_SET 最有意义。
_.------------. ,-'' `--. ,' `. ( AS65000 ) `. 10.1.0.0/24 ,' `--. _.-' `------------'' \ ------> NETWORK: 10.1.2.0/23 AS-PATH: 65500 \ ------> NETWORK: 10.1.0.0/23 AS-PATH: 65500 {65000, 65001} _.--------------. router bgp 65500 ,-'' `--. no sync ,' `. no auto-summary ( AS65500 ) neighbor 10.1.0.2 remote-as 65000 `. 10.1.2.0/23 ,' neighbor 10.1.1.2 remote-as 65001 --. _.-' network 10.1.2.0 mask 255.255.254.0 `--------------'' aggregate-add 10.1.0.0 255.255.254.0 summary-only as-set / / _.--------------. ,-'' `--. ,' `. ( AS65001 ) `. 10.1.1.0/24 ,' `--. _.-' `--------------''
当 65500 将聚合路由通告给新的 AS 时,它将包含以下 AS-PATH:
网络:10.1.0.0/23 AS-PATH:65500 {65000, 65001}
表示10.1.0.0/23网络来自ASN65500,然后来自{65000,65001}组成的AS-SET。这将计为 2 的 AS-PATH 长度——无论包含多少 ASN,AS-SET 都计为 1。然后可以将 AS-Path 长度与具有更长或更短 AS-PATH 长度的其他路由进行比较,以确定优先级。