免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3761 | 回复: 6
打印 上一主题 下一主题

请教udp丢包问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-11 10:40 |只看该作者 |倒序浏览
我在sco下调用socket与一个设备通讯,该设备是自行生成处理udp包的。目前发现一个比较奇怪的现象。
   通讯过程:
       sco与设备建立连接后反复从设备取资料。具体为,sco发送一个短包给设备,设备连续发送72包的大包(约1300字节)及一个60字节的小包。这为一次完整的动作,从设备总共取得约92k字节的数据。 反复调用此函数,发现第62次动作中的某一个固定的包总是收不到(即为61*73+某一固定值 的包)。使用其他监控软件发现设备确实发出,该包也完全正确,只是sco没收到。若使用setsockopt函数增大接收缓冲,也仅是丢失的包的位置有变化,但仍是固定的(不同的接收缓冲来其位置不同),而且变化不大。
   这种情况仅在该设备第一次通电后才发生,其后基本不再发生。
   是sco方面的问题吗?为什么每次设备通电后才会发生?即使其后关闭socket重新建立都不再发生?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-06-11 14:08 |只看该作者

请教udp丢包问题

很难确定是SCO的问题。这要看sco和设备的缓冲区处理机制。

第一次通电后,sco能够发送成功,并且能够接受部分。从实现上面将,UDP协议没有负责不丢包的责任。接受不到是有可能的,看你的描述似乎是由于UDP接受缓冲太小导致的。如果设备是连续发送72包的大包(约1300字节)及一个60字节的小包。UDP要么丢弃,要么设备发送的目的不对。对于1300字节的处理应该不会出现什么问题的。

论坛徽章:
0
3 [报告]
发表于 2003-06-11 14:23 |只看该作者

请教udp丢包问题

可能我没说清楚。

   72个大包每个都是约1300字节的,而每次是指sco接收72个大包和1个小包,共约92K字节。我说的第62次是指sco接收了到第62次的92K字节

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-06-11 14:33 |只看该作者

请教udp丢包问题

如果是这样,有可能是SCO的接受缓冲区造成的,倘若你能保证设备发送正确的话。
用ndd或sysconf等工具看看系统中UDP接受缓冲区的大小。

论坛徽章:
0
5 [报告]
发表于 2003-06-11 14:46 |只看该作者

请教udp丢包问题

但我用setsockopt函数将SO_RCVBUF增大了,也没用。
而且若缓冲不够,为何每次都是丢了那个包,且此后又不再丢了?是系统自动适应了吗?
  那为什么我不重启机器,而重启设备后就又在那个位置出问题了?

论坛徽章:
0
6 [报告]
发表于 2003-06-11 14:57 |只看该作者

请教udp丢包问题

应该是操作系统的BUG,可能是用来操作环形队列的某个初始变量设置错误造成的。
向厂商报告,索取patch吧。

论坛徽章:
0
7 [报告]
发表于 2003-06-11 15:03 |只看该作者

请教udp丢包问题

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP