c++ UDP套接字在一定频率上损坏数据包



我正在开发一个基于UDP的简单文件传输协议。为了确保数据包被正确发送,我对它们进行校验和。在接收的那一刻,损坏的数据包被丢弃。我首先在家里的家庭网络中测试了我的协议。我已经看到它支持几MB/s的上传带宽到互联网,所以我希望它在两台连接到同一个wifi路由器的电脑上表现良好。

发生的事情是,当我达到每秒10000个数据包(数据包只有几个字节!)数据包开始出现大量(大约40%到60%)损坏(校验和失败)。这个问题的原因是什么?任何帮助都将非常感激!

UDP是一种面向无连接的协议-意思是,你可以在任何时候发送UDP数据包-如果有人在监听,他们会收到数据包。如果他们不知道,他们就不会知道。数据包保证到达。

你不能像发送TCP一样发送UDP数据包。您必须单独处理每个包。例如,使用套接字/TCP,您可以写入任意多的数据,并且TCP将在那里获取数据,除非套接字本身溢出。它是可靠的。

UDP不是。如果你发送UDP数据包,它丢失了,它永远丢失了,没有办法恢复它-你必须在你自己的协议层上面做恢复。没有重发,连接不可靠。

虽然有校验和,但它通常是可选的,通常不使用。

UDP是伟大的流数据,如音乐,语音等。有恢复协议,如语音UDP层之上的RTP,可以恢复语音编码器本身的数据。

我敢打赌,如果你在UDP包中放一个计数器,你会注意到,如果你超过一定的带宽,其中一些不会到达,如果你通过交换机/网络连接它,肯定会遇到这种情况。如果你在两台电脑之间直接连接,它可能会在非常高的带宽下工作。

最新更新