跳到主要内容

4. 操作 (Operation)

BGP 联盟的成员在与不属于其联盟的对等体进行所有交互时, 必须使用其 AS Confederation Identifier. 该 AS Confederation Identifier 是"外部可见"的 AS number, 并在 OPEN 消息中使用, 也在 AS_PATH 属性中通告.

BGP 联盟的成员在与本地 BGP speaker 同属一个联盟的对等体进行所有交互时, 必须使用其 Member-AS Number.

如果 BGP speaker 收到的 AS_PATH 属性包含与自身 AS Confederation Identifier 匹配的自治系统, 则应当像收到包含自身 AS number 的路径一样处理该路径.

如果 BGP speaker 收到的 AS_PATH 属性包含 AS_CONFED_SEQUENCE 或 AS_CONFED_SET, 且其中包含自身 Member-AS Number, 则应当像收到包含自身 AS number 的路径一样处理该路径.

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 speaker 传播它从另一个 BGP speaker 的 UPDATE 消息中学习到的路由时, 它会根据该路由将被发送到的 BGP speaker 所在位置来修改该路由的 AS_PATH 属性:

a) 当给定 BGP speaker 将路由通告给位于自身 Member-AS 内的另一个 BGP speaker 时, 通告方不得修改与该路由关联的 AS_PATH 属性.

b) 当给定 BGP speaker 将路由通告给位于相邻自治系统中的 BGP speaker, 且该相邻自治系统是本地联盟成员时, 通告方按如下方式更新 AS_PATH 属性:

  1. 如果 AS_PATH 的第一个路径段类型为 AS_CONFED_SEQUENCE, 本地系统将自己的 Member-AS number 作为该序列的最后一个元素前置进去 (相对于协议消息中的八位字节位置, 将其放在最左侧). 如果前置操作会导致 AS_PATH 段溢出 (即超过 255 个 AS), 则应当前置一个新的 AS_CONFED_SEQUENCE 类型段, 并把自己的 AS number 前置到这个新段中.

  2. 如果 AS_PATH 的第一个路径段类型不是 AS_CONFED_SEQUENCE, 本地系统向 AS_PATH 前置一个新的 AS_CONFED_SEQUENCE 类型路径段, 并在该段中包含自己的 Member-AS Number.

  3. 如果 AS_PATH 为空, 本地系统创建一个 AS_CONFED_SEQUENCE 类型路径段, 将自己的 Member-AS Number 放入该段, 并将该段放入 AS_PATH.

c) 当给定 BGP speaker 将路由通告给位于相邻自治系统中的 BGP speaker, 且该相邻自治系统不是本地联盟成员时, 通告方应按如下方式更新 AS_PATH 属性:

  1. 如果 AS_PATH 中存在类型为 AS_CONFED_SEQUENCE 或 AS_CONFED_SET 的任何路径段, 则必须从 AS_PATH 属性中移除这些段, 留下清理后的 AS_PATH 属性供步骤 2, 3 或 4 处理.

  2. 如果剩余 AS_PATH 的第一个路径段类型为 AS_SEQUENCE, 本地系统将自己的 AS Confederation Identifier 作为该序列的最后一个元素前置进去 (相对于协议消息中的八位字节位置, 将其放在最左侧). 如果前置操作会导致 AS_PATH 段溢出 (即超过 255 个 AS), 则应当前置一个新的 AS_SEQUENCE 类型段, 并把自己的 AS number 前置到这个新段中.

  3. 如果剩余 AS_PATH 的第一个路径段类型为 AS_SET, 本地系统向 AS_PATH 前置一个新的 AS_SEQUENCE 类型路径段, 并在该段中包含自己的 AS Confederation Identifier.

  4. 如果剩余 AS_PATH 为空, 本地系统创建一个 AS_SEQUENCE 类型路径段, 将自己的 AS Confederation Identifier 放入该段, 并将该段放入 AS_PATH.

当 BGP speaker 发起一条路由时:

a) 发起方在发送给位于相邻自治系统且不属于本地联盟的 BGP speaker 的所有 UPDATE 消息中, 在 AS_PATH 属性的 AS_SEQUENCE 类型路径段中包含自己的 AS Confederation Identifier. 在这种情况下, 发起方自治系统的 AS Confederation Identifier 将是该路径段中的唯一条目, 且该路径段将是 AS_PATH 属性中的唯一段.

b) 发起方在发送给位于相邻 Member Autonomous System 且属于本地联盟的 BGP speaker 的所有 UPDATE 消息中, 在 AS_PATH 属性的 AS_CONFED_SEQUENCE 类型路径段中包含自己的 Member-AS Number. 在这种情况下, 发起方自治系统的 Member-AS Number 将是该路径段中的唯一条目, 且该路径段将是 AS_PATH 属性中的唯一段.

c) 发起方在发送给位于同一 Member-AS 内的 BGP speaker 的所有 UPDATE 消息中包含空 AS_PATH 属性. 空 AS_PATH 属性是指其 length 字段值为零的属性.

每当 AS_PATH 属性的修改要求包含或前置本地系统的 AS Confederation Identifier 或 Member-AS Number 时, 本地系统可以在 AS_PATH 属性中包含/前置该值的多个实例. 这由本地配置控制.