Appearance
TCP 与 UDP 对比
考情分析
TCP 和 UDP 的对比是选择题的常客。考法通常是给出一个场景或特性,判断应该选用 TCP 还是 UDP。端口号也偶尔出现在选择题中。
考频:★★★
全面对比
| 对比项 | TCP | UDP |
|---|---|---|
| 是否面向连接 | 面向连接(先握手再传数据) | 无连接(直接发) |
| 可靠性 | 可靠传输(确认、重传、序号) | 不可靠(尽最大努力交付) |
| 是否保序 | 保序(通过序号机制) | 不保序 |
| 传输方式 | 面向字节流 | 面向报文 |
| 通信模式 | 一对一 | 一对一、一对多、多对一、多对多 |
| 首部开销 | 最少 20 字节 | 固定 8 字节 |
| 流量控制 | 有(rwnd) | 无 |
| 拥塞控制 | 有(cwnd) | 无 |
| 传输速度 | 相对较慢(机制开销) | 快(没有额外机制) |
| 适用场景 | 文件传输、网页、邮件等需要可靠传输的场景 | 实时音视频、DNS 查询等对实时性要求高的场景 |
面向字节流 vs 面向报文
这是一个高频考点,单独展开说明。
TCP 面向字节流: TCP 把应用层交下来的数据看作无结构的字节流。TCP 不关心应用层一次写了多少数据,它根据窗口大小和网络状况自行决定每个报文段装多少字节。发送方连续写入 3 次(100 字节、50 字节、200 字节),TCP 可能把它们合并成一个 350 字节的报文段发出去,也可能拆成两个发。接收方需要自己处理消息边界的问题。
UDP 面向报文: UDP 对应用层交下来的报文原样发送,不拆分也不合并。发送方发了 3 个报文(100、50、200 字节),接收方就会收到 3 个独立的报文,边界清晰。
适用场景对比
适合用 TCP 的场景
| 应用 | 原因 |
|---|---|
| HTTP/HTTPS(网页浏览) | 网页数据不能丢失、不能乱序 |
| FTP(文件传输) | 文件内容必须完整且正确 |
| SMTP/POP3/IMAP(邮件) | 邮件内容不能丢 |
| SSH(远程登录) | 命令和输出必须可靠传输 |
| 数据库连接 | 数据一致性要求高 |
适合用 UDP 的场景
| 应用 | 原因 |
|---|---|
| DNS(域名查询) | 报文小、一问一答、不值得建立连接 |
| DHCP(地址配置) | 需要广播,TCP 不支持 |
| 实时视频/音频(RTP) | 实时性优先,丢帧可容忍 |
| SNMP(网络管理) | 简单查询,丢失可重试 |
| 在线游戏 | 低延迟优先 |
| TFTP(简单文件传输) | 简单场景,UDP 上层自己做可靠性 |
选用原则可以总结为:需要可靠性选 TCP,需要实时性/广播/简单快速选 UDP。
常见端口号
408 选择题偶尔会考某个协议对应的端口号。
TCP 端口号
| 协议 | 端口号 | 说明 |
|---|---|---|
| FTP 数据 | 20 | FTP 数据连接 |
| FTP 控制 | 21 | FTP 控制连接 |
| SSH | 22 | 安全远程登录 |
| Telnet | 23 | 远程登录(明文) |
| SMTP | 25 | 发送邮件 |
| HTTP | 80 | 网页浏览 |
| POP3 | 110 | 接收邮件 |
| IMAP | 143 | 接收邮件(在线管理) |
| HTTPS | 443 | 加密网页浏览 |
UDP 端口号
| 协议 | 端口号 | 说明 |
|---|---|---|
| DNS | 53 | 域名解析(也可用 TCP) |
| DHCP 服务器 | 67 | 动态主机配置 |
| DHCP 客户端 | 68 | 动态主机配置 |
| TFTP | 69 | 简单文件传输 |
| SNMP | 161 | 网络管理 |
| RIP | 520 | 路由信息协议 |
既用 TCP 又用 UDP 的协议
| 协议 | 端口号 | 说明 |
|---|---|---|
| DNS | 53 | 通常用 UDP,区域传送时用 TCP |
DNS 默认用 UDP,但当响应数据超过 512 字节(DNS 报文在 UDP 中的上限)时,会切换到 TCP 传输。另外 DNS 主服务器和辅助服务器之间的区域传送(同步所有记录)也使用 TCP。
传输层复用与分用
不管是 TCP 还是 UDP,传输层的一个核心功能是复用和分用。
复用(Multiplexing): 多个应用进程可以同时使用传输层的服务。发送方的传输层根据端口号,把不同应用进程的数据封装成不同的报文段/数据报,交给网络层发送。
分用(Demultiplexing): 接收方的传输层根据报文段/数据报中的目的端口号,把数据交给对应的应用进程。
TCP 和 UDP 的分用方式有区别:
| 对比项 | UDP 分用 | TCP 分用 |
|---|---|---|
| 标识一个连接的要素 | 目的 IP + 目的端口 | 源 IP + 源端口 + 目的 IP + 目的端口 |
| 含义 | 只要目的端口相同就交给同一个进程 | 四元组完全匹配才交给对应连接 |
TCP 用四元组标识连接意味着:同一个服务器端口(如 80)可以同时和不同客户端建立多个独立的 TCP 连接,因为每个连接的源 IP 和源端口不同。
端口号的分类
| 范围 | 名称 | 说明 |
|---|---|---|
| 0~1023 | 熟知端口 | 分配给常用服务(HTTP=80, FTP=21 等) |
| 1024~49151 | 登记端口 | 分配给其他注册服务 |
| 49152~65535 | 动态/私有端口 | 客户端临时使用的端口 |
易错点
1. DNS 不是只用 UDP
DNS 查询通常用 UDP,但区域传送和大响应用 TCP。如果选择题说"DNS 只使用 UDP",这是错的。
2. "不可靠"不等于"不好"
UDP 的"不可靠"是指协议本身不提供确认和重传机制。应用层可以在 UDP 之上自己实现可靠性(比如 TFTP 在 UDP 上实现了简单的确认和重传)。"不可靠"是特性描述,不是质量评价。
3. TCP 不支持广播和多播
TCP 是点对点的,只能一对一通信。需要广播或多播的场景只能用 UDP。
4. 首部开销的对比
TCP 首部最少 20 字节(还可能有选项字段),UDP 首部固定 8 字节。这个差距在传输大量小报文时影响显著。
高频考点清单
- TCP 和 UDP 的核心区别(连接性、可靠性、字节流/报文、通信模式、首部开销)
- 面向字节流 vs 面向报文的含义
- TCP 适用场景 vs UDP 适用场景
- 常见协议的端口号(HTTP:80, HTTPS:443, FTP:20/21, DNS:53, DHCP:67/68, SMTP:25)
- DNS 既用 TCP 又用 UDP
- 端口号的三个范围(0-1023 熟知,1024-49151 登记,49152-65535 动态)