彻底搞懂TCP三次握手与四次挥手

📅 2026/6/24 7:55:06
彻底搞懂TCP三次握手与四次挥手
前言在计算机网络中TCP 协议是互联网最核心、最重要的传输层协议。它最大的特点是面向连接、可靠传输、全双工通信。为了实现“可靠”TCP 在传输数据前必须建立连接、传输结束后必须断开连接这就诞生了网络面试最经典的两个过程• 三次握手建立连接• 四次挥手断开连接本文从零、通俗、细节全覆盖讲清楚全过程、状态变化、原理、为什么是三次、为什么是四次。一、TCP 核心基础1. TCP 是全双工客户端和服务器各自都有发送通道、接收通道互不干扰。• 客户端可以发数据、收数据• 服务端可以发数据、收数据正因为双向独立所以• 建连接可以合并报文三次握手• 断连接不能合并报文必须四次挥手2. 关键标志位• SYN请求建立连接• FIN请求关闭连接• ACK确认收到报文二、TCP 三次握手建立连接1. 全过程详解第一次握手客户端 → 服务端SYN客户端主动发起连接发送 SYN 报文携带自己的初始序列号 ISN(x)。• 客户端状态SYN_SENT• 作用客户端测试自己发送能力正常询问服务端是否在线。第二次握手服务端 → 客户端SYN ACK服务端收到 SYN确认客户端正常返回1. ACK(x1)确认收到客户端连接请求2. SYN(y)服务端也向客户端发起连接请求• 服务端状态SYN_RCVD• 作用证明服务端收、发能力都正常第三次握手客户端 → 服务端ACK客户端收到服务端 SYNACK再次回复确认ACK(y1)• 客户端状态ESTABLISHED• 服务端收到后ESTABLISHED连接正式建立可以传输数据2. 通俗比喻• 你喂听得到吗第一次握手 SYN• 对方听得到你听得见我吗第二次 SYNACK• 你我也听得到第三次 ACK通话建立。3. 为什么是三次握手不是两次核心原因防止失效连接占用服务器资源如果只有两次握手客户端超时重发的旧过期 SYN到达服务端服务端直接建立连接、占用资源但客户端早已断开造成服务器空连接浪费资源。三次握手可以双向确认双方收发都正常杜绝无效连接。三、TCP 四次挥手断开连接TCP 是全双工数据通道读、写互相独立。所以• 关闭发送通道 和 关闭接收通道 必须分开执行• ACK 和 FIN 不能合并因此必须四次挥手1. 全过程详解第一次挥手客户端 → 服务端FIN客户端数据发送完毕主动关闭客户端→服务端发送通道。• 状态FIN_WAIT_1第二次挥手服务端 → 客户端ACK服务端收到关闭请求回复确认。• 客户端状态FIN_WAIT_2• 此时客户端不能发数据但还能收数据服务端可能还有剩余数据没发完第三次挥手服务端 → 客户端FIN服务端数据全部发送完毕主动关闭服务端→客户端通道。• 服务端状态LAST_ACK第四次挥手客户端 → 服务端ACK客户端确认关闭等待 2MSL 彻底释放连接。• 服务端收到 ACK直接断开• 客户端等待超时后断开2. 通俗比喻• 你我说完了FIN• 对方收到我还有点话要说ACK• 对方我也说完了FIN• 你好结束ACK3. 为什么挥手要四次握手可以合并 SYNACK新建连接无数据挥手存在残留数据• 收到关闭请求后服务端可能还在传数据• 不能立刻 FIN必须先发 ACK、传完数据再 FIN因此ACK 和 FIN 必须分两次发送总共四次。4. 为什么客户端最后等待 2MSL1. 确保最后一次 ACK 能被服务端收到2. 防止残留旧报文影响新连接四、三次握手、四次挥手 核心区别总结1. 握手三次建连接、无数据SYNACK 可合并2. 挥手四次断连接、存在残余数据ACK、FIN 不能合并3. 握手双向同步序号4. 挥手双向分别关闭读写通道五、面试终极一句话总结• 三次握手双向确认收发正常可靠建立连接• 四次挥手双向通道独立关闭安全释放连接六、完整流程记忆口诀握手问、应答、确认挥手我关、我知道、我也关、好的