Wireshark 过滤与协议分析
Wireshark 是世界上最流行的网络协议分析工具。它把原始的比特流变成人类可读的协议层次视图——能直接看到 TCP 三次握手、HTTP 请求响应、TLS 握手的每一个细节。
Wireshark 界面速览
┌──────────────────────────────────────────────────────────────┐
│ 过滤栏(Display Filter) │ ← 输入过滤条件
├──────────────────────────────────────────────────────────────┤
│ 包列表(Packet List) │
│ No. Time Source Destination Protocol Info │ ← 每行一个包
├──────────────────────────────────────────────────────────────┤
│ 包详情(Packet Details) │
│ ▼ Frame 1: 74 bytes on wire │ ← 物理层
│ ▼ Ethernet II, Src: aa:bb:cc... Dst: ... │ ← 数据链路层
│ ▼ Internet Protocol Version 4, Src: 192.168.1.1, Dst: 8.8.8.8 ← 网络层
│ ▼ Transmission Control Protocol, Src Port: 54321, Dst: 80 │ ← 传输层
│ ▼ Hypertext Transfer Protocol │ ← 应用层
├──────────────────────────────────────────────────────────────┤
│ 包原始数据(Hex Dump) │ ← 十六进制+ASCII
└──────────────────────────────────────────────────────────────┘
显示过滤器(Display Filter)语法
# 按协议
http
tcp
udp
icmp
dns
tls
arp
ospf
# 按 IP 地址
ip.addr == 192.168.1.100 # 任意方向
ip.src == 192.168.1.100 # 来源
ip.dst == 8.8.8.8 # 目标
ip.addr == 10.0.0.0/8 # 网段
# 按端口
tcp.port == 80
tcp.dstport == 443
tcp.srcport >= 1024 and tcp.srcport <= 65535
# 按 TCP 标志
tcp.flags.syn == 1 # SYN 包
tcp.flags.syn == 1 and tcp.flags.ack == 0 # 只有 SYN(新建连接)
tcp.flags.reset == 1 # RST 包
tcp.analysis.retransmission # TCP 重传
tcp.analysis.duplicate_ack # 重复 ACK
# 按内容(HTTP 示例)
http.request.method == "POST"
http.response.code == 200
http.request.uri contains "/api/"
# 复合条件
http and ip.addr == 10.0.50.10
not arp and not icmp
tcp.port == 80 or tcp.port == 443
常用分析场景
分析 TCP 连接建立失败
过滤:tcp.flags.syn == 1 or tcp.flags.reset == 1
观察:
✅ 正常:SYN → SYN-ACK → ACK(三次握手完成)
❌ 超时:只有 SYN,没有 SYN-ACK → 对方没收到或防火墙拦截
❌ 拒绝:SYN → RST/ACK → 对方主动拒绝连接(端口关闭)
右键 SYN 包 → Follow → TCP Stream
可以看到整个 TCP 会话的内容
分析 TCP 重传(丢包)
过滤:tcp.analysis.retransmission or tcp.analysis.fast_retransmission
Wireshark 会用红色/黑色标记重传包
大量重传 = 链路质量差或拥塞
Statistics → TCP Stream Graphs → Time-Sequence Graph(Stevens)
可以可视化看到丢包和重传的时间分布
分析 DNS 解析慢
过滤:dns
观察每条 DNS 查询的响应时间:
DNS Query(Type A)← 查询请求
DNS Response(A 记录)← 响应
Statistics → DNS → 查看 Response Time 分布
响应时间 > 200ms → DNS 服务器慢或网络丢包
SERVFAIL / NXDOMAIN → DNS 服务器返回错误
分析 HTTP API 慢
过滤:http
Statistics → HTTP → Request/Response 序列
Time from request to response = API 响应时间
找最慢的请求:
Statistics → HTTP → Packet Counter
或者
Edit → Find Packet → 按时间戳范围过滤
提取 HTTP body:
右键 HTTP 包 → Follow → HTTP Stream
看完整的请求和响应头/体
Wireshark 实用技巧
# 远程抓包(通过 SSH,不需要在远程机器安装 Wireshark GUI)
ssh user@remote-server 'tcpdump -nn -s 0 -w - port 80' | wireshark -k -i -
# 命令行版 Wireshark(tshark)
tshark -i eth0 -nn -Y 'http.request' # 实时显示 HTTP 请求
tshark -r capture.pcap -Y 'tcp.flags.reset==1' -T fields \
-e frame.time -e ip.src -e ip.dst -e tcp.srcport # 提取字段
# 解密 TLS(需要服务器私钥或 SSLKEYLOGFILE)
# 配置 Wireshark:Edit → Preferences → Protocols → TLS
# Pre-Master-Secret log filename: /path/to/sslkeylog.txt
# 生成 SSLKEYLOGFILE(应用层设置)
SSLKEYLOGFILE=/tmp/ssl-keys.log curl https://example.com
SSLKEYLOGFILE=/tmp/ssl-keys.log google-chrome &
颜色规则速查
Wireshark 默认颜色含义:
颜色 含义
────────────────────────────────────────────────
浅绿色 TCP
深绿色 HTTP
浅蓝色 UDP / DNS
蓝色 ICMP
黑色(背景红) TCP 错误(RST/Checksum Error)
深红色 TCP 重传 / 乱序包
黄色 注意(ARP 广播等)
浅灰色 TCP 连接建立/关闭握手
过滤条件收藏夹
# 保存常用过滤器:
# Wireshark → 过滤栏 → 点击书签图标 → Save This Filter
推荐收藏:
"TCP Problems" → tcp.analysis.flags && !(tcp.analysis.window_update)
"New TCP Conn" → tcp.flags.syn==1 && tcp.flags.ack==0
"HTTP Errors" → http.response.code >= 400
"DNS Failures" → dns.flags.rcode != 0
"TLS Issues" → tls.alert_message
"Large Packets" → frame.len > 1500
"Retransmit" → tcp.analysis.retransmission
CCNA 对应考点
考纲位置:Domain 6.3 — Describe characteristics of different wireless standards
Wireshark 不在 CCNA 考纲内,但理解包分析是网络工程师的必备技能。在学习 CCNA 过程中,用 Wireshark 抓取自己配置的 OSPF Hello 包、ARP 请求、TCP 握手,是理解协议最直观的方法。
下一章:无线网络与企业 Wi-Fi——有线网络排障掌握了,Wi-Fi 有自己特有的问题:信道干扰、漫游不顺畅、WPA3 认证失败——一套独特的排障方法。