确保UDP中的数据包顺序

时间:2010-09-19 09:14:18

标签: windows udp winsock packet

我使用2台带有应用程序的计算机来发送和接收udp数据报 没有流量控制(禁用ICMP)
经常当我通过应用程序将文件作为udp数据报发送时,我得到2个包改变他们的订单,因此 - 包丢失。

有没有办法确保winsock和send()以与他们相同的方式发送数据包? 或者操作系统在做什么?我已经禁用了防火墙,并且计算机之间没有连接硬件开关(它们是直接连接的)。 需要网络设备配置? 感谢

4 个答案:

答案 0 :(得分:10)

UDP是一种轻量级协议,设计上不处理数据包排序等问题。如果您需要强大的数据包传输和排序,TCP是更好的选择。

UDP通常设计用于丢包可接受或优于TCP必须重新请求数据包时发生的延迟的应用程序。因此,UDP通常用于媒体流。

如果您仅限于使用UDP,则必须开发一种识别无序数据包并重新排序的方法。

答案 1 :(得分:7)

UDP不保证您的数据包按顺序到达。 (它甚至不能保证您的数据包将全部到达。)如果您需要这种级别的健壮性,那么最好使用TCP。或者,您可以在数据报中添加序列标记,并在另一端重新排列它们,但为什么要重新发明轮子?

答案 2 :(得分:4)

有没有办法确保winsock和send()以与它们相同的方式发送数据包?

它叫做TCP。

或者尝试可靠的UDP协议,例如UDT。我猜你可能在一个小型嵌入式平台上,所以你想要一个像贝尔实验室RUDP这样更紧凑的协议。

答案 3 :(得分:0)

  

没有流量控制(禁用ICMP)

您可以使用UDP实现自己的流量控制:

  • 发送一个或多个UDP数据包
  • 等待确认(作为另一个UDP数据包从接收方发送到发送方)
  • 重复上述

有关详细信息,请参阅Sliding window protocol

[除 在您发送的数据包中有序列号外。