Network programming 什么导致udp接收延迟?

Network programming 什么导致udp接收延迟?,network-programming,udp,delay,sendto,Network Programming,Udp,Delay,Sendto,我注意到,当我从udp套接字以偶数间隔发送数据包时,发送的第一个数据包似乎被延迟。例如,如果我每100毫秒发送一次数据包,我发现在我的网络上接收数据包之间的延迟是正态分布的,平均为100毫秒,平均标准偏差为4。然而,第一个和第二个数据包的接收时间之间的间隔通常在10到40毫秒之间——正如你所看到的,这显然是一个统计上的显著差异,所以我的问题是,是什么导致了它 我在linux上使用C中的sendto函数。有人建议延迟可能是因为arp解析阻止数据包发送,直到目标ip被转换为mac地址——这可能吗?如

我注意到,当我从udp套接字以偶数间隔发送数据包时,发送的第一个数据包似乎被延迟。例如,如果我每100毫秒发送一次数据包,我发现在我的网络上接收数据包之间的延迟是正态分布的,平均为100毫秒,平均标准偏差为4。然而,第一个和第二个数据包的接收时间之间的间隔通常在10到40毫秒之间——正如你所看到的,这显然是一个统计上的显著差异,所以我的问题是,是什么导致了它

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

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


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

猜测将毫无用处,激发起来,它会告诉你你需要知道的一切。

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


要解决此问题,请尝试使用arp缓存中的静态条目,其中包含
arp-s ip地址hw_address

这是否在单个LAN上?如果是这样的话,这(可能)取决于ARP和/或主机名解析。如果它跨越一个更大的网络,它可能是任何东西(尽管可能与路由查找和缓存填充有关)。

您已经询问了解决方法。如果需要知道数据包的接收时间,一种可能的解决方法是设置
SO\u TIMESTAMP
socket选项。这将允许您获得目标内核接收每个数据包的时间——然后您可以在后续处理中使用该时间,而不是“当前时间”


可选地,你可以让发送者在它发送的包中包含一个高分辨率的时间戳,并且使用那些。

我没有足够的“名声”来投票给我认为是最好的解决方案,所以我只会说提到ARP消息的人很可能是对的。我认为ARP消息应该只适用于局域网。例如,他们将在wireshark上以“谁拥有192.168.0.24”的身份出现。。。然后会有来自任何声称拥有该IP地址的主机的回复。通过UDP发送到此地址的初始数据包必须获得ARP响应,才能将IP地址解析为以太网MAC地址。。。所以从表面上看,UDP似乎永远不会阻塞。。。然而,这只有在解析ARP地址后才是正确的。我不确定,但我认为如果你发送UDP到一个不在局域网上的地址,它不需要ARP。。。除非找到主网关时出现问题

你可以使用嗅探器来检查它是否与你的计算机有关,或者与数据包传输有关。嘿,谁投了反对票,请发布原因?我正在运行一个非常精简的系统,除了ash和我的程序之外,没有任何东西,我一直很难运行pcap。Wireshark出局了。如果Wireshark出局了,那么tcpdump呢?如果这不起作用,如果你可以使用以太网集线器(而不是交换机),你应该能够远程嗅探网络。是的-我终于成功地实现了这一点,而且数据包的发送间隔似乎正确;延迟必须在接收端。不幸的是我不能-arp命令不可用<代码>-sh:arp:未找到。不过这是一个很好的建议。对我来说,它是包“nettools”(比如ifconfig等)和/sbin/arp中的一部分。这是一个非常基本的工具,几乎在每个发行版上都有,你有什么?我有BusyBox v1.7.2(2010-11-17 12:19:56 GMT)内置的shell(ash)无法打开“/proc/dev/arp”:没有这样的文件或目录。有一个/dev,但没有/proc/dev或dev/arp。我还没有试过ioctl,因为我不想使用静态arp。是的,单局域网。两台机器和一台dhcp服务器通过交换机连接。不太可能是arp,因为我确定数据包是按正确的顺序发送的,而且我确信arp缓存必须持续几秒钟以上。@benubird arp缓存保留取决于操作系统。查看您上次对wireshark建议的评论,似乎是交换机结构中的某些东西导致了延迟。