知道最后一个分段数据包何时到达/所有分段数据包是否已到达

时间:2013-11-04 06:26:08

标签: networking ip ipv4 fragmentation

我正在尝试处理IP数据包碎片。我需要以某种方式标记具有某些值的碎片数据包(根据某些信息将它们排序到存储桶中),但是在碎片化之后我会收到它们。我不能保证到达片段的顺序,也不能按顺序收到每个片段的片段。例如,对于数据包A,B和CI可以按以下顺序接收片段:A1,B1,B2,C1,A2,C2,B3,C4,C3,A4,A3 ......我不能假设任何事情。< / p>

现在我正在使用最简单的方法,并将这些片段保存在列表中。我的问题是,当(并且是否可能)我能否知道特定数据包的所有片段都已到达并且我可以从缓存中丢弃此数据包?我可能在IP头字段中遗漏了一些内容......

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

所以,我想了一下,我有一个可能有帮助的计算。

我将为每个数据包保存某种形式的元信息,并执行一些总长度 - HDL计算 - Frag Offset。

如果我收到一个数据包,我会保存它的ID(每个ID都有自己的元信息),如果它不是最后一个片段(根据字段),我存储[加起来](总长度 - HDL) 。如果它是最后一个frag,我从该累积值中推导出(Frag Offset)。我可以认为元信息是“完整的”,一旦我看到我从最后一个数据包中累积的(总长度 - HDL)与( - Frag Offset)的计算结果为0,就将其丢弃。 / p>

您怎么看?