gpt4 book ai didi

C++ UDP套接字以一定频率破坏数据包

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:45 25 4
gpt4 key购买 nike

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

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

最佳答案

UDP 是一种面向无连接的协议(protocol) - 意思是,您可以随时发送 UDP 数据包 - 如果有人在监听,他们就会收到数据包。如果他们不这样做,他们就不会。数据包一定会到达。

您不能像发送 TCP 那样发送 UDP 数据包。您必须单独处理每个数据包。例如,使用 socket/TCP,你可以写入任意多的数据,TCP 会把它拿到那里,除非你溢出了 socket 本身。这是可靠的。

UDP 不是。如果您发送 UDP 数据包并且它丢失了,它永远丢失并且没有办法恢复它 - 您必须自己在层上使用自己的协议(protocol)进行恢复。没有重新发送,这不是可靠的连接。

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

UDP 非常适合流式传输数据,例如音乐、语音等。在语音的 UDP 层之上有 RTP 等恢复协议(protocol),可以在语音编码器中恢复数据。

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

关于C++ UDP套接字以一定频率破坏数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23506965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com