我注意到,当我从 udp 套接字以均匀的间隔发送数据包时,发送的第一个数据包似乎被延迟了。例如,如果我每 100 毫秒发送一次数据包,我发现在我的网络上接收数据包之间的延迟呈正态分布,平均为 100 毫秒,平均标准差为 4。但是,第一个和第二个数据包的接收时间之间的差距通常在 10 到 40 毫秒左右 - 正如您所看到的,这显然是一个统计学上的显着差异,所以我的问题是,是什么原因造成的?
我在 Linux 上使用 C 中的 sendto 函数。有人建议延迟可能是由于 arp 解析阻止数据包被发送,直到目标 ip 被转换为 mac 地址 - 这可能吗?如果我重新启动发送程序,第一个数据包再次花费太长时间,并且延迟不一致 - 10 到 40 毫秒是一个相当大的范围。
我需要找出为什么第一个数据包花费的时间太长,以及如何解决它。
编辑:对 pcap 的进一步分析表明发送程序以正确的间隔发送数据包。问题一定出在接收器上,它使用 select() 等待可读套接字,然后调用 recvfrom 并打印数据包。那里有某种我可能不知道的缓冲吗?