UDP数据包大小和片段

时间:2011-05-24 00:35:52

标签: udp

假设我正在尝试使用udp socket发送数据。如果数据很大,那么我认为数据将被分成几个数据包并发送到目的地。

在目的地,如果有多个传入数据包,那么如何将这些分离的数据包合并到原始数据包中?我是否需要一个基于发件人保存所有传入udp的数据结构?提前谢谢..

3 个答案:

答案 0 :(得分:4)

如果您只是使用单个send()调用在一个数据报中发送数据,那么传输层将为您完成碎片和重组。您需要做的就是为recv()提供足够大的缓冲区,如果所有碎片都已到达,那么它们将被重新组装并作为单个数据报呈现给您。

基本上,这是UDP为您提供的服务(其中“数据报”是由单个send()调用发送的单个数据块):

  • 数据报可能根本没有到达;
  • 数据报可能与其他数据报无序到达;
  • 数据报可能不止一次到达;
  • 如果数据报 到达,它将完整且正确 1

但是,如果您自己在应用层执行将数据划分为多个UDP数据报,那么您当然也有责任重新组装它。


1。无论如何,纠正UDP校验和所暗示的概率。

答案 1 :(得分:0)

你应该使用TCP。 TCP适用于需要按特定顺序到达而不会被丢弃的结构化数据。

另一方面,在大约500毫秒后数据包变得无关时使用UDP。这用于游戏,电话等。

答案 2 :(得分:0)

如果您的问题需要UDP,那么您需要自己处理任何丢失,重复或无序的数据包,或者至少编写能够适应这种可能性的代码。

http://en.wikipedia.org/wiki/User_Datagram_Protocol

如果您无法承受丢失的数据包,那么TCP可能是比UDP更好的选择,因为它提供了开箱即用的保证。