跳到主要内容

3.1. SCHC Compound ACK 消息格式

3.1. SCHC Compound ACK 消息格式

图 1 显示了成功 SCHC ACK 格式, 即按 [RFC8724] 定义, 所有 fragment 都已被正确接收时的格式 (C=1).

              |--- SCHC ACK Header ---|
| |--T-|--M--| 1 |
+--------+----+-----+---+``````````````````
| RuleID |DTag| W |C=1| padding as needed
+--------+----+-----+---+``````````````````

图 1: RFC 8724 中定义的 SCHC Success ACK 消息格式

如果在 SCHC Packet 的任一 window 中发现 SCHC Fragment 丢失, 则 MAY 使用 SCHC Compound ACK. SCHC Compound ACK 消息格式如图 2 和图 3 所示.

 |--- SCHC ACK Header --|- W=w1 -|...|---- W=wi -----|
|--T-|---M--|-1-| |...|---M--| |---M--|
+------+----+------+---+--------+...+------+--------+------+```~~+
|RuleID|DTag| W=w1 |C=0| Bitmap |...| W=wi | Bitmap |00..00| pad |
+------+----+------+---+--------+...+------+--------+------+```~~+
next L2 Word boundary ->|<-- L2 Word ->|

图 2: SCHC Compound ACK 消息格式. 在 window W = w1,...,wi 中发现丢失, 其中 w1 < w2 <...< wi.

SCHC Compound ACK 将 window number (W) 与其对应的 bitmap 分组在一起. Window number 不需要连续. 但是, SCHC Compound ACK 消息中包含的 window number 及其对应 bitmap MUST 按从最低编号 window 到最高编号 window 的顺序排列. 因此, 如果 SCHC Compound ACK 消息中存在 window number zero 的 bitmap, 它 MUST 始终是顺序中的第一个, 并且其 window number MUST 放置在 SCHC ACK Header 中.

如果为了填满最后一个第二层 (layer two, L2) Word, 在消息中最后一个 bitmap 之后需要 M 个或更多 padding bit, 则 MUST 在最后一个 bitmap 之后追加 M 个值为 0 的 bit, 然后按需应用 padding (见图 2). 由于 window number 0 (如果存在于消息中) 被放置为 w1, 因此设为 0 的 M 个 bit 不会与 window number 0 混淆; 因而它们表示 SCHC Compound ACK 消息结束.

图 3 显示所需 padding bit 严格少于 M bit 的情况. 在这种情况下, L2 最大传输单元 (Maximum Transmission Unit, MTU) 没有留下任何额外 window value 的空间, 更不用说任何 bitmap, 从而表示 SCHC Compound ACK 消息结束.

 |--- SCHC ACK Header --|- W=w1 -|...|---- W=wi -----|
|--T-|---M--|-1-| |...|---M--| |---M--|
+------+----+------+---+--------+...+------+--------+```+
|RuleID|DTag| W=w1 |C=0| Bitmap |...| W=wi | Bitmap |pad|
+------+----+------+---+--------+...+------+--------+```+
next L2 Word boundary ->|

图 3: padding bit 少于 M bit 的 SCHC Compound ACK 消息格式. 在 window W = w1,...,wi 中发现丢失, 其中 w1 < w2 <...< wi.

SCHC Compound ACK MUST NOT 对中间 window/bitmap 使用 Compressed Bitmap 格式 (即不是 SCHC Compound ACK 消息中最后一个的 bitmap); 因此, 中间 bitmap 字段 MUST 具有 WINDOW_SIZE 的大小. 因而, SCHC Compound ACK MAY 仅对消息中的最后一个 bitmap 使用 Compressed Bitmap 格式. 对最后一个 bitmap 可选使用该 Compressed Bitmap 的方式 MUST 由特定技术的 SCHC Profile 指定.

最后一个 bitmap 被有效压缩的情况对应图 3, 其中最后一个 bitmap (按构造) 结束于 L2 Word 边界, 因此完全不产生 padding.

图 4 展示了一个 SCHC Compound ACK 的 bitmap 压缩示例, 其中最后一个 window (wi) 的 bitmap 表示第一个 tile 未被正确接收. 由于压缩算法产生了有效压缩, 因此不需要 padding.

 |--- SCHC ACK Header --|- W=w1 -|...|-------- W=wi -------|
|--T-|---M--|-1-| |...|---M--|
+------+----+------+---+--------+...+------+--------------+
|RuleID|DTag| W=w1 |C=0| Bitmap |...| W=wi |0 1 1 1 1 1 1 |
+------+----+------+---+--------+...+------+--------------+
next L2 Word boundary ->|

SCHC Compound ACK with Uncompressed Bitmap

|--- SCHC ACK Header --|- W=w1 -|...|-- W=wi --|
|--T-|---M--|-1-| |...|---M--|
+------+----+------+---+--------+...+------+---+
|RuleID|DTag| W=w1 |C=0| Bitmap |...| W=wi |0 1|
+------+----+------+---+--------+...+------+---+
next L2 Word boundary ->|

Transmitted SCHC Compound ACK with Compressed Bitmap

图 4: 带 Compressed Bitmap 且未添加 padding 的 SCHC Compound ACK 消息格式. 在 window W = w1,...,wi 中发现丢失, 其中 w1 < w2 <...< wi.

图 5 展示了另一个 SCHC Compound ACK 的 bitmap 压缩示例, 其中最后一个 window (wi) 的 bitmap 表示第二个和第四个 tile 未被正确接收. 在该示例中, 压缩算法没有对最后一个 bitmap 产生有效压缩. 此外, 由于填满最后一个 L2 Word 需要超过 M bit 的 padding, 因此在应用 padding 之前, 会向消息追加 M 个值为 0 的 bit.

|--- SCHC ACK Header --|-W=w1-|...|-------- W=wi -------|
|--T-|---M--|-1-| |...|---M--|
+------+----+------+---+------+...+------+--------------+
|RuleID|DTag| W=w1 |C=0|Bitmap|...| W=wi |1 0 1 0 1 1 1 |
+------+----+------+---+------+...+------+--------------+
next L2 Word boundary ->|

SCHC Compound ACK with Uncompressed Bitmap

|--- SCHC ACK Header --|-W=w1-|...|-------- W=wi -------|
|--T-|---M--|-1-| |...|---M--| |---M--|
+------+----+------+---+------+...+------+--------------+------+```+
|RuleID|DTag| W=w1 |C=0|Bitmap|...| W=wi |1 0 1 0 1 1 1 |00..00|pad|
+------+----+------+---+------+...+------+--------------+------+```+
next L2 Word boundary ->|<------ L2 Word ------>|

Transmitted SCHC Compound ACK

图 5: 带 Compressed Bitmap 且添加 padding 以到达 L2 边界的 SCHC Compound ACK 消息格式. 在 window W = w1,...,wi 中发现丢失, 其中 w1 < w2 <...<wi.

如果 SCHC 发送方收到带有无效 window number 的 SCHC Compound ACK, 例如重复的 W value 或尚未发送的 W value, 它 MUST 丢弃整个 SCHC Compound ACK 消息.

注: SCHC Compound ACK 与 Receiver-Abort 消息的区分方式同常规 SCHC ACK 的区分方式相同, 因为 Receiver-Abort pattern 绝不会出现在合法的 SCHC Compound ACK 中 [RFC8724].