【发布时间】:2013-04-02 20:41:04
【问题描述】:
我正在处理可能包含 UDP 或 TCP 负载的 IP 数据包。
如果我们只考虑 IP 级别和传输级别的标头,那么一个数据包的一组代表字段可能是什么?也就是说,作为一个整体考虑,哪些标头字段会使该数据包唯一? (当然没有重复)
如果我们不考虑 IP 和 TCP 或 UDP chksum 字段,其他字段的子集是否足够?
【问题讨论】:
我正在处理可能包含 UDP 或 TCP 负载的 IP 数据包。
如果我们只考虑 IP 级别和传输级别的标头,那么一个数据包的一组代表字段可能是什么?也就是说,作为一个整体考虑,哪些标头字段会使该数据包唯一? (当然没有重复)
如果我们不考虑 IP 和 TCP 或 UDP chksum 字段,其他字段的子集是否足够?
【问题讨论】:
IP 和 UDP 没有“唯一性”的概念。 TCP 确实如此,由序列号字段暗示。当数据包在传输过程中被复制或丢弃时,没有足够的字段来明确说明。
基于 cmets 的更新:
如果您同时编写发送代码和接收代码,则可以包含一个唯一标识数据包的 IP 选项。我建议使用 SATNET StreamId 选项(#8,请参阅RFC 791,第 3.1 节)-它为您提供 16 位可供使用,并且已经存在了 30 多年。
如果您不编写发送代码,我认为您不能这样做 - 只是没有任何字段可以在 IP、ICMP 或 UDP 中进行比较。
【讨论】:
您可以使用 IP Header 的可选字段来附加数据以实现唯一性(如果您正在发送),但您需要将 IHL 修改为大于 5。
【讨论】: