Chinaunix

标题: 关于两台电脑直连情况下UDP程序丢包的奇怪问题 [打印本页]

作者: 还不错    时间: 2011-02-24 11:29
标题: 关于两台电脑直连情况下UDP程序丢包的奇怪问题
开发了一个UDP的小程序,测试A->B->A的丢包情况,A和B是两台仅装了xp操作系统的裸机(除了驱动未装任何其他软件,后来装了抓包软件),两台电脑直连。
出现了一个很奇怪的现象:
在1000条/秒的情况下发送64字节和128字节的包会固定的每隔准确的10分钟丢几个包(2~3个),后来在测试程序运行的同时通过Ethereal软件抓取UDP包分析,发现是没有丢包的。
在2000条/秒和500条/秒的速率情况下均不会出现丢包的情况。
是用C开发的socket程序发送UDP包。

大侠们帮我想想问题出在什么地方?在线等
作者: 还不错    时间: 2011-02-24 11:42
刚看到一个帖子写的“因为每隔10分钟会更新一次arp,所以为了确保UDP的不丢包,你最好每隔5分钟就发一次arp请求,然后更新自己的arp列表,如果网络状态良好的话,能保证UDP的0丢包率 ”

不知道是否系统会自动每隔10分钟更新一次arp,更新arp会影响到udp丢包吗?如何设置arp不更新?
作者: hellioncu    时间: 2011-02-24 11:48
用UDP,就得考虑好丢包的应对措施
作者: lwrsmy    时间: 2011-02-24 11:56
通过Ethereal软件抓取UDP包分析,发现是没有丢包的。
应该是数据接收端来不及处理数据,虽然数据传输成功,但缓冲区大小一定,多余的数据包会被丢弃
作者: 还不错    时间: 2011-02-24 11:57
通过Ethereal软件抓取UDP包分析,发现是没有丢包的。
应该是数据接收端来不及处理数据,虽然数据传输成功, ...
lwrsmy 发表于 2011-02-24 11:56



    但来不及处理的话发包速度加快1倍应该更容易出现丢包呀?
作者: lwrsmy    时间: 2011-02-24 11:57
udp丢包:
发送过快 网络问题 接收端数据处理能力不足
作者: lwrsmy    时间: 2011-02-24 12:01
但来不及处理的话发包速度加快1倍应该更容易出现丢包呀?
还不错 发表于 2011-02-24 11:57



    但是你接收端抓包分析正确的话,说明包已经到达客户端了。
我也觉得奇怪,如果你的实验结果正确的话
作者: lwrsmy    时间: 2011-02-24 12:12
我觉得这是个随机事件
后面1500正确到达 但前面的1000又出现问题
是不是进程调度方面的问题
如果1000条出现错误,则相同条件下,1500也应该出现错误
唯一的不同就是接收端处理数据时性能出现了差异
我觉得是调度方面的问题  接收端程序执行时间出现了差异
作者: 还不错    时间: 2011-02-24 12:54
接收端的程序是阻塞在那里接收的。
作者: 还不错    时间: 2011-02-24 13:22
原因应该找到了,就是arp更新列表的影响。

设置arp缓存老化时间设置
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services:\Tcpip\Parameters

ArpCacheLife   REG_DWORD   0-0xFFFFFFFF(秒数,默认值为120秒)
ArpCacheMinReferencedLife   REG_DWORD   0-0xFFFFFFFF(秒数,默认值为600)

说明:如果ArpCacheLife大于或等于ArpCacheMinReferencedLife,则引用或未引用的ARP
缓存项在ArpCacheLife秒后到期.如果ArpCacheLife小于ArpCacheMinReferencedLife,
未引用项在ArpCacheLife秒后到期,而引用项在ArpCacheMinReferencedLife秒后到期.
每次将出站数据包发送到项的IP地址时,就会引用ARP缓存中的项。

设置该值后丢包间隔和设置值一致。目前把该值设置为了FFFFFFFFF正在测试中,不知道不做arp更新对系统其它方面有没有什么影响。
作者: ilex    时间: 2011-02-26 21:02
“测试A->B->A的丢包情况”
是不是A发包给B,B再发给A?

ARP不太了解,
以太网二层交换中,MAC表项的老化在A-->B-->A的情况是不会老化的。

可以查询ARP相关的rfc。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2