51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

解释TCP三次握手和四次挥手的过程,以及为什么TCP需要四次挥手(而不是三次),并说明HTTP 1.1与HTTP 2在连接复用方面的区别。

信步科技研发难度:中等

答案

1) 【一句话结论】TCP通过三次握手建立全双工连接,四次挥手关闭连接(因全双工需独立确认释放),HTTP1.1采用长连接但无请求复用,HTTP2通过多路复用在同一连接上并发传输多个请求,提升效率。

2) 【原理/概念讲解】
TCP三次握手:

  • 客户端发送SYN(同步序列号),标记为1,携带初始序列号seq=x,请求建立连接。
  • 服务器收到后,发送SYN+ACK(同步+确认),seq=y,ack=x+1(确认客户端序列号),同意建立连接。
  • 客户端收到后,发送ACK(确认),ack=y+1,seq=x+1,完成握手。
    类比:两人约会,先打招呼(SYN)→对方回应(SYN+ACK)→再确认(ACK),建立关系。

TCP四次挥手:

  • 主动关闭方(如客户端)发送FIN(结束发送),seq=u,表示数据发送完毕,请求关闭连接。
  • 被动关闭方(服务器)收到后,发送ACK(确认),ack=u+1,seq=v,ack=x+1(确认客户端的FIN)。
  • 服务器处理完数据后,发送FIN(结束发送),seq=w,ack=u+1。
  • 客户端收到后,发送ACK(确认),ack=w+1,完成关闭。
    类比:两人结束对话,先说“我结束了”(FIN)→对方回应“收到,我确认”(ACK)→对方说“我也结束了”(FIN)→你回应“收到”(ACK),结束关系。

为什么四次?因为TCP是全双工,每个方向(客户端→服务器、服务器→客户端)的连接需独立关闭,每个方向需一个FIN和ACK,故需四次报文。

3) 【对比与适用场景】

特性HTTP 1.1(连接复用方式)HTTP 2(连接复用方式)
连接复用每个请求独立建立长连接(Keep-Alive),无并发请求复用同一个TCP连接上并发传输多个请求(多路复用)
头部压缩无二进制分帧,HPACK头部压缩
请求优先级无支持请求优先级,提升关键请求响应
使用场景早期Web应用,简单请求,无高并发高并发、实时应用(如Web应用、API),需要高效传输

4) 【示例】

  • HTTP1.1示例:客户端发送GET请求,三次握手建立连接,服务器返回响应后,四次挥手关闭连接。
    伪代码:
    客户端:

    1. SYN seq=100
    2. SYN+ACK seq=200, ack=101
    3. ACK seq=101, ack=201
      服务器:
    4. SYN seq=300
    5. SYN+ACK seq=400, ack=301
    6. ACK seq=301, ack=401
      请求:GET /resource HTTP/1.1
      响应:200 OK
      关闭:客户端FIN seq=500, 服务器ACK ack=501;服务器FIN seq=600, 客户端ACK ack=601
  • HTTP2示例:客户端与服务器建立TCP连接后,发送多个流(请求),服务器按流处理并发送响应,同一连接持续复用。
    请求示例:
    客户端:

    • 流1:GET /page1 HTTP/2
    • 流2:GET /api1 HTTP/2
      服务器:
    • 流1:200 OK,内容
    • 流2:200 OK,内容
      连接保持打开,后续请求复用同一连接。

5) 【面试口播版答案】
“TCP三次握手是为了建立全双工连接,过程是客户端发送SYN,服务器回SYN+ACK,客户端再ACK,完成连接。四次挥手是因为TCP全双工,每个方向的连接(客户端到服务器、服务器到客户端)都需要独立关闭,主动方发FIN,被动方ACK,然后被动方发FIN,主动方ACK,共四次。HTTP1.1采用长连接但每个请求独立,而HTTP2通过多路复用,同一连接并发传输多个请求,提升效率,比如HTTP2的流复用让多个请求在同一个TCP连接上同时传输,避免了频繁建立连接的开销。”

6) 【追问清单】

  • 问:为什么四次挥手需要四次?
    答:因为TCP是全双工,每个方向的连接(客户端→服务器、服务器→客户端)需独立确认释放,每个方向需一个FIN和ACK,所以需四次报文。
  • 问:HTTP2如何解决头部重复问题?
    答:通过二进制分帧和HPACK头部压缩,减少头部开销,提升传输效率。
  • 问:连接复用对HTTP1.1有什么影响?
    答:HTTP1.1的长连接(Keep-Alive)减少了连接建立开销,但无并发请求复用,可能导致请求阻塞(如一个慢请求阻塞后续请求)。
  • 问:TCP的半关闭状态是什么?
    答:当一方发送FIN后,进入半关闭状态,此时仍可接收数据,但不能再发送数据,直到对方也发送FIN。

7) 【常见坑/雷区】

  • 坑1:三次握手不是两次,因需确认初始序列号,避免重复连接。
  • 坑2:四次挥手顺序错误,如服务器先发FIN,客户端再ACK,再服务器ACK,顺序颠倒。
  • 坑3:HTTP1.1的Keep-Alive和HTTP2的连接复用区别,Keep-Alive是长连接,但无多路复用,而HTTP2是同一连接并发传输多个请求。
  • 坑4:TCP四次挥手中,FIN和ACK的顺序,主动方先发FIN,被动方回ACK,再被动方发FIN,主动方ACK,顺序不能颠倒。
  • 坑5:HTTP2的流复用是否需要依赖TCP连接,是的,HTTP2建立在TCP之上,通过多路复用提升效率。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1