速度快、无连接、不可靠、分组首部开销小
UDP提供不可靠的无连接服务
因为无连接,不用局限于1对1的通信,所以UDP可以服务1对1,1对多,多对多
UDP格式
其首部长为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不可靠的原因?
- 不保证数据交付,不确认,不重传,无超时机制
- 不保证交付顺序,不设置包序号,不重排,不会发生队首阻塞
- 不跟踪链路状态,无连接
- 不需要拥塞控制
UDP校验和的目的?
虽然整体不可靠了,但至少保证对于每一个送到的数据报,尽量确保本数据报是正确的