UDP数据包大小和碎片

问题描述

| 假设我正在尝试使用udp套接字发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。 在目的地,如果传入的数据包不止一个,那么如何将那些分开的数据包合并为原始数据包?我是否需要一个基于发件人保存所有传入udp的数据结构?提前致谢..     

解决方法

如果您只是使用单个“ 0”调用在一个数据报中发送数据,则传输层将为您完成分段和重组。您需要做的就是为ѭ1提供足够大的缓冲区,如果所有片段都到达了,则它们将被重新组装并作为单个数据报呈现给您。 基本上,这是UDP为您提供的服务(其中\“ datagram \”是由单个“ 0”调用发送的单个数据块): 数据报可能根本没有到达; 数据报可能相对于其他数据报无序到达; 数据报可能会不止一次到达; 如果数据报确实到达,它将是完整且正确的1。 但是,如果您自己在应用程序层将数据划分为几个UDP数据报,那么您当然也将负责重新组装它。 1.仍然以UDP校验和所隐含的概率进行更正。     ,您应该为此使用TCP。 TCP用于需要按一定顺序到达而不被丢弃的结构化数据。 另一方面,当数据包在约500 ms之后变得不相关时,使用UDP。这用于游戏,电话等。     ,如果您的问题需要UDP,则您需要自己处理所有丢失,重复或乱序的数据包,或者至少编写可恢复这种可能性的代码。 http://en.wikipedia.org/wiki/User_Datagram_Protocol 如果您无法承受丢失的数据包,那么TCP可能比UDP更好,因为它提供了开箱即用的保证。