面试常考--TCP 三次握手与四次挥手

TCP 三次握手与四次挥手

在面试中,TCP 的三次握手和四次挥手是非常常考的基础题目,理解这两个过程对于应聘前端、后端开发以及其他技术岗位都非常重要。以下是对这两个过程的简明解释。


TCP 三次握手(建立连接)

三次握手是 TCP 协议中用于建立连接的过程,确保客户端和服务器都能互相通信。

  1. 第一次握手(客户端 → 服务器)

    客户端发送一个 SYN(同步)包给服务器,表示请求建立连接。此时,客户端进入 SYN_SENT 状态。

  2. 第二次握手(服务器 → 客户端)

    服务器收到客户端的 SYN 包后,回应一个 SYN-ACK(同步-确认)包,表示同意建立连接。服务器进入 SYN_RECV 状态。

  3. 第三次握手(客户端 → 服务器)

    客户端收到服务器的 SYN-ACK 包后,发送一个 ACK(确认)包给服务器,表示连接已建立。客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。

总结:三次握手的过程是:

  1. 客户端向服务器发送请求;

  2. 服务器确认并回应;

  3. 客户端确认服务器回应,建立连接。

为什么是三次握手?

  • 第一次握手:确认客户端可以发送请求;

  • 第二次握手:确认服务器可以接收请求并准备好;

  • 第三次握手:确认双方都可以发送和接收数据。


TCP 四次挥手(断开连接)

四次挥手是 TCP 协议中用于断开连接的过程,确保双方在关闭连接前都完成数据传输。

  1. 第一次挥手(客户端 → 服务器)

    客户端发送一个 FIN(结束)包给服务器,表示客户端的数据发送完毕,客户端进入 FIN_WAIT_1 状态。

  2. 第二次挥手(服务器 → 客户端)

    服务器收到客户端的 FIN 包后,回应一个 ACK(确认)包,表示同意关闭连接。服务器进入 CLOSE_WAIT 状态。此时,服务器还可能有数据传输给客户端。

  3. 第三次挥手(服务器 → 客户端)

    服务器发送一个 FIN 包给客户端,表示服务器端的数据也已经传输完毕,准备断开连接。服务器进入 LAST_ACK 状态。

  4. 第四次挥手(客户端 → 服务器)

    客户端收到服务器的 FIN 包后,发送一个 ACK(确认)包给服务器,确认关闭连接。客户端进入 TIME_WAIT 状态,等待一段时间后彻底关闭连接。服务器收到 ACK 后,连接完全断开。

总结:四次挥手的过程是:

  1. 客户端发送 FIN 包,表示要断开连接;

  2. 服务器回应 ACK,确认断开;

  3. 服务器发送 FIN 包,表示服务器的数据传输完毕;

  4. 客户端确认 ACK,断开连接。

为什么是四次挥手?

  • 第一次挥手:客户端告知服务器自己没有数据发送了;

  • 第二次挥手:服务器确认客户端没有数据要发送了;

  • 第三次挥手:服务器告知客户端自己也没有数据要发送了;

  • 第四次挥手:客户端确认断开连接。


简明例子:

三次握手: 假设我(客户端)要去张三家取东西:

  1. 我发短信:"张三在家吗?"

  2. 张三回复:"我在家。"

  3. 我发短信:"我准备去取东西,等我。" 张三确认收到信息后,才开始等我。

四次挥手:

  1. 我告诉张三:"我已经取完东西了,任务完成了。"

  2. 张三回复:"知道了,但我还没完成所有的事,继续忙。"

  3. 张三完成任务后,告诉我:"我已经完成了,可以断开了。"

  4. 我确认收到,然后双方断开连接。


注意事项:

  1. 三次握手与四次挥手的区别

    • 三次握手用于建立连接,确保双方都能发送和接收消息;

    • 四次挥手用于断开连接,确保双方的数据传输完成并安全关闭连接。

  2. 三次握手为什么是三次?

    三次握手确保客户端和服务器都能收发消息,并且确认连接建立成功。

  3. 四次挥手为什么是四次?

    四次挥手确保双方在数据传输完成后才能断开连接。由于 TCP 是全双工的(数据可以同时在两个方向流动),需要两边都先确认没有数据要传输了,才安全断开。


总结

  • 三次握手:连接建立过程,需要确保双方都准备好进行数据交换。

  • 四次挥手:连接断开过程,确保双方都完成数据传输后再安全关闭连接。

在面试时,讲解这两个过程时,重点掌握其原理和原因,尽量避免深入底层协议细节,确保你能够清晰、简洁地表达出过程和原因。

相关推荐
艾莉丝努力练剑10 分钟前
【AI大模型接入SDK】WebSocket & SSE 协议
网络·c++·websocket·网络协议·学习·面试
小义_24 分钟前
JDK 深度解析
java·linux·开发语言·python·面试
数智启示录35 分钟前
Doris精讲篇(六) 从第一批小文件到 -235:Doris 是怎样被正常写入拖死的
大数据·数据库·经验分享·面试·flink
RisunJan40 分钟前
Android 面试知识点整理
android·面试·职场和发展
RisunJan1 小时前
uni-app 面试知识点梳理
面试·职场和发展·uni-app
沉默王二1 小时前
豆包工作Agent正式发布,直接给到夯。
人工智能·面试·agent
怕浪猫8 小时前
第 1 章 FDE的崛起
面试
怕浪猫18 小时前
用了两年 AI 编程工具后,我重新理解了什么是「资深工程师」
算法·面试·架构
csdn_aspnet20 小时前
Modbus RTU 与 Modbus TCP:它们有什么区别?
网络·tcp/ip·tcp·modbus·rtu
Brilliantwxx1 天前
【C++】初入嵌入式C++复习-----经典面试题100道
开发语言·c++·算法·面试·职场和发展