2. 网络嗅探入门:使用Wireshark/Tcpdump抓取广播报文
排查广播丢包,第一步是什么?
不是看配置,不是翻日志。是先把报文抓下来,亲眼看看网络里到底在发生什么。
我个人习惯,遇到广播相关的问题,第一反应就是开抓包。你想想看,广播报文是看不见摸不着的东西,光靠猜,效率太低了。抓包工具就像网络工程师的听诊器,能让你听到网络里的「心跳」和「杂音」。
2.1 抓包前的准备工作
别急着敲命令。先想清楚几个问题:
- 在哪抓? 广播域边界?终端侧?还是交换机镜像口?
- 抓什么? 所有广播?还是特定类型的广播(比如ARP、DHCP)?
- 怎么抓? 用Tcpdump还是Wireshark?命令行还是图形界面?
2.2 Tcpdump实战:命令行抓广播
Tcpdump是Linux下的抓包神器。它的核心逻辑很简单:监听网卡,匹配规则,输出报文。
先看一个最基础的广播抓包命令:
# 抓取所有广播报文(以太网广播地址 ff:ff:ff:ff:ff:ff)
tcpdump -i eth0 ether broadcast
# 或者更精确一点,抓IPv4广播
tcpdump -i eth0 ip broadcast
嗯,这里要注意。广播报文的目标MAC地址是 ff:ff:ff:ff:ff:ff。Tcpdump的 ether broadcast 就是匹配这个地址。
我在项目中遇到过一个问题:某台服务器间歇性丢包,但ping网关却正常。后来我用Tcpdump抓了5分钟广播报文,发现每秒有超过200个NetBIOS广播在网络上泛滥。交换机CPU撑不住了,开始丢包。这就是典型的广播风暴前兆。
常用的Tcpdump广播抓取参数:
| 参数 | 作用 | 示例 |
|---|---|---|
-i |
指定网卡接口 | -i eth0 |
-n |
不解析域名,加快速度 | -n |
-e |
显示MAC层头部信息 | -e |
-v |
显示更详细的报文信息 | -v |
-c |
抓取指定数量后停止 | -c 100 |
-w |
保存为pcap文件 | -w broadcast.pcap |
tcpdump -i any 抓所有流量。结果瞬间抓了几GB数据,服务器直接卡死。记住:先加过滤条件,再开抓包。尤其是广播环境,流量可能比你想象的大得多。
2.3 Wireshark实战:图形化分析广播
Wireshark是Tcpdump的图形化升级版。它不仅能抓,还能帮你分析。
抓取广播报文的步骤:
- 选择正确的网卡接口
- 在过滤栏输入
eth.addr == ff:ff:ff:ff:ff:ff - 点击开始捕获
Wireshark的显示过滤器非常强大。我常用的几个广播相关过滤器:
eth.dst == ff:ff:ff:ff:ff:ff—— 只看广播帧arp—— 只看ARP广播bootp—— 只看DHCP广播udp.port == 67 or udp.port == 68—— DHCP服务端/客户端端口!(arp or dns or dhcp)—— 排除常见广播,找异常广播
Statistics → Protocol Hierarchy 查看广播报文的协议分布。如果某个协议占比异常高,那基本就是问题所在。
2.4 广播报文的结构拆解
抓到了报文,你得能看懂它。一个标准的以太网广播帧长这样:
Ethernet II, Src: 00:1a:2b:3c:4d:5e, Dst: ff:ff:ff:ff:ff:ff
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Source: 00:1a:2b:3c:4d:5e
Type: ARP (0x0806)
ARP Request: Who has 192.168.1.1? Tell 192.168.1.100
关键字段:
- 目标MAC:全F,表示广播
- 类型字段:0x0806是ARP,0x0800是IP
- 载荷:具体广播内容
为什么广播报文不能被交换机转发到其他VLAN?因为交换机只看目标MAC。全F的MAC,它就知道这是广播,只在本地VLAN内泛洪。
2.5 知识体系:广播抓包的核心逻辑
下面这张图,是我自己总结的广播抓包决策流程。每次排查广播问题,我都按这个思路走:
这张图的核心思想是:先定位,再抓取,后分析。不要一上来就开抓,先想清楚在哪抓、抓什么。
2.6 实战案例:一次ARP广播风暴的抓包过程
我记得有一次,某办公网络突然变慢,丢包率高达30%。
我登录到接入交换机,用Tcpdump抓了30秒广播:
tcpdump -i vlan100 -n -e ether broadcast -c 1000 -w arp_storm.pcap
然后用Wireshark打开pcap文件,看统计信息:
- 总报文数:1000个
- ARP广播:987个(占比98.7%)
- 源MAC集中在
00:1a:2b:xx:xx:xx段
问题一下就清楚了:某台设备在疯狂发送ARP请求,导致广播泛滥。顺着MAC地址找到对应端口,发现是一台中毒的PC在持续发送伪造ARP包。
Statistics → Endpoints 可以快速查看每个MAC地址发送的广播数量。谁发的多,谁就是嫌疑犯。
2.7 抓广播时的常见坑
- 交换机镜像口丢包:镜像口本身可能丢包,尤其是高带宽环境。抓包结果只能作为参考,不能100%代表真实流量。
- 抓包时间太短:广播问题往往是间歇性的。我建议至少抓5分钟,或者用
-c参数抓几万个报文,才能看到全貌。 - 忘记保存pcap:现场分析完,记得保存原始抓包文件。后续复盘或者给同事看,都需要原始数据。
tcpdump -i any -w /tmp/dump.pcap 不加任何过滤,结果磁盘写满,业务中断。这是血的教训。
好了,广播抓包的基础操作就这些。工具是死的,思路是活的。多抓几次,你自然就能从报文中读出网络的语言。