3.2 无连接运输:UDP 协议|《计算机网络:自顶向下方法》精读

一、UDP 核心定位:极简的 "尽力而为" 服务

UDP(User Datagram Protocol,用户数据报协议)是因特网最简单的运输层协议,它在 IP 层的基础上,只做了两件事:

  1. 增加了端口号,实现进程到进程的多路复用 / 分解
  2. 增加了校验和,提供最基本的差错检测

它不建立连接、不保证可靠、不做流量控制、不做拥塞控制,完全是 "轻装上阵",因此在实时场景中表现极佳。

UDP 的核心特点

  • 无连接:发送前不需要三次握手,直接封装数据发送,延迟极低
  • 不可靠传输:不保证数据一定到达,不保证顺序,丢包不会重传
  • 面向消息:保留应用层的消息边界,一次发送对应一次接收
  • 无状态:不维护任何连接信息,开销极小
  • 无拥塞控制:发送速率不受网络状态限制,适合对延迟敏感的场景

典型应用场景

  • DNS 查询:需要快速解析,超时可重试
  • 音视频通话 / 直播:短暂模糊比卡顿更可接受
  • 在线游戏:延迟敏感,丢包可通过插值补全
  • 实时物联网数据:高频小数据,允许少量丢失

3.3.1 UDP 报文段结构

UDP 报文段非常简洁,只有 8 字节的首部 + 应用层数据,没有任何冗余字段,这也是它高效的关键。

UDP 报文段格式(二进制)

字段 长度(bit) 含义
源端口号 16 发送方进程的端口号(可选,无连接时可填 0)
目的端口号 16 接收方进程的端口号(必须,用于多路分解)
长度 16 UDP 报文段的总长度(首部 8 字节 + 数据部分),最小值为 8
校验和 16 检测报文在传输过程中是否出错(可选,但强烈建议使用)
数据部分 可变 应用层交付的数据,长度受限于 UDP 长度字段和 IP 分片

关键细节

  1. 长度字段
    • 单位为字节,最小值是 8(只有首部,无数据)
    • 最大值为 65535,但受 IP 数据包总长度限制(通常不超过 1472 字节,避免 IP 分片)
  2. 源端口号
    • 客户端发送时通常填写临时端口,服务器回复时会用此端口作为目的端口
    • 若不需要回复(如单向广播),可设为 0
  3. 数据边界
    • UDP 是面向消息的,应用层写多少数据,UDP 就封装成一个报文段发送
    • 接收方必须完整接收一个报文段,不能只读取部分字节(和 TCP 面向字节流的特性形成鲜明对比)

3.3.2 UDP 校验和算法

校验和是 UDP 唯一的差错检测机制,用于发现报文在传输过程中是否发生了比特翻转( corruption),它不纠错,只检测,发现错误后直接丢弃报文。

校验和计算范围

UDP 校验和不仅覆盖 UDP 报文段本身,还需要加上一个 12 字节的伪首部(Pseudo Header),这是为了:

  1. 检测 IP 地址是否错误(避免报文被投递到错误主机)
  2. 检测运输层协议是否错误(避免被 TCP 误处理)

伪首部格式(仅用于计算校验和,不随报文发送)

字段 长度(bit) 含义
源 IP 地址 32 发送方 IP
目的 IP 地址 32 接收方 IP
保留字段 8 固定为 0
协议号 8 UDP 协议号为 17
UDP 长度 16 同 UDP 首部中的长度字段

校验和计算步骤

  1. 将伪首部、UDP 首部、数据部分拼接在一起(若数据部分长度为奇数,需在末尾补一个 0 字节,凑成 16 位对齐)
  2. 按 16 位为一个单位,将所有 16 位字进行二进制反码求和
  3. 对求和结果取反,得到校验和,填入 UDP 首部的校验和字段
  4. 接收方收到后,重复步骤 1-2,若结果为全 1(0xFFFF),则校验通过;否则丢弃报文

关键特性

  • 可选性:UDP 校验和是可选的,设为 0 表示不计算校验和(但在 IPv6 中强制要求开启)
  • 差错检测:只能检测出比特错误,无法检测丢包、乱序、重复
  • 伪首部作用:将 IP 层信息纳入校验,避免报文被错误路由或错误解析

✅ 本节核心总结

  1. UDP 是极简协议:在 IP 基础上只增加了端口和校验和,无连接、不可靠、轻量高效
  2. 报文结构极简:8 字节首部,无冗余,面向消息,保留数据边界
  3. 校验和机制:使用伪首部 + 反码求和,提供基础差错检测,不纠错
  4. 适用场景:实时性优先、允许少量丢包的业务,是音视频、游戏、DNS 的首选协议

📌 下一节预告

3.3 可靠数据传输原理:从最简单的停等协议开始,逐步进化到 GBN、SR,最终理解 TCP 可靠传输的底层逻辑,这是本章最硬核的部分。

相关推荐
顶点多余1 小时前
Socket编程实现UDP通信
linux·网络协议·udp
minji...1 小时前
Linux 网络基础(二)HTTP协议,域名,URL,URI,认识HTTP的请求和响应
linux·服务器·网络·网络协议·http·tcp
05候补工程师1 小时前
[408考研笔记] 传输层与网络层核心辨析:从逻辑通信到滑动窗口计算
网络·经验分享·笔记·网络协议·tcp/ip·考研·ip
minji...2 小时前
Linux 网络套接字编程(八)自定义实现 HTTP 服务器,HTTP 的工作模式
linux·服务器·网络·http·udp·tcp
如君愿3 小时前
考研复习 Day 31 | 习题--计算机网络 第五章(运输层 中)、数据结构 图 (中)
数据结构·计算机网络·课后习题
落羽的落羽4 小时前
【网络】TCP与UDP协议使用指南,Socket编程实现Echo服务
linux·服务器·网络·c++·网络协议·tcp/ip·机器学习
S1998_1997111609•X15 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则
xlq2232217 小时前
50.UDP套接字
网络·网络协议·udp
Zzzzmo_18 小时前
计算机网络原理初识
计算机网络·java-ee
Yupureki18 小时前
《Linux网络编程》6.UDP原理
linux·运维·服务器·网络·udp