收到的UDP消息是怎么回事?

时间:2013-07-07 13:12:13

标签: networking tcp udp

因此,无论我在何处阅读有关UDP的任何内容,人们都会这样说;

  1. 可以无序接收消息
  2. 消息可能永远不会到达
  3. 第一个对我来说并不清楚。这是TCP

    可能发生的情况

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

    没问题;只是预先添加消息长度,这一切都很好。毕竟,一个整数总是4个字节,所以即使客户端收到2中的前置长度,它也会知道继续读取,直到知道msg长度至少有4个字节为止。

    无论如何,回到UDP,当人们说'包可以无序接收'时,现在的交易是什么?

    A) Send `1234`, client receives `34` and then `12`
    B) Send `1234` and `5678`, client receives `5678` and then `1234`
    

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

2 个答案:

答案 0 :(得分:1)

通常的比喻是:

  • TCP是一个电话会话:单词以与他们说出的相同的顺序到达
  • UDP正在通过邮件发送系列信件:字母可能会丢失,可能会到达,并且可以按任何顺序到达。

TCP还涉及连接:如果电话线被雷暴中断,则连接中断,并且必须再次建立。 (你需要再次拨打)

UDP 无连接不可靠:如果邮件员被卡车撞到,某些字母可能会丢失。有些信件也可以由其他邮递员领取和发送。如果您的邮箱已满,甚至没有任何理由,甚至可以将信件放在地板上。

答案 1 :(得分:1)

网络有很多路径可以到达给定点,因此其中一个数据报可能需要一条路由到达另一端,另一条数据包可能需要另一条路径。鉴于此,发送的最后一个包可以在另一个包之前到达。 UDP没有采取任何措施来纠正这个问题,因为没有连接和按顺序交付的概念。

此时,这取决于您发送数据的方式。对于UDP,每个send()或类似的调用发送一个UDP数据报,recv()接收一个数据报。数据报可以相对于其他数据报重新排序,或完全消失。数据无法在数据报中重新排序或删除,您要么完全收到已发送的邮件,要么根本不收到该邮件。

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