TCP三次握手和四次挥手的过程详解
前言TCP 是面向连接的可靠传输协议连接建立依靠三次握手连接断开依靠四次挥手。这两个机制是网络面试高频考点也是后端、网络开发必须吃透的基础。很多人只会死记流程却不明白核心目的为什么不能两次握手为什么关闭连接需要四次而不是三次本文结合报文标志位、交互流程、常见误区完整讲解。前置知识TCP 核心标志位SYN同步用于建立连接协商初始序列号ACK确认确认收到对方报文FIN结束代表一方不再发送新数据seq序列号ack确认应答号一、TCP 三次握手建立连接作用客户端与服务端建立TCP连接。目标双方确认自身发送、接收功能正常协商彼此的初始序列号ISN协商窗口大小、MSS等连接参数角色定义Client客户端主动发起连接Server服务端监听端口被动等待连接完整流程第一次握手Client → Server客户端主动发送SYN1携带客户端初始序列号seqx。含义客户端请求建立连接我的起始序列号是x。客户端进入SYN_SENT状态。第二次握手Server → Client服务端收到SYN报文回复SYN1ACK1seqy服务端自己的初始序列号ackx1确认收到客户端SYN应答号 对方seq 1服务端进入SYN_RCVD状态。第三次握手Client → Server客户端收到服务端SYNACK报文回复ACK1acky1确认收到服务端的同步报文seq x1客户端进入ESTABLISHED连接建立服务端收到这条ACK后也进入ESTABLISHED连接正式打通可以传输业务数据。简单形象理解客户端“能听到我吗我想建立连接”第一次握手服务端“收到我也能联系你我同意建立连接”第二次握手客户端“收到你的确认我们开始通信”第三次握手经典问题为什么不能两次握手假设只有两次握手客户端发SYN → 服务端回复SYNACK连接建立。存在重大漏洞历史延迟的SYN报文客户端很早之前发送的连接请求网络延迟很久才到达服务端。服务端收到后直接建立连接并分配资源。但客户端早已放弃这条旧请求不会收发数据。服务端持续维持一条无效连接白白占用内存、端口资源造成服务器资源耗尽。三次握手机制下服务端必须等待客户端第三条ACK报文才会正式建立连接。过期的SYN到达后服务端回复SYNACK但客户端不会响应服务端超时后自动释放资源避免资源浪费。二、TCP四次挥手断开连接TCP是全双工通信双方可以独立收发数据。任意一方想要关闭连接只能关闭自己的发送通道不能直接强制对方停止发送数据。因此断开连接需要四次交互。完整流程初始状态双方都处于 ESTABLISHED第一次挥手Client → Server客户端不再发送数据发送FIN1sequ客户端进入FIN_WAIT_1含义客户端不再发送新数据但仍然可以接收服务端还未发完的数据。第二次挥手Server → Client服务端收到FIN回复ACK1acku1服务端进入CLOSE_WAIT客户端收到ACK进入FIN_WAIT_2重点此时单向通道关闭客户端不能发数据但是服务端如果还有剩余数据依然可以继续发给客户端。第三次挥手Server → Client当服务端所有数据全部发送完毕没有数据要传输了发送FIN1seqv服务端进入LAST_ACK含义服务端数据发送完成我也要关闭连接。第四次挥手Client → Server客户端收到FIN回复ACK1ackv1客户端进入TIME_WAIT状态服务端收到这条ACK立刻进入CLOSED连接关闭。客户端需要等待2MSL时间之后才最终切换到 CLOSED。通俗理解客户端我不再发消息给你了第一次挥手服务端收到我知道你不发了但是我还有消息先传给你第二次挥手服务端我的消息全部发完了我也要结束对话第三次挥手客户端收到结束通信第四次挥手关键问题1为什么挥手需要四次握手只需要三次建立连接时服务端的SYN同步和ACK确认可以合并成一条报文所以第二次握手合并两个动作。关闭连接时服务端收到客户端FIN后不能立刻发送FIN。需要先回复ACK继续传输残留数据等数据传输完毕才能发送FIN。ACK 和 FIN 无法合并因此必须分成两条报文总共四次交互。关键问题2客户端为什么要有 TIME_WAIT2MSL两个核心作用保证服务端能够正常收到最后的ACK报文如果客户端第四条ACK报文丢失服务端处于LAST_ACK状态会重传FIN报文。客户端处在TIME_WAIT期间依然可以正常回复ACK。如果客户端直接关闭端口立刻释放收到重传FIN报文时只能返回RST服务端无法正常关闭。防止旧连接残留报文干扰新连接等待足够长的时间确保网络中这条连接所有滞留数据包全部消失避免旧报文被新建立的连接错误接收。MSL报文最大生存时间Linux默认一般60s2MSL就是两倍时长。三、状态流转汇总便于排查网络问题握手相关状态LISTEN服务端端口监听等待连接SYN_SENT客户端发送SYN等待服务端应答SYN_RCVD服务端收到SYN等待客户端第三次ACKESTABLISHED正常数据传输状态挥手相关状态FIN_WAIT_1主动关闭方发送FIN等待ACKFIN_WAIT_2收到ACK等待对方发送FINCLOSE_WAIT被动关闭方收到FIN等待自身业务数据发送完毕LAST_ACK被动关闭方发送FIN等待最后的ACKTIME_WAIT主动关闭方等待2MSLCLOSED连接完全关闭四、生产环境常见现象服务器大量 CLOSE_WAIT典型原因服务端代码收到对方关闭请求程序没有调用socket关闭连接没有发送FIN。代码层面socket资源泄漏。大量 TIME_WAIT短连接高频创建销毁连接大量主动关闭连接产生TIME_WAIT。解决方案开启端口复用、调整tcp_tw_reuse内核参数。SYN_RECV 大量堆积可能遭遇SYN洪水攻击或者服务端连接队列溢出。五、总结三次握手核心协商序列号、验证双向收发能力防御过期连接请求SYN与ACK报文可以合并。四次挥手核心TCP全双工两个方向通道独立关闭ACK和FIN无法合并。TIME_WAIT 不是多余设计是保障连接可靠关闭、隔离旧数据包的关键机制。面试高频两大思考题两次握手为什么不行挥手为什么四次掌握背后逻辑不要死记硬背。拓展建议学习后可以使用tcpdump/ Wireshark 抓包实际观察SYN、ACK、FIN报文直观验证握手与挥手流程理论结合抓包更容易理解。

相关新闻

STM32智能车入门指南:从硬件搭建到PID算法调试全解析

STM32智能车入门指南:从硬件搭建到PID算法调试全解析

1. 从零开始:智能车到底是什么?如果你对电子、编程或者机器人有点兴趣,最近又总在B站、知乎或者学校社团里听到“智能车”这个词,心里可能既好奇又有点发怵。看着那些小车在赛道上嗖嗖地跑,又是摄像头又是电磁的&#…

2026/7/30 9:59:37阅读更多 →
FPGA未用引脚约束:Vivado中保障硬件稳定性的关键实践

FPGA未用引脚约束:Vivado中保障硬件稳定性的关键实践

1. 项目概述:为什么必须约束不使用的引脚?在FPGA开发中,尤其是使用Xilinx的Vivado工具链时,很多工程师会把注意力集中在功能引脚(如时钟、数据、控制信号)的约束上,却常常忽略那些“不使用的引脚…

2026/7/30 9:59:37阅读更多 →
WarcraftHelper:让经典魔兽在现代硬件上重获新生的终极解决方案

WarcraftHelper:让经典魔兽在现代硬件上重获新生的终极解决方案

WarcraftHelper:让经典魔兽在现代硬件上重获新生的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为《魔兽争霸II…

2026/7/30 9:59:37阅读更多 →
智能开关面板技术解析与安装指南

智能开关面板技术解析与安装指南

1. 为什么我们需要智能开关面板? 传统机械开关已经陪伴我们走过了近一个世纪,但在这个万物互联的时代,它们显得越来越力不从心。我清楚地记得去年冬天的一个深夜,当我躺在床上才想起客厅灯没关时,那种纠结要不要爬起来…

2026/7/30 11:15:55阅读更多 →
OpenClaw自动化工具链平台安装与配置指南

OpenClaw自动化工具链平台安装与配置指南

1. OpenClaw安装环境准备OpenClaw作为一款新兴的自动化工具链平台,其安装过程需要特别注意环境依赖的完整性。根据实际部署经验,我将从基础环境到依赖组件详细说明准备要点。1.1 操作系统兼容性验证OpenClaw官方支持的主流系统包括:Windows 1…

2026/7/30 11:15:55阅读更多 →
高并发服务器day10

高并发服务器day10

Connection 模块核心设计解析1. 模块目的负责对通信连接进行全方位管理,将所有与连接相关的操作统一封装在该模块内,对外提供标准接口。2. 核心管理维度为了实现对连接的全面控制,该模块主要负责管理以下 5 个核心部分:套接字 (So…

2026/7/30 11:15:55阅读更多 →
PLM更新BOM后如何自动同步ERP?避免采购旧版物料

PLM更新BOM后如何自动同步ERP?避免采购旧版物料

企业在PLM中更新了产品BOM(如替换物料、调整用量),但ERP仍使用旧版本BOM编制采购计划和生产,导致采购了旧版物料、产生呆滞料和返工。BOM从设计到制造的传递依赖人工,版本不一致风险高。以KPaaS集成扩展平台的解决方案…

2026/7/30 11:15:55阅读更多 →
Python装饰器详解:从基础语法到高阶应用

Python装饰器详解:从基础语法到高阶应用

1. Python装饰器:从语法糖到高阶应用第一次接触Python装饰器时,我盯着那个符号看了半天——这玩意儿到底是语法糖还是黑魔法?直到有次需要给整个项目的函数加执行日志,手动修改了三十多个函数后,才真正理解装饰器的价值…

2026/7/30 11:15:55阅读更多 →
3分钟解锁Windows家庭版远程桌面:SuperRDP完全指南

3分钟解锁Windows家庭版远程桌面:SuperRDP完全指南

3分钟解锁Windows家庭版远程桌面:SuperRDP完全指南 【免费下载链接】SuperRDP Super RDPWrap 项目地址: https://gitcode.com/gh_mirrors/su/SuperRDP 还在为Windows家庭版无法使用远程桌面而烦恼吗?SuperRDP正是解决这一痛点的完美方案。这个开源…

2026/7/30 11:13:55阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 [特殊字符]

3分钟解锁iOS应用自由:TrollInstallerX让你的iPhone摆脱安装限制 🚀 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否曾经因为iOS系统的严格…

2026/7/30 0:00:58阅读更多 →
[GESP202606 四级] 扫雷

[GESP202606 四级] 扫雷

B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…

2026/7/30 0:00:58阅读更多 →
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/30 0:27:26阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →