UDP协议

UDP的特点

UDP协议非常的简单,它几乎没在IP层上增加什么功能。下面来看看UDP协议的一些特点:

  • UDP是无连接的,尽最大努力的交付。发送数据之前不会提前通知,它只管发,你能不能接受到它是不管的。
  • UDP是面向报文的,应用程序给它什么内容,它在内容前封装一个首部就转发给下面的IP层。它是不管内容的多或少的,你给我什么,我就发什么。对于,它的无脑操作,那么应用进程就需要选择好合适的大小了。以免过大的数据包,在IP层被拆分,营销效率。
  • UDP支持一对一、一对多和多对多的通信,对于TCP仅支持点对点的通信这点来看,UDP这点好像还算干的不错。
  • UDP首部简单,是固定的8字节。

基于UDP的上述特点,可以猜想出它的一些应用场景:

  • 适用于网络比较好的环境,对丢包不敏感。
  • 需要进行广播的场景,比如DHCP协议就需要使用广播,所以它使用的UDP协议。
  • 传输效率高、速度快的场景,比如视频直播,一般视频直播丢失了几帧是无关痛痒的。

UDP首部格式

上述已经说过,UDP首部时固定的8字节。相对于TCP,它的首部开销是非常小的。

QQ%E6%88%AA%E5%9B%BE20201215103220 - UDP协议

  • 源端口号,占2字节
  • 目的端口号,占2字节
  • 首部长度,占2字节
  • 校验和,占2字节

目的主机如果接受到了非法端口号的UDP数据包,就会丢弃该数据包,然后向源主机发送ICMP的差错报文“端口不可达”。traceroute命令就是利用该特点来获取两个主机之间的路径信息的。

UDP的校验方式有些特殊,它在校验时,需要零时在首部添加12字节的伪首部。伪首部是在只校验时用到,校验完成后就丢弃。另外,它和IP数据报只校验首部不同,它会校验首部以及数据部分。