TCP 握手 / 挥手模拟器

把课本上的时序图变成动画:选择三次握手或四次挥手,逐帧观察 SYN / FIN / ACK 报文在客户端与服务器之间的流动,seq 与 ack 编号同步标注,两侧状态机实时高亮。支持播放、单步、慢放,面试备考与计网实验都能用。

SYN 同步 SYN+ACK ACK 确认 FIN 结束 TIME-WAIT
步骤 0 / 3
客户端 ClientACTIVE OPEN / PASSIVE CLOSE
CLOSED
服务器 ServerPASSIVE OPEN / ACTIVE CLOSE
CLOSED
选择场景后点击"播放"或"单步"开始演示。

6 个真实场景 · 逐包时序 · 报文头字段

独立于上方状态机的逐包演示:覆盖握手、端口拒绝、SYN 重传、四次挥手、服务端主动关闭与半关闭六种真实场景,右侧对照 TCP 首部字段含义。

0 / 3

逐包时序 · 自绘 SVG

选择场景后点击播放或单步开始演示。

TCP 报文头字段

字段长度本工具取值示例作用
源端口 Source Port16 bit49152(客户端临时端口)标识发送端进程
目的端口 Dest Port16 bit443(服务器监听端口)标识接收端进程
序号 Sequence Number32 bitSYN 的 seq=100发送数据首字节编号;SYN/FIN 各消耗 1 个序号
确认号 Acknowledgment32 bitack=101期望收到的下一个字节编号,仅 ACK=1 时有效
数据偏移 Data Offset4 bit5(无选项时)首部长度,以 4 字节为单位
标志位 Flags6 bit(经典定义)SYN / SYN+ACK / ACK / FIN / RSTURG、ACK、PSH、RST、SYN、FIN 控制连接状态
窗口 Window16 bit64240(缩放前)接收窗口大小,用于流量控制
校验和 Checksum16 bit由伪首部计算校验首部与数据完整性
紧急指针 Urgent Pointer16 bitURG=1 时有效指向紧急数据末尾
选项 Options可变SYN 中常见 MSS=1460MSS、SACK、时间戳、窗口缩放等协商

方案管理 · 数值对比 · 导出

调好的参数可存成方案随时载入,也能生成可分享链接;结果里的数值列会自动画成对比图,并支持导出 CSV / JSON。

最近方案 暂无

🤝口径说明与常见误填

逐帧动画带 seq 与 ack,状态机同步高亮

两种场景
三次握手、四次挥手切换演示,SYN、SYN+ACK、ACK、FIN 报文按颜色图例区分。
序号标注
每帧标注 seq 与 ack 编号,加一递增逻辑看得明明白白。
状态机
两侧状态框随报文实时高亮:LISTEN、SYN-SENT、SYN-RCVD、ESTABLISHED、FIN-WAIT、CLOSE-WAIT、LAST-ACK、TIME-WAIT。
播放控制
播放、单步、重置,另支持 0.5x 慢放与 2x 快放。
日志
底部逐条记录每个报文的方向与标志位,可与课本时序图对照。

这个工具解决什么问题

课本上的时序图是静态的,状态迁移总背不住。本工具把 TCP 三次握手与四次挥手做成逐帧动画:SYN、FIN、ACK 报文在客户端与服务器之间流动,seq 与 ack 编号同步标注,两侧状态机实时高亮,支持播放、单步与慢放,面试备考与计网实验都能用。

三条原理守则

① 第三次 ACK 省不得:两次握手时服务器无法确认客户端真收到了 SYN,网络中滞留的旧 SYN 重复包还会建立无效连接浪费资源。

② ACK 与 FIN 不能合并:被动方收到 FIN 时可能还有数据没发完(半关闭状态),这正是四次挥手比握手多一次的本质原因。

③ TIME-WAIT 要等 2MSL:保证最后一个 ACK 丢失时还能应答重发的 FIN,并让本次连接的滞留报文自然消亡,Linux 默认等 60 秒。

怎么用

  1. 第 1 步 · 选场景
    三次握手与四次挥手两种模式一键切换。
  2. 第 2 步 · 播放或单步
    点播放自动演示,或单步逐帧推进,用 0.5x 慢放细看每个报文。
  3. 第 3 步 · 盯状态与序号
    每帧报文标注 seq 与 ack,两侧状态框随推进实时高亮。
  4. 第 4 步 · 对照日志
    底部日志逐条记录报文方向与标志位,逐步核对每个状态迁移条件。

更新记录

  • v1.0 2026-11-02
  • 2026-11-02 上线首个版本
  • 2026-11-02 新增四次挥手模式与 0.5x 慢放

常见问题

三次握手的过程图解?
① 客户端发 SYN(seq=x)进入 SYN-SENT;② 服务器回 SYN+ACK(seq=y、ack=x+1)进入 SYN-RCVD;③ 客户端发 ACK(ack=y+1),双方进入 ESTABLISHED。本页动画按真实 seq/ack 编号逐帧演示。
为什么是三次握手不是两次?
核心是双方都要确认自己能发、对方能收。两次握手时服务器无法确认客户端收到了自己的 SYN;且网络中滞留的旧 SYN 重复包会让服务器直接建立无效连接浪费资源。第三次 ACK 正是对服务器同步的确认。
TIME_WAIT 为什么要等 2MSL?
两个原因:① 保证最后一个 ACK 丢失时,对方重发的 FIN 还能被应答(一去一回恰好 2MSL);② 让本次连接的滞留报文在网络中自然消亡,避免污染相同四元组的新连接。Linux 默认 MSL 为 30 秒,故等待 60 秒。
四次挥手的 FIN 和 ACK 顺序是什么?
① 主动方 FIN;② 被动方 ACK;③ 被动方 FIN;④ 主动方 ACK。ACK 与 FIN 不能合并是因为被动方收到 FIN 时可能还有数据未发完(半关闭状态),这正是四次与三次的本质区别;切到四次挥手模式可观察 CLOSE-WAIT 停留。
有没有 TCP 状态机在线演示?
本页即是:两侧状态框随报文推进实时高亮(LISTEN、SYN-SENT、SYN-RCVD、ESTABLISHED、FIN-WAIT-1/2、CLOSE-WAIT、LAST-ACK、TIME-WAIT),配合单步与 0.5x 慢放,可逐步核对每个状态迁移条件。

💬 留言板 0

全部留言需审核通过后展示
💬

还没有留言,来抢沙发吧!

✍️ 说点什么
0 / 500
图形验证码
👣 做完这一步,顺便看看
🏛️ 凯撒密码解密 凯撒密码解密 :1~25 位位移加解密、ROT13 一键转换… → 🔤 乱码转换器在线修复 乱码转换器在线 :把“锟斤拷”“�”“涓枃”“😀”等乱… → 📸 代码截图美化工具 在线代码转图片工具:粘贴或输入代码(支持 JavaScrip… → 🎨 WCAG 对比度检测工具 在线颜色对比度检测工具:输入前景文字色与背景色(支持 #he… →
全部工具 →