UDP协议:数据报格式、校验与特点。
5.2 UDP协议
5.2.1 UDP数据报
1. UDP概述
UDP(用户数据报协议)仅在IP数据报服务之上增加了两个最基本的服务:复用和分用以及差错检测。
UDP的主要特点:
| 特点 | 说明 |
|---|---|
| 无连接 | 发送数据前不需要建立连接,减少开销和时延 |
| 尽最大努力交付 | 不保证可靠交付,主机无需维护复杂的连接状态表 |
| 面向报文 | 对应用层报文既不合并也不拆分,保留报文边界,一次发送/交付一个完整报文 |
| 无拥塞控制 | 网络拥塞不会降低发送速率,适合实时应用(允许丢失部分数据,但不能有太大时延) |
| 支持多种通信方式 | 支持一对一、一对多、多对一、多对多的交互通信 |
| 首部开销小 | 首部仅8字节(TCP为20字节) |
面向报文的理解:应用层交给UDP多长的报文,UDP就照样发送;接收方UDP去除首部后原封不动交付上层。因此应用程序必须选择合适大小的报文,避免IP层分片降低效率或首部占比过大。
例题(2014年39题)
下列关于UDP协议的叙述中,正确的是(B. 仅 I、II)
- I. 提供无连接服务 ✓
- II. 提供复用/分用服务 ✓
- III. 通过差错校验,保障可靠数据传输 ✗(UDP校验只检测错误,不保障可靠传输)
2. UDP首部格式
UDP数据报包含UDP首部(8字节)和用户数据两部分。
| 字段 | 长度 | 说明 |
|---|---|---|
| 源端口 | 2字节 | 源端口号,需要对方回信时使用,不需要时可置0 |
| 目的端口 | 2字节 | 目的端口号,必须使用 |
| 长度 | 2字节 | UDP数据报总长度(首部+数据),最小值8字节 |
| 校验和 | 2字节 | 检测UDP数据报传输是否有错,有错则丢弃;不使用时可置0 |
- 当接收方UDP发现不存在对应目的端口号的应用进程时,丢弃报文,并由ICMP发送“端口不可达”差错报文。
例题(2018年39题)
UDP协议实现分用(demultiplexing)时所依据的头部字段是(B. 目的端口号)
5.2.2 UDP校验
1. 伪首部
在计算校验和时,需要在UDP数据报之前增加12字节的伪首部。伪首部仅在计算校验和时临时使用,既不向下传送也不向上递交。
伪首部格式:
| 字段 | 长度 | 说明 |
|---|---|---|
| 源IP地址 | 4字节 | 发送方IP地址 |
| 目的IP地址 | 4字节 | 接收方IP地址 |
| 全0 | 1字节 | 填充0 |
| 协议 | 1字节 | 协议类型(UDP为17) |
| UDP长度 | 2字节 | UDP数据报总长度 |
2. 校验和计算过程
发送方:
- 将校验和字段置为全0。
- 在UDP数据报前添加伪首部,若数据部分不是偶数个字节,则填充一个全0字节(不发送)。
- 将伪首部和UDP数据报按16位字串接,按二进制反码求和。
- 将求和结果取反码,写入校验和字段。
接收方:
- 将收到的UDP数据报连同伪首部(及可能的填充字节)按16位字反码求和。
- 若结果为全1,则无差错;否则有差错,丢弃该数据报(或上交应用层并附警告)。
注意:IP数据报校验和只检验首部,UDP校验和检验首部和数据部分。
习题
UDP协议的特点不包括(C. 支持拥塞控制)
UDP数据报首部的长度为(A. 8字节)
若UDP数据报的“长度”字段值为100,则表示(B. 总长度(头部+数据)为100字节)
以下场景中,最适合使用UDP的是(B. 实时视频流)
UDP伪头部中包含的字段是(B. 源IP地址和目的IP地址)
如果UDP数据报在传输过程中,某个16位字段的值发生了改变,以下说法正确的是(B. 只有当改变后的结果导致检验和计算错误时,接收方才可能检测出错误)
(因为校验和是反码求和的结果,某些改变可能导致校验和仍为全1,无法检测)UDP检验和计算题(与讲义中例题对应)
给定数据:源IP 153.19.8.104,目的IP 171.3.14.11,协议17,UDP长度15,源端口1087,目的端口13,数据 5445494E47(十六进制)。
按16位字反码求和,结果取反得检验和。根据讲义计算,答案为D. 01101001 00010010已知UDP数据报的检验和值为0xFFFF,这意味着(B. 数据报在传输过程中可能没有发生错误)
(全1是正确结果,但若出现多个错误相互抵消,也可能为全1)谢希仁5-12:不能组装成完整数据报。因为两次传输的IP数据报片标识不同,目的站无法区分它们是属于同一UDP数据报的重传。缓存中保留的第一次后两个片无法与第二次的前两个片组合。
谢希仁5-13:UDP数据字段8192字节,加上8字节UDP首部=8200字节。以太网MTU=1500字节,IP首部20字节,每个IP数据报片数据部分最大1480字节。
需要分片数:ceil(8200/1480)=6片。- 第1-5片:数据1480字节,片偏移分别为0,185,370,555,740
- 第6片:数据8200-1480×5=800字节,片偏移925
谢希仁5-14:UDP首部十六进制 0632 0045 001C E217
- 源端口:0632H = 1586
- 目的端口:0045H = 69(TFTP)
- 总长度:001CH = 28字节
- 数据部分长度:28 - 8 = 20字节
- 目的端口69是TFTP服务器使用的熟知端口,因此是从客户发送给服务器,服务器程序是TFTP
笔记结束