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

解释TCP三次握手和四次挥手的过程,并说明为什么需要这些步骤(例如,防止已失效的连接请求报文段被错误地接收,以及确保双方都准备好进行数据传输)。

微软Software Engineer Intern难度:简单

答案

1) 【一句话结论】TCP通过三次握手建立连接(同步初始序列号,防止旧连接,确保双方就连接参数达成一致),通过四次挥手终止连接(确保数据完全传输,处理超时,避免资源占用),这些步骤保证了连接的可靠性和有序性。

2) 【原理/概念讲解】
首先解释三次握手:TCP是面向连接的协议,建立连接前需同步初始序列号。步骤为:

  1. 客户端发送SYN报文(SYN=1,序列号设为x);
  2. 服务器收到后,回复SYN-ACK(SYN=1,ACK=1,序列号y,确认序列号x+1);
  3. 客户端收到后,发送ACK(ACK=1,序列号x+1,确认序列号y+1)。
    这样双方都确认了对方的初始序列号,并同步了自己的序列号。为什么需要:若客户端之前发送的SYN报文丢失,服务器发送的SYN-ACK会超时重传,客户端因初始序列号不同不会误判为旧连接(类比:两人约会前先互相确认“我准备好了,你呢?”)。

接着解释四次挥手:连接终止时,双方需关闭各自发送端。步骤为:

  1. 客户端发送FIN(FIN=1,序列号u);
  2. 服务器回复ACK(ACK=1,确认序列号u+1);
  3. 服务器发送FIN(FIN=1,序列号v,确认序列号u+1);
  4. 客户端回复ACK(ACK=1,确认序列号v+1)。
    为什么需要:TCP是全双工的,双方可能还在传输数据,需确保数据完全传输完毕后各自关闭。类比:两人结束约会,先说“我结束了”,对方确认,然后对方也结束,自己再确认。

3) 【对比与适用场景】

特性三次握手(建立连接)四次挥手(终止连接)
目的同步初始序列号,建立可靠连接确保数据完全传输,终止连接
步骤数量3次报文交换4次报文交换
对称性双向同步序列号双向关闭(全双工)
是否需超时重传是(SYN-ACK超时重传)是(FIN报文可能超时重传)
使用场景任何TCP连接建立时任何TCP连接终止时

4) 【示例】
以HTTP GET请求为例:

  • 客户端(浏览器)发起TCP连接:
    1. 客户端发送SYN, seq=100;
    2. 服务器回复SYN-ACK, seq=200, ack=101;
    3. 客户端发送ACK, seq=101, ack=201。
  • 连接建立后,客户端发送HTTP GET请求,服务器响应HTTP 200 OK。
  • 服务器发送FIN, seq=500(数据传输完毕),客户端回复ACK, ack=501;
  • 服务器回复ACK, ack=501(确认客户端FIN),客户端发送ACK, ack=502(确认服务器FIN),连接关闭。

5) 【面试口播版答案】
好的,面试官。TCP的三次握手是为了建立连接,确保双方就初始序列号达成一致,防止已失效的连接请求报文段被错误接收。具体来说,步骤是:客户端发送SYN报文(序列号x),服务器回复SYN-ACK(序列号y,确认序列号x+1),客户端再发送ACK(序列号x+1,确认序列号y+1)。这样双方都确认了对方的初始序列号,连接建立。而四次挥手是为了终止连接,确保数据完全传输完毕,避免资源占用。步骤是:客户端发送FIN(序列号u),服务器回复ACK(确认序列号u+1),服务器发送FIN(序列号v,确认序列号u+1),客户端回复ACK(确认序列号v+1)。因为TCP是全双工的,双方都有数据要传输,所以需要各自关闭。这些步骤保证了连接的可靠性和有序性。

6) 【追问清单】

  1. 为什么SYN和FIN的ACK都要发送?
    答:TCP是全双工,双方可能还在传输数据,需要确认对方关闭请求已收到,避免超时重传。
  2. 为什么四次挥手需要两个FIN?
    答:因为全双工,双方都有数据要传输,各自关闭自己的发送端。
  3. 初始序列号的作用是什么?
    答:防止已失效的连接请求报文段被接收,确保连接参数同步。
  4. 如果客户端发送SYN后丢失,服务器发送的SYN-ACK超时重传,客户端如何处理?
    答:客户端收到后,会重新发送SYN,因初始序列号不同,不会误判为旧连接。
  5. 四次挥手时,服务器发送FIN前是否需要等待所有数据发送完毕?
    答:是的,必须确保数据传输完成。

7) 【常见坑/雷区】

  1. 认为三次握手只需要两次(忽略客户端的ACK);
  2. 混淆SYN和FIN的作用(SYN用于建立连接,FIN用于终止连接);
  3. 忽略初始序列号的重要性,认为连接建立后立即可以传输数据;
  4. 认为挥手只需要三次(忽略客户端的ACK);
  5. 忽略超时重传的作用,认为连接建立后不会出错。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1