4. 操作
BGP 联盟的成员在与不属于其联盟的对等体进行所有交互时, 必须使用其 AS 联盟标识符 (AS Confederation Identifier). 该 AS 联盟标识符是"外部可见"的 AS 编号, 并在 OPEN 消息中使用, 也在 AS_PATH 属性中通告.
BGP 联盟的成员在与本地 BGP 发言者同属一个联盟的对等体进行所有交互时, 必须使用其成员 AS 编号 (Member-AS Number).
如果 BGP 发言者收到的 AS_PATH 属性包含与自身 AS 联盟标识符匹配的自治系统, 则应当像收到包含自身 AS 编号的路径一样处理该路径.
如果 BGP 发言者收到的 AS_PATH 属性包含 AS_CONFED_SEQUENCE 或 AS_CONFED_SET, 且其中包含自身成员 AS 编号, 则应当像收到包含自身 AS 编号的路径一样处理该路径.
4.1. AS_PATH 修改规则
实现 BGP 联盟时, [BGP-4] 第 5.1.2 节由以下文本替代:
AS_PATH 是一个公认必遵 (well-known mandatory) 属性. 该属性标识此 UPDATE 消息中携带的路由信息已经经过的自治系统. 此列表的组成部分可以是 AS_SET, AS_SEQUENCE, AS_CONFED_SET 或 AS_CONFED_SEQUENCE.
当 BGP 发言者传播它从另一个 BGP 发言者的 UPDATE 消息中学习到的路由时, 它会根据该路由将被发送到的 BGP 发言者所在位置来修改该路由的 AS_PATH 属性:
a) 当给定 BGP 发言者将路由通告给位于自身成员 AS 内的另一个 BGP 发言者时, 通告方不得修改与该路由关联的 AS_PATH 属性.
b) 当给定 BGP 发言者将路由通告给位于相邻自治系统中的 BGP 发言者, 且该相邻自治系统是本地联盟成员时, 通告方按如下方式更新 AS_PATH 属性:
-
如果 AS_PATH 的第一个路径段类型为 AS_CONFED_SEQUENCE, 本地系统将自己的成员 AS 编号作为该序列的最后一个元素前置进去 (相对于协议消息中的八位字节位置, 将其放在最左侧). 如果前置操作会导致 AS_PATH 段溢出 (即超过 255 个 AS), 则应当前置一个新的 AS_CONFED_SEQUENCE 类型段, 并把自己的 AS 编号前置到这个新段中.
-
如果 AS_PATH 的第一个路径段类型不是 AS_CONFED_SEQUENCE, 本地系统向 AS_PATH 前置一个新的 AS_CONFED_SEQUENCE 类型路径段, 并在该段中包含自己的成员 AS 编号.
-
如果 AS_PATH 为空, 本地系统创建一个 AS_CONFED_SEQUENCE 类型路径段, 将自己的成员 AS 编号放入该段, 并将该段放入 AS_PATH.
c) 当给定 BGP 发言者将路由通告给位于相邻自治系统中的 BGP 发言者, 且该相邻自治系统不是本地联盟成员时, 通告方应按如下方式更新 AS_PATH 属性:
-
如果 AS_PATH 中存在类型为 AS_CONFED_SEQUENCE 或 AS_CONFED_SET 的任何路径段, 则必须从 AS_PATH 属性中移除这些段, 留下清理后的 AS_PATH 属性供步骤 2, 3 或 4 处理.
-
如果剩余 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) 发起方在发送给位于相邻自治系统且不属于本地联盟的 BGP 发言者的所有 UPDATE 消息中, 在 AS_PATH 属性的 AS_SEQUENCE 类型路径段中包含自己的 AS 联盟标识符. 在这种情况下, 发起方自治系统的 AS 联盟标识符将是该路径段中的唯一条目, 且该路径段将是 AS_PATH 属性中的唯一段.
b) 发起方在发送给位于相邻成员自治系统且属于本地联盟的 BGP 发言者的所有 UPDATE 消息中, 在 AS_PATH 属性的 AS_CONFED_SEQUENCE 类型路径段中包含自己的成员 AS 编号. 在这种情况下, 发起方自治系统的成员 AS 编号将是该路径段中的唯一条目, 且该路径段将是 AS_PATH 属性中的唯一段.
c) 发起方在发送给位于同一成员 AS 内的 BGP 发言者的所有 UPDATE 消息中包含空 AS_PATH 属性. 空 AS_PATH 属性是指其 length 字段值为零的属性.
每当 AS_PATH 属性的修改要求包含或前置本地系统的 AS 联盟标识符或成员 AS 编号时, 本地系统可以在 AS_PATH 属性中包含/前置该值的多个实例. 这由本地配置控制.