跳到主要内容

4.3. UPDATE Message 格式

4.3. UPDATE Message 格式 (UPDATE Message Format)​

UPDATE message 用于在 peer 之间传输 routing information. UPDATE message 可以同时通告一条 feasible route, 撤销多条不可再用的 route, 或者同时进行这两种操作. 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 字节无符号整数 (2-octet unsigned integer) 指示已撤销路由 (Withdrawn Routes) 字段的总长度, 单位为字节. 其值允许按下文所述确定网络层可达性信息 (Network Layer Reachability Information) 字段的长度.

值 0 表示没有路由正在从服务中撤销, 并且该 UPDATE 消息中不存在已撤销路由 (WITHDRAWN ROUTES) 字段.

Withdrawn Routes:

这是一个变长字段 (variable-length field), 包含正在从服务中撤销的路由的 IP 地址前缀 (IP address prefix) 列表. 每个 IP 地址前缀都编码为 <length, prefix> 形式的 2 元组 (2-tuple), 其字段如下所述:

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

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

a) Length:

长度 (Length) 字段指示 IP 地址前缀的长度, 单位为比特. 长度为零表示匹配所有 IP 地址的前缀 (该前缀本身为零个字节).

b) Prefix:

前缀 (Prefix) 字段包含一个 IP 地址前缀, 后跟使该字段末尾落在字节边界 (octet boundary) 上所需的最少尾随比特 (trailing bit). 注意, 尾随比特的值无关紧要.

Total Path Attribute Length:

这个 2 字节无符号整数 (2-octet unsigned integer) 指示路径属性 (Path Attributes) 字段的总长度, 单位为字节. 其值允许按下文所述确定网络层可达性 (Network Layer Reachability) 字段的长度.

值 0 表示该 UPDATE 消息中既不存在网络层可达性信息字段, 也不存在路径属性字段.

Path Attributes:

除仅携带已撤销路由的 UPDATE 消息外, 每条 UPDATE 消息中都存在一个变长路径属性序列 (path attribute sequence). 每个路径属性都是变长的 <attribute type, attribute length, attribute value> 三元组 (triple).

属性类型 (Attribute Type) 是一个 2 字节字段, 由属性标志 (Attribute Flags) 字节后跟属性类型代码 (Attribute Type Code) 字节组成.

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

属性标志字节的最高位 (bit 0) 是可选位 (Optional bit). 它定义该属性是可选的 (optional, 设置为 1 时) 还是众所周知的 (well-known, 设置为 0 时).

属性标志字节的第二个高位 (bit 1) 是可传递位 (Transitive bit). 它定义可选属性是可传递的 (transitive, 设置为 1 时) 还是不可传递的 (non-transitive, 设置为 0 时).

对于众所周知的属性, 可传递位 MUST 设置为 1. (关于可传递属性的讨论见第 5 节.)

属性标志字节的第三个高位 (bit 2) 是部分位 (Partial bit). 它定义可选可传递属性中包含的信息是部分的 (partial, 设置为 1 时) 还是完整的 (complete, 设置为 0 时). 对于众所周知的属性和可选不可传递属性, 部分位 MUST 设置为 0.

属性标志字节的第四个高位 (bit 3) 是扩展长度位 (Extended Length bit). 它定义属性长度 (Attribute Length) 是一个字节 (设置为 0 时) 还是两个字节 (设置为 1 时).

属性标志字节的低四位未使用. 发送时它们 MUST 为零, 接收时 MUST 被忽略.

属性类型代码 (Attribute Type Code) 字节包含属性类型代码. 当前定义的属性类型代码在第 5 节中讨论.

如果属性标志字节的扩展长度位设置为 0, 则路径属性的第三个字节包含属性数据 (attribute data) 的长度, 单位为字节.

如果属性标志字节的扩展长度位设置为 1, 则路径属性的第三和第四个字节包含属性数据的长度, 单位为字节.

路径属性的其余字节表示属性值 (attribute value), 并根据属性标志和属性类型代码进行解释. 支持的属性类型代码及其属性值和用途如下:

a) ORIGIN (Type Code 1):

ORIGIN 是一个众所周知的强制属性 (well-known mandatory attribute), 定义路径信息 (path information) 的起源. 数据字节可取以下值:

  • 值 0 (IGP) - 网络层可达性信息在发起自治系统 (originating AS) 内部
  • 值 1 (EGP) - 网络层可达性信息通过 EGP 协议 [RFC904] 学到
  • 值 2 (INCOMPLETE) - 网络层可达性信息通过其他方式学到

该属性的用法在 5.1.1 中定义.

b) AS_PATH (Type Code 2):

AS_PATH 是一个众所周知的强制属性, 由一系列 AS 路径段 (AS path segment) 组成. 每个 AS 路径段都由 <path segment type, path segment length, path segment value> 三元组表示.

路径段类型 (path segment type) 是一个 1 字节长度字段, 已定义以下值:

  • 值 1 (AS_SET): UPDATE 消息中某条路由已经过的 AS 的无序集合
  • 值 2 (AS_SEQUENCE): UPDATE 消息中某条路由已经过的 AS 的有序集合

路径段长度 (path segment length) 是一个 1 字节长度字段, 包含路径段值 (path segment value) 字段中 AS 的数量 (不是字节的数量).

路径段值字段包含一个或多个 AS 编号 (AS number), 每个都编码为 2 字节长度字段.

该属性的用法在 5.1.2 中定义.

c) NEXT_HOP (Type Code 3):

这是一个众所周知的强制属性, 定义到 UPDATE 消息的网络层可达性信息字段中所列目的地时 SHOULD 用作下一跳 (next hop) 的路由器的 (单播 unicast) IP 地址.

该属性的用法在 5.1.3 中定义.

d) MULTI_EXIT_DISC (Type Code 4):

这是一个可选不可传递属性 (optional non-transitive attribute), 是一个 4 字节无符号整数. 该属性的值 MAY 由 BGP 系统的决策过程 (Decision Process) 用来区分到相邻自治系统的多个入口点 (entry point).

该属性的用法在 5.1.4 中定义.

e) LOCAL_PREF (Type Code 5):

LOCAL_PREF 是一个众所周知的属性, 是一个 4 字节无符号整数. BGP 系统使用它向其他内部对等体 (internal peer) 通知通告系统 (advertising speaker) 对所通告路由的偏好程度 (preference degree).

该属性的用法在 5.1.5 中定义.

f) ATOMIC_AGGREGATE (Type Code 6):

ATOMIC_AGGREGATE 是一个长度为 0 的众所周知的自愿属性 (well-known discretionary attribute).

该属性的用法在 5.1.6 中定义.

g) AGGREGATOR (Type Code 7):

AGGREGATOR 是一个长度为 6 的可选可传递属性 (optional transitive attribute). 该属性包含形成聚合路由 (aggregated route) 的最后一个 AS 编号 (编码为 2 字节), 后跟形成该聚合路由的 BGP 系统的 IP 地址 (编码为 4 字节). 这 SHOULD 与系统的 BGP 标识符所使用的地址相同.

该属性的用法在 5.1.7 中定义.

Network Layer Reachability Information:

这个变长字段包含 IP 地址前缀列表. 网络层可达性信息的长度没有显式编码, 单位为字节, 但可以按如下方式计算:

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

其中 UPDATE 消息长度是固定大小 BGP 报头 (header) 中编码的值, 总路径属性长度和已撤销路由长度是 UPDATE 消息的可变部分 (variable part) 中编码的值, 23 是固定大小 BGP 报头、总路径属性长度字段和已撤销路由长度字段的组合长度.

可达性信息编码为一个或多个 <length, prefix> 形式的 2 元组, 其字段如下所述:

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

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

a) Length:

长度 (Length) 字段指示 IP 地址前缀的长度, 单位为比特. 长度为零表示匹配所有 IP 地址的前缀 (该前缀本身为零个字节).

b) Prefix:

前缀 (Prefix) 字段包含一个 IP 地址前缀, 后跟足够的尾随比特, 使该字段的末尾落在字节边界上. 注意, 尾随比特的值无关紧要.

UPDATE 消息的最小长度为 23 字节 -- 19 字节用于固定报头 (fixed header) + 2 字节用于已撤销路由长度 + 2 字节用于总路径属性长度 (已撤销路由长度的值为 0, 总路径属性长度的值为 0).

UPDATE 消息最多可以通告一组路径属性, 但可以通告多个目的地, 前提是这些目的地共享这些属性. 给定 UPDATE 消息中包含的所有路径属性都适用于该 UPDATE 消息的 NLRI 字段中携带的所有目的地.

UPDATE 消息可以列出多条要从服务中撤销的路由. 每条这类路由由其目的地 (表示为 IP 前缀) 标识, 该目的地在此前通告它的 BGP 系统 - BGP 系统连接上下文中唯一标识这条路由.

UPDATE 消息可能只通告要从服务中撤销的路由; 在这种情况下, 该消息不包含路径属性或网络层可达性信息. 相反, 它也可以只通告一条可行路由 (feasible route); 在这种情况下, 已撤销路由 (WITHDRAWN ROUTES) 字段不需要存在.

UPDATE 消息 SHOULD NOT 在已撤销路由和网络层可达性信息字段中包含同一个地址前缀. 然而, BGP 系统 MUST 能够处理这种形式的 UPDATE 消息. BGP 系统 SHOULD 将这种形式的 UPDATE 消息视为已撤销路由不包含该地址前缀.