快速 ping 而不要求响应

快速 ping 而不要求响应

我正在尝试测量两台机器之间的单向延迟,我想用它来从一台机器向另一台机器ping发送ICMP数据包。数据包之间的间隔应该是 1 微秒 (1us),我想发送 100 万个数据包 (10^6),所以发送这些数据包总共需要 1 秒。

另外,我不关心另一台机器的响应(我只会捕获第二台机器上的数据包并对其进行分析)。

现在我已经尝试过:

ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 -b 255.255.255.255

我还尝试停用-l-f选项。当我使用较大的值时,-l我收到警告,提示 rcvbuf 不足以容纳预加载。

我正在使用 tcpdump 捕获从我的机器传出的数据包以及到另一台机器的传入数据包。

问题是数据包之间的间隔大多数情况下在5us到15us之间,或者稍微大一些。

当我直接发送到像谷歌这样的网站时,我遇到了同样的问题:

ping -I eth0 -c 1000000 -l 1000000 -f -i 0.000001 google.com

我想要的是:

  • 将数据包从一台机器发送到另一台机器
  • 第一台机器无需等待任何响应
  • 数据包之间的间隔为1us

最好使用ping命令及其提供的选项(如果足够的话)来执行此操作。我有管理员权限。


更新

我的目标是测量不同电缆对数据包造成的延迟。因此我需要准确的数据包生成和捕获。在硬件方面,我有合适的工具,但我没有得到我所期望的结果。我相信问题出在软件上。

对我来说,问题是当我使用该选项时,ping 似乎无法按预期工作-i。当我使用时-f -l 1000000,捕获每 3us 到 5us 发送一次。当我指定-f或不指定这两个时,每 12ms 生成一次数据包。

通常,我认为我无法控制广播 ping 的数据包距离。

答案1

ping -f将要不是等待远程方回复。

但是,连续数据包之间的 1us 延迟对于硬件(CPU)和软件(IP 堆栈)组合来说要求太高了。

为了最大限度地提高性能(并最大限度地减少发送延迟),请尝试禁用任何电源管理功能,或者至少使用 CPUperformance调节器。

答案2

您可能混淆了延迟和吞吐量。只需发送 1 个数据包并测量其延迟即可确定延迟。您所需要的只是一种高精度测量时间的机制。一种方法是 PTP(精确时间协议)- 即发送方将时间戳附加到发送的数据包。对于吞吐量,数据包的大小至关重要 - 默认情况下 ping 的长度为 64 字节。

相关内容