【问题标题】:Which header fields characterize a packet as unique?哪些标头字段将数据包描述为唯一的?
【发布时间】:2013-04-02 20:41:04
【问题描述】:

我正在处理可能包含 UDPTCP 负载的 IP 数据包。

如果我们只考虑 IP 级别和传输级别的标头,那么一个数据包的一组代表字段可能是什么?也就是说,作为一个整体考虑,哪些标头字段会使该数据包唯一? (当然没有重复)

如果我们不考虑 IP 和 TCP 或 UDP chksum 字段,其他字段的子集是否足够?

【问题讨论】:

    标签: tcp header udp ip packets


    【解决方案1】:

    IP 和 UDP 没有“唯一性”的概念。 TCP 确实如此,由序列号字段暗示。当数据包在传输过程中被复制或丢弃时,没有足够的字段来明确说明。

    基于 cmets 的更新:

    如果您同时编写发送代码和接收代码,则可以包含一个唯一标识数据包的 IP 选项。我建议使用 SATNET StreamId 选项(#​​8,请参阅RFC 791,第 3.1 节)-它为您提供 16 位可供使用,并且已经存在了 30 多年。

    如果您不编写发送代码,我认为您不能这样做 - 只是没有任何字段可以在 IP、ICMP 或 UDP 中进行比较。

    【讨论】:

    • 是的,当然。我的措辞有点差。我最终的意思是:如果我忽略部分取决于各自有效负载的所有校验和(IP 和传输层),那么所有其他标头字段(或它们的子集)是否可以识别数据包?想象一下我看不到传输层的有效载荷。另外,为了简单起见,我们假设不存在重复项。
    • 我注意到 TCP 序列号偶尔会被中间框覆盖,所以我不想考虑它。我想这使得实现我的目标有点不可能......
    • 你还没有真正描述你的目标。你问了一个问题,答案是“你不能那样做”。你说的“识别数据包”是什么意思?
    • 我必须将 ttl 过期 ICMP 数据包的负载与生成它们的数据包进行比较。我的问题是有时中间盒会在 IP 标头和 TCP 序列字段中应用更改。这就是为什么有时我无法直接找到这些 ICMP 数据包与任何内容的匹配项。标头的细微变化也意味着校验和值略有不同,这就是我在此比较过程中必须忽略它的原因。
    【解决方案2】:

    您可以使用 IP Header 的可选字段来附加数据以实现唯一性(如果您正在发送),但您需要将 IHL 修改为大于 5。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2021-12-25
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      相关资源
      最近更新 更多