Linux35 TCP状态转换图

TCP状态转换图

这张图是TCP 状态转移图,完整展示了 TCP 连接从 "建立→通信→断开" 的全生命周期状态变化,每个状态和箭头对应实际的 TCP 数据包交互(如 SYN、ACK、FIN 等标志位的收发)。以下是分层详解:

一、核心状态分类

TCP 连接的状态可分为建立阶段 、通信阶段 、断开阶段三大类,每个状态有明确的触发条件和行为:

阶段 状态列表 核心作用
建立阶段 CLOSED → LISTEN → SYN_SENT → SYN_RCVD → ESTABLISHED 完成三次握手,建立可靠的 TCP 连接
通信阶段 ESTABLISHED 双方通过 TCP 连接传输数据(如 HTTP 请求、文件内容)
断开阶段 FIN_WAIT_1 → FIN_WAIT_2 → CLOSING → TIME_WAIT → CLOSED(主动关闭);CLOSE_WAIT → LAST_ACK → CLOSED(被动关闭) 完成四次挥手,释放 TCP 连接

二、建立阶段(三次握手)

TCP 连接建立需经过三次数据包交互(SYN、SYN+ACK、ACK),对应状态转移如下:

  1. CLOSED → LISTEN

    • 触发条件:服务器程序被动打开(如启动 HTTP 服务,监听 80 端口)。
    • 行为:服务器进入 "监听" 状态,等待客户端的连接请求。
  2. CLOSED → SYN_SENT

    • 触发条件:客户端程序主动打开(如浏览器发起网页请求)。
    • 行为:客户端发送SYN 包(请求建立连接),进入 "SYN 已发送" 状态,等待服务器响应。
  3. LISTEN → SYN_RCVD

    • 触发条件:服务器收到客户端的SYN 包。
    • 行为:服务器发送SYN+ACK 包(同步序列号 + 确认收到 SYN),进入 "SYN 已接收" 状态,等待客户端最终确认。
  4. SYN_SENT → ESTABLISHED

    • 触发条件:客户端收到服务器的SYN+ACK 包。
    • 行为:客户端发送ACK 包(确认收到 SYN+ACK),三次握手完成,双方进入 "已建立" 状态,可开始传输数据。

三、通信阶段(ESTABLISHED)

  • 状态:ESTABLISHED
  • 行为:客户端与服务器通过 TCP 连接双向传输数据(如客户端发 HTTP GET 请求,服务器发 HTML 响应)。
  • 关键:此状态下,双方通过 ** 序列号(Seq)和确认号(Ack)** 保证数据的可靠传输(丢包重传、乱序重组)。

四、断开阶段(四次挥手)

TCP 连接断开需经过四次数据包交互(FIN、ACK、FIN、ACK) ,分为主动关闭 和被动关闭两条路径:

路径 1:主动关闭方的状态转移(客户端或服务器主动发起断开)
  1. ESTABLISHED → FIN_WAIT_1

    • 触发条件:主动关闭方发送FIN 包(请求断开连接)。
    • 行为:进入 "FIN 等待 1" 状态,等待对方的 ACK 确认。
  2. FIN_WAIT_1 → FIN_WAIT_2

    • 触发条件:收到对方的ACK 包(确认收到 FIN)。
    • 行为:进入 "FIN 等待 2" 状态,等待对方的 FIN 包(对方的断开请求)。
  3. FIN_WAIT_2 → TIME_WAIT

    • 触发条件:收到对方的FIN 包。
    • 行为:发送ACK 包(确认收到 FIN),进入 "时间等待" 状态(持续 2MSL,约 1-4 分钟),确保对方收到最终 ACK,避免残留数据包干扰新连接。
  4. TIME_WAIT → CLOSED

    • 触发条件:时间等待超时(2MSL 结束)。
    • 行为:彻底释放连接资源,回到初始状态。
路径 2:被动关闭方的状态转移(对方主动发起断开,自身被动响应)
  1. ESTABLISHED → CLOSE_WAIT

    • 触发条件:收到对方的FIN 包(对方请求断开)。
    • 行为:发送ACK 包(确认收到 FIN),进入 "关闭等待" 状态,此时应用层需处理剩余数据并发起自身的断开请求。
  2. CLOSE_WAIT → LAST_ACK

    • 触发条件:应用层完成数据处理,发送FIN 包(自身的断开请求)。
    • 行为:进入 "最后确认" 状态,等待对方的 ACK 确认。
  3. LAST_ACK → CLOSED

    • 触发条件:收到对方的ACK 包(确认收到 FIN)。
    • 行为:彻底释放连接资源,回到初始状态。

五、特殊状态与异常处理

  • SYN_RCVD → LISTEN:若服务器收到 RST 包(复位请求),则从 "SYN 已接收" 回退到 "监听" 状态,表示连接建立被中断。
  • SYN_SENT → CLOSED:若客户端发起连接后超时未收到响应,或收到 RST 包,会从 "SYN 已发送" 回到 "关闭" 状态,终止连接建立。
  • CLOSING 状态 :若双方同时发起 FIN 请求,则会进入 "CLOSING" 状态,互相发送 ACK 后进入 TIME_WAIT,属于特殊的 "同时关闭" 场景。
相关推荐
2301_780789667 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
2501_915106328 小时前
抓包抓到乱码或压缩字节怎么解析,TraceEagle五种查看模式和一键解码
网络协议·计算机网络·网络安全·ios·adb·https·udp
情 九8 小时前
MCP 实战 06:把 HTTP 接口接成工具,让 AI 帮你查数据
人工智能·网络协议·http·mcp
星融元asterfusion9 小时前
工业网络升级实战:100G 双轨 Leaf-Spine 架构破解高并发出货网络瓶颈
网络·架构·spine
Da Da 泓9 小时前
五子棋 Web 端测试用例报告
前端·网络·websocket·网络协议·测试用例·项目
云和数据.ChenGuang10 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain
ESDWAN10 小时前
企业网络监控应该监测哪些目标?网关、网络节点还是业务系统?
服务器·网络·php
mennekes11 小时前
临时用电线路标识:插头颜色、钟面标识配套规范
运维·网络·科技·安全·制造
发光小北12 小时前
EtherNet/IP 转 ModbusTCP 网关现场应用中会遇到什么问题?
服务器·网络·tcp/ip
海宇大数据12 小时前
零信任架构实战:基于海宇全能小微企业报告构建自动化持牌网络小贷小微商户极速助业贷秒级全维风险决策网关
网络·人工智能·架构·自动化