2013-03-21 113 views
1

我试图生成一系列的数据包来模拟TCP 3-way握手过程,我的第一步是捕获真正的连接数据包,并且尝试从同一台机器重新发送相同的数据包,但它一开始并不工作。当我们使用tcpdump捕获我们发送的数据包时,TCP的校验和是如何计算的

最后我发现我使用tcpdump捕获的数据包并不完全是我的计算机发出的,TCP的校验和字段发生了变化,它让我想到即使TCP校验和不正确也可以建立TCP连接。

所以我的问题是如何计算校验和字段?它是由tcpdump还是硬件修改的?为什么它改变了?这是tcpdump的错误吗?或者是因为计算被省略了。

以下是我从主机和虚拟机器上截取的屏幕截图,可以看到除了TCP校验和之外,在不同机器上捕获的相同数据包都是相同的。

和小窗口是我的虚拟机,我用命令“SSH 10.82.25.138”从主机到产生这些数据包

回答

7

你们看到的可能是校验和转移的结果。从Wireshark的维基(http://wiki.wireshark.org/CaptureSetup/Offloading)引述:

大多数现代操作系统都支持某种形式的网络卸载, 其中上网卡,而不是CPU的一些网络处理发生的。 通常这是一件好事。它可以释放系统其余 上的资源,并让它处理更多连接。如果您尝试捕获流量,可能会导致虚假错误和奇怪的错误,甚至可能会导致流量不足。

在支持校验和卸载的系统上,IP,TCP和UDP 校验和在NIC上被计算,然后它们在 线路上传输。在Wireshark中,这些数据包显示为标有黑色 的传出数据包,并带有红色文本和注释[不正确,应为xxxx(可能由 “TCP校验和卸载”引起)]。

Wireshark捕获数据包,然后将它们发送到网络 适配器。它不会看到正确的校验和,因为它尚未计算出 。更糟糕的是,大多数操作系统不会打扰初始化这个数据,所以你可能会看到很少的内存块,你应该不会。

虽然这是针对wireshark,但同样的原则适用。在你的主机中,你看到错误的校验和,因为它还没有被填充。它看起来正确的客人,它发出的“线”,因为之前它填写。尝试正在处理此通信接口,例如:

ethtool -K eth0 rx off tx off 

如果它的eth0上禁用校验和卸载。

相关问题