5. Path Attributes (路径属性)
5. Path Attributes (路径属性)
本节讨论 UPDATE 消息的路径属性。
路径属性分为四个独立的类别:
- Well-known mandatory (众所周知的强制属性)。
- Well-known discretionary (众所周知的任意属性)。
- Optional transitive (可选可传递属性)。
- Optional non-transitive (可选非可传递属性)。
BGP 实现必须识别所有众所周知的属性。其中一些属性是强制的, 必须包含在每个包含 NLRI 的 UPDATE 消息中。其他属性是任意的, 可以或可以不在特定 UPDATE 消息中发送。
一旦 BGP 对等体更新了任何众所周知的属性, 它必须在其传输的任何更新中将这些属性传递给其对等体。
除了众所周知的属性之外, 每个路径可以包含一个或多个可选属性。不要求或期望所有 BGP 实现都支持所有可选属性。无法识别的可选属性的处理由属性标志字节中的 Transitive 位的设置确定。应该接受具有无法识别的可传递可选属性的路径。如果接受具有无法识别的可传递可选属性的路径并传递给其他 BGP 对等体, 则该路径的无法识别的可传递可选属性必须与路径一起传递给其他 BGP 对等体, 并将 Attribute Flags 字节中的 Partial 位设置为 1。如果接受具有可识别的可传递可选属性的路径并传递给其他 BGP 对等体, 并且 Attribute Flags 字节中的 Partial 位由某个先前的 AS 设置为 1, 则当前 AS 不得将其设置回 0。无法识别的非可传递可选属性必须静默忽略且不传递给其他 BGP 对等体。
新的可传递可选属性可以由始发者或路径中的任何其他 BGP 发言者附加到路径。如果它们不是由始发者附加的, 则 Attribute Flags 字节中的 Partial 位设置为 1。附加新的非可传递可选属性的规则将取决于特定属性的性质。每个新的非可传递可选属性的文档都应包括此类规则 (MULTI_EXIT_DISC 属性的描述给出了一个示例)。所有可选属性 (可传递的和非可传递的) 都可以由路径中的 BGP 发言者更新 (如果适当)。
UPDATE 消息的发送者应该按属性类型的升序在 UPDATE 消息中对路径属性进行排序。UPDATE 消息的接收者必须准备好处理 UPDATE 消息中无序的路径属性。
同一属性 (具有相同类型的属性) 在特定 UPDATE 消息的 Path Attributes 字段中不能出现多次。
强制类别指的是如果 UPDATE 消息中包含 NLRI, 则在 IBGP 和 EBGP 交换中都必须存在的属性。为了协议扩展机制的目的而分类为可选的属性在某些上下文中可以是纯任意的、任意的、必需的或不允许的。
attribute EBGP IBGP
ORIGIN mandatory mandatory
AS_PATH mandatory mandatory
NEXT_HOP mandatory mandatory
MULTI_EXIT_DISC discretionary discretionary
LOCAL_PREF see Section 5.1.5 required
ATOMIC_AGGREGATE see Section 5.1.6 and 9.1.4
AGGREGATOR discretionary discretionary
5.1. Path Attribute Usage (路径属性使用)
以下条款描述了每个 BGP 路径属性的使用。
5.1.1. ORIGIN
ORIGIN 是一个众所周知的强制属性。ORIGIN 属性由始发相关路由信息的发言者生成。其值不应该由任何其他发言者更改。
5.1.2. AS_PATH
AS_PATH 是一个众所周知的强制属性。此属性标识此 UPDATE 消息中携带的路由信息经过的自治系统。此列表的组件可以是 AS_SET 或 AS_SEQUENCE。
当 BGP 发言者传播从另一个 BGP 发言者的 UPDATE 消息中学到的路由时, 它根据将要发送路由的 BGP 发言者的位置修改路由的 AS_PATH 属性:
a) 当给定的 BGP 发言者向内部对等体通告路由时, 通告发言者不得修改与路由关联的 AS_PATH 属性。
b) 当给定的 BGP 发言者向外部对等体通告路由时, 通告发言者按如下方式更新 AS_PATH 属性:
-
如果 AS_PATH 的第一个路径段是 AS_SEQUENCE 类型, 则本地系统将其自己的 AS 编号作为序列的最后一个元素添加 (相对于协议消息中字节的位置将其放在最左边的位置)。如果添加操作将导致 AS_PATH 段溢出 (即超过 255 个 AS), 则它应该添加一个类型为 AS_SEQUENCE 的新段, 并将其自己的 AS 编号添加到此新段。
-
如果 AS_PATH 的第一个路径段是 AS_SET 类型, 则本地系统向 AS_PATH 添加一个类型为 AS_SEQUENCE 的新路径段, 在该段中包含其自己的 AS 编号。
-
如果 AS_PATH 为空, 则本地系统创建一个类型为 AS_SEQUENCE 的路径段, 将其自己的 AS 放入该段, 并将该段放入 AS_PATH。
当 BGP 发言者始发路由时:
a) 始发发言者在发送给外部对等体的所有 UPDATE 消息的 AS_PATH 属性中包含其自己的 AS 编号 (类型为 AS_SEQUENCE 的路径段)。在这种情况下, 始发发言者的自治系统的 AS 编号将是路径段中的唯一条目, 并且此路径段将是 AS_PATH 属性中的唯一段。
b) 始发发言者在发送给内部对等体的所有 UPDATE 消息中包含空 AS_PATH 属性。(空 AS_PATH 属性是其长度字段包含值零的属性)。
每当 AS_PATH 属性的修改需要包含或添加本地系统的 AS 编号时, 本地系统可以在 AS_PATH 属性中包含/添加其自己的 AS 编号的多个实例。这通过本地配置进行控制。
5.1.3. NEXT_HOP
NEXT_HOP 是一个众所周知的强制属性, 定义应该用作 UPDATE 消息中列出的目标的下一跳的路由器的 IP 地址。NEXT_HOP 属性计算如下:
-
当向内部对等体发送消息时, 如果路由不是本地始发的, BGP 发言者不应该修改 NEXT_HOP 属性, 除非它已被明确配置为将其自己的 IP 地址作为 NEXT_HOP 通告。当向内部对等体通告本地始发的路由时, BGP 发言者应该使用发言者可通过其到达通告网络的路由器的接口地址作为 NEXT_HOP。如果路由直接连接到发言者, 或者发言者可通过其到达通告网络的路由器的接口地址是内部对等体的地址, 则 BGP 发言者应该使用其自己的 IP 地址作为 NEXT_HOP 属性 (用于到达对等体的接口的地址)。
-
当向外部对等体 X 发送消息, 并且对等体距离发言者一个 IP 跳时:
-
如果正在通告的路由是从内部对等体学到的或是本地始发的, BGP 发言者可以使用发言者可通过其到达通告网络的内部对等路由器 (或内部路由器) 的接口地址作为 NEXT_HOP 属性, 前提是对等体 X 与此地址共享公共子网。这是"第三方" NEXT_HOP 属性的一种形式。
-
否则, 如果正在通告的路由是从外部对等体学到的, 发言者可以使用发言者本身用于本地路由计算的任何相邻路由器的 IP 地址 (从接收的 NEXT_HOP 属性中已知) 作为 NEXT_HOP 属性, 前提是对等体 X 与此地址共享公共子网。这是"第三方" NEXT_HOP 属性的第二种形式。
-
否则, 如果正在通告路由的外部对等体与通告 BGP 发言者的一个接口共享公共子网, 发言者可以在 NEXT_HOP 属性中使用与此类接口关联的 IP 地址。这被称为"第一方" NEXT_HOP 属性。
-
默认情况下 (如果上述条件都不适用), BGP 发言者应该在 NEXT_HOP 属性中使用发言者用于建立与对等体 X 的 BGP 连接的接口的 IP 地址。
-
-
当向外部对等体 X 发送消息, 并且对等体距离发言者多个 IP 跳 (又称"multihop EBGP") 时:
-
发言者可以配置为传播 NEXT_HOP 属性。在这种情况下, 当通告发言者从其对等体之一学到的路由时, 通告路由的 NEXT_HOP 属性与学到路由的 NEXT_HOP 属性完全相同 (发言者不修改 NEXT_HOP 属性)。
-
默认情况下, BGP 发言者应该在 NEXT_HOP 属性中使用发言者用于建立与对等体 X 的 BGP 连接的接口的 IP 地址。
-
通常, 选择 NEXT_HOP 属性使得采用最短的可用路径。BGP 发言者必须能够支持禁用第三方 NEXT_HOP 属性的通告, 以处理不完全桥接的媒体。
BGP 发言者始发的路由不得使用该对等体的地址作为 NEXT_HOP 向对等体通告。BGP 发言者不得安装以其自身为下一跳的路由。
BGP 发言者使用 NEXT_HOP 属性来确定应该用于将传输数据包转发到相关目标的实际出站接口和立即下一跳地址。
立即下一跳地址通过使用路由表的内容对 NEXT_HOP 属性中的 IP 地址执行递归路由查找操作来确定, 如果存在多个相同成本的条目则选择一个条目。解析 NEXT_HOP 属性中 IP 地址的路由表条目将始终指定出站接口。如果条目指定了附加的子网, 但未指定下一跳地址, 则应该将 NEXT_HOP 属性中的地址用作立即下一跳地址。如果条目还指定了下一跳地址, 则应该将此地址用作数据包转发的立即下一跳地址。
5.1.4. MULTI_EXIT_DISC
MULTI_EXIT_DISC 是一个可选的非可传递属性, 旨在用于外部 (自治系统间) 链路, 以在到同一相邻 AS 的多个出口或入口点之间进行区分。MULTI_EXIT_DISC 属性的值是一个 4 字节无符号数, 称为度量。在所有其他因素相同的情况下, 应该优选具有较低度量的出口点。如果通过 EBGP 接收, MULTI_EXIT_DISC 属性可以通过 IBGP 传播到同一 AS 内的其他 BGP 发言者 (另见 9.1.2.2)。从相邻 AS 接收的 MULTI_EXIT_DISC 属性不得传播到其他相邻 AS。
BGP 发言者必须实现一种机制 (基于本地配置), 允许从路由中删除 MULTI_EXIT_DISC 属性。如果 BGP 发言者配置为从路由中删除 MULTI_EXIT_DISC 属性, 则此删除必须在确定路由的偏好程度和执行路由选择 (决策过程阶段 1 和 2) 之前完成。
实现也可以 (基于本地配置) 更改通过 EBGP 接收的 MULTI_EXIT_DISC 属性的值。如果 BGP 发言者配置为更改通过 EBGP 接收的 MULTI_EXIT_DISC 属性的值, 则更改值必须在确定路由的偏好程度和执行路由选择 (决策过程阶段 1 和 2) 之前完成。有关必要的限制, 请参见第 9.1.2.2 节。
5.1.5. LOCAL_PREF
LOCAL_PREF 是一个众所周知的属性, 必须包含在给定 BGP 发言者发送给其他内部对等体的所有 UPDATE 消息中。BGP 发言者必须根据本地配置的策略计算每个外部路由的偏好程度, 并在向其内部对等体通告路由时包含偏好程度。必须优选较高的偏好程度。BGP 发言者在其决策过程中使用通过 LOCAL_PREF 学到的偏好程度 (见第 9.1.1 节)。
BGP 发言者不得在其发送给外部对等体的 UPDATE 消息中包含此属性, 除了 BGP 联邦 [RFC3065] 的情况。如果它包含在从外部对等体接收的 UPDATE 消息中, 则接收发言者必须忽略此属性, 除了 BGP 联邦 [RFC3065] 的情况。
5.1.6. ATOMIC_AGGREGATE
ATOMIC_AGGREGATE 是一个众所周知的任意属性。
当 BGP 发言者为了向特定对等体通告而聚合多个路由时, 聚合路由的 AS_PATH 通常包括由形成聚合的 AS 集合形成的 AS_SET。在许多情况下, 网络管理员可以确定是否可以在没有 AS_SET 的情况下安全地通告聚合, 并且不会形成路由环路。
如果聚合排除了因删除 AS_SET 而聚合的路由的 AS_PATH 中存在的至少一些 AS 编号, 则聚合路由在向对等体通告时应该包含 ATOMIC_AGGREGATE 属性。
接收带有 ATOMIC_AGGREGATE 属性的路由的 BGP 发言者在将路由传播给其他发言者时不应该删除该属性。
接收带有 ATOMIC_AGGREGATE 属性的路由的 BGP 发言者在向其他 BGP 发言者通告此路由时, 不得使该路由的任何 NLRI 更具体 (如 9.1.4 中定义)。
接收带有 ATOMIC_AGGREGATE 属性的路由的 BGP 发言者需要意识到这样一个事实, 即到目标的实际路径 (如路由的 NLRI 中指定), 虽然具有无环路属性, 但可能不是路由的 AS_PATH 属性中指定的路径。
5.1.7. AGGREGATOR
AGGREGATOR 是一个可选的可传递属性, 可以包含在通过聚合形成的更新中 (见第 9.2.2.2 节)。执行路由聚合的 BGP 发言者可以添加 AGGREGATOR 属性, 该属性应该包含其自己的 AS 编号和 IP 地址。IP 地址应该与发言者的 BGP 标识符相同。