0

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

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

谢谢您的帮助。

4

1 回答 1

0

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

我将为每个数据包保存某种形式的元信息,并进行一些总长度 - HDL 计算 - 片段偏移量。

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

你怎么看?

于 2013-11-04T07:28:51.920 回答