3.2.1.1. Sender Behavior (发送器行为) (替代 RFC 8724 第 8.4.3.1 节)
3.2.1.1. Sender Behavior (发送器行为)
在新 SCHC Packet 分片开始时:
-
fragment sender (分片发送器) 必须为此 SCHC Packet 选择一个 RuleID 和 DTag 值对。如果该 Rule (规则) 的 M 和 WINDOW_SIZE 值使得 SCHC Packet 无法分片为 (2^M) * WINDOW_SIZE 个或更少的 tiles, 则绝对不能选择该 Rule。
-
fragment sender 必须为该 RuleID 和 DTag 值对将 Attempts counter (尝试计数器) 初始化为 0。
Regular SCHC Fragment (常规 SCHC 分片) 消息在其有效载荷中携带一个或多个 tiles。如果在一个 Regular SCHC Fragment 中携带多个 tiles:
-
所选的 tiles 在原始 SCHC Packet 中必须是连续的, 并且
-
它们必须按照它们在 SCHC Packet 中出现的顺序, 从 SCHC Packet 的开头到结尾, 彼此相邻地放置在 SCHC Fragment Payload 中。
不是最后一个的 Tiles 必须在 Regular SCHC Fragments 中发送, 如第 8.3.1.1 节所述。FCN 字段必须包含该 SCHC Fragment 中发送的第一个 tile 的 tile index (块索引)。
在 Regular SCHC Fragment 消息中, sender 必须用该 SCHC Fragment 中发送的第一个 tile 的 window number 填充 W 字段。
Profile 必须定义 SCHC Packet 的最后一个 tile 是否发送:
-
在 Regular SCHC Fragment 中, 单独或作为多块有效载荷的一部分,
-
单独在 All-1 SCHC Fragment 中, 或
-
使用上述两种方法中的任何一种。
在 All-1 SCHC Fragment 消息中, sender 必须用 SCHC Packet 最后一个 tile 的 window number 填充 W 字段。
fragment sender 必须发送 SCHC Fragments, 使得它们总共包含分片 SCHC Packet 的所有 tiles。
fragment sender 必须至少发送一个 All-1 SCHC Fragment。
在执行上述两项时, sender 必须确保 receiver 不会通过 Regular SCHC Fragment 和 All-1 SCHC Fragment 接收最后一个 tile。
fragment sender 必须在发送以下内容后监听 SCHC Compound ACK 消息:
-
All-1 SCHC Fragment 或
-
SCHC ACK REQ。
Profile 可以指定 fragment sender 必须监听 SCHC Compound ACK 消息的其他时间。例如, 这可能是在发送完整的 window 的 tiles 之后。
每次 fragment sender 发送 All-1 SCHC Fragment 或 SCHC ACK REQ 时:
-
它必须增加 Attempts counter, 并且
-
它必须重置 Retransmission Timer (重传计时器)。
在 Retransmission Timer 到期时:
-
如果 Attempts counter 严格小于 MAX_ACK_REQUESTS, fragment sender 必须发送 All-1 SCHC Fragment 或带有对应于最后一个 window 的 W 字段的 SCHC ACK REQ,
-
否则, fragment sender 必须发送 SCHC Sender-Abort (SCHC 发送器中止), 并且它可以以错误条件退出。
本节其余部分讨论的所有消息接收都应理解为 "匹配正在处理的 RuleID 和 DTag 对", 即使为简洁起见没有详细说明。
在接收到 SCHC Compound ACK 时:
-
如果 SCHC Compound ACK 中的 W 字段之一对应于 SCHC Packet 的最后一个 window:
-
如果设置了 C bit, sender 可以成功退出。
-
否则:
-
如果 Profile 规定最后一个 tile 必须在 All-1 SCHC Fragment 中发送:
-
如果 SCHC Compound ACK 在 receiver 处显示没有缺失的 tile, sender:
-
必须发送 SCHC Sender-Abort 并且
-
可以以错误条件退出。
-
-
否则:
-
fragment sender 必须发送包含 SCHC Compound ACK 中报告为缺失的所有 windows 的所有 tiles 的 SCHC Fragment 消息。
-
如果这些 SCHC Fragment 消息中的最后一个不是 All-1 SCHC Fragment, 则 fragment sender 可以额外发送带有对应于最后一个 window 的 W 字段的 SCHC ACK REQ, 或重复 All-1 SCHC Fragment 以要求 receiver 确认所有 tiles 都已正确接收。
-
在执行上述两项时, sender 必须确保 receiver 不会通过 Regular SCHC Fragment 和 All-1 SCHC Fragment 接收最后一个 tile。
-
-
-
否则:
-
如果 SCHC Compound ACK 在 receiver 处显示没有缺失的 tile, sender 必须发送 All-1 SCHC Fragment
-
否则:
-
fragment sender 必须发送包含 SCHC Compound ACK 中报告为缺失的所有 tiles 的 SCHC Fragment 消息。
-
fragment sender 然后必须发送 All-1 SCHC Fragment 或带有对应于最后一个 window 的 W 字段的 SCHC ACK REQ。
-
-
-
-
-
否则, fragment sender:
-
必须发送包含 SCHC Compound ACK 中报告为缺失的 tiles 的 SCHC Fragment 消息。
-
然后, 它可以发送带有对应于最后一个 window 的 W 字段的 SCHC ACK REQ。
-
有关实现遵守本规范的 sender 行为的 Finite State Machine (有限状态机) 的几个可能示例之一, 请参见 RFC 8724 的图 43。