UDP 仅在 IP 层的数据报服务之上增加了两个最基本的功能: 复用和分用, 以及差错检测

UDP 的首部开销小。TCP 的首部开销,而 UDP 仅有 的开销

Transclude of 5.2UDP协议#^rxpedv

报文不可分割, 是 UDP 数据报处理的最小单位

UDP 数据报包含两部分: 首部字段和用户数据字段。

UDP 首部有 ,由 4 个字段组成(源端口,目的端口,长度,检验和),每个字段的长度都是

首部格式及各字段意义

  1. 源端口。源端口号。在需要对方回信时选用, 不需要时可用全 0 。
  2. 目的端口。目的端口号。这在终点交付报文时必须使用到。
  3. 长度。UDP 数据报的长度 (包括首部和数据), 其最小值是 8 (仅有首部)。
  4. 检验和。检测 UDP 数据报在传输中是否有错。有错就丢弃。该字段是可选的, 当源主机 不想计算检验和时, 则直接令该字段为全 0 。

若接收方 UDP 发现收到的报文中的目的端口号不正确 (即不存在对应于端口号的应用进程), 则就丢弃该报文, 并由 ICMP 发送 “端口不可达” 差错报文给发送方。

UDP 计算检验和的方法和计算 IP数据报首部检验和-ipv4的方法相似。不同的是: IP 数据报的检验和只检验 IP 数据报的首部, 但 UDP 的检验和要将首部和数据部分一起检验

  • UDP计算检验和的方法包括发送方和接收方的处理步骤
    • 发送方处理步骤
      • 把全0放入检验和字段并添加伪首部
      • 将UDP数据报视为许多16位的字串接起来
      • 若UDP数据报的数据部分不是偶数个字节在末尾填入一个全0字节但此字节不发送
      • 按二进制反码计算出这些16位字的和
      • 将此和的二进制反码写入检验和字段并发送
    • 接收方处理步骤
      • 把收到的UDP数据报加上伪首部若不为偶数个字节则还需要补上全0字节
      • 按二进制反码求这些16位字的和
      • 当无差错时其结果应为全1否则就表明有差错出现
      • 接收方就应该丢弃这个UDP数据报
  1. 检验时, 若 UDP 数据报部分的长度不是偶数个字节, 则需填入一个全 0 字节, 如图 5.5 所示。但是此字节和伪首部一样, 是不发送的
  2. 若 UDP 检验和检验出 UDP 数据报是错误的, 则可以丢弃, 也可以交付给上层, 但是需要附上错误报告, 即告诉上层这是错误的数据报。
  3. 通过伪首部,不仅可以检查源端口号、目的端口号和 UDP 用户数据报的数据部分,还可以检查 IP 数据报的源 IP 地址和目的地址。

伪首部只是在计算检验和时临时添加的, 不计入 UDP 的长度

伪首部包括源 IP 和目的 IP, 这是ip分组报头的一部分

接收端通过检验发现数据有差错, 就直接丢弃该数据报, 仅此而已。

UDP 检验和不是必需的, 若不使用检验和, 则将检验和字段设置为 0 。而若检验和的计算结果恰好为 0 , 则将检验和字段置为全 1 (这个结论了解即可)。

每个IP数据报片的最大长度为 ,减去 IP 首部 ,剩下 用来存放 UDP 数据报

整个传输的数据大小除以所有封装的首部之和就是传输效率

传输层分用的定义是, 接收方的传输层剥去报文首部后, 能把这些数据正确交付到目的进程.