【问题标题】:Knowing when the last fragmented packet will arrive / all fragmented packets have arrived知道最后一个分片数据包何时到达/所有分片数据包都已到达
【发布时间】:2013-11-14 18:34:51
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

标签: networking ip ipv4 fragmentation


【解决方案1】:

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

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

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

你怎么看?

【讨论】:

  • 标题中有一个非常好的标志,告诉您是否有更多片段 (MF) 跟随。不要试图使事情过于复杂:)
  • 但是我不能依赖片段的顺序。对于一个数据包 A,我可以按任意顺序获取分片,例如,A3、A4、A1、A2(四个分片)。在这种情况下,那个标志对我没有多大帮助。
  • 啊,好的。在这种情况下,您还需要处理重叠的片段和其他不好的东西。不要以为每个人都玩得很好:)
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 2021-02-27
  • 2018-02-11
  • 2017-03-05
  • 2014-03-23
  • 2014-12-19
  • 1970-01-01
  • 2019-10-25
相关资源
最近更新 更多