TCP vs UDP
medium计算机网络TCPUDP传输层
传输层的职责
传输层提供端到端(进程到进程)的通信服务。网络层只负责将数据包送到目标主机,传输层通过端口号进一步将数据送到目标进程。
TCP 与 UDP 的核心区别
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(三次握手) | 无连接(直接发送) |
| 可靠性 | 可靠传输(确认、重传、排序) | 不可靠(尽最大努力交付) |
| 有序性 | 保证数据有序到达 | 不保证顺序 |
| 传输方式 | 面向字节流 | 面向数据报(保留消息边界) |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有 | 无 |
| 头部大小 | 20~60 字节 | 8 字节 |
| 传输效率 | 较低(可靠性有代价) | 高 |
| 适用场景 | 文件传输、网页、邮件 | 视频直播、DNS、游戏 |
TCP 报文段结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
├─────────────────────┼─────────────────────┤
│ Source Port │ Destination Port │
├─────────────────────┴─────────────────────┤
│ Sequence Number │
├───────────────────────────────────────────┤
│ Acknowledgment Number │
├────┼──────┼─┼─┼─┼─┼─┼─┼─────────────────┤
│Offs│Reserv│U│A│P│R│S│F│ Window │
├────┴──────┴─┴─┴─┴─┴─┴─┼─────────────────┤
│ Checksum │ Urgent Pointer │
├───────────────────────┴───────────────────┤
│ Data │
└───────────────────────────────────────────┘
重要标志位:
SYN - 建立连接 ACK - 确认
FIN - 关闭连接 RST - 重置连接
PSH - 立即推送 URG - 紧急数据
UDP 报文结构
┌─────────────────┬─────────────────┐
│ Source Port │ Dest Port │ ← 各 2 字节
├─────────────────┼─────────────────┤
│ Length │ Checksum │ ← 各 2 字节
├─────────────────┴─────────────────┤
│ Data │
└───────────────────────────────────┘
总共只有 8 字节头部,极其简洁
选择 TCP 还是 UDP?
需要可靠传输?
├── 是 → 用 TCP(HTTP、FTP、SMTP、数据库连接)
└── 否 → 需要低延迟?
├── 是 → 用 UDP(视频直播、语音通话、游戏)
└── 可以在应用层实现 → 自定义可靠 UDP
(如 QUIC/HTTP3)
生产高频题
TCP 和 UDP 的区别?
TCP 面向连接、可靠传输、面向字节流、有流量和拥塞控制;UDP 无连接、不可靠、面向数据报、头部开销小。TCP 适合需要可靠传输的场景(Web、文件传输),UDP 适合实时性要求高的场景(直播、游戏、DNS 查询)。
为什么 UDP 比 TCP 快?
UDP 不需要建立连接(省去三次握手)、不需要确认和重传、不需要排序、头部只有 8 字节(TCP 最少 20 字节)。这些都减少了传输延迟和处理开销。