network-programming - 是什么导致udp接收延迟?

标签 network-programming udp delay sendto

我注意到当我从 udp 套接字以均匀的间隔发送数据包时,发送的第一个数据包似乎被延迟了。例如,如果我每 100 毫秒发送一次数据包,我发现接收数据包之间的延迟在我的网络上呈正态分布,平均值为 100 毫秒,平均标准差为 4。但是,第一个和第二个数据包的接收时间之间的差距通常约为 10 到 40 毫秒 - 如您所见,这显然是统计上的显着差异,所以我的问题是,这是什么原因造成的?

我在 Linux 上使用 C 的 sendto 函数。有人建议延迟可能是由于 arp 解析导致数据包无法发送,直到目标 ip 已转换为 mac 地址 - 这可能吗?如果我重新启动发送程序,第一个数据包再次花费太长时间,并且延迟不一致 - 10 到 40 毫秒是一个相当大的范围。

我需要找出为什么第一个数据包花费的时间太长,以及如何解决它。

编辑:使用 pcap 的进一步分析表明发送程序正在以正确的时间间隔发送数据包。问题一定出在接收器上,它使用 select() 等待可读套接字,然后调用 recvfrom 并打印数据包。那里有某种我可能不知道的缓冲吗?

最佳答案

这很可能是 ARP 所需的时间地址解析。这是将 MAC 地址解析为 IP 地址的协议(protocol)。

要解决此问题,请尝试通过 arp -s ip-address hw_address 在 arp 缓存中使用静态条目。

关于network-programming - 是什么导致udp接收延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4488890/

相关文章:

java - java中读取串口数据

c++ - 这个小型数据/命令广播应用程序的建议网络拓扑?

c - 确定数据包类型是 IPv4 还是 IPv6

c - 当网络连接不可用时阻止发送 UDP 数据

java - Android可以发送udp但不能接收

google-chrome - 在 chrome 扩展中引入加载时间延迟

sockets - 在winsock中检索套接字的协议(protocol)

c - Linux UDP 套接字/端口重用

javascript - 延迟链接点击

windows-7 - 重新启动/恢复 Windows 后 DNS 查找出现长时间延迟