概述
网络中并非所有应用都需要可靠性传输,如视频流,网络通话,丢失一部分数据影响并不大,而且这类应用持续时间都较长,对实时性要求较高,甚至还需要一对多传输。在这种前提下,就不值得花费高昂的代价来做可靠性传输了,一来影响时延一来降低效率。
因此我们需要一种不可靠但实时性较高(也就是传输花销较低)的传输协议,UDP就是为此而生的。
UDP的特征
用户数据报协议(UDP, User Datagram Protocol)是一种无连接的传输层协议,它不必等待连接建立后才能进行通信。该服务对数据的传输提供不可靠、尽力的传输。这意味着数据报是可能被丢失的,也可能出现顺序错误等现象。
它具有如下明显的特征:
无连接性
使用UDP时无需建立连接,使用后自然也无需释放连接。
不可靠性
因为是无连接传输,因此它的传输是不可靠的,很有可能会出现报文直接丢失的现象。
这种特性适合一些短数据的传输,因为对于短数据而言,建立连接的花销太大了,如DNS、DHCP就是采用UDP传输的。
以报文做边界
UDP对应用层报文封装、传输,但不会拆分,也不合并。因此,UDP属于报文流传输。
注意,网络层仍然可以根据MTU对整个报文进行拆分,但这并不是UDP的范畴。
无流量控制及拥塞控制
需要使用UDP传输的数据对连续性的要求更高,因此不能进行流量控制和拥塞控制。
支持各种交互方式
TCP是一对一的连接,而UDP由于无连接,所以可以是一对一、一对多甚至是多对一的。
UDP数据报格式
UDP报文格式比较简单,如下表所示:
大小(比特) | 16 | 16 | 16 | 16 | |
---|---|---|---|---|---|
字段 | 源端口 | 目的端口 | 长度 | 校验和 | 数据 |
它只是将来自应用层的报文在头部加上8个字节的UDP报头即可。
源端口
表示源主机上使用的UDP端口,这个字段是可选的,如果不需要目的主机应答则可以设置为0。
目的端口
表示目的主机上使用的UDP端口,如果目的主机没有对应端口的进程,则报文直接丢弃。
长度
标识UDP数据报整体长度(包含数据部分),由于它占2个字节,因此一个UDP数据报的数据部分理论最大长度为65535字节,因为UDP也是IP数据报,所以要减去IP数据报头和UDP报头。因此理论最大值为:65507字节。
校验和
校验比较特殊,计算时要构造出另一部分的头部放到UDP数据报最前面组合进行计算(但该组合出来的头部不参与传输,仅用于计算校验和)。校验也包括数据部分,校验算法通常使用CRC法。
其另外构造的头部如下表:
大小(比特) | 32 | 32 | 8 | 8 | 16 |
---|---|---|---|---|---|
字段 | 源IP地址 | 目的IP地址 | 保留 | 协议 | UDP长度 |