网络工程师 · TCP · 连接管理

TCP 三次握手和四次挥手怎么理解?

TCP 三次握手和四次挥手是网络工程师里非常高频的基础题。很多同学能背 SYN、ACK、FIN,但题目稍微换成“为什么不是两次”“为什么释放连接要四次”就开始犹豫。其实这组题的核心不是背包文,而是理解建立连接和关闭连接的目标不一样。

网络工程师专题 软考题库编辑部 持续更新

三次握手确认的是双方收发能力

TCP 建立连接时,客户端先发 SYN,表示我想建立连接;服务器回 SYN+ACK,表示我收到了,也愿意建立连接;客户端再回 ACK,表示我也收到了你的确认。这样双方都能确认彼此的发送和接收能力。

如果只握手两次,服务器知道客户端能发、自己能收,但客户端是否能收服务器的响应、服务器是否能被客户端最终确认,就不够稳。考试问“三次握手为什么需要三次”,不要只答“协议规定”,要答到相互确认。

阶段大意老师提醒
第一次客户端发 SYN我想建立连接
第二次服务器回 SYN+ACK我收到了,也同意连接
第三次客户端回 ACK我收到了你的确认
核心目标确认双方收发能力不是单纯凑三次

四次挥手是因为关闭连接可以分方向进行

TCP 是全双工通信,连接释放时,双方两个方向的数据发送可以分别关闭。一方说“我这边发完了”,不代表另一方也立刻发完了,所以关闭过程常常比建立连接多一步。

FIN 表示这一方没有数据要发了,ACK 表示确认收到了对方的关闭请求。对方如果还有数据没发完,可以先确认,再等自己也发完后发送 FIN。这个差别,就是四次挥手比三次握手更容易考理解的原因。

生活化理解

三次握手像两个人确认电话能不能打通。

四次挥手像通话结束时,一方说我说完了,另一方可能还要补一句再挂。

所以建立连接看双方能不能通信,释放连接看双方是否都结束发送。

SYN、ACK、FIN 不要只背缩写

SYN 常用于建立连接时同步序号,ACK 表示确认,FIN 表示发送方数据发送完毕、请求释放连接。选择题里最常见的干扰,是把 FIN 放到建立连接阶段,或者把 SYN 放到释放连接阶段。

如果题干描述“建立可靠连接”,优先看 SYN 和 ACK;如果题干描述“释放连接、关闭连接、数据发送完毕”,优先看 FIN 和 ACK。抓住场景,比背完整报文序列更有效。

标志位常见阶段题干信号
SYN建立连接同步、请求建立连接
ACK建立和释放都可能出现确认收到
FIN释放连接发送完毕、请求关闭
RST异常复位连接连接异常、中止

考场上先分清“建立”还是“释放”

做 TCP 题时,不要一上来写一串报文。先把题目分成两类:建立连接,还是释放连接。建立连接通常问三次握手、可靠连接、双方收发能力;释放连接通常问四次挥手、全双工关闭、FIN 与 ACK。

如果题目问“为什么 TCP 比 UDP 更可靠”,三次握手只是其中一个角度,还要想到确认、重传、顺序控制、流量控制等机制。不要把 TCP 的所有可靠性都压到三次握手一件事上。

相关题目解析

下面这些题目和本专题的判断方法关联较强,适合读完概念后回到具体题干里校验理解。