TCP 与 UDP 的区别
对比 TCP 和 UDP 在连接、可靠性、速度和使用场景上的差异
问题
TCP 和 UDP 有什么区别?分别适用于什么场景?
解答
对比表
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 可靠传输,有确认和重传机制 | 不可靠,可能丢包 |
| 传输速度 | 较慢,有额外开销 | 快,开销小 |
| 数据顺序 | 保证顺序 | 不保证顺序 |
| 流量控制 | 有 | 无 |
| 拥塞控制 | 有 | 无 |
TCP 连接过程(三次握手)
客户端 服务端
| |
|------- SYN -------->| 1. 客户端发送连接请求
| |
|<---- SYN + ACK -----| 2. 服务端确认并发送连接请求
| |
|------- ACK -------->| 3. 客户端确认
| |
| 连接建立完成 |
使用场景
TCP 适用场景:
- HTTP/HTTPS 请求
- 文件传输(FTP)
- 邮件发送(SMTP)
- 数据库连接
UDP 适用场景:
- 视频直播、语音通话
- 在线游戏
- DNS 查询
- 物联网数据采集
前端相关
// WebSocket 基于 TCP
const ws = new WebSocket('wss://example.com');
// WebRTC 数据通道可选择 UDP(默认)或 TCP
const pc = new RTCPeerConnection();
const dc = pc.createDataChannel('chat', {
ordered: false, // 不保证顺序,类似 UDP 特性
maxRetransmits: 0 // 不重传,类似 UDP 特性
});
关键点
- TCP 面向连接,需要三次握手;UDP 无连接,直接发送
- TCP 可靠但慢,UDP 快但可能丢包
- 需要数据完整性选 TCP(网页、文件);需要实时性选 UDP(直播、游戏)
- WebSocket 基于 TCP,WebRTC 可使用 UDP
- HTTP/3 使用 QUIC 协议,基于 UDP 实现了可靠传输
目录