TCP 建立连接的开销主要来自几方面:
- 往返时延:三次握手需要 1.5 个 RTT 才能开始传数据(客户端在第三次握手时可携带数据)。在跨地域网络中一个 RTT 可能几十到上百毫秒,HTTPS 还要叠加 TLS 握手(TLS 1.2 再加 2 个 RTT)。
- 状态开销:内核要为每条连接分配资源——socket 结构、发送/接收缓冲区、拥塞控制状态、定时器等,连接建立与销毁都涉及内核数据结构操作。
- 慢启动:新连接拥塞窗口从初始值开始指数增长,无法立刻用满带宽,短连接尤其吃亏。
- 四次挥手:关闭同样需要往返,TIME_WAIT 状态还会占用端口资源一段时间。
由此引出的优化:HTTP/1.1 keep-alive 复用连接、HTTP/2 多路复用单连接并行多个流、HTTP/3 用 QUIC 把握手与加密合并为 1-RTT 甚至 0-RTT、连接池预热、TCP Fast Open 等。追问方向:TIME_WAIT 大量堆积的处理、TCP Fast Open 的 Cookie 机制、为什么 HTTP/2 在弱网下有时不如并行多连接。这题实际考察"连接复用"这一工程动机。