学习黑客三次握手快速熟悉

在 TCP 世界里,"三次握手"既是联机仪式,也是协商视窗大小、MSS 等参数的谈判桌。本篇侧重 Wireshark 抓包实战 :先宏观回顾 SYN → SYN|ACK → ACK 的流程,再逐位剖析 TCP 首部中的 Flags、Seq/Ack 号、Options ,并配套常用显示过滤器与异常排障清单。读完后,你能 一眼识帧、两眼识错、三眼定位根因------无论是握手超时、重复 SYN 还是 RST Flood,都能迅速在 Wireshark 里还原真相。


1 三次握手流程回顾

步骤 方向 核心 Flags 关键字段 Wireshark 典型颜色*
SYN Client → Server SYN=1 ACK=0 Seq = x 浅蓝 (默认)
SYN + ACK Server → Client SYN=1 ACK=1 Seq = y Ack = x+1 淡绿
ACK Client → Server SYN=0 ACK=1 Seq = x+1 Ack = y+1 深绿

*默认 Coloring Rules,可在 View ▶ Coloring Rules 查改 (Wireshark Wiki)。

  • 建立连接同时协商 :两端在 SYN 报文的 Options 里发送 MSS、Window Scale、SACK Permitted 等参数。抓包时在 Packet Details ▶ Options 即可看到 (Wireshark Wiki, Medium)。
  • Seq/Ack 递增逻辑 :应答方把收到的 Seq + 1 填入 Ack 字段,确保可靠传输 (CSDN博客)。

2 首部字段 & Flags 逐位详解

2.1 常用 Flags

名称 用途 (Wireshark 字段)
SYN 连接建立 tcp.flags.syn == 1
ACK 确认号有效 tcp.flags.ack == 1
FIN 优雅断开 tcp.flags.fin == 1
RST 强制复位 tcp.flags.reset == 1
PSH 立即交付上层 tcp.flags.push == 1
URG 紧急指针有效 tcp.flags.urg == 1

解释及 NetFlow 取值见 Site24x7 与 Noction 文档 (Site24x7, Noction)。

2.2 序列号、确认号

  • ISN (Initial Seq Number):握手双方各自的随机 32 bit 起点。
  • ACK 规则 :若包只含 ACK 标志且无数据,则确认号 = 对端序列号 + 1;若包含数据则 + 数据长度。详见 MCSI 分解报告 (GitHub)。

2.3 常见 Options

选项 含义 抓包显示
MSS 最大报文段 tcp.option.mss_val
Window Scale 窗口缩放因子 tcp.option.wscale.shift
SACK Permitted 允许选择确认 tcp.option.sack_perm

Wireshark 将 Options 列在 "Transmission Control Protocol" 树形节点内,可右键 Apply as Column 方便对比 (Wireshark Wiki)。


3 Wireshark 抓包实战

3.1 过滤三次握手

bash 复制代码
tcp.flags.syn == 1 && tcp.flags.ack == 0        # 仅 SYN
tcp.flags.syn == 1 && tcp.flags.ack == 1        # SYN|ACK
tcp.analysis.initial_rtt                        # RTT 统计

【DisplayFilters】允许用逻辑表达式精确定位握手帧 (Wireshark Wiki)。

3.2 常见异常快速定位

症状 过滤器 可能原因
连续 SYN 无 SYN ACK tcp.flags.syn==1 && tcp.analysis.retransmission 服务器无响应 / 丢包
RST 握手中断 tcp.flags.reset==1 目标端口关闭或防火墙拒绝
零窗口 tcp.window_size == 0 对端缓冲满,流量堵塞
MSS 不匹配 找不同流 MSS 值 中间设备 MTU 过小

4 握手故障排障流程(实战脚本)

bash 复制代码
# 1. 抓取五秒流量只保留 3 路握手
sudo tcpdump -i eth0 -w handshake.pcap 'tcp[13]&0x12!=0 and port 80' -G 5 -W 1

# 2. 在 Wireshark 打开彩色规则,过滤 tcp.flags.syn==1

# 3. 分析 RTT / 过滤重传
tcp.analysis.ack_rtt && tcp.analysis.retransmission

若 RTT 显示 > 3 s 或出现多次 Retransmission,应检查链路或 MTU 。流程灵感来自 CSDN/Wireshark 抓包示例 (CSDN博客)。


5 总结 & 推荐练习

  • 三次握手不仅建连接,还协商 MSS、窗口缩放、SACK。
  • Flags 组合 是 Wireshark 排障关键:SYNSYN,ACKACK 为正途,遇 RST, 0 win 即异常。
  • 抓包练习:对本机 curl example.com,用过滤器展示 Seq/Ack 进位;修改防火墙拒绝 SYN|ACK 观察重传。
  • 延伸阅读:Wireshark Wiki "TCP 3-way handshaking" 全文、Display Filters 语法、RFC 793 原典。

索引(共 12 条高质量参考)

  1. Wireshark Wiki "TCP 3-way handshaking" (Wireshark Wiki)
  2. Medium "TCP 3-Way Handshake Using Wireshark" (Medium)
  3. Wireshark Wiki "DisplayFilters" (Wireshark Wiki)
  4. Site24x7 "Understanding TCP Flags" (Site24x7)
  5. Noction "Decoding TCP Flags" (Noction)
  6. Wireshark Wiki TCP 3-way handshaking Options 段落 (Wireshark Wiki)
  7. CSDN "wireshark抓包图解三次握手" (CSDN博客)
  8. CSDN "使用 Wireshark 查看 TCP 三次握手" (CSDN博客)
  9. TCP/IP 协议 Flags 列表 (Site24x7) (Site24x7)
  10. RFC 793 TCP 标准(握手设计) (博客园)
  11. GitHub "MCSI dissecting three-way handshake" (GitHub)
  12. Wireshark Wiki Mate/Library(会话拆分) (Wireshark Wiki)

通过本篇,你已具备在 Wireshark 中 精准捕获并诊断三次握手 的能力;接下来可尝试分析 TLS 握手,体会其在 TCP 之上的再次"对敲"!

相关推荐
平生不喜凡桃李4 小时前
Linux网络:UDP
linux·网络·udp
MicroTech20255 小时前
微算法科技(MLGO)研发突破性低复杂度CFG算法,成功缓解边缘分裂学习中的掉队者问题
科技·学习·算法
weixiao04305 小时前
Linux网络 网络层
linux·网络·智能路由器
静若繁花_jingjing5 小时前
面试_项目问题_RPC调用异常
网络·网络协议·rpc
せいしゅん青春之我6 小时前
[JavaEE初阶] 防止网络传输中的中间人入侵---证书
服务器·网络·网络协议·java-ee
future14127 小时前
MCU硬件学习
单片机·嵌入式硬件·学习
好奇龙猫7 小时前
日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(4):文法運用
学习
RTC老炮7 小时前
webrtc弱网-ReceiveSideCongestionController类源码分析及算法原理
网络·算法·webrtc
mtactor7 小时前
投资理财学习笔记
笔记·学习·金融
浮游本尊8 小时前
React 18.x 学习计划 - 第四天:React Hooks深入
前端·学习·react.js