UDP报文头部分析

UDP简介:

UDP是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。这时,每个数据段的可靠性依靠上层协议来保证。在传送数据较少、较小的情况下,UDP比TCP更加高效。

UDP协议的特点
UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接传输服务。他也不提供报文到达确认、排序及流量控制等功能。

(1)UDP是一个无连接协议,也就是传输数据之前源端口和目标端口不能建立连接。当它想传输时,就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传输数据的速度仅仅是受应用程序生成数据的速度,,计算机的能力和传输带宽的限制。在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

(2)由于传输数据不建立连接,因此也就不需要维护连接状态。因此,一台服务器可能同时向多个客户机传输相同的信息。

(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很少。

(4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和目标端主机性能的限制。

(5)UDP使用尽最大努力交付,既不保证可靠交付,因此主机不需要维持复杂的链接状态表

(6)UDP是面向报文的。发送方的UDP对应用程序传输下来的报文,添加首部后就想下传送给IP层。既不拆分,也不合并,而是保留这些报文的边界。因此,应用程序需要选择合适的报文大小。

  (7)  UDP支持一对一、一对多、多对一和多对多的交互通信。

 

UDP 报文字段分析:

UDP报文头部分析_第1张图片

 

UDP有两个字段:首部字段和数据字段(数据包数据部分)。

 

UDP报文头部分析_第2张图片

图2-6  UDP数据包格式

 

首部字段很简单,只有8个字节,由4个字段组成,每个字段的长度都是两个字节。

●源、目标端口号字段:占16比特。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。源端口号在需要对方回信时选用,不需要时可用全0。目的端口号在终点交付报文时必须要使用到。

  ●长度字段:占16比特。标明UDP头部和UDP数据的总长度字节,UDP首部的长度为固定的8个字节,加上UDP数据长度就是长度大小,UDP数据长度可以通过wireshark抓包看到。

  ●校验和字段:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。

●伪首部仅仅用来计算校验和,不出现在数据报里。

 

注意的地方:

UDP首部中校验和的计算方法有些特殊。在计算校验和时,要在UDP用户数据报之前增加12个字节的伪首部。伪首部既不向下传送也不向上递交,而仅仅是为了计算校验和。

与IP数据报的校验和只校验IP数据报的首部不同,UDP的校验和是把首部和数据部分一起都校验。

 

伪首部格式:

         

伪首部:共有12字节,包含IP首部的一些字段,有如下信息:32位源IP地址、32位目的IP地址、8位保留字节(置0)、8位传输层协议号(TCP是6,UDP是17)、16位报文长度(首部+数据)。

 

UDP数据发送和接收过程:

传输总过程(发送端)
数据发送是发送到物理链路层的,从应用层开始,经过一层层的数据报文的封装,最终封装成以太网封装格式 和 802.x 封装格式的数据包,通过有线网络或无线网络在以太网上传输数据帧(bit流)。
传输过程(接收端)
接收端和发送端的顺序刚好相反。即分别经过链路层去掉以太网的头部,经过网络层去掉IP的头部,经过传输层去掉UDP的头部,经过应用层得到数据流。就完成了整个的数据传输过程。

UDP的使用场景:
直播:直播对实时性的要求比较高,宁可丢包,也不要卡顿的,所以很多直播应用都基于 UDP 实现了自己的视频传输协议
实时游戏:游戏的特点也是实时性比较高,在这种情况下,采用自定义的可靠的 UDP 协议,自定义重传策略,能够把产生的延迟降到最低,减少网络问题对游戏造成的影响
物联网:一方面,物联网领域中资源少,很可能就是个很小的嵌入式系统,而维护 TCP 协议的代价太大了;另一方面,物联网对实时性的要求也特别高。比如 Google 旗下的 Nest 简历 Thread Group,推出了物联网通信协议 Thread,就是基于 UDP 协议的
总的来说,对于实时性要求较高而且可以容忍部分丢包的视频类传输,可以采用UDP传输协议。
 

你可能感兴趣的:(网络协议)