跳到主要内容
预计阅读 26 分钟

UDP 与应用层协议 — 简单高效的另一种选择

TCP 像挂号信——可靠但繁琐;UDP 像明信片——简单快速但不保证送达。在网络世界中,并非所有场景都需要 TCP 的可靠性,有时速度和简洁才是王道。

📋 开篇自测:你已经知道多少?

  1. UDP 头部有多少字节?它和 TCP 最大的区别是什么?
  2. DNS 解析的完整流程是怎样的?递归查询和迭代查询有什么区别?
  3. DHCP 的四步交互过程(DORA)分别代表什么?

一、UDP 协议:轻装上阵的传输层

1.1 UDP 头部结构

UDP 的头部极其简洁,只有 8 个字节:

 0       7 8     15 16    23 24    31
+--------+--------+--------+--------+
|   源端口 (16位)   |  目的端口 (16位)  |
+--------+--------+--------+--------+
|   长度 (16位)     |  校验和 (16位)    |
+--------+--------+--------+--------+
|                                    |
|            数据(载荷)              |
|                                    |
+------------------------------------+

对比:
TCP 头部: 最少 20 字节,最多 60 字节
UDP 头部: 固定 8 字节

1.2 UDP 的特点

无连接:不需要建立和断开连接,省去了三次握手和四次挥手的开销。

不可靠:不保证数据到达、不保证顺序、不保证不重复。发出去就不管了。

无拥塞控制:不会因为网络拥堵而降低发送速率。这把双刃剑——速度快但可能加剧拥堵。

支持一对多:天然支持广播和组播,TCP 只能点对点。

头部开销小:8 字节 vs TCP 的 20-60 字节,数据传输效率更高。

1.3 UDP vs TCP 对比

+------------------+-------------------+------------------+
|     特性          |       TCP         |      UDP         |
+------------------+-------------------+------------------+
| 连接方式          | 面向连接           | 无连接            |
| 可靠性            | 可靠传输           | 尽力而为          |
| 顺序保证          | 有序               | 无序              |
| 流量控制          | 有(滑动窗口)      | 无                |
| 拥塞控制          | 有                 | 无                |
| 头部大小          | 20-60 字节         | 8 字节            |
| 传输模式          | 字节流             | 数据报            |
| 通信模式          | 一对一             | 一对一/一对多/多对多|
| 典型应用          | HTTP, SSH, FTP    | DNS, DHCP, 视频流 |
+------------------+-------------------+------------------+

1.4 UDP 的典型应用场景

适合 UDP 的场景:

1. 实时性要求高,允许少量丢包
   ├── 视频直播/会议(WebRTC)
   ├── 在线游戏(状态同步)
   └── VoIP 语音通话

2. 简单的请求-响应模式
   ├── DNS 域名查询
   └── SNMP 网络管理

3. 广播/组播
   ├── DHCP 地址分配
   └── 局域网服务发现

4. 需要自定义可靠性的场景
   ├── QUIC 协议(HTTP/3 的基础)
   └── KCP 协议(游戏加速)

值得注意的是,QUIC(HTTP/3 的传输层协议)选择在 UDP 之上自行实现可靠传输。这是因为 TCP 的拥塞控制和重传机制已经固化在操作系统内核中,难以优化;而 UDP 的”白板”特性给了应用层更大的自由度。

🤔 想一想 为什么视频通话使用 UDP 而不是 TCP?如果一个视频帧丢了一部分数据,用 TCP 重传和用 UDP 丢弃,哪个用户体验更好?


二、DNS:互联网的电话簿

2.1 DNS 解决什么问题

人类习惯记名字,计算机习惯记数字。DNS(Domain Name System)就是把人类友好的域名翻译成机器友好的 IP 地址的系统。

www.example.com  --(DNS解析)-->  93.184.216.34

2.2 域名的层次结构

域名是有层次的,从右到左依次是:根域 → 顶级域 → 二级域 → 子域。

             www.mail.example.com
              |    |      |     |
              |    |      |     +-- 根域 (隐含的 ".")
              |    |      +-- 顶级域 (TLD): com, org, cn, io...
              |    +-- 二级域: example (你注册的)
              +-- 子域/主机名: www, mail, api...

域名树结构:
                    . (根)
                   /|\
                  / | \
               com org  cn
              / |       |
         example google  baidu
          / \     |
        www mail  www

2.3 DNS 查询的完整流程

用户在浏览器输入 www.example.com

步骤1: 浏览器缓存
  浏览器检查自己的 DNS 缓存 --> 没有

步骤2: 操作系统缓存
  查询 /etc/hosts 文件和系统 DNS 缓存 --> 没有

步骤3: 本地 DNS 服务器(递归解析器)
  发送查询给配置的 DNS 服务器(如 8.8.8.8)

步骤4: 递归解析器开始迭代查询

递归解析器            根DNS服务器          .com DNS服务器     example.com DNS
     |  "www.example.com?"  |                   |                    |
     | -------------------> |                   |                    |
     |  "去问 .com 服务器"   |                   |                    |
     | <------------------- |                   |                    |
     |                      |                   |                    |
     |  "www.example.com?"                      |                    |
     | ---------------------------------------->|                    |
     |  "去问 example.com 的权威服务器"           |                    |
     | <----------------------------------------|                    |
     |                                          |                    |
     |  "www.example.com?"                                           |
     | ------------------------------------------------------------->|
     |  "93.184.216.34"                                              |
     | <-------------------------------------------------------------|
     |
     | 缓存结果(按TTL时间)
     | 返回给客户端: 93.184.216.34

2.4 递归查询 vs 迭代查询

递归查询(客户端 -> 本地DNS):
  客户端: "帮我查 www.example.com"
  本地DNS: "好的,我帮你查到底,最终结果告诉你"
  --> 本地 DNS 负责全部后续查询

迭代查询(本地DNS -> 各级DNS服务器):
  本地DNS: "www.example.com 在哪?"
  根DNS: "我不知道,但 .com 的服务器在这里"
  本地DNS: "www.example.com 在哪?"
  .com DNS: "我不知道,但 example.com 的服务器在这里"
  --> 本地 DNS 自己一步步追查

2.5 DNS 记录类型

记录类型说明示例
A域名 → IPv4 地址example.com → 93.184.216.34
AAAA域名 → IPv6 地址example.com → 2606:2800:220:1:...
CNAME别名指向另一个域名www.example.com → example.com
MX邮件交换服务器example.com → mail.example.com
NS域名服务器example.com → ns1.example.com
TXT文本记录(验证、SPF等)example.com → "v=spf1 ..."
SOA授权起始记录区域的管理信息

2.6 DNS 使用 UDP 还是 TCP?

通常使用 UDP(端口 53):DNS 查询和响应通常很小(几百字节),一个 UDP 数据报就能搞定,无需建立连接的开销。

特殊情况使用 TCP

  • 响应数据超过 512 字节(传统限制)或超过 EDNS0 协商的 UDP 载荷大小(常见配置为 4096 字节,协议最大允许 65535 字节)
  • 区域传送(Zone Transfer),即 DNS 服务器之间同步完整的区域数据
  • DNS over TLS(DoT)和 DNS over HTTPS(DoH)用于加密 DNS 查询

🤔 想一想 你知道 DNS 劫持和 DNS 污染是什么吗?为什么会出现”输入正确网址却打开了广告页面”的情况?


三、DHCP:自动分配 IP 的管家

3.1 为什么需要 DHCP

如果每台设备都要手动配置 IP 地址、子网掩码、网关和 DNS 服务器,管理成本会非常高。DHCP(Dynamic Host Configuration Protocol)实现了自动化的网络配置。

3.2 DHCP 四步交互(DORA)

客户端(无IP)                    DHCP 服务器(192.168.1.1)
    |                                   |
    |  1. DHCP Discover (广播)           |
    |  "有DHCP服务器吗?我需要IP!"       |
    |  src: 0.0.0.0                      |
    |  dst: 255.255.255.255              |
    | --------------------------------> |
    |                                   |
    |  2. DHCP Offer (广播/单播)         |
    |  "我这里有IP可以分配给你"            |
    |  提供: IP=192.168.1.100            |
    |        子网掩码=255.255.255.0      |
    |        网关=192.168.1.1            |
    |        DNS=8.8.8.8                 |
    |        租期=86400秒                |
    | <-------------------------------- |
    |                                   |
    |  3. DHCP Request (广播)            |
    |  "我接受你提供的配置"               |
    |  (如果有多个DHCP服务器,选一个)    |
    | --------------------------------> |
    |                                   |
    |  4. DHCP Ack (广播/单播)           |
    |  "确认,这个IP归你用了"             |
    | <-------------------------------- |
    |                                   |
    | 客户端配置网络并开始使用             |

D = Discover, O = Offer, R = Request, A = Ack --> DORA

3.3 DHCP 的租期与续约

DHCP 分配的 IP 地址不是永久的,而是有租期(Lease Time):

租期时间线:
|<--------------------- 租期 (如24小时) --------------------->|
|                    |                    |                    |
0                   T1(50%)             T2(87.5%)          到期
                     |                    |
                单播续约请求            广播续约请求
              (发给原DHCP服务器)    (发给任意DHCP服务器)

T1 时刻(50%): 客户端尝试向原服务器续租(单播)
  - 成功: 租期重新开始
  - 失败: 等到 T2

T2 时刻(87.5%): 客户端广播续租请求(任意服务器都可响应)
  - 成功: 租期重新开始
  - 失败: 到期后释放 IP,重新走 DORA 流程

3.4 DHCP 中继

DHCP 使用广播通信,而广播不能跨越路由器。如果 DHCP 服务器和客户端不在同一子网,就需要 DHCP 中继(Relay Agent):

子网A                    路由器(DHCP中继)              子网B
客户端                         |                   DHCP服务器
  |  广播 Discover            |                        |
  | ------->                  |                        |
  |          中继转换为单播     |                        |
  |          转发给DHCP服务器   | -------- 单播 -------> |
  |                           |                        |
  |                           | <------ 单播回复 ------ |
  |          中继转为广播/单播  |                        |
  | <--------                 |                        |

四、其他常见的应用层协议

4.1 FTP:文件传输协议

FTP 是最早的文件传输协议之一,使用两个端口:

控制连接 (端口 21): 发送命令和接收响应
  客户端: "USER admin"
  服务器: "331 Password required"
  客户端: "PASS secret"
  服务器: "230 Login OK"
  客户端: "LIST"

数据连接 (端口 20 或随机端口): 传输实际文件数据
  - 主动模式 (PORT): 服务器主动连接客户端的端口
  - 被动模式 (PASV): 客户端主动连接服务器的端口(NAT 友好)

4.2 SMTP / POP3 / IMAP:电子邮件协议簇

发送邮件                           接收邮件
用户A                              用户B
  |                                 |
  | SMTP (端口25/587)               | POP3 (端口110) 或
  | -------> 发件服务器              | IMAP (端口143)
  |          |                      | <------- 收件服务器
  |          | SMTP                  |          |
  |          | -------> 收件服务器 ---+          |
  |          |                                  |

POP3: 下载邮件到本地,服务器可删除(离线阅读)
IMAP: 邮件保留在服务器,多设备同步(在线管理)

4.3 SSH:安全远程登录

SSH(Secure Shell)是 Telnet 的安全替代品,在端口 22 上提供加密的远程终端访问和文件传输(SCP/SFTP)功能。


五、端口号:进程的”门牌号”

5.1 端口号的分类

传输层使用端口号来区分同一台机器上的不同应用程序:

端口号范围 (0-65535):

0 - 1023:    知名端口(Well-Known Ports)
             由 IANA 分配,需要管理员权限绑定
             HTTP=80, HTTPS=443, SSH=22, DNS=53, SMTP=25

1024 - 49151: 注册端口(Registered Ports)
             由软件供应商注册
             MySQL=3306, PostgreSQL=5432, Redis=6379

49152 - 65535: 动态/临时端口(Ephemeral Ports)
             操作系统自动分配给客户端程序

5.2 Socket 五元组

一个网络连接由五个要素唯一标识,称为 Socket 五元组

(协议, 源IP, 源端口, 目的IP, 目的端口)

示例:
(TCP, 192.168.1.10, 52341, 93.184.216.34, 80)

这意味着:
- 同一台客户端可以与同一个服务器建立多个 TCP 连接(源端口不同)
- 一台服务器的 80 端口可以同时服务成千上万个客户端

六、章节小结

  1. UDP 是轻量级的传输层协议,无连接、不可靠、无拥塞控制,但开销小、速度快,适用于实时性要求高的场景。
  2. DNS 是互联网的域名解析系统,采用层次化的分布式架构,通常使用 UDP 进行快速查询。
  3. DHCP 通过 DORA 四步交互自动为设备分配 IP 地址和网络配置,大大简化了网络管理。
  4. 端口号在传输层区分不同的应用进程,与 IP 地址配合构成 Socket 五元组来唯一标识一个连接。
  5. 应用层协议(FTP、SMTP、SSH 等)各司其职,构建了丰富多彩的互联网服务生态。

📝 结尾自测:检验你的收获

  1. UDP 和 TCP 各自适合什么场景?请各举出 3 个使用 UDP 和 TCP 的应用层协议。
  2. 完整描述 DNS 解析 www.example.com 的过程,包括浏览器缓存、操作系统缓存和递归/迭代查询。
  3. DHCP 的 DORA 四步分别代表什么?每一步使用的是广播还是单播?
  4. 为什么 QUIC(HTTP/3)选择在 UDP 而非 TCP 之上构建?UDP 的哪些特性使这成为可能?
  5. 一台 Web 服务器的 80 端口能同时处理多少个客户端连接?为什么?(提示:五元组)

下一章预告:了解了传输层和基础应用层协议之后,下一章我们将聚焦互联网上最广泛使用的应用层协议——HTTP。从 HTTP/1.1 的 Keep-Alive 到 HTTP/2 的多路复用,再到 HTTP/3 的 QUIC 革命,系统拆解请求/响应格式、状态码、缓存机制和 Cookie 的工作原理。

购买课程解锁全部内容

网络通信第一课:10 章掌握计算机网络

¥29.90