复用

UDP 的复用是指:多个程序可以共用一台主机的网络,同时进行通信。

UDP 支持的通信模式

UDP 支持 一对一一对多多对一多对多的通信。

UDP 报文不分片

UDP 的不分片是指:对于应用层传来的数据,就算数据很大,也不会进行分片,直接包装成一个 UDP 数据报。至于 IP 数据报会不会分片,并没有影响。网络层的分片和重组对传输层来说是透明的

数据格式

image.png

长度字段:包括 UDP 首部和数据字段的总长度,单位是 1B。注:不包括伪首部。
差错校验:这个字段是可选的,如果不想进行差错校验,这个字段就填写0

差错校验

接收方收到有差错的 UDP 报文,就丢弃,并使用 ICMP 报告错误信息

伪首部
伪首部并不实际存在于数据报内,只有在进行差错校验时才需要。

生成校验和
生成校验和之前,需要对数据做一些处理:

  • 添加伪首部:其中伪首部的长度就是 UDP 的长度
  • 将校验和字段设为全 0
  • 数据部分进行 2B 对其,不足补 0

得到的结果是 2B 对其的,对于每个 2B 的二进制数,进行按二进制反码计算出这些数字的「和」,将得到的「和」再进行反码运算,就得到了校验和。

利用校验和进行差错校验
接收方在进行校验之前,同样需要对 UDP 数据报做处理:添加伪首部,补齐数据字段。
然后对于每个 2B 的数,按照二进制反码计算出数字的「和」,若无差错,得到的「和」应该是 1