文章目录
- 一、UDP数据报格式
- 二、UDP校验和计算
- 1.伪报头
- 2.伪报头结构
- 3.检验和计算
- 三、UDP特点
UDP 的特点:
-
无连接、不可靠,运行快捷:
在传输报文之前不需要建立连接,因此减少了协议开销与传输延时。此外,除了对报文提供可选的校验和之外,几乎没有其他保证数据传输可靠性的措施,若 UDP 检测到差错分组,会直接将分组丢弃。 -
面向报文的传输层协议:
对应用程序提交的报文既不合并也不拆分,而是保留原报文的长度和格式,直接添加 UDP 协议头部后提交给下层 IP协议。
UDP 的不可靠体现在三个方面:
-
丢失:UDP 报文可能会丢失(发送端没有差错重传机制);
-
乱序:无法确保 UDP 报文的接收顺序(对于发送的数据报不会进行编号与重组);
-
重复:出于底层协议栈的实现,接收端可能接受到重复的 UPD 数据报
使用 UDP 时,应用程序必须选择合适长度的报文。若报文过短,则协议相对开销较大;若报文过长,则提交的 TPDU 可能在 IP层被分段,同样会降低效率。
一、UDP数据报格式
-
端口号:包括源端口号与目的端口号,每个端口号的长度为16位;
-
长度:定义了包含报头在内的用户数据包的总长度,共16位,故用户数据包的长度最大为 65535 字节,最小为8字节(只有报头);
-
校验和:校验和为可选的,用来检验整个用户数据包在传输过程中是否出现差错。
UDP报文头的长度为8个字节。
二、UDP校验和计算
UDP 校验和用以核验UDP数据包是否 正确传送到目的进程 与 比特是否发生改变。UDP 校验和的计算包括3个部分:伪报头、UDP报头、应用层数据。
1.伪报头
伪报头是为了防止出现路由选择错误的数据段。伪报头含有源地址、目的地址等信息,而UDP 数据报本身只包含目的端口号,故伪报头来自于 IP报头,在计算 UDP校验和之前,UDP必须先从IP层获取有关信息。
之所以称为伪报头,是因为其本身不是用户数据报的真正头部,只是在计算的时候与用户数据报连接在一起。
2.伪报头结构
其中 IP分组报头的协议号17表示 UDP,前面填充1字节的0。UDP长度为UDP数据报的长度,不包含伪报头。3.检验和计算
计算时,先将检验和字段置为0,然后将伪报头与用户数据报作为整体计算,以16位为单位,依次相加,并将溢出的进位回卷。
UDP的校验和计算(差错控制方式)只能对由链接引起的字节位错误,且除了对出错的数据报进行丢弃之外,并没有其他的弥补措施。
三、UDP特点
-
UDP 支持一对一、一对多与多对多的交互式通信,这是 TCP 所不能提供的。
-
UDP 最短报文长度只有8B,而 TCP 协议最短报文长度为20B。
-
UDP 没有拥塞控制,网络拥塞时不会要求源主机降低报文发送速率,而是会直接丢弃个别报文。