TCP与UDP的区别

157 阅读3分钟

一、协议基础与设计目标

维度TCP(传输控制协议)UDP(用户数据报协议)
所属层次传输层(Transport Layer)传输层(Transport Layer)
设计目标可靠数据传输(如文件传输、网页浏览)低延迟数据传输(如视频直播、实时通信)
连接方式面向连接(需三次握手建立连接)无连接(直接发送数据包,无需提前建立连接)

二、核心特性对比(高频考点)

1. 连接与可靠性
  • TCP

    • 三次握手:建立连接时客户端与服务器交换 SYN、SYN-ACK、ACK 包;
    • 四次挥手:断开连接时交换 FIN、ACK、FIN、ACK 包;
    • 可靠机制:通过序列号、确认应答、重传机制确保数据不丢失。
  • UDP

    • 无连接过程,直接发送数据包(类似“发送后不管”);
    • 不保证数据到达,无重传机制,可能丢包。
2. 数据传输方式
  • TCP

    • 流式传输:数据无边界,需应用层自行处理分包(如 HTTP 头部的 Content-Length);
    • 拥塞控制:通过慢启动、拥塞避免算法适应网络环境。
  • UDP

    • 数据包传输:每个数据包独立(最大约 64KB),有明确边界;
    • 无拥塞控制,可能因网络拥堵导致丢包,但延迟更稳定。
3. 头部开销
  • TCP:头部固定 20 字节(含源端口、目标端口、序列号、确认号等);
  • UDP:头部仅 8 字节(含源端口、目标端口、长度、校验和)。

三、典型应用场景

协议应用场景原因
TCP网页浏览(HTTP)、文件传输(FTP)、邮件(SMTP)、远程登录(SSH)需保证数据完整到达,允许稍高延迟
UDP视频直播(RTMP/RTSP)、实时通信(WebRTC)、DNS 查询、网络游戏需低延迟,可容忍少量丢包(如视频帧丢失可忽略)

四、问题

1. 问:TCP 如何保证数据可靠性?

TCP 通过以下机制实现可靠传输:

  1. 序列号与确认应答:每个数据包带序列号,接收方返回 ACK 确认;
  2. 超时重传:发送方未收到 ACK 时,重新发送数据包;
  3. 滑动窗口:控制发送方发送速率,避免接收方缓冲区溢出;
  4. 拥塞控制:根据网络状况动态调整发送窗口大小(慢启动、拥塞避免、快重传、快恢复)。
2. 问:为什么 UDP 更适合实时通信?
  • 无连接开销:无需三次握手,适合快速发送数据;
  • 无重传机制:不等待丢失包的重传,保证延迟稳定;
  • 头部开销小:8 字节头部相比 TCP 的 20 字节更高效;
  • 应用层可控:开发者可自定义丢包处理(如视频直播中丢帧直接跳过)。
3. 问:能否用 TCP 实现 UDP 的低延迟?为什么?
  • 不能完全实现,原因如下:
    • TCP 的拥塞控制和重传机制必然引入延迟;
    • 即使关闭 Nagle 算法(减少小包合并),仍有确认应答的往返时间(RTT);
    • UDP 无连接特性决定了其启动延迟更低(如 DNS 查询用 UDP 而非 TCP)。

五、协议细节对比表

特性TCPUDP
连接状态有连接(需建立与断开)无连接(stateless)
数据完整性保证不丢失、不重复、按序到达不保证(可能丢包、乱序)
流量控制有(滑动窗口)
拥塞控制有(慢启动、拥塞避免)
传输效率低(头部开销大、重传机制)高(头部开销小、无额外操作)
适用网络广域网(需处理复杂网络环境)局域网(延迟敏感场景)

六、总结

TCP 可靠有连接,三次握手四次挥,
序列号加确认答,超时重传保完整;
UDP 无连速度快,头部仅占 8 字节,
丢包乱序自己处理,直播游戏最适合。