比方说,我的程序通过网络(UDP)发送一个1000个字节。 它保证了接收器将接收1000个字节的一个“批量”? 也许他将需要执行几夭“读取”,直到他将收到的整条消息? 如果是后者是真实的,我怎么能保证数据包的同一消息的顺序没有得到“混淆”(按顺序),或者该协议保证呢?
编辑 :那就是,确实有可能,我的邮件将被分割到几夭包? (如果我尝试发送一个消息10000MB,然后什么发生?)
Answer 1:
你会得到它全有或全无。
但你会在它们被发送的顺序恰好一次收到的数据包没有特别的保障; 分组丢失,重新排序和(通常更小)的重复都是可能的。
有一个最大帧大小(65507个字节),发送()坏较大的大小的分组将返回错误。
您必须提供足够的缓冲区能够容纳整个框架在一个电话。
UDP报文可以分割成多个IP碎片,但操作系统会下降一个不完整的数据包。 因此,这是透明的应用程序。
Answer 2:
接收器将得到整个包在一个呼叫。 该数据包的长度是有限的,即使是在理论 :
长度A的16比特的字段,用于指定在整个数据报的字节长度:报头和数据。 最小长度为8个字节,因为这是在报头的长度。 区域尺寸设定的65,535字节(8字节首标+ 65527个字节的数据),用于UDP数据报的理论限制。 用于由底层IPv4协议强加的数据长度的实际限制是65507个字节。
然而,真正的限制是非常低得多,通常是安全的假设512个字节。 见什么是互联网上最大的安全UDP数据包大小 。
Answer 3:
使用UDP发送的数据中分组数据包 ,因此,如果您发送的字节x量则IF接收器接收,他将收到的字节量X包。
然而,你的数据包甚至可能没有到达,或者他们可以到达的顺序。
Answer 4:
UDP,TCP不同,并不是一个可靠的协议。 它没有提供内置的机制来保证数据包以正确的顺序到达,甚至根本到达。 这就是说,你可以写你的发送/ recv的程序在锁步的方式,其中每一个数据包发送时间,发送者必须等待重新发送之前收到ACK。 如果ACK未一些指定的超时之后接收,该分组必须重新发送。 这样可以确保数据包的正确顺序接收。 (有关详细信息,请参阅为TFTP协议RFC ,它使用这种策略。)
最后,如果可能的话,你可能要考虑使用TCP来代替。
Answer 5:
随着UDP精简版 ,您可以要求获得部分损坏的数据包。 这对于视频和VoIP服务的有用。