RFC5065:Autonomous System Confederations for BGP,August 2007
本备忘录的状态
本文档为 Internet 社区指定了 Internet 标准跟踪协议,并请求讨论和改进建议。本协议的标准化状态和现状请参考当前版本的《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。
版权声明
版权所有 (C) IETF 信托 (2007)。
梗概
边界网关协议(Border Gateway Protocol,BGP) 是为传输控制协议/互联网协议 (Transmission Control Protocol/Internet Protocol,TCP/IP) 网络设计的自治系统间路由协议。BGP 要求单个自治系统 (autonomous system,AS) 中的所有 BGP 发言者必须是全互联的。这代表了一个严重的扩展问题,已在许多提案中得到充分证明。
本文档描述了对 BGP 的扩展,该扩展可用于创建自治系统联盟,该联盟表示为单个自治系统,以向联盟外部的 BGP 对等体表示,从而消除“全互联”要求。此扩展的目的是帮助策略管理并降低维护大型自治系统的管理复杂性。
本文档已废弃 RFC 3065。
1、 介绍
正如最初定义的那样,BGP 要求单个 AS 中的所有 BGP 发言者必须是全互联的。结果是,对于一个 AS 内的 n 个 BGP 发言者,需要 n*(n-1)/2 个唯一的内部 BGP (Internal BGP,IBGP) 会话。当自治系统中有大量 IBGP 发言者时,这种“全互联”要求显然无法扩展,这在当今的许多网络中很常见。
这个规模问题已经有据可查,并且已经提出了一些建议来缓解这个问题,例如 [RFC2796] 和 [RFC1863](由 [RFC4223] 成为历史)。本文档提出了另一种减轻对“全互联”需求的替代方案,被称为“BGP 的自治系统联盟”,或简称为“BGP 联盟”。还观察到 BGP 联盟可以改进路由策略控制。
本文档是 [RFC3065] 的修订版和过时,它本身就是 [RFC1965] 的修订版。它包括编辑更改、术语澄清和基于广泛的 BGP 联盟实施和部署经验的更明确的协议规范。
1.1、 要求规范
本文档中的关键词“必须”、“不得”、“要求”、“应”、“不应”、“应该”、“不应”、“推荐”、“可以”和“可选”是按照 RFC 2119 [RFC2119] 中的描述进行解释。
1.2、 术语
AS联盟
自治系统的集合,作为单个 AS 编号向非本地 BGP 联盟成员的 BGP 发言者代表和通告。
AS联盟标识符
一个外部可见的自治系统编号,用于标识整个 BGP 联盟。
成员自治系统 (Member-AS)
包含在给定 AS 联盟中的自治系统。请注意,“Member Autonomous System”和“Member-AS”在本文档中完全可以互换使用。
成员AS号
仅在 BGP 联盟内可见的自治系统编号标识符,用于表示该联盟内的成员 AS。
2、 讨论
为了通过 BGP AS_PATH 属性中包含的信息控制路由策略,将具有大量 BGP 发言者的自治系统细分为更小的域可能很有用。例如,可以选择将一个地理区域中的所有 BGP 发言者视为一个实体。
除了路由策略控制的潜在改进之外,如果不采用此处或 [RFC4456] 中介绍的技术,[BGP-4] 要求同一自治系统中的 BGP 发言者在所有发言者之间建立完整的 TCP 连接用于交换外部路由信息。在自治系统中,每个边界路由器需要维护的域内连接的数量可能会变得很大。
细分大型自治系统可以显着减少域内 BGP 连接的总数,因为连接要求简化为用于域间连接的模型。
不幸的是,细分自治系统可能会增加基于互联网所有成员的 AS_PATH 信息的路由策略的复杂性。此外,当这个自治系统集合的内部拓扑被修改时,这种划分增加了协调外部对等体互连的维护开销。
因此,将自治系统划分为单独的系统可能会对通过 Internet 的数据包的最佳路由产生不利影响。
然而,通常不需要公开这种分割的自治系统的内部拓扑,这意味着从自治系统联盟本身的范围之外看,可以将共同管理下的自治系统集合视为单个实体或自治系统。
3、 AS_CONFED 段类型扩展
目前,BGP规定AS_PATH属性是一个众所周知的强制属性,由一系列AS路径段组成。每个 AS 路径段由三元组<路径段类型、路径段长度、路径段值>表示。
在 [BGP-4] 中,路径段类型是一个 1 字节的字段,定义了以下两个值:
本文档指定了两种额外的段类型:
4、 操作
BGP 联盟的成员必须在与非联盟成员的对等体的所有事务中使用其 AS 联盟标识符。这个 AS Confederation Identifier 是“外部可见的”AS 号,这个号用在 OPEN 消息中并在 AS_PATH 属性中公布。
BGP 联盟的成员必须在与作为本地 BGP 发言者相同联盟成员的对等体的所有事务中使用其成员 AS 编号。
一个 BGP 发言者接收到一个包含与它自己的 AS 联盟标识符匹配的自治系统的 AS_PATH 属性,应该以相同的方式处理该路径,就好像它已经接收到一个包含它自己的 AS 编号的路径一样。
一个 BGP 发言者接收一个包含 AS_CONFED_SEQUENCE 或 AS_CONFED_SET 的 AS_PATH 属性,该属性包含它自己的 Member-AS 编号,应以相同的方式处理该路径,就好像它接收到一条包含它自己的 AS 编号的路径一样。
4.1、 AS_PATH 修改规则
在实现 BGP 联盟时,[BGP-4] 的第 5.1.2 节被替换为以下文本:
AS_PATH 是一个众所周知的强制属性。该属性标识此 UPDATE 消息中携带的路由信息经过的自治系统。此列表的组件可以是 AS_SETs、AS_SEQUENCEs、AS_CONFED_SETs 或 AS_CONFED_SEQUENCES。
当一个 BGP 发言者传播它从另一个 BGP 发言者的 UPDATE 消息中获知的路由时,它会根据路由将被发送到的 BGP 发言者的位置来修改路由的 AS_PATH 属性:
a) 当给定的 BGP 发言者将路由通告给位于其自己的成员 AS 中的另一个 BGP 发言者时,通告发言者不应修改与该路由关联的 AS_PATH 属性。
b) 当给定的 BGP 发言者向位于作为本地联盟成员的相邻自治系统中的 BGP 发言者通告路由时,通告发言者如下更新 AS_PATH 属性:
1) 如果 AS_PATH 的第一个路径段的类型为 AS_CONFED_SEQUENCE,则本地系统将其自己的成员 AS 编号作为序列的最后一个元素(将其放在协议消息中八位字节位置的最左侧位置)。如果前置操作会导致 AS_PATH 段溢出(即超过 255 个 AS),它应该前置一个 AS_CONFED_SEQUENCE 类型的新段,并将它自己的 AS 编号添加到这个新段。
2) 如果 AS_PATH 的第一个路径段不是 AS_CONFED_SEQUENCE 类型,则本地系统将一个新的 AS_CONFED_SEQUENCE 类型的路径段添加到 AS_PATH,包括它自己在该段中的成员 AS 编号。
3) 如果 AS_PATH 为空,则本地系统创建类型为 AS_CONFED_SEQUENCE 的路径段,将其自己的 Member-AS 编号放入该段,并将该段放入 AS_PATH。
c) 当给定的 BGP 发言者将路由通告给位于邻近自治系统中且不是本地联盟成员的 BGP 发言者时,通告发言者应按如下方式更新 AS_PATH 属性:
1) 如果 AS_PATH 的任何路径段属于 AS_CONFED_SEQUENCE 或 AS_CONFED_SET 类型,则必须从 AS_PATH 属性中删除这些段,留下清理过的 AS_PATH 属性由步骤 2、3 或 4 操作。
2) 如果剩余 AS_PATH 的第一个路径段的类型为 AS_SEQUENCE,则本地系统将其自己的 AS 联盟标识符作为序列的最后一个元素(将其放在协议消息中八位字节位置的最左侧位置)。如果前置操作会导致 AS_PATH 段溢出(即超过 255 个 AS),它应该前置一个 AS_SEQUENCE 类型的新段,并将它自己的 AS 编号前置到这个新段。
3) 如果剩余 AS_PATH 的第一个路径段是 AS_SET 类型,则本地系统在 AS_PATH 前添加一个 AS_SEQUENCE 类型的新路径段,包括它自己的 AS Confederation Identifier 在该段中。
4) 如果剩余的 AS_PATH 为空,则本地系统创建一个 AS_SEQUENCE 类型的路径段,将其自己的 AS Confederation Identifier 放入该段,并将该段放入 AS_PATH。
当 BGP 发言者发起路由时:
a) 发起方在发送给位于邻近自治系统(不是本地联盟成员)的 BGP 发言者的所有 UPDATE 消息的 AS_PATH 属性中的路径段中包含其自己的 AS 联盟标识符,类型为 AS_SEQUENCE。在这种情况下,始发发言者的自治系统的 AS Confederation Identifier 将是路径段的唯一条目,并且该路径段将是 AS_PATH 属性中的唯一段。
b) 发起发言者在发送给位于作为本地联盟成员的相邻成员自治系统中的 BGP 发言者的所有 UPDATE 消息的 AS_PATH 属性中的路径段中包含其自己的成员 AS 编号,类型为 AS_CONFED_SEQUENCE。在这种情况下,始发发言者自治系统的 Member-AS Number 将是路径段的唯一条目,并且该路径段将是 AS_PATH 属性中的唯一段。
c) 发起发言者在所有发送给位于同一成员AS 内的 BGP 发言者的 UPDATE 消息中都包含一个空的 AS_PATH 属性。(空的 AS_PATH 属性是其长度字段包含值零的属性)。
每当修改 AS_PATH 属性需要包括或添加本地系统的 AS Confederation Identifier 或 Member-AS 编号时,本地系统可以在 AS_PATH 属性中包括/添加多个该值的实例。这是通过本地配置控制的。
5、 错误处理
BGP 发言者不得将包含 AS_CONFED_SET 或 AS_CONFED_SEQUENCE 属性的更新传输给不是本地联盟成员的对等体。
BGP 发言者从不在同一个联盟中的邻居接收具有 AS_PATH 属性的更新消息是错误的,该消息包含 AS_CONFED_SEQUENCE 或 AS_CONFED_SET 段。如果 BGP 发言者接收到这样的 UPDATE 消息,它应根据 [BGP-4] 第 6.3 节(“UPDATE 消息错误处理”)的过程将该消息视为具有格式错误的 AS_PATH。
如果 BGP 发言者从不在同一个 Member-AS 中且没有 AS_CONFED_SEQUENCE 作为第一段的联盟对等体接收更新消息,则这是错误的。如果 BGP 发言者接收到这样的 UPDATE 消息,它应根据 [BGP-4] 第 6.3 节(“UPDATE 消息错误处理”)的过程将该消息视为具有格式错误的 AS_PATH。
5.1、 常见的行政问题
联盟的成员自治系统共享整个联盟的公共管理和内部网关协议 (Interior Gateway Protocol,IGP) 信息是合理的。每个 Member-AS 运行一个独立的 IGP 也是合理的。在后一种情况下,可能需要使用策略设置 NEXT_HOP(即,默认情况下它是不变的)。
5.2、 MED 和 LOCAL_PREF 处理
BGP 发言者向本地联盟的相邻成员 AS 中的对等体通告未更改的 NEXT_HOP 和 MULTI_EXIT_DISC (MED) 属性应该是合法的。
仅当两条路由中第一个 AS_SEQUENCE 中的第一个自治系统相同时,才应该比较两条路由的 MED——即,跳过 AS_CONFED_SET 和 AS_CONFED_SEQUENCE 中的所有自治系统。一个实现可以提供配置路径选择的能力,以便如果 AS_PATH 中的第一个自治系统相同,则两条路由的 MED 是可比较的,而不管 AS_PATH 中的 AS_SEQUENCE 或 AS_CONFED_SEQUENCE 是什么。
一个实现可以比较通过多个路径从成员AS 接收到的 MED。一个实现可以比较来自同一联盟的不同成员自治系统的 MED。
此外,取消了禁止将 LOCAL_PREF 属性发送给同一联盟内相邻自治系统中的对等体的限制。
5.3、 AS_PATH 和路径选择
从联盟内部成员接收的信息的路径选择标准必须遵循用于从同一自治系统内部成员接收的信息的相同规则,如 [BGP-4] 中规定的。
此外,应适用以下规则:
1) 如果 AS_PATH 在本地联盟内部(即只有 AS_CONFED_* 段),则认为邻居 AS 是本地 AS。
2)否则,如果路径中不是AS_CONFED_SEQUENCE或AS_CONFED_SET的第一个段是AS_SEQUENCE,则认为邻居AS是最左边的AS_SEQUENCE AS。
3) 当使用 AS_PATH 长度比较路由时,CONFED_SEQUENCE 和 CONFED_SETs 不应该被计算在内。
4) 当比较使用内部(IBGP 学习)和外部(EBGP 学习)规则的路由时,将从同一个联盟(不一定是同一个成员AS)中的对等体学习到的路由视为“内部”。
6、 兼容性考虑
作为联盟成员参与的所有 BGP 发言者必须识别 AS_PATH 属性的 AS_CONFED_SET 和 AS_CONFED_SEQUENCE 段类型扩展。
任何不支持这些扩展的 BGP 发言者都将生成一个 NOTIFICATION 消息,指定一个“UPDATE Message Error”和一个“Malformed AS_PATH”的子代码。
此兼容性问题意味着参与联盟的所有 BGP 发言者必须支持 BGP 联盟。然而,联盟之外的 BGP 发言者不需要支持这些扩展。
7、 部署注意事项
多年来,BGP 联盟已在整个 Internet 中广泛部署,并得到多家供应商的支持。
BGP 联盟配置不当会导致 AS 内的路由信息不必要地重复。这种信息重复会浪费系统资源,造成不必要的路由震荡,延迟收敛。
根据联盟的拓扑结构和冗余要求,应注意手动过滤由通过多个成员自治系统中继的可达性信息引起的重复通告。
此外,联盟(以及路由反射器)通过在联盟中的不同位置排除不同的可达性信息,已被证明 [RFC3345] 在使用 BGP [BGP -4]。在选择 MED 值和打破平局策略时必须小心以避免这些情况。
避免这种情况的一种潜在方法是通过将成员间 AS IGP 指标配置为高于成员 AS 内 IGP 指标和/或使用其他打破平局的策略来避免基于不可比较的 MED 的 BGP 路由选择。
8、 安全考虑
对 BGP 的这种扩展不会改变现有 BGP 协议中固有的底层安全问题,例如 [RFC2385] 和 [BGP-VULN] 中描述的那些。
9、 致谢
BGP 联盟的一般概念取自 IDRP 的路由域联盟 [ISO10747]。本文档中的一些介绍性文本取自 [RFC2796]。
作者要感谢 Jeffrey Haas 对本文档的广泛反馈。我们还要感谢 Bruce Cole、Srihari Ramachandra、Alex Zinin、Naresh Kumar Paliwal、Jeffrey Haas、Cengiz Alaettinoglu、Mike Hollyman 和 Bruno Rijsman 的反馈和建议。
最后,我们要感谢 Ravi Chandra 和 Yakov Rekhter 为本规范的早期版本提供了建设性和有价值的反馈。
10、 参考文献
10.1、 规范性参考
[BGP-4] Rekhter, Y., Ed., Li, T., Ed., and S. Hares, Ed., "A Border Gateway Protocol 4 (BGP-4)", RFC 4271, January 2006. [RFC1965] Traina, P., "Autonomous System Confederations for BGP", RFC 1965, June 1996. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC3065] Traina, P., McPherson, D., and J. Scudder, "Autonomous System Confederations for BGP", RFC 3065, February 2001.
10.2、 参考资料
[ISO10747] Kunzinger, C., Editor, "Inter-Domain Routing Protocol", ISO/IEC 10747, October 1993. [RFC1863] Haskin, D., "A BGP/IDRP Route Server alternative to a full mesh routing", RFC 1863, October 1995. [RFC2385] Heffernan, A., "Protection of BGP Sessions via the TCP MD5 Signature Option", RFC 2385, August 1998. [RFC3345] McPherson, D., Gill, V., Walton, D., and A. Retana, "Border Gateway Protocol (BGP) Persistent Route Oscillation Condition", RFC 3345, August 2002. [RFC4223] Savola, P., "Reclassification of RFC 1863 to Historic", RFC 4223, October 2005. [RFC4272] Murphy, S., "BGP Security Vulnerabilities Analysis", RFC 4272, January 2006. [RFC4456] Bates, T., Chen, E., and R. Chandra, "BGP Route Reflection: An Alternative to full mesh Internal BGP (IBGP)", RFC 4456, April 2006.
附录 A、 聚合路由信息
实际上,在 [BGP-4] 第 9.2.2.2 节中讨论的聚合通常不会在联盟中使用。但是,如果在联盟内执行这种聚合,则应遵循 [BGP-4] 的规则,在 AS_SET 和 AS_CONFED_SET 以及类似的 AS_SEQUENCE 和 AS_CONFED_SEQUENCE 之间进行必要的替换。联盟类型段(AS_CONFED_SET 和 AS_CONFED_SEQUENCE)必须与非联盟段(AS_SET 和 AS_SEQUENCE)分开。一个实现还可以选择提供一种聚合形式,其中非联盟段被聚合,如 [BGP-4],第 9.2.2.2 节中所讨论的,联盟类型的段不被聚合。
对联盟类型段的聚合的支持不是强制性的。
附录 B、 对 RFC 3065 的更改
更新 RFC 3065 的主要触发因素是与 AS 路径段处理相关的问题,特别是在与联盟外部的 BGP 对等体交互时要做什么,并确保 AS_CONFED_[SET|SEQUENCE] 段类型不会传播到外部的对等体的一个联盟。
因此,添加了上面的“错误处理”部分,不仅适用于 BGP 联盟发言者,还适用于所有 BGP 发言者。
其他更改大多是微不足道的,并且围绕术语的一些澄清和一致性,并表示 AS_CONFED_[SET|SEQUENCE] 段类型处理应该与基本 BGP 规范 [BGP-4] 中的一样。
完整的版权声明
版权所有 (C) IETF 信托 (2007)。
本文档受 BCP 78 中包含的权利、许可和限制的约束,除其中规定外,作者保留其所有权利。
本文档和此处包含的信息按“原样”提供,贡献者、他/她代表或由(如果有)赞助的组织、互联网协会、IETF 信托和互联网工程任务组否认所有明示或暗示的保证,包括但不限于使用此处信息不会侵犯任何权利或任何暗示的适销性或特定用途适用性的保证。
知识产权
IETF 对可能声称与本文档中描述的技术的实施或使用有关的任何知识产权或其他权利的有效性或范围,或在此类权利下的任何许可可能或可能不会的程度不持任何立场能得到的;它也不表示它已做出任何独立努力来确定任何此类权利。有关 RFC 文档中权利的程序信息,请参见 BCP 78 和 BCP 79。
向 IETF 秘书处披露的 IPR 披露副本以及任何保证可用的许可,或试图获得本规范的实施者或用户使用此类专有权利的一般许可或许可的结果,可以获得来自位于 http://www.ietf.org/ipr 的 IETF 在线 IPR 存储库。
IETF 邀请任何相关方提请其注意任何版权、专利或专利申请,或可能涵盖实施该标准可能需要的技术的其他专有权利。请将信息发送至 IETF,地址为 ietf-ipr@ietf.org。
致谢
RFC Editor 功能的资金目前由 Internet Society 提供。