本部分通过使用在单个延迟过程调用(DPC)中按顺序接收和处理的段示例来说明合并算法。
此页面使用 X 和 X'标记连续段。 所有其他段和单个合并单元(SCU)字段均如 合并 TCP/IP 段规则中所述。
示例 1:数据段
段说明
处理属于同一 TCP 连接的 10 个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK == X.ACK
没有一个段会产生异常。
结果
单个 SCU 由 10 个段组成。 这在单个NET_BUFFER_LIST中显示为单个NET_BUFFER。
示例 2:数据段,紧接着异常,然后是数据段
段说明
处理属于同一 TCP 连接的 5 个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK == X.ACK
这些代码段都不会引发异常。 第 6 段是具有 TCP SACK 选项的重复 ACK 段,并根据 合并 TCP/IP 段规则中的规则编号 3 生成异常。
注意 在这种情况下,用于处理 TCP 选项的异常规则优先,从而替代合并规则。
处理同一 TCP 连接的两个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK == X.ACK
这些代码段都不会产生异常。
结果
单个 SCU 由前 5 个段组成。 第 6 段不构成 SCU。
第 7 段和第 8 段组成 SCU。
指示一个 NET_BUFFER_LIST 链,其中包含三个 NET_BUFFER_LIST 结构,每个结构都具有一个单独的 NET_BUFFER。 维护已接收段的排序。
示例 3:数据段,后跟多个窗口更新
分段描述
处理属于同一 TCP 连接的 5 个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK == X.ACK
这些段都不会产生异常。 第 6 段是使用 SEG 进行窗口更新的纯 ACK。WND = 65535,如以程图所示。
第 7 段是一个纯 ACK,其中窗更新为 SEG.WND = 131070,如同一流程图中所示。
结果
单个 SCU 由 7 个段组成。 这在单个NET_BUFFER_LIST中显示为单个NET_BUFFER。
SCU。WND = 131070,并基于此值更新校验和。
示例 4:与数据段混合的 Piggybacked ACK
段说明
处理属于同一 TCP 连接的 3 个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK == X.ACK
这些段都不会产生异常。 处理同一 TCP 连接的两个连续段。 以下所有条件均适用于每个条件:
X’.SEQ == X.NXT
X’SEQ > X.SEQ
X’.ACK > X.ACK
这些段都不会产生异常。
结果
单个 SCU 由 5 个段组成。 这在单个NET_BUFFER_LIST中显示为单个NET_BUFFER。 SCU.ACK 设置为最后一个 SEG.ACK。