news 2026/5/18 19:13:52

TCP 三次握手四次挥手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP 三次握手四次挥手

一、 三次握手 (建立连接)

目的:确认双方的接收和发送能力都正常。

  1. 第一次握手 (Client -> Server):

    • 动作:客户端发送一个SYN=1的包,并带上一个随机序列号Seq=x

    • 状态转换:客户端进入SYN_SENT状态。

    • 物理意义:客户端问:“喂,你能听到我说话吗?”

  2. 第二次握手 (Server -> Client):

    • 动作:服务端收到后,发送SYN=1, ACK=1,确认号Ack=x+1,并带上自己的随机序列号Seq=y

    • 状态转换:服务端进入SYN_RCVD状态。

    • 物理意义:服务端回答:“我听到了!那你也能听到我说话吗?”(这里把 ACK 确认应答和 SYN 询问合并在一个包里发了)。

  3. 第三次握手 (Client -> Server):

    • 动作:客户端收到后,发送ACK=1,确认号Ack=y+1

    • 状态转换:客户端和收到该包的服务端都进入ESTABLISHED(已连接)状态。

    • 物理意义:客户端回答:“我也能听到!”。至此,双方都确认了彼此的收发能力正常,连接建立。

面试常问:为什么是三次,不是两次或四次?

  • 为什么不能是两次?如果只有两次,服务端发完第二次握手包后就以为连接建立成功了。但如果这个包在网络中丢失,客户端根本没收到。此时服务端一直傻等,浪费资源;或者网络中延迟的旧请求突然到达服务端,服务端以为是新连接,导致状态错乱(防止已失效的连接请求报文段突然又传送到了服务端)。

  • 为什么不是四次?第二步中,服务端把确认对方的 ACK 包和询问对方的 SYN 包合并成了一个,优化了效率,所以不需要四次。


二、 四次挥手 (断开连接)

目的:优雅地断开双向通道,确保所有数据都传输完毕。挥手的核心在于 TCP 是全双工的(双向通道独立)。所以,一方关掉发送通道,不代表它不能接收数据了,这叫做“半关闭 (Half-Close)”状态。

  1. 第一次挥手 (Client -> Server):

    • 动作:客户端数据发完了,主动发送FIN=1的包。

    • 状态转换:客户端进入FIN_WAIT_1状态。

    • 物理意义:客户端说:“我没数据要发了,准备关门了。”

  2. 第二次挥手 (Server -> Client):

    • 动作:服务端收到 FIN,立刻回复ACK=1

    • 状态转换:服务端进入CLOSE_WAIT,客户端收到后进入FIN_WAIT_2

    • 物理意义:服务端说:“好的,我知道你发完了。但我可能还有数据没发完,你等我一下。” (此时 Client 到 Server 的通道关闭,但 Server 到 Client 的通道还在,Server 可以继续发业务数据)。

  3. 第三次挥手 (Server -> Client):

    • 动作:服务端的数据也发完了,发送FIN=1的包给客户端。

    • 状态转换:服务端进入LAST_ACK状态。

    • 物理意义:服务端说:“我的数据也发完了,我也准备关门了。”

  4. 第四次挥手 (Client -> Server):

    • 动作:客户端收到 FIN,回复ACK=1

    • 状态转换:客户端进入TIME_WAIT状态。服务端收到后直接进入CLOSED状态。客户端等 2MSL 时间后,也进入CLOSED状态。

    • 物理意义:客户端说:“收到,你关吧。” 然后客户端在原地等一会儿,确认服务端真的关了,自己才彻底关机。

面试常问:为什么握手是三次,挥手却要四次?握手时,服务端可以把ACK(确认)和SYN(申请连接)合并在同一个包里发。但挥手时,服务端收到FIN只能先回一个ACK表示“我收到了”。此时服务端可能还要继续处理业务,把缓冲区里剩下的数据发完,不能马上发FIN。所以ACKFIN只能分两步发,导致总共需要四次。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/18 19:13:52

收藏备用!Kali Linux 零基础教程(超详细),从下载到使用一篇够

一 、下载kali Linux镜像 https://www.kali.org/get-kali/#kali-installer-images 二、开始安装 kali linux 基于Debian linux ,所以选择的时候安装你下载的iso镜像来选择 32位或者64位。 1、选择图形化安装 2、中文简体, continue继续----中国—汉语…

作者头像 李华
网站建设 2026/5/18 19:12:03

基于MSP430的智能充电照明控制系统设计与实现

1. 项目概述与核心价值最近在整理工作室的旧项目,翻出来一个几年前做的“智能充电照明控制系统”,核心用的是TI的MSP430单片机。当时做这个的初衷很简单:手头一堆用18650电池的便携设备,像头灯、小风扇、移动电源什么的&#xff0…

作者头像 李华
网站建设 2026/5/18 19:11:07

谷歌Chrome默认百度搜索引擎,但跳转至so的搜索结果页面

Q: chrome浏览器默认搜索引擎为百度,使用顶部网址/搜索栏时,本应跳转至百度的搜索结果页,但今天自动跳转到了so的搜索结果页面,chrome设置中百度为默认搜索引擎没问题,也删除了360的so引擎,重置…

作者头像 李华
网站建设 2026/5/18 19:06:52

论APS智能排产:让生产排程从“经验博弈“到“智能决策“的进化

一个老练的计划员,每天面对200订单、50台设备、1000种物料,如何在2小时内拿出可行的排产方案?这不是能力问题,这是现代制造业共同的困境。 在制造业的车间里,常常能看到这样的场景:计划员抱着厚厚的订单来…

作者头像 李华
网站建设 2026/5/18 19:06:32

基于MCP协议构建AI求职助手:从协议原理到JobGPT服务器实战

1. 项目概述:当求职助手遇上AI代理最近在折腾一个挺有意思的开源项目,叫6figr-com/jobgpt-mcp-server。乍一看这个名字,你可能觉得它又是一个基于GPT的聊天机器人,专门用来聊求职的。但如果你这么想,那就只看到了冰山一…

作者头像 李华