速度快、无连接、不可靠、分组首部开销小
UDP提供不可靠的无连接服务
因为无连接,不用局限于1对1的通信,所以UDP可以服务1对1,1对多,多对多

UDP格式

image.png
其首部长为8B
源/目的端口号:各占2B
UDP长度:占2B,包含包含首部8B+数据部分(可为0B)
校验和:2B
计算方法
数据报校验和计算
数据: 可为0B,实际要考虑20B的IP首部,自身8B首部,使得分片不大于MTU

UDP Q&A

UDP为什么需要伪首部参与校验?
因为无连接
在网络层,端与端之间是通过IP地址辨认的
如下图,IF,假设,在网络层操作IP地址出错了
而且在IP层的校验中,没有检测到该错误


期望情况
UDP数据报,从主机A的进程A(202.100.1.1,50000)-> 传送到主机B的进程B(20.168.2.100,30000)


实际情况
UDP数据报,从主机A的进程A(202.100.1.1,50000)-> 传送到主机C的进程C(20.168.2.200,30000)


假设IP层没有检测出错误
那么在UDP进行校验的时候,如果不检查IP,
因为UDP数据报的端口号对上了,
那么主机C的进程C就会接收原本属于主机B的进程B的UDP数据报,这就问题大了
所以需要IP地址参加校验,
保证一旦传输到,就会是传输到了目的主机的对应进程上
而错误接受的主机也会将该UDP数据报丢弃
UDP(用户数据报协议) - 图2

UDP不可靠的原因?

  1. 不保证数据交付,不确认,不重传,无超时机制
  2. 不保证交付顺序,不设置包序号,不重排,不会发生队首阻塞
  3. 不跟踪链路状态,无连接
  4. 不需要拥塞控制

UDP校验和的目的?
虽然整体不可靠了,但至少保证对于每一个送到的数据报,尽量确保本数据报是正确的