5.7.1 UDP概述
用户数据报UDP协议是在IP数据报服务之上增加了两个内容
- 端口的复用和分用
- 差错控制
一、UDP特点
UDP特点 | TCP特点 |
---|---|
无连接 | 面向连接 |
不可靠的服务 | 可靠的服务 |
点到点和多点通信 | 点到点的通信 |
首部8字节 | 首部固定部分20字节 |
面向报文 | 面向字节流 |
- UDP是无连接的服务,也就是说UDP在数据传送前不需要与对方建立连接,UDP的主机不需要像TCP一样维持复杂的有限状态期机制
- UDP提供的是不可靠的服务,这其中我们应该知道在UDP中数据可能不按发送顺序到达对方,数据也有可能出现重复,甚至出现丢失的情况。
- UDP同时支持点到点和多点之间的通信,尤其是对网络的实时应用,比如IP电话,视频会议等,这是UDP非常重要的特性,如果网络中出现拥塞,UDP不会使得源主机发送速率有所降低。
- UDP的首部只有8个字节的开销,报文首部信息比较少,因此开销较小。
- UDP是面向报文的,发送方的UDP协议对应用进程交付的报文是直接封装成UDP的用户数据报,之后就向下交付给网络层进行处理。而接收方的UDP协议对网络层交付的UDP用户数据报去除首部信息后根据端口递交给相应的应用进程。这里需要说明的是UDP适合于传输比较短的数据报文。
在前面我们学习IP数据报格式(5.2.3 IP数据报(一)IP数据报的格式)时我们知道源端有可能会产生分片(5.2.5 IP数据报(三)IP数据报的分片与重组),这个分片指的就是UDP协议的情况,对于UDP用户数据报而言由于UDP数据不会对其进行分段,因此应用进程交付下来的报文如果比较大,大于了网络层的最大传输单元MTU,此时就有可能在源端的网络层进行IP的分片,需要注意的是IP数据报如果携带的是UDP的数据,当IP数据报进行分片时只有第一个分片中带有UDP的首部或其他的信息,其余的分片就只有IP的首部,到达另外一个终端之后根据IP首部信息,再把传输层的内容进行重组。
二、UDP用户数据报在Wireshark中的样子
如图是UDP用户数据报在Wireshark中的样子。
-
其实在网络中传输的都是二进制的比特流,也就是我们所说的电信号或者光信号表示的二进制的比特流。
-
为了表示方便在Wireshark的detail面板中使用的十六进制数进行描述,这样看起来要简洁一些,就是图中的分组字节流显示的内容
-
但是我们依旧看不出来有什么含义,所以在Wireshark中将十六进制数根据网络实际传输的报文,拆解成有意义的字段内容,显示在Wireshark中的分组详情面板,比如我们把UDP的16进制数据分成UDP的首部和UDP的数据。在UDP的首部中我们进一步的将其拆解成源端口,图中所示53699,目的端口32761,长度图中为76,校验和为16进制数的0afd,数据部分为68字节内容。
-
为了便于理解这里我们使用二维图形显示UDP首部内容。每一行四个字节,所以首部一共占两行8个字节。UDP数据68字节。
源端口53699 目的端口32761 长度76 校验和0afd 数据68字节
通过上面的过程整个UDP就相对形象很多。
三、UDP协议格式首部
UDP用户数据报由两个部分组成,第一个部分是UDP的首部,第二个部分是UDP的数据,这里我们先来学习UDP首部格式。UDP首部主要由4个字段组成,每个字段各占2个字节16个比特位。
- 源端口字段:标识了是从哪一个应用进程的端口交付的数据。
- 目的端口字段:标识到达目的主机应用进程的端口号。
这里的端口只有本地意义,它还需要与IP地址结合在一起才能显示出其具体的含义。
- 长度字段:UDP数据报的长度,它是以字节为单位的
这里需要注意的是长度字段的值是包括了UDP首部的8个字节在内的。
- 校验和字段:用于接收方校验收到的UDP用户数据报的正确性,后面我们学习其计算过程。