首页 > 代码库 > UDP用户数据报协议和IP分组

UDP用户数据报协议和IP分组

UDP总体的封装格式例如以下:


以下是8字节UDP首部:


当IP层依据协议字段把UDP报文向上传送到UDP模块后,UDP模块再依据port号将数据发送到对应的进程中,以此实现进程到进程间的通信。

16位UDP长度代表UDP首部和UDP数据的总字节数。长度最小能够为8,即数据段不包括实际内容。

下面是抓包结果:


不同于TCP,UDP协议的接收方在接收数据后不会返回不论什么确认信号,发送方仅仅管发,至于有没有成功到达,一概无论。而且在開始发送之前也不会进行不论什么通信。

当UDP报文的长度大于MTU时,IP层就须要进行分片了。下面介绍IP层分片。

物理网络层一般要限制每次发送数据帧的最大长度,这个最大长度称为最大传输单元(MTU)。IP层在发送一个IP数据报之前须要询问下一跳接口的MTU大小,假设待发送的IP数据报大小大于MTU,则须要进行分片。所以,分片既能够发生在原始发送端主机上,也能够发生在中间路由器上。但数据报的重组仅仅在终于目的端进行。无论是分片还是重载,都是在IP层进行的,对上层来说这些操作是透明的。

IP首部中的下列字段为数据的分片和重组提供了信息:
  • 16位标识。唯一地标识主机发送的每一份数据报,通常每发送一份报文它的值就加1。注意,一个数据报分片后的各个分组中,标识字段是同样的,即表示同一个IP数据报
  • 3位标志。指导重组的一些标记。比如:
    • 一个bit作为“很多其它的片”位,表示接下来还有很多其它兴许分组。
    • 一个bit作为“不分片”位,表示不正确数据报进行分片。
  • 13位片偏移。该片偏移原始数据报開始处的位置。
IP数据报分片后成为一个个的分组,这些分组都拥有各自的IP首部,路由选择时也是相互独立的。它们到达目的端时有可能会发生失序,但利用各自的IP首部中的信息,全然可以又一次恢复成原始的IP数据报。这里须要注意,不论什么运输层首部仅仅出如今第一片数据中

比如要发送1473字节的用户数据,那么总的IP数据报长度 = 20字节IP首部 + 8字节UDP首部 + 1473字节用户数据 = 1501字节,超过了以太网规定的1500字节的MTU,所以须要进行分片,例如以下图所看到的:


注意上图,分组1中包括了UDP首部信息,而兴许分组并不包括UDP首部。

參考:
《TCP/IP具体解释》第11章。

UDP用户数据报协议和IP分组