UDP 仅在 IP 层的数据报服务之上增加了两个最基本的功能: 复用和分用, 以及差错检测
UDP 的首部开销小。TCP 有
Transclude of 5.2UDP协议#^rxpedv
报文不可分割, 是 UDP 数据报处理的最小单位
UDP 数据报包含两部分: 首部字段和用户数据字段。
UDP 首部有
首部格式及各字段意义
- 源端口。源端口号。在需要对方回信时选用, 不需要时可用全 0 。
- 目的端口。目的端口号。这在终点交付报文时必须使用到。
- 长度。UDP 数据报的长度 (包括首部和数据), 其最小值是 8 (仅有首部)。
- 检验和。检测 UDP 数据报在传输中是否有错。有错就丢弃。该字段是可选的, 当源主机 不想计算检验和时, 则直接令该字段为全 0 。
若接收方 UDP 发现收到的报文中的目的端口号不正确 (即不存在对应于端口号的应用进程), 则就丢弃该报文, 并由 ICMP 发送 “端口不可达” 差错报文给发送方。
UDP 计算检验和的方法和计算 IP数据报首部检验和-ipv4的方法相似。不同的是: IP 数据报的检验和只检验 IP 数据报的首部, 但 UDP 的检验和要将首部和数据部分一起检验
- UDP计算检验和的方法包括发送方和接收方的处理步骤
- 发送方处理步骤
- 把全0放入检验和字段并添加伪首部
- 将UDP数据报视为许多16位的字串接起来
- 若UDP数据报的数据部分不是偶数个字节在末尾填入一个全0字节但此字节不发送
- 按二进制反码计算出这些16位字的和
- 将此和的二进制反码写入检验和字段并发送
- 接收方处理步骤
- 把收到的UDP数据报加上伪首部若不为偶数个字节则还需要补上全0字节
- 按二进制反码求这些16位字的和
- 当无差错时其结果应为全1否则就表明有差错出现
- 接收方就应该丢弃这个UDP数据报
- 发送方处理步骤
- 检验时, 若 UDP 数据报部分的长度不是偶数个字节, 则需填入一个全 0 字节, 如图 5.5 所示。但是此字节和伪首部一样, 是不发送的
- 若 UDP 检验和检验出 UDP 数据报是错误的, 则可以丢弃, 也可以交付给上层, 但是需要附上错误报告, 即告诉上层这是错误的数据报。
- 通过伪首部,不仅可以检查源端口号、目的端口号和 UDP 用户数据报的数据部分,还可以检查 IP 数据报的源 IP 地址和目的地址。
伪首部只是在计算检验和时临时添加的, 不计入 UDP 的长度
伪首部包括源 IP 和目的 IP, 这是ip分组报头的一部分
接收端通过检验发现数据有差错, 就直接丢弃该数据报, 仅此而已。
UDP 检验和不是必需的, 若不使用检验和, 则将检验和字段设置为 0 。而若检验和的计算结果恰好为 0 , 则将检验和字段置为全 1 (这个结论了解即可)。
每个IP数据报片的最大长度为
整个传输的数据大小除以所有封装的首部之和就是传输效率
传输层分用的定义是, 接收方的传输层剥去报文首部后, 能把这些数据正确交付到目的进程.