2013-11-04 18 views
0

我正在尝试处理IP数据包分段。我需要以某种方式标记具有某种价值的分段数据包(根据某些信息将它们分类到一个存储桶中),但是在分片后我会收到它们。我不能保证到达片段的顺序,也不能保证每个片段都有顺序。例如,对于数据包A,B和C,我可以按以下顺序接收片段:A1,B1,B2,C1,A2,C2,B3,C4,C3,A4,A3 ...我不能假定任何东西。知道最后一个分段数据包何时到达/所有分段数据包已到达

现在我使用最简单的方法,并将这些片段保存在列表中。我的问题是,何时(甚至可能)我是否可以知道某个特定数据包的所有碎片已经到达,并且我可以从缓存中丢弃该数据包?我可能在IP头域中缺少一些东西...

谢谢你的帮助。

+0

你不需要努力工作,看看** MF **(More fragment)flag in ip [Here](https://en.wikipedia.org/wiki/IPv4) – drtf

回答

0

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

我将为每个数据包保存某种形式的元信息,并执行一些总长度 - HDL计算 - 碎片偏移量。如果我收到一个数据包,我保存它的ID(每个ID都有它自己的元信息),如果它不是最后一个frag(根据字段)我存储[加起来](总长度 - HDL )。如果它是最后一个碎片,我从该累加值中推断(碎片偏移)。我可以将元信息视为“完整”,只要我看到我从最后一个数据包中累积的(总长度-HDL)(--Frag Offset)的计算结果为0,就将其丢弃。

你觉得呢?

+0

有一个非常好的在标题中标志,告诉你是否有更多碎片(MF)正在跟随。不要试图过分复杂的东西:) –

+1

但我不能依靠片段的顺序。对于数据包A,我可以按任意顺序获取片段,例如A3,A4,A1,A2(四个片段)。在这种情况下,这面旗子对我来说无能为力。 – fashasha

+0

啊,好的。在这种情况下,你还需要照顾重叠的碎片和其他不好的东西。不要以为每个人都很好玩:) –

相关问题