跳到主要内容

4.3. UPDATE Message 格式

4.3. UPDATE Message 格式 (UPDATE Message Format)

UPDATE message 用于在 BGP peer 之间传输 routing information. UPDATE message 中的信息可用于构造一个 graph, 描述各个 Autonomous System 之间的关系. 通过应用后文将讨论的规则, 可以检测 routing information loop 和其他一些异常, 并将其从 inter-AS routing 中移除.

UPDATE message 用于向 peer 通告共享公共 path attribute 的 feasible route, 或者从服务中撤销多个 unfeasible route (见 3.1). UPDATE message MAY 同时通告一条 feasible route 并从服务中撤销多个 unfeasible route. UPDATE message 始终包含固定大小的 BGP header, 也包含如下所示的其他字段 (注意, 图中某些字段可能并不出现在每一条 UPDATE message 中):

      +-----------------------------------------------------+
| Withdrawn Routes Length (2 octets) |
+-----------------------------------------------------+
| Withdrawn Routes (variable) |
+-----------------------------------------------------+
| Total Path Attribute Length (2 octets) |
+-----------------------------------------------------+
| Path Attributes (variable) |
+-----------------------------------------------------+
| Network Layer Reachability Information (variable) |
+-----------------------------------------------------+

Withdrawn Routes Length:

这个 2-octet unsigned integer 指示 Withdrawn Routes field 的总长度, 单位为 octet. 其值允许按下文所述确定 Network Layer Reachability Information field 的长度.

值 0 表示没有 route 正在从服务中撤销, 并且该 UPDATE message 中不存在 WITHDRAWN ROUTES field.

Withdrawn Routes:

这是一个 variable-length field, 包含正在从服务中撤销的 route 的 IP address prefix 列表. 每个 IP address prefix 都编码为 <length, prefix> 形式的 2-tuple, 其字段如下所述:

                  +---------------------------+
| Length (1 octet) |
+---------------------------+
| Prefix (variable) |
+---------------------------+

这些字段的用途和含义如下:

a) Length:

Length field 指示 IP address prefix 的长度, 单位为 bit. 长度为零表示匹配所有 IP address 的 prefix (该 prefix 本身为零个 octet).

b) Prefix:

Prefix field 包含一个 IP address prefix, 后跟使该 field 末尾落在 octet boundary 上所需的最少 trailing bit. 注意, trailing bit 的值无关紧要.

Total Path Attribute Length:

这个 2-octet unsigned integer 指示 Path Attributes field 的总长度, 单位为 octet. 其值允许按下文所述确定 Network Layer Reachability field 的长度.

值 0 表示该 UPDATE message 中既不存在 Network Layer Reachability Information field, 也不存在 Path Attribute field.

Path Attributes:

除仅携带 withdrawn route 的 UPDATE message 外, 每条 UPDATE message 中都存在一个 variable-length path attribute sequence. 每个 path attribute 都是 variable-length 的 <attribute type, attribute length, attribute value> triple.

Attribute Type 是一个 2-octet field, 由 Attribute Flags octet 后跟 Attribute Type Code octet 组成.

               0                   1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attr. Flags |Attr. Type Code|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Attribute Flags octet 的 high-order bit (bit 0) 是 Optional bit. 它定义该 attribute 是 optional (设置为 1 时) 还是 well-known (设置为 0 时).

Attribute Flags octet 的第二个 high-order bit (bit 1) 是 Transitive bit. 它定义 optional attribute 是 transitive (设置为 1 时) 还是 non-transitive (设置为 0 时).

对于 well-known attribute, Transitive bit MUST 设置为 1. (关于 transitive attribute 的讨论见 Section 5.)

Attribute Flags octet 的第三个 high-order bit (bit 2) 是 Partial bit. 它定义 optional transitive attribute 中包含的信息是 partial (设置为 1 时) 还是 complete (设置为 0 时). 对于 well-known attribute 和 optional non-transitive attribute, Partial bit MUST 设置为 0.

Attribute Flags octet 的第四个 high-order bit (bit 3) 是 Extended Length bit. 它定义 Attribute Length 是一个 octet (设置为 0 时) 还是两个 octet (设置为 1 时).

Attribute Flags octet 的 lower-order four bits 未使用. 发送时它们 MUST 为零, 接收时 MUST 被忽略.

Attribute Type Code octet 包含 Attribute Type Code. 当前定义的 Attribute Type Code 在 Section 5 中讨论.

如果 Attribute Flags octet 的 Extended Length bit 设置为 0, 则 Path Attribute 的第三个 octet 包含 attribute data 的长度, 单位为 octet.

如果 Attribute Flags octet 的 Extended Length bit 设置为 1, 则 path attribute 的第三和第四个 octet 包含 attribute data 的长度, 单位为 octet.

Path Attribute 的其余 octet 表示 attribute value, 并根据 Attribute Flags 和 Attribute Type Code 进行解释. 支持的 Attribute Type Code 及其 attribute value 和用途如下:

a) ORIGIN (Type Code 1):

ORIGIN 是一个 well-known mandatory attribute, 定义 path information 的起源. data octet 可取以下值:

  • Value 0 (IGP) - Network Layer Reachability Information 在 originating AS 内部
  • Value 1 (EGP) - Network Layer Reachability Information 通过 EGP protocol [RFC904] 学到
  • Value 2 (INCOMPLETE) - Network Layer Reachability Information 通过其他方式学到

该 attribute 的用法在 5.1.1 中定义.

b) AS_PATH (Type Code 2):

AS_PATH 是一个 well-known mandatory attribute, 由一系列 AS path segment 组成. 每个 AS path segment 都由 <path segment type, path segment length, path segment value> triple 表示.

path segment type 是一个 1-octet length field, 已定义以下值:

  • Value 1 (AS_SET): UPDATE message 中某条 route 已经过的 AS 的无序集合
  • Value 2 (AS_SEQUENCE): UPDATE message 中某条 route 已经过的 AS 的有序集合

path segment length 是一个 1-octet length field, 包含 path segment value field 中 AS 的数量 (不是 octet 的数量).

path segment value field 包含一个或多个 AS number, 每个都编码为 2-octet length field.

该 attribute 的用法在 5.1.2 中定义.

c) NEXT_HOP (Type Code 3):

这是一个 well-known mandatory attribute, 定义到 UPDATE message 的 Network Layer Reachability Information field 中所列 destination 时 SHOULD 用作 next hop 的 router 的 (unicast) IP address.

该 attribute 的用法在 5.1.3 中定义.

d) MULTI_EXIT_DISC (Type Code 4):

这是一个 optional non-transitive attribute, 是一个 4-octet unsigned integer. 该 attribute 的值 MAY 由 BGP speaker 的 Decision Process 用来区分到相邻 Autonomous System 的多个 entry point.

该 attribute 的用法在 5.1.4 中定义.

e) LOCAL_PREF (Type Code 5):

LOCAL_PREF 是一个 well-known attribute, 是一个 4-octet unsigned integer. BGP speaker 使用它向其他 internal peer 通知 advertising speaker 对所通告 route 的 preference degree.

该 attribute 的用法在 5.1.5 中定义.

f) ATOMIC_AGGREGATE (Type Code 6):

ATOMIC_AGGREGATE 是一个 length 为 0 的 well-known discretionary attribute.

该 attribute 的用法在 5.1.6 中定义.

g) AGGREGATOR (Type Code 7):

AGGREGATOR 是一个 length 为 6 的 optional transitive attribute. 该 attribute 包含形成 aggregated route 的最后一个 AS number (编码为 2 octet), 后跟形成该 aggregated route 的 BGP speaker 的 IP address (编码为 4 octet). 这 SHOULD 与 speaker 的 BGP Identifier 所使用的地址相同.

该 attribute 的用法在 5.1.7 中定义.

Network Layer Reachability Information:

这个 variable-length field 包含 IP address prefix 列表. Network Layer Reachability Information 的长度没有显式编码, 单位为 octet, 但可以按如下方式计算:

UPDATE message Length - 23 - Total Path Attributes Length - Withdrawn Routes Length

其中 UPDATE message Length 是固定大小 BGP header 中编码的值, Total Path Attribute Length 和 Withdrawn Routes Length 是 UPDATE message 的 variable part 中编码的值, 23 是固定大小 BGP header, Total Path Attribute Length field 和 Withdrawn Routes Length field 的组合长度.

reachability information 编码为一个或多个 <length, prefix> 形式的 2-tuple, 其字段如下所述:

                  +---------------------------+
| Length (1 octet) |
+---------------------------+
| Prefix (variable) |
+---------------------------+

这些字段的用途和含义如下:

a) Length:

Length field 指示 IP address prefix 的长度, 单位为 bit. 长度为零表示匹配所有 IP address 的 prefix (该 prefix 本身为零个 octet).

b) Prefix:

Prefix field 包含一个 IP address prefix, 后跟足够的 trailing bit, 使该 field 的末尾落在 octet boundary 上. 注意, trailing bit 的值无关紧要.

UPDATE message 的最小长度为 23 octet -- 19 octet 用于 fixed header + 2 octet 用于 Withdrawn Routes Length + 2 octet 用于 Total Path Attribute Length (Withdrawn Routes Length 的值为 0, Total Path Attribute Length 的值为 0).

UPDATE message 最多可以通告一组 path attribute, 但可以通告多个 destination, 前提是这些 destination 共享这些 attribute. 给定 UPDATE message 中包含的所有 path attribute 都适用于该 UPDATE message 的 NLRI field 中携带的所有 destination.

UPDATE message 可以列出多条要从服务中撤销的 route. 每条这类 route 由其 destination (表示为 IP prefix) 标识, 该 destination 在此前通告它的 BGP speaker - BGP speaker connection 上下文中唯一标识这条 route.

UPDATE message 可能只通告要从服务中撤销的 route; 在这种情况下, 该 message 不包含 path attribute 或 Network Layer Reachability Information. 相反, 它也可以只通告一条 feasible route; 在这种情况下, WITHDRAWN ROUTES field 不需要存在.

UPDATE message SHOULD NOT 在 WITHDRAWN ROUTES 和 Network Layer Reachability Information field 中包含同一个 address prefix. 然而, BGP speaker MUST 能够处理这种形式的 UPDATE message. BGP speaker SHOULD 将这种形式的 UPDATE message 视为 WITHDRAWN ROUTES 不包含该 address prefix.