3.2.1.2. 接收方行为 (替代 RFC 8724 第 8.4.3.2 节)
3.2.1.2. 接收方行为
收到带有当时未在处理的 RuleID 和 DTag 对的 SCHC Fragment 时:
-
接收方 SHOULD 检查该 DTag value 最近未用于该 RuleID value, 从而确保收到的 SCHC Fragment 不是先前某个被分片 SCHC Packet 传输的残留. Inactivity Timer 的初始值是接收方处 DTag value 的 RECOMMENDED 生存期. 如果确定该 SCHC Fragment 是此类残留, 接收方 MAY 静默忽略并丢弃它.
-
接收方 MUST 启动一个过程, 使用该 RuleID 和 DTag value 对组装新的 SCHC Packet. 接收方 MUST 为该 RuleID 和 DTag value 对启动 Inactivity Timer. 它 MUST 为该 RuleID 和 DTag value 对将 Attempts counter 初始化为 0. 如果接收方资源不足以执行此操作, 它 MUST 以 SCHC Receiver-Abort 响应发送方.
收到针对正在处理的 RuleID 和 DTag 对的任何 SCHC F/R 消息时, 接收方 MUST 重置属于该 RuleID 和 DTag 对的 Inactivity Timer.
为简洁起见, 本节其余部分讨论的所有消息接收, 即使未明确说明, 都应理解为 "匹配正在处理的 RuleID 和 DTag 对".
收到 SCHC Fragment 消息时, 接收方根据 payload 长度以及 SCHC Fragment 的 W 和 FCN 字段确定接收到了哪些 tile.
-
如果 FCN 为 All-1 且存在 Payload, 则 MUST 组装完整的 SCHC Fragment Payload, 包括 padding bit. 这是因为接收方不知道最后一个 tile 的大小; 因此在此阶段, padding bit 与 tile data bit 无法区分. 它们将由 SCHC C/D sublayer 移除. 如果 SCHC Fragment Payload 的大小大于或等于一个 regular tile 的大小加上一个 L2 Word 的大小, 这 SHOULD 触发错误标志.
-
否则, tile MUST 基于先验已知的 tile size 进行组装.
-
如果 Profile 允许, payload 的末尾 MAY 包含最后一个 tile, 该 tile 可能更短. 在此阶段, padding bit 与 tile data bit 无法区分.
-
payload 可以包含倒数第二个 tile, 如果 Profile 允许, 该 tile MAY 恰好比 regular tile size 短一个 L2 Word.
-
否则, padding bit MUST 被丢弃. 这是可行的, 因为:
-
tile 的大小是先验已知的,
-
tile 大于一个 L2 Word, 并且
-
padding bit 始终严格少于一个 L2 Word.
-
-
收到 SCHC All-0 SCHC Fragment 时:
- 如果接收方知道正在重组的 packet 存在任何带有缺失 tile 的 window (并且取决于某些参数, 如网络条件, 发送方缓冲区/缓存大小, 支持的应用时延等), 它 MAY 为缺失 tile 返回 SCHC Compound ACK, 从最低编号 window 开始.
收到 SCHC ACK REQ 或 All-1 SCHC Fragment 时:
-
如果接收方知道正在重组的 packet 存在任何带有缺失 tile 的 window, 它 MUST 为缺失 tile 返回 SCHC Compound ACK, 从最低编号 window 开始.
-
否则:
-
如果它已收到至少一个 tile, 则 MUST 为它当前拥有 tile 的最高编号 window 返回 SCHC Compound ACK,
-
否则, 它 MUST 为 window number 0 返回 SCHC Compound ACK.
-
Profile MAY 指定接收方发送 SCHC Compound ACK 的其他时间和情形, 以及在这些情形下 SCHC Compound ACK 报告哪个 window.
发送 SCHC Compound ACK 后, 接收方 MUST 增加 Attempts counter.
收到 All-1 SCHC Fragment 后, 接收方 MUST 至少在每次准备为最后一个 window 发送 SCHC Compound ACK 时, 检查重组后 SCHC Packet 的完整性.
收到 SCHC Sender-Abort 后, 接收方 MAY 以错误条件退出.
Inactivity Timer 到期后, 接收方 MUST 发送 SCHC Receiver-Abort, 并且它 MAY 以错误条件退出.
当 Attempts counter 超过 MAX_ACK_REQUESTS 时, 接收方 MUST 发送 SCHC Receiver-Abort, 并且它 MAY 以错误条件退出.
SCHC Packet 的重组在以下情况下结束:
-
已收到 Sender-Abort,
-
Inactivity Timer 已到期,
-
Attempts counter 已超过 MAX_ACK_REQUESTS, 或
-
已收到至少一个 All-1 SCHC Fragment, 且重组后 SCHC Packet 的完整性检查成功.
关于实现符合本规范的接收方行为的有限状态机 (Finite State Machine) 的若干可能示例之一, 见 RFC 8724 的图 44. 所提供的示例旨在匹配图 43 中的发送方有限状态机.