快速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之间,并且稍大。

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

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

我想要的是:

  • 从一台机器发送数据包到另一台
  • 没有第一台机器等待任何回应
  • 数据包间隔为1us

使用ping命令和它提供的选项(如果它们足够的话)会更好。 我有pipe理员权限。


更新

我的目标是测量不同电缆在数据包上引入的延迟。 所以我需要准确的数据包生成和捕获。 在硬件方面,我有适当的工具,但我没有得到我所期望的。 我相信问题是与软件。

对我来说,问题在于,当我使用-i选项时,ping似乎不像预期的那样工作。 当我使用-f -l 1000000 ,捕获每3us发送一次到5us。 当我指定-f或不指定这两者时,数据包每隔12ms产生一次。

一般来说,我认为我无法控制广播ping的数据包距离。

ping -f 不会等待远程方回复。

然而,从硬件(CPU)和软件(IP堆栈)组合中,连续数据包之间的1us延迟可能太多了。

要最大限度地提高性能(并尽量减less发送延迟),请尝试禁用任何电源pipe理function,或至less使用performance CPU调速器。

可能您会在延迟和吞吐量之间造成混淆。 发送1个数据包并测量其延迟以确定延迟就足够了。 所有你需要的是一个高精度的测量时间的机制。 一种方式是PTP(精确时间协议) – 即发送方将时间戳附加到发送的数据包。 WRT吞吐量,数据包的大小是至关重要的 – 默认情况下,ping将是64字节长。