tcp - 对于通过本地环回发送的数据包,如何从 tcpdump 获取发送和接收时间戳?

标签 tcp timestamp localhost tcpdump

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

当我运行 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/

相关文章:

grails - CamelExchangeException:无法将响应写入...由UnsupportedException引起

java - 通过 TCP 将数据从 Node.js 发送到 Java

firefox - 我该怎么办 : Enter username and password for "" at http://localhost in Firefox browser?

c++ - 如何检测之前连接的 SSL/TCP 套接字上的互联网断开连接?

java - 简单 Scala TCP 服务器中的套接字问题

mysql - 基于变量算法对数组结果进行排序 - MYSQL 和 PHP

java - 来自ZonedDateTime UTC实例的Java日期和时间戳

python - 将 pandas 数据框中的日期时间列转换为秒

python - cgi 脚本无法在浏览器中正确呈现

node.js - Telnet:Windows 7 上的本地主机无法连接到本地主机