我正在尝试在我的机器上运行的模拟网络上运行测试,并希望获得有关我发送的数据包的时间信息,然后通过本地环回接收数据包。
当我运行 tcpdump -i lo
时,我看到通过本地环回发送的每个数据包都有两个数据包:一个带有序列号的数据包,以及一个相关的 ack
数据包。每个只有 1 个与之关联的时间戳。
我想看看携带数据的数据包是什么时候发送和接收的,以及ack数据包是什么时候发送和接收的——也就是总共4个时间戳。我不知道如何在 tcpdump 中执行此操作,无论我尝试使用什么 Google 搜索或标记我通过它。
现在我只得到 2 个时间戳,每个数据包一个。我很确定它们都是数据包的接收时间。
我可能可以使用两台不同的机器来运行此测试,但我现在手头没有另一台机器,如果我这样做,两台机器之间的时钟将无法完美同步,因此时间戳将关闭。
最佳答案
事实证明我在这里要求的是不可能的。当通过本地环回发送时,内核使用纯软件层,因此实际上没有发送 TCP 数据包。
这实际上适用于使用任何设备并向您自己发送数据包——内核会自动优化并且不会实际使用硬件来发送数据包。
为了获得发送和接收时间,您需要通过其他一些外部代理进行路由。或者,您可以使用 netns
假装有两个不同的接口(interface)在您的计算机上运行,然后使用虚拟以太网 (veth
) 连接它们,然后记录 tcpdump
该连接上的数据。
参见 this blog post关于设置连接的 netns
命名空间。
关于tcp - 对于通过本地环回发送的数据包,如何从 tcpdump 获取发送和接收时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34250080/