UDP丢包的问题

14 篇文章 0 订阅

最近在忙着解决一个UDP丢包的问题。

首先说说环境。

  • 网络环境很理想,万兆内网,主机之间使用一台光纤交换机连接并无任何中间节点;
  • 环境中的所有主机操作系统均为win2008Server x64 128G,CPU 32核 2.8GHz
  • 一台主机发送数据(通过UDP组播),其它主机接收
  • 发送数据的主机开启8路组播端口,每路发送数据很均匀为51.2MBps。(总数据量为8*51.2Mbps)
  • 接收数据的主机同样开启8路组播端口接收数据。并同时保存数据,需要保证平均每1分钟以上才会发生丢包

 问题来了

我在实际测试的时候发现;单独存储数据或单独接收组播数据都能达到要求(存得过来,也能保证丢包率稳定在允许范围内),但是边收边存就会导致丢包率猛增。

解决思路

在看过下面的博文后,得知磁盘IO操作频繁会导致CPU等待而不能及时处理内核socket缓冲区中的udp数据包 (ps:该文前面所说的MTU限制并不适用于我当前的内网环境)
  1. 该文所说的磁盘IO操作与SOCKET缓冲区的抢夺CPU是否正确?
  2. 是否有方法规避该问题 ,比如单个存储文件的大小与单次写入大小是否存在最佳效率?

浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)

=================================================================================

最新进展:

  • 收数端采用完成端口收数
  • 将UDP收发缓冲区设大(之前记得再某个地方看到UDP收发缓冲最多只能设置64KB,也没有验证便相信了,事实证明,WinSock的收发缓冲区没有这个限制)
  • 升级网卡驱动以及BIOS驱动
  • 内存映射文件视图设小

    以上设置后,网络丢包明显下降,但是否能达到稳定的要求,还需要拭目以待。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值