内网udp组播丢包问题可否完全避免?

事实上UDP组播的丢包是不可能完全避免的,只能尽可能地降低丢包率。
之前在项目中用到了大数据包的组播,我使用了以下几种策略把丢包率降到了最低(若无异常几乎不丢包)。
先说说我项目应用的情况。
内网为万兆光纤(通过万兆交换机连接),数据来源是外部设备采集数据,传输的数据量大概300MB/s。操作系统为windows Server 2008 R2 64bit。
思路:尽量使用大数据包传输,我们知道UDP一个包最大是64KB,而MTU最大是1460Byte,设备采集的数据可能并不是MTU整数倍,所以需要对原始的数据包做一定的处理。综合考虑拆分效率与实际环境测试后,我最后决定将收到的数据包拆分为8096Byte大小的包。随后我做了下面的策略:
1、设置网卡允许大数据包传输。 (若不开启则遇到大数据包网卡会直接丢弃)
2、拆分数据包为8096Byte发送(8096是最大的包,不足8096的则直接发送)
3、设置Socket的接收与发送缓冲区大小为3GByte(理论上是10s的数据缓冲),之前以为这个缓冲有限制,实际上好像并没有。
4、降低收发端单个cpu的使用率(实际试验过程中发现某个cpu高占用会引起网卡丢包)
最近发现单个CPU的使用率与网卡的RSS 设置有关系Network Settings, Network Teaming, Receive Side Scaling (RSS) \u0026amp;amp; Unbalanced CPU Load
■网友
【内网udp组播丢包问题可否完全避免?】 数据比较多,路由器比较烂,就别用组播了,直接广播不经过路由器,丢包问题很少

■网友
协议本身问题无解。你想不丢包就用tcp。
■网友
组播的故障点多一些。 建议抓包确认原因,找到故障点,可先检查是否交换机档次太低,再检查程序。
■网友
百度UPD丢包,第一个链接UDP主要丢包原因及具体问题分析想要杜绝直接socket


    推荐阅读