【问题标题】:How can I get send AND receive timestamps from tcpdump for packets I send over local loopback?对于通过本地环回发送的数据包,如何从 tcpdump 获取发送和接收时间戳?
【发布时间】:2015-12-13 10:23:18
【问题描述】:

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

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

我想看看什么时候发送和接收携带数据的包,什么时候发送和接收ack包——也就是总共4个时间戳。无论我尝试什么谷歌搜索或我通过它的标志,我都无法弄清楚如何在 tcpdump 中执行此操作。

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

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

【问题讨论】:

    标签: tcp timestamp localhost tcpdump


    【解决方案1】:

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

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

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

    请参阅this blog post,了解如何设置连接的netns 命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 2020-09-10
      • 2015-07-07
      • 1970-01-01
      • 2017-02-23
      • 2022-01-09
      相关资源
      最近更新 更多