确保UDP中的数据包顺序

即时通讯使用2台计算机与应用程序发送和接收udp数据报。
没有stream量控制(ICMP禁用)
经常当我通过应用程序发送一个文件作为UDP数据报,我得到2个数据改变他们的顺序,因此 – packetloss。

有没有办法确保winsock和send()会以相同的方式发送数据包?
或者是操作系统这样做? 被禁用和种类的防火墙,计算机之间没有连接硬件开关(它们是直接连接的)。 networking设备configuration需要?
谢谢

Solutions Collecting From Web of "确保UDP中的数据包顺序"

UDP是一个轻量级的协议,它在设计上并不处理像数据包排序这样的事情。 如果您想要健壮的数据包传输和排序,TCP是一个更好的选择。

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

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

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

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

它被称为TCP。

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

没有流量控制(ICMP禁用)

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

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

请参阅滑动窗口协议了解更多详情。

[这是除了你发送的数据包中的序列号。]