# 5.2 UDP协议 ## 一、UDP概述 ### 1.1 什么是UDP **UDP(User Datagram Protocol)**: - 用户数据报协议 - 无连接的传输层协议 - 提供简单的、不可靠的数据报服务 ### 1.2 UDP的特点 - **无连接**:发送数据前不需要建立连接 - **不可靠**:不保证数据到达、不保证顺序 - **简单**:首部开销小(8字节) - **快速**:没有连接建立和确认的开销 - **面向报文**:保留应用层数据的边界 ### 1.3 UDP的应用场景 - **DNS**:域名解析 - **DHCP**:动态主机配置 - **RIP**:路由信息协议 - **SNMP**:简单网络管理协议 - **实时应用**:视频流、IP电话、在线游戏 - **广播和多播**:一对多通信 --- ## 二、UDP首部格式 ### 2.1 UDP首部结构 ``` 0 7 8 15 16 23 24 31 +--------+--------+--------+--------+ | Source Port | Dest Port | +--------+--------+--------+--------+ | Length | Checksum | +--------+--------+--------+--------+ | Data (optional) | +-------------------------------------+ ``` ### 2.2 UDP首部字段 **源端口(Source Port,16位)**: - 发送方的端口号 - 可选,0表示不使用 **目的端口(Destination Port,16位)**: - 接收方的端口号 - 必须指定 **长度(Length,16位)**: - UDP首部和数据的总长度 - 最小值:8(只有首部) - 最大值:65535字节 **校验和(Checksum,16位)**: - 检测UDP首部和数据的错误 - 可选,0表示不使用 - 计算时包括伪首部 ### 2.3 伪首部 **概念**: - 计算校验和时使用的临时首部 - 不实际传输 **结构**: ``` | 源IP地址(4字节) | | 目的IP地址(4字节) | | 0(1字节) | 协议(1字节) | UDP长度(2字节) | ``` **作用**: - 验证IP地址 - 验证协议类型 - 验证UDP长度 --- ## 三、UDP的工作过程 ### 3.1 发送过程 1. 应用进程将数据交给UDP 2. UDP添加首部(源端口、目的端口、长度、校验和) 3. 计算校验和(包括伪首部) 4. 将UDP数据报交给IP层 5. IP层封装成IP分组发送 ### 3.2 接收过程 1. IP层接收到UDP数据报 2. 根据协议字段(17)交给UDP 3. UDP检查目的端口 4. 根据目的端口将数据交给相应的应用进程 5. 如果有校验和,进行校验 ### 3.3 复用和分用 **复用**: - 多个应用进程的数据通过UDP发送 - 使用不同的源端口号区分 **分用**: - UDP根据目的端口号将数据分发给不同的应用进程 - 通过端口号找到对应的套接字 --- ## 四、UDP的优缺点 ### 4.1 优点 - **简单**:首部只有8字节 - **快速**:无连接建立延迟 - **无拥塞控制**:可以按需发送 - **支持一对一、一对多、多对一、多对多** - **面向报文**:保留应用层数据边界 ### 4.2 缺点 - **不可靠**:不保证数据到达 - **无流量控制**:可能丢包 - **无拥塞控制**:可能加剧网络拥塞 - **不保证顺序**:数据可能乱序到达 - **无连接状态**:不维护连接状态 --- ## 五、UDP与TCP的比较 | 特性 | UDP | TCP | |-----|-----|-----| | 连接 | 无连接 | 面向连接 | | 可靠性 | 不可靠 | 可靠 | | 有序性 | 无序 | 有序 | | 流量控制 | 无 | 有 | | 拥塞控制 | 无 | 有 | | 首部大小 | 8字节 | 20-60字节 | | 传输效率 | 高 | 较低 | | 延迟 | 小 | 较大 | | 连接状态 | 无 | 有 | | 应用场景 | 实时应用、DNS | 文件传输、网页 | --- ## 六、UDP的应用 ### 6.1 DNS(Domain Name System) **为什么使用UDP**: - 查询响应简单 - 速度快 - 一次查询一个请求 **注意**: - 大响应使用TCP ### 6.2 实时应用 **视频流**: - 实时性要求高 - 少量丢包可以接受 - 使用UDP+应用层控制 **IP电话**: - 实时性要求高 - 延迟敏感 - 使用UDP+RTP **在线游戏**: - 实时性要求高 - 频繁的小数据包 - 使用UDP ### 6.3 广播和多播 **特点**: - 一对多通信 - TCP不支持广播和多播 - 使用UDP --- ## 七、UDP的校验和 ### 7.1 校验和的计算 **步骤**: 1. 添加伪首部 2. UDP首部校验和字段置0 3. 将所有16位字相加 4. 如果有进位,回卷(加到最低位) 5. 取反,得到校验和 ### 7.2 校验和的检验 **步骤**: 1. 添加伪首部 2. 将所有16位字相加(包括校验和字段) 3. 如果有进位,回卷 4. 如果结果为全1(0xFFFF),无错误 5. 否则,有错误,丢弃 ### 7.3 校验和的可选性 **IPv4**: - UDP校验和是可选的 - 0表示不使用 **IPv6**: - UDP校验和是必须的 - 0表示校验和为0(实际为0xFFFF) --- ## 八、考研重点 1. **UDP的特点**: - 无连接 - 不可靠 - 简单 - 快速 2. **UDP首部格式**: - 各字段的含义 - 源端口、目的端口 - 长度、校验和 - 伪首部的作用 3. **UDP的工作过程**: - 发送过程 - 接收过程 - 复用和分用 4. **UDP的优缺点** 5. **UDP与TCP的比较** 6. **UDP的应用**: - DNS - 实时应用 - 广播和多播 7. **UDP的校验和**: - 计算方法 - 检验方法 - 可选性 --- *下一节:5.3 TCP协议*