跳到主要内容

3. SRH AltMark TLV 的定义 (Definition of the SRH AltMark TLV)

AltMark SRH TLV 用于携带与交替标记方法 (Alternate-Marking Method) 相关的数据字段. 该 TLV 包含始终存在的初始字段, 并在使用增强型交替标记 (Enhanced Alternate Marking) 时包含进一步的扩展字段.

图 1 给出了 AltMark TLV 的格式.

      0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SRH TLV Type | SRH TLV Len | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FlowMonID |L|D| Reserved | NH |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Optional extended data fields (variable) ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 1: The AltMark SRH TLV for Alternate Marking

该 TLV 的字段如下:

SRH TLV Type: Alternate-Marking SRH TLV 的 8-bit 标识符. 该字段的值取自 124-126 范围. 它是一个实验性码点, 表示一个在转发途中不会改变的 TLV. 部署本文档时, 必须协调参与实验的所有实现所使用的值. 因此, 实验应仔细考虑受控域中运行的其他实现, 以避免与其他 SRH TLV 冲突.

SRH TLV Len: 该 TLV 的 Data Fields 长度, 以字节为单位. 未使用增强型交替标记时, 该值设置为 6.

Reserved: 保留供将来使用. 发送时这些比特必须设置为零, 接收时必须忽略.

FlowMonID: 流监测标识 (Flow Monitoring Identification) 字段. 它是 [RFC9343] 中定义的 20-bit 无符号整数.

L: Loss 标志, 定义见 [RFC9343].

D: Delay 标志, 定义见 [RFC9343].

NH: NextHeader 字段. 它用于指示是否存在支持增强型交替标记的扩展数据字段, 规则如下:

  • NextHeader 值为 0x0 表示未附加扩展数据字段.

  • NextHeader 值 0x1-0x8 保留供进一步使用.

  • NextHeader 值为 0x9 表示存在第 3.2 节所述的扩展数据字段.

  • NextHeader 值 0xA-0xF 保留供进一步使用.

根据 NH 字段的设置, 可以存在第 3.2 节所述的可选扩展数据字段.

3.1. 基础交替标记数据字段 (Base Alternate-Marking Data Fields)

基础 AltMark 数据字段包括 Loss (L) 标志, Delay (D) 标志和 Flow Monitoring Identification (FlowMonID) 字段, 与 [RFC9343] 中的定义一致.

L 和 D 是交替标记方法的标记字段, 而 FlowMonID 用于标识被监测的流, 并帮助优化交替标记方法的实现和扩展性. 注意, 如 [RFC9343] 已强调的那样, 使用 FlowMonID 标识被监测的流, 是因为无法利用 IPv6 Header 的 Flow Label 字段.

需要注意, 如果 20-bit FlowMonID 由域入口节点设置, 即使使用伪随机算法选择取值, 也可能发生冲突. 因此, 它未必足以唯一标识一个被监测的流. 在这种情况下, 需要为数据包添加额外的流信息标记, 以便消除歧义. 这种额外标记可以通过第 3.2 节所述的扩展数据字段携带.

3.2. 用于增强型交替标记的可选扩展数据字段 (Optional Extended Data Fields for Enhanced Alternate Marking)

图 2 展示了用于支持增强型交替标记的可选扩展数据字段. 当 AltMark TLV 的 NH 字段设置为 0x9 时, 这些字段存在.

      0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FlowMonID Ext |M|F|W|R| Len | Rsvd |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MetaInfo | Optional MetaData ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~ Optional MetaData (variable) ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: Optional Extended Data Fields for Enhanced Alternate
Marking

扩展数据字段如下:

FlowMonID Ext: 20-bit 无符号整数, 用于扩展 FlowMonID, 以减少采用随机分配时的冲突. FlowMonID 字段的歧义消除在 "IPv6 Application of the Alternate-Marking Method" [RFC9343] 中讨论.

四个不同的比特标志表示特殊用途.

M bit: 测量模式. 如果 M=0, 表示用于逐段监测. 如果 M=1, 表示用于端到端监测.

F bit: 分片. 如果 F=1, 表示原始数据包已分片. 因此, 只需要计数一个数据包, 并忽略后续所有 F 设置为 1 的分片. 注意, 第一个分片的 F 设置为 0.

W bit: 流方向标识. 如果请求自动建立反向流监测, 则使用该标志指示出口节点建立反向流监测. 如果 W=1, 表示流方向为正向. 如果 W=0, 表示流方向为反向.

R bit: 保留. 该比特必须设置为零, 接收时必须忽略.

Len: 长度. 表示增强型交替标记扩展数据字段的长度, 以 4 bytes 的倍数表示. 它包括图 2 所示的所有字段, 也包括任何存在的元数据.

Rsvd: 保留供进一步使用. 发送时这些比特必须设置为零, 接收时必须忽略.

MetaInfo: 一个 16-bit Bitmap, 用于指示 Optional MetaData 字段中附加了用于增强功能的更多元数据. 可以设置多个比特, 在这种情况下, 附加元数据按照比特被设置的顺序出现. MetaInfo 比特从最高有效位开始编号为 0. 以下定义了三个比特及其关联元数据:

bit 0: 如果设置为 1, 表示存在图 3 所示的 6-byte Timestamp.

        0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp(s) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Timestamp(ns) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 3: The Timestamp Extended Data Field

该 Timestamp 可由封装节点填充, 并一路携带到解封装节点, 使所有中间节点能够将其与本地时间比较并测量单向延迟. Timestamp 包含两个字段:

Timestamp(s): 携带秒数的 16-bit 整数.

Timestamp(ns): 携带纳秒数的 32-bit 整数.

注意, Timestamp 数据字段使所有中间节点都能测量单向延迟. 它可以与 [IPFIX] 和 [YANG-TELEMETRY] 的实现相关联. [IPFIX] 引入新的 IP Flow Information Export (IPFIX) 信息元素, 用于公开 On-Path Telemetry 测得的延迟. 类似地, [YANG-TELEMETRY] 定义了用于监测 On-Path Telemetry 数据的 YANG 数据模型, 其中包括路径延迟.

bit 1: 如果设置为 1, 表示存在图 4 所示的控制信息, 用于根据触发数据包的存在建立反向流监测.

        0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DIP Mask | SIP Mask |P|I|O|V|S|T| Period |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 4: Control Information for Backward Direction Flow
Monitoring

该控制信息包含多个字段和标志, 用于匹配并建立反向方向:

DIP Mask: 用于匹配该流的目标 IP 前缀长度.

SIP Mask: 用于匹配该流的源 IP 前缀长度.

P bit: 如果设置为 1, 表示使用触发数据包中的协议标识符匹配该流.

I bit: 如果设置为 1, 表示匹配源端口.

O bit: 如果设置为 1, 表示匹配目标端口.

V bit: 如果设置为 1, 节点将自动建立反向监测并分配 FlowMonID.

S bit: 如果设置为 1, 表示匹配 Differentiated Services Code Point (DSCP).

T bit: 用于控制隧道测量范围. T=1 表示在 Network-to-Network Interfaces 之间测量, 即 NNI 到 NNI. T=0 表示在 User-to-Network Interfaces 之间测量, 即 UNI 到 UNI.

Period: 表示以秒计的 Alternate-Marking 周期.

bit 2: 如果设置为 1, 表示存在图 5 所示的 4-byte Sequence Number.

        0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 5: Sequence Number Data Field

唯一的 Sequence Number 可用于检测乱序数据包, 同时支持数据包丢失测量. 此外, Sequence Number 可以与时延测量结合使用, 以访问每个数据包的 Timestamp.