ArcLibrary

TCP vs UDP

传输层的两条路线 —— 一个保证送达、一个图快不管丢。

TCPUDP传输层
核心 · Key Idea

一句话TCP 保证可靠、有序、不丢、不重复,但慢;UDP 不管丢不丢、不管顺序,但快、轻、能广播。多数应用用 TCP,实时类(语音 / 视频 / 游戏 / DNS)用 UDP。

是什么#

TCP:先建连接(三次握手)→ 发送(带序号 + 重传 + 滑动窗口)→ 关闭(四次挥手)
UDP:直接发,丢就丢

TCP 把上层数据当(stream),UDP 把数据当消息(datagram)—— 这是最根本的区别。

打个比方#

打个比方 · Analogy
  • TCP = 挂号信:发出去要签收回执;丢了重发;按顺序送到。
  • UDP = 大喇叭广播:喊出去就完事了;听到算你赚到,没听到也不重喊。

关键概念#

面向连接Connection-oriented
TCP 通信前要先握手建连接。UDP 不需要。
可靠传输Reliable
TCP 用序号 + ACK + 重传保证不丢;UDP 不保证。
流量控制Flow Control
TCP 通过滑动窗口让接收方告诉发送方「我还能收多少」。
拥塞控制Congestion Control
TCP 检测到网络拥堵时自动放慢;UDP 不会。
Datagram数据报
UDP 的数据单元,**有边界**(一次发的就是一次收的)。

怎么工作#

TCP 头 20 字节起步,UDP 头只有 8 字节 —— UDP header 极轻也是它快的原因之一。

实操要点#

  • HTTP/1.1 / HTTP/2 / SSH / SMTP / 数据库:都用 TCP。
  • DNS / DHCP / 视频通话 / 在线游戏:UDP。
  • HTTP/3 是 UDP:基于 QUIC,把可靠性自己实现在应用层,绕开 TCP 的队头阻塞
  • NAT 友好度:TCP 比 UDP 友好(路由器靠看 SYN/FIN 维护表项);UDP 经常打洞失败。
  • 抓包看协议号:IP 头里 protocol = 6 是 TCP、= 17 是 UDP、= 1 是 ICMP。

易混点#

TCP
可靠 + 有序 + 拥塞控制。
握手开销。
适合**正确性**优先的场景。
UDP
无连接 + 不保证。
无握手,零开销。
适合**实时性**优先的场景。

延伸阅读#