Skip to main content

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。