我使用2台带有应用程序的计算机来发送和接收udp数据报
没有流量控制(禁用ICMP)
经常当我通过应用程序将文件作为udp数据报发送时,我得到2个包改变他们的订单,因此 - 包丢失。
有没有办法确保winsock和send()以与他们相同的方式发送数据包? 或者操作系统在做什么?我已经禁用了防火墙,并且计算机之间没有连接硬件开关(它们是直接连接的)。 需要网络设备配置? 感谢
答案 0 :(得分:10)
UDP是一种轻量级协议,设计上不处理数据包排序等问题。如果您需要强大的数据包传输和排序,TCP是更好的选择。
UDP通常设计用于丢包可接受或优于TCP必须重新请求数据包时发生的延迟的应用程序。因此,UDP通常用于媒体流。
如果您仅限于使用UDP,则必须开发一种识别无序数据包并重新排序的方法。
答案 1 :(得分:7)
UDP不保证您的数据包按顺序到达。 (它甚至不能保证您的数据包将全部到达。)如果您需要这种级别的健壮性,那么最好使用TCP。或者,您可以在数据报中添加序列标记,并在另一端重新排列它们,但为什么要重新发明轮子?
答案 2 :(得分:4)
有没有办法确保winsock和send()以与它们相同的方式发送数据包?
它叫做TCP。
或者尝试可靠的UDP协议,例如UDT。我猜你可能在一个小型嵌入式平台上,所以你想要一个像贝尔实验室RUDP这样更紧凑的协议。
答案 3 :(得分:0)
没有流量控制(禁用ICMP)
您可以使用UDP实现自己的流量控制:
有关详细信息,请参阅Sliding window protocol。
[除 在您发送的数据包中有序列号外。