Skip to main content

3.2.1.2. Receiver Behavior (接收器行为) (替代 RFC 8724 第 8.4.3.2 节)

3.2.1.2. Receiver Behavior (接收器行为)

在接收到当时未处理的 RuleID 和 DTag 对的 SCHC Fragment 时:

  • receiver (接收器) 应该检查该 DTag 值最近是否未用于该 RuleID 值, 从而确保接收到的 SCHC Fragment 不是先前分片 SCHC Packet 传输的残留。Inactivity Timer (非活动计时器) 的初始值是 receiver 处 DTag 值的推荐生命周期。如果确定 SCHC Fragment 是这样的残留, receiver 可以静默忽略并丢弃它。

  • receiver 必须启动一个过程来组装具有该 RuleID 和 DTag 值对的新 SCHC Packet。receiver 必须为该 RuleID 和 DTag 值对启动 Inactivity Timer。它必须为该 RuleID 和 DTag 值对将 Attempts counter (尝试计数器) 初始化为 0。如果 receiver 资源不足无法执行此操作, 它必须以 SCHC Receiver-Abort (SCHC 接收器中止) 响应 sender。

在接收到正在处理的 RuleID 和 DTag 对的任何 SCHC F/R 消息时, receiver 必须重置与该 RuleID 和 DTag 对相关的 Inactivity Timer。

本节其余部分讨论的所有消息接收都应理解为 "匹配正在处理的 RuleID 和 DTag 对", 即使为简洁起见没有详细说明。

在接收到 SCHC Fragment 消息时, receiver 根据有效载荷长度以及 SCHC Fragment 的 W 和 FCN 字段确定接收到哪些 tiles。

  • 如果 FCN 是 All-1 并且存在 Payload, 则必须组装完整的 SCHC Fragment Payload 包括 padding bits (填充位)。这是因为 receiver 不知道最后一个 tile 的大小; 因此, 在此阶段 padding bits 与 tile 数据位无法区分。它们将由 SCHC C/D 子层删除。如果 SCHC Fragment Payload 的大小超过或等于一个常规 tile 的大小加上一个 L2 Word 的大小, 这应该引发错误标志。

  • 否则, 必须根据先验已知的 tile 大小组装 tiles。

    • 如果 Profile 允许, 有效载荷的末尾可以包含最后一个 tile, 它可能更短。在此阶段, padding bits 与 tile 数据位无法区分。

    • 有效载荷可能包含倒数第二个 tile, 如果 Profile 允许, 它可以恰好比常规 tile 大小小一个 L2 Word。

    • 否则, 必须丢弃 padding bits。这是可能的, 因为:

      • tiles 的大小是先验已知的,

      • tiles 大于 L2 Word, 并且

      • padding bits 始终严格小于 L2 Word。

在接收到 SCHC All-0 SCHC Fragment 时:

  • 如果 receiver 知道正在重组的 packet 有任何缺少 tiles 的 windows (并且取决于某些参数, 例如网络条件, sender 缓冲区/缓存大小和支持的应用程序延迟等), 它可以为缺少的 tiles 返回 SCHC Compound ACK, 从编号最低的 window 开始。

在接收到 SCHC ACK REQ 或 All-1 SCHC Fragment 时:

  • 如果 receiver 知道正在重组的 packet 有任何缺少 tiles 的 windows, 它必须为缺少的 tiles 返回 SCHC Compound ACK, 从编号最低的 window 开始。

  • 否则:

    • 如果它至少接收到一个 tile, 它必须为它当前拥有 tiles 的编号最高的 window 返回 SCHC Compound ACK,

    • 否则, 它必须为 window number 0 返回 SCHC Compound ACK。

Profile 可以指定 receiver 发送 SCHC Compound ACK 的其他时间和情况, 以及在这些情况下 SCHC Compound ACK 报告哪个 window。

在发送 SCHC Compound ACK 时, receiver 必须增加 Attempts counter。

在接收到 All-1 SCHC Fragment 后, receiver 必须至少在每次准备为最后一个 window 发送 SCHC Compound ACK 时检查重组的 SCHC Packet 的完整性。

在接收到 SCHC Sender-Abort 时, receiver 可以以错误条件退出。

在 Inactivity Timer 到期时, receiver 必须发送 SCHC Receiver-Abort, 并且它可以以错误条件退出。

当 Attempts counter 超过 MAX_ACK_REQUESTS 时, receiver 必须发送 SCHC Receiver-Abort, 并且它可以以错误条件退出。

SCHC Packet 的重组在以下情况下结束:

  • 已收到 Sender-Abort,

  • Inactivity Timer 已到期,

  • Attempts counter 已超过 MAX_ACK_REQUESTS, 或

  • 至少已接收到一个 All-1 SCHC Fragment 并且重组的 SCHC Packet 的完整性检查成功。

有关实现遵守本规范的 receiver 行为的 Finite State Machine (有限状态机) 的几个可能示例之一, 请参见 RFC 8724 的图 44。提供的示例旨在与图 43 的 sender Finite State Machine 匹配。