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

在 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·运维·网络
腾飞的信仰4 小时前
51单片机同一个timer 作为定时器和波特率发生器么?
网络·单片机·51单片机
中科岩创5 小时前
某公园楼栋自由曲面薄壳结构自动化监测
大数据·网络·物联网·自动化
丰锋ff6 小时前
考研英一学习笔记 2018年
笔记·学习·考研
1296004526 小时前
pytorch基础的学习
人工智能·pytorch·学习
咸鱼2333号程序员6 小时前
Linux ifconfig命令详解
linux·服务器·网络
秦jh_6 小时前
【Linux网络】应用层协议HTTP
linux·运维·服务器·网络·网络协议·tcp/ip·http
LouSean7 小时前
Unity按钮事件冒泡
经验分享·笔记·学习·unity·游戏引擎
pq113_67 小时前
OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)
android·笔记·学习