Network programming ip_头的标识字段中使用的增量值是多少?

Network programming ip_头的标识字段中使用的增量值是多少?,network-programming,ip,Network Programming,Ip,我打开了telnet会话和wireshark..并观察了连接 我所知道的是,ip标识字段的正常增量为“1”(在没有碎片的情况下),但如果发生碎片,则标识字段在所有碎片上都将保持不变 但正如我看到的,它不是1,它是随机变化的值 那么递增ident字段的算法是什么呢 另一个问题:如果设置了DF标志,我们是查看ident字段还是忽略它?我的猜测是它是伪随机的,以便使攻击者更难猜测序列和欺骗数据包。哪个操作系统正在生成时髦的标识值 这非常依赖于实现——事实上,利用这些差异进行操作系统指纹识别。例如,某些

我打开了telnet会话和wireshark..并观察了连接

我所知道的是,ip标识字段的正常增量为“1”(在没有碎片的情况下),但如果发生碎片,则标识字段在所有碎片上都将保持不变

但正如我看到的,它不是1,它是随机变化的值

那么递增ident字段的算法是什么呢


另一个问题:如果设置了DF标志,我们是查看ident字段还是忽略它?

我的猜测是它是伪随机的,以便使攻击者更难猜测序列和欺骗数据包。哪个操作系统正在生成时髦的标识值

这非常依赖于实现——事实上,利用这些差异进行操作系统指纹识别。例如,某些Windows系统增加ID,但以主机字节顺序而不是网络字节顺序发送字段


这并不重要,也不会引起问题,因为ID只用于碎片。所以正如您所建议的,如果设置了DF,您可能可以忽略ID,虽然我会检查frag offset是否为0,总长度是否与接收到的数据量相匹配。

我发现增量值取决于数据包之间的时间。在telnet中:如果你频繁发送快速字符..id将增加1..如果你以慢速发送字符..你会注意到差异..我没有计算出真正的数字关系…但它与时间有关。

Win7递增id。。但它以网络字节顺序递增,而不是作为主机递增。我已手动检查“跳过的值”是否可能用于不属于连接的其他数据包中。有些实现使用一个系统范围的ID,无论它属于哪个套接字,每个数据包的ID都会递增。