TCP 与 UDP 的区别

对比 TCP 和 UDP 在连接、可靠性、速度和使用场景上的差异

问题

TCP 和 UDP 有什么区别?分别适用于什么场景?

解答

对比表

特性TCPUDP
连接方式面向连接(三次握手)无连接
可靠性可靠传输,有确认和重传机制不可靠,可能丢包
传输速度较慢,有额外开销快,开销小
数据顺序保证顺序不保证顺序
流量控制
拥塞控制

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 实现了可靠传输