![如何测量数据包到达的时间?](https://linux22.com/image/24697/%E5%A6%82%E4%BD%95%E6%B5%8B%E9%87%8F%E6%95%B0%E6%8D%AE%E5%8C%85%E5%88%B0%E8%BE%BE%E7%9A%84%E6%97%B6%E9%97%B4%EF%BC%9F.png)
当数据包到达时,NIC 会生成一个中断,然后内核接管。我想测量特定 TCP 流的数据包到达的时间。
我该如何在 Linux 中执行此操作?这就是 tcpdump 等工具的作用。
答案1
tcpdump
为所有数据包添加时间戳。所以你应该能够使用 tcpdump。否则,您可以尝试使用wireshark,它也可以监控网络流量,但具有漂亮且功能强大的GUI。如果您不需要编写此过程的脚本,我想说 Wireshark 在这种情况下是您的朋友。
你可以看一下http://www.howtogeek.com/104278/how-to-use-wireshark-to-capture-filter-and-inspect-packets/有关如何使用 Wireshark 的更多信息。
如果您对如何自己测量这一点更感兴趣,您可以检查tcpdump
或strace
按照建议阅读源代码。strace
将为您提供可以在自己的应用程序中使用的系统调用列表。然而,最简单的解决方案是运行,然后通过或其他能够过滤掉时间戳列的工具来tcpdump
过滤输出。awk
此外,您还可以找到有关如何使用的更多tcpdump
信息http://danielmiessler.com/study/tcpdump/
答案2
看一下 tcptrack 工具。您也许能够衡量这一点。
答案3
你的意思是像吗traceroute
?该-p
选项允许选择协议。
[root@osgiliath ~]# traceroute myserver.mydomain.com -p 443
traceroute to myserver.mydomain.com (10.11.20.30), 30 hops max, 60 byte packets
1 10.119.9.253 (10.10.10.1) 0.262 ms 0.294 ms 0.360 ms
2 10.111.225.114 (10.11.20.14) 0.326 ms 0.387 ms 0.466 ms
3 myserver.mydomain.com (10.11.20.30) 7.558 ms 7.558 ms 7.547 ms