Networking UDP消息是如何接收的?

Networking UDP消息是如何接收的?,networking,tcp,udp,Networking,Tcp,Udp,所以无论我在哪里读到关于UDP的任何东西,人们都会这样说 消息可能会被无序接收 有可能一个消息根本就没有到达 第一个我不清楚。这就是TCP可能发生的情况: 我发送1234,客户端接收12,然后接收34 所以没问题;只需预先设置消息长度,就可以了。毕竟,一个整数总是4个字节,所以即使客户端在2 goes中接收到前置长度,它也会知道继续读取,直到它至少有4个字节知道msg长度 不管怎样,回到UDPUDP,当人们说“包裹可能会被损坏”时,现在的情况是什么 如果是,我根本不知道如何让UDP为我工作。客户

所以无论我在哪里读到关于UDP的任何东西,人们都会这样说

  • 消息可能会被无序接收
  • 有可能一个消息根本就没有到达
  • 第一个我不清楚。这就是
    TCP
    可能发生的情况:

    我发送
    1234
    ,客户端接收
    12
    ,然后接收
    34

    所以没问题;只需预先设置消息长度,就可以了。毕竟,一个整数总是4个字节,所以即使客户端在2 goes中接收到前置长度,它也会知道继续读取,直到它至少有4个字节知道msg长度

    不管怎样,回到UDP
    UDP
    ,当人们说“包裹可能会被损坏”时,现在的情况是什么


    如果是,我根本不知道如何让UDP为我工作。客户怎么知道是什么?

    通常的比喻是:

    • TCP是一种电话交谈:话语的到达顺序与他们所说的相同
    • UDP正在通过邮件发送一系列信件:信件可能会丢失,可能会到达,并且可以以任何顺序到达
    TCP还涉及到连接:如果电话线被雷雨中断,连接中断,必须重新建立。(您需要再拨一次)


    UDP是无连接且不可靠的:如果邮递员被卡车撞到,一些信件可能会丢失。一些信件也可以由其他邮递员取走和递送。如果你的邮箱满了,甚至没有任何理由,信件都可能掉在地上。

    一个网络完全有可能有许多路径到达给定的点,因此一个数据报可以通过一条路径到达另一端,另一个数据包可以通过另一条路径。因此,发送的最后一个数据包可能在另一个数据包之前到达。UDP没有采取任何措施来纠正这一点,因为没有连接的概念,也没有顺序传递

    此时,这取决于您如何发送数据。对于UDP,每个send()或类似调用发送一个UDP数据报,recv()接收一个数据报。一个数据报可以相对于其他数据报重新排序,或者完全消失。数据不能在数据报中重新排序或删除,您要么完全接收到发送的消息,要么根本没有接收到它


    如果您需要数据报/消息按顺序到达,您需要在数据包中添加一个序列号,在接收端排队并重新排序。

    是B。您是否获得数据报。请搜索“TCP vs UDP”,您将找到许多有帮助的文章you@falsetru所以在UDP中,无论消息大小如何,在多个段中接收一条消息是完全不可能的?或者它们可以是多个段,但这些段可以保证正确排序吗?这个问题似乎是离题的,因为它是关于网络协议如何工作的。常见问题解答会告诉您,此站点用于编程问题。这不是一个编程问题,而是一个网络协议问题。在我们的一些观点中,这超出了本网站的范围。感谢您花时间回答我的问题,但这实际上并没有回答我的问题,因此我选择了另一个问题。
    数据不能在数据报中重新排序或删除,这就是我的问题的答案。谢谢你!
    
    A) Send `1234`, client receives `34` and then `12`
    B) Send `1234` and `5678`, client receives `5678` and then `1234`