我正在使用带有应用程序的 2 台计算机来发送和接收 udp 数据报。没有流量控制,ICMP 被禁用。通常,当我通过应用程序将文件作为 UDP 数据报发送时,我会收到两个数据包更改它们的顺序,因此 - 数据包丢失。
我已经禁用了某种防火墙,并且计算机之间没有连接硬件开关(它们是直接连线的)。
有没有办法确保 Winsock 并send()
以与到达那里相同的方式发送数据包?
还是操作系统正在这样做?
还是需要网络设备配置?
UDP 是一种轻量级协议,在设计上不处理数据包排序之类的事情。如果您想要稳健的数据包传递和排序,TCP 是更好的选择。
UDP 通常设计用于数据包丢失可接受或优于 TCP 必须重新请求数据包时产生的延迟的应用程序。因此,UDP 通常用于媒体流。
如果您仅限于使用 UDP,则必须开发一种方法来识别乱序数据包并对其重新排序。
UDP 不保证您的数据包会按顺序到达。(它甚至不能保证您的数据包会到达。)如果您需要那种级别的健壮性,那么最好使用 TCP。或者,您可以在数据报中添加序列标记并在另一端重新排列它们,但为什么要重新发明轮子呢?
没有流量控制(ICMP 禁用)
您可以使用 UDP 实现自己的流量控制:
有关详细信息,请参阅滑动窗口协议。
[这将是您发送的数据包中的序列号的补充。]
尝试创建自己的 TCP 类包装器是没有意义的。我们喜欢 UPD 的速度,这只会减慢速度。如果您设计协议以使每个 UDP 数据报彼此独立,则可以克服您的问题。只要报头数据包先到达,我们的数据包就可以按任何顺序到达。标头表示应该到达多少数据包。此外,自从这篇文章在十多年前创建以来,UPD 变得更加可靠。不要试图