ArcLibrary

TCP(传输控制协议)

面向连接、可靠、有序、自带流控与拥塞控制 —— 互联网绝大多数场景的传输层默认。

TCP传输层可靠
核心 · Key Idea

一句话TCP 在两台主机之间建立一条逻辑连接,把上层字节流可靠、有序地送达,丢了重传、堵了减速。它是 HTTP/SSH/SMTP/数据库等绝大多数协议的底座。

是什么#

TCP 提供:

  • 面向连接:先三次握手再发数据;
  • 可靠交付:序号 + ACK + 重传;
  • 有序:按发送顺序还原;
  • 流量控制:滑动窗口让接收方反馈「还能收多少」;
  • 拥塞控制:检测到丢包就降速(Reno / CUBIC / BBR)。

代价是握手 / 重传开销 —— 不适合实时场景。

打个比方#

打个比方 · Analogy

TCP挂号信

  • 发出去要签收(ACK);
  • 丢了快递员重新送(重传);
  • 必须按顺序到(序号);
  • 收件人快爆仓时通知你慢点发(滑动窗口)。

关键概念#

三次握手3-way handshake
SYN → SYN+ACK → ACK,建立连接。详见 TCP 三次握手页面。
四次挥手4-way close
FIN/ACK 双向关闭。
序号 / 确认号SEQ / ACK
按字节计数,接收方告知期望的下一字节。
滑动窗口Sliding window
接收方动态告知发送方「还能收多少字节」,实现流控。
MSSMaximum Segment Size
TCP 一段最大数据字节数,常 = MTU - 40。
拥塞控制Congestion control
Reno / CUBIC / BBR 等算法,根据丢包 / RTT 调速。

怎么工作#

TCP 头部至少 20 字节,包含序号、确认号、窗口、校验和、各种 flag(SYN / ACK / FIN / RST / PSH / URG)。

实操要点#

  • ss -ti 看 TCP 连接当前的拥塞算法、RTT、cwnd。
  • sysctl net.ipv4.tcp_congestion_control 改默认拥塞算法。BBR 在跨洋链路通常显著优于 CUBIC。
  • TIME_WAIT 多:高并发短连接服务会留一堆 TIME_WAIT,调 tcp_tw_reuse 或改用长连接 / 连接池。
  • 半连接队列 / 全连接队列满:监听端口被打爆时 SYN 被丢;调 somaxconntcp_max_syn_backlog
  • TCP keepalive:默认 7200 秒太长,长连接服务通常调到 60–120 秒。

易混点#

TCP
面向连接、可靠、有序、有拥塞控制。
握手 + 重传开销大。
UDP
无连接、不保证、无序、无拥塞控制。
零开销,适合实时。

延伸阅读#