UDP 的特点

  1. 无需建立连接
  2. 无连接状态
  3. 首部开销小
  4. 没有拥塞控制
  5. 支持一对一、一对多、多对一和多对多的交互通信
  6. UDP 是面向报文的,收到应用层的报文后添加首部就直接给 IP 层,所以报文长度不能太长,不然会被路由器分片,也不能太短,不然会导致 IP 数据报的首部占比大,效率低

UDP 的首部格式

字段长度描述
源端口16b在需要对方回信时使用,不需要可取全 0
目的端口16b目的端口号
长度16b最小值是 8(仅有首部)
检验和16b若不想计算检验和则可取全 0

若接收方 UDP 发现收到的报文中目的端口号不正确,则丢弃该报文,并ICMP 返回“端口不可达”差错报文

UDP 校验

校验和长度为 2B ,初始情况下全 0

  • UDP 的检验要将首部和数据部分一起检验。
  • 计算检验和时要添加一个临时的 12B 大小的伪首部,整个一起计算。、
  • 数据部分不满足 2B 长度的部分用 0 填充

计算过程:

  1. 把加上伪首部的整个 UDP 数据报看成若干个 16bit
  2. 然后二进制反码运算求和再取反,也就是先求和再取反,求出来的结果设置为校验和的值

接收方检验:

  1. 收到数据后,除了检验和字段,其余字段还是按照 16bit 串求和
  2. 求出来的结果加上检验和,若为全 1,则无误,否则有误

Tip

每次对 16bit 串两两相加时,若产生溢出,则将溢出位回卷,也就是溢出的位从低位加回去。