深色模式
Wireshark 分析握手
摘要:tcpdump 看概要,Wireshark 看细节。本文用 Wireshark 打开一个 pcap,过滤出三次握手,逐字段读懂 SYN/SYN-ACK/ACK 与序号。
适用环境
bash
# 先在一台 Linux 上抓好文件(见 10-tcpdump)
sudo tcpdump -nn -i any -w hs.pcap "host 192.168.1.10 and port 22" &
ssh 192.168.1.10 echo ok
# 把 hs.pcap 拷到装有 Wireshark 的机器1
2
3
4
2
3
4
Wireshark 下载:Windows/macOS 直接安装;Linux 用 sudo apt install wireshark。
操作步骤
1. 打开文件并过滤 TCP 握手
text
在过滤框输入:tcp.flags.syn == 1 and tcp.flags.ack == 01
这会列出所有「纯 SYN」包——每个新连接的第一次握手。
2. 跟随一个完整流
text
右键某个 SYN 包 → Follow → TCP Stream1
Wireshark 会把该连接的所有包高亮,方便只看这一条连接。
3. 读懂三次握手三行
text
No. Time Source Dest Info
1 t1 192.168.1.20 192.168.1.10 [SYN] Seq=0 Win=64240
2 t2 192.168.1.10 192.168.1.20 [SYN, ACK] Seq=0 Ack=1
3 t3 192.168.1.20 192.168.1.10 [ACK] Seq=1 Ack=11
2
3
4
2
3
4
- 第 1 行:客户端发 SYN,初始序列号
Seq=0(相对值),Win为接收窗口 - 第 2 行:服务端回 SYN+ACK,
Ack = 客户端Seq+1 - 第 3 行:客户端 ACK,
Ack = 服务端Seq+1,握手完成,之后才传数据
4. 看 MSS / 窗口缩放等选项
展开第 1 个 SYN 包的 TCP → Options,可见 MSS=1460、Window scale、SACK permitted。
5. 判断握手是否异常
- 只有 SYN 没有 SYN-ACK → 对端没收到或服务端没监听/被防火墙丢
- 有 SYN-ACK 但客户端没 ACK → 客户端侧或中间链路问题
- 大量重传(Retransmission)→ 链路丢包
验证
text
过滤:tcp.stream eq 0
确认前 3 个包标志依次为 [SYN] → [SYN, ACK] → [ACK],且第 4 个包开始带 [PSH, ACK] 载荷。1
2
2
能复现上述三段,即成功观察并理解一次 TCP 三次握手。
常见坑
WARNING
Wireshark 默认显示相对序列号(从 0 开始)。想看真实序号,右键包 → Protocol Preferences → 关掉 Relative sequence numbers。排错跨设备对比时以真实序号为准。
DANGER
pcap 可能含明文敏感信息。Wireshark 文件不要随便发给外部,分析完妥善删除或脱敏(Export Specified Packets 只导相关连接)。