如何通过本地环回发送的数据包从tcpdump发送和接收时间戳?

时间:2015-12-13 10:23:19

标签: tcp timestamp localhost tcpdump

我正在尝试在我正在我的机器上运行的模拟网络上运行测试,并希望获得有关我正在发送然后通过本地环回接收的数据包的时序信息。

当我运行tcpdump -i lo时,我看到通过本地环回发送的每个数据包有两个数据包:一个带有序列号的数据携带数据包和一个相关的ack数据包。每个只有一个时间戳与之关联。

我想知道何时发送和接收数据传输数据包,以及何时发送和接收ack数据包 - 即总共4个时间戳。我无法弄清楚如何在tcpdump中执行此操作,无论谷歌搜索我尝试了什么或标记我通过它。

现在我只得到2个时间戳,每个数据包一个。我很确定它们都是数据包的接收时间。

我可能使用两台不同的机器运行此测试,但我现在没有另外一台机器,如果我这样做,两者之间的时钟将无法完美同步,因此时间戳将关闭。

1 个答案:

答案 0 :(得分:0)

事实证明我在这里要求的是不可能的。当通过本地环回发送时,内核使用纯软件层,因此实际上没有TCP数据包被发送。

这对于使用任何设备并发送给自己实际上是正确的 - 内核会自动优化并且实际上不会使用硬件来发送数据包。

为了获得发送和接收时间,您需要通过其他一些外部代理进行路由。或者,您可以假装使用netns在计算机上运行两个不同的接口,然后使用虚拟以太网(veth)连接它们,然后通过该连接记录tcpdump数据。

有关设置已连接的netns命名空间的信息,请参阅this blog post