核心 · 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
无连接 + 不保证。
无握手,零开销。
适合**实时性**优先的场景。
无握手,零开销。
适合**实时性**优先的场景。