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

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 比较好,使用内存映射的方式,如果包很多的话,会发生阻塞,更会加剧
    信息 传输的 不可靠, 建议最一个内存 阀值检查,一旦超过,就 立即停止发送或接收, 过一段时间再发

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

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多