pc0de 2016-07-31 11:44 采纳率: 100%
浏览 2492
已采纳

windows Server UDP丢包的问题

首先说说环境。

  • 网络环境很理想,万兆内网,主机之间使用一台光纤交换机连接并无任何中间节点;
  • 环境中的所有主机操作系统均为win2008Server x64 128G,CPU 32核 2.8GHz
  • 一台主机发送数据(通过UDP组播),其它主机接收
  • 发送数据的主机开启8路组播端口,每路发送数据很均匀为51.2MBps。(总数据量为8x51.2Mbps)
  • 接收数据的主机同样开启8路组播端口接收数据。并同时保存数据,需要保证平均每1分钟以上才会发生丢包
  • 编码使用C++ WIN32API,磁盘存储使用的内存映射,单个文件最多存储1GB。(内存映射文件应该是效率最高的存储了吧?)

问题来了

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

解决思路

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

浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)http://www.cnblogs.com/linuxbug/p/4906000.html

  • 写回答

1条回答 默认 最新

  • 鱼弦 全栈领域优质创作者 2016-07-31 12:04
    关注

    UPD 丢包很严重的,如果传输的信息安全程度高的话,建议不要使用,使用TCP 比较好,使用内存映射的方式,如果包很多的话,会发生阻塞,更会加剧
    信息 传输的 不可靠, 建议最一个内存 阀值检查,一旦超过,就 立即停止发送或接收, 过一段时间再发

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 jsp在SpringMVC框架中手动设置域对象失效的场景
  • ¥15 stc -isp烧录时显示通信超时
  • ¥15 VS2022的代码折叠加减号不见了怎么办?
  • ¥15 电脑登录粤政易软件,二维码一直空白,或账号密码登录提示服务器登录失败,是什么原因(相关搜索:防火墙)
  • ¥30 微博热门内容爬虫报错
  • ¥15 selenium获取非固定位置的元素
  • ¥50 手写签名不能上传的问题
  • ¥30 linux odbc怎么添加gbase数据库
  • ¥20 电脑开机黑屏,只有一个鼠标,联想zj者y7000
  • ¥20 DXSDK_jun10