3. 广播域与冲突域:二层网络基础概念,交换机工作原理
聊到广播丢包,很多人第一反应就是抓包、看统计、调参数。但说实话,我排查过那么多案例,根因往往不在三层,而在二层。二层网络没搞明白,你抓再多的包也是白费力气。
这一章,我们就来啃一啃二层网络的两个核心概念:广播域和冲突域。顺便把交换机的工作原理彻底讲透。你想想看,一个广播帧在交换机里到底是怎么转发的?为什么有时候一个广播就能把整张网打瘫?这些问题的答案,都在这里。
3.1 冲突域:老生常谈,但必须懂
先说说冲突域。这个概念最早来自集线器(Hub)时代。集线器是个物理层设备,它不聪明,收到什么信号就往所有端口复制一份。
这就带来一个问题:如果两台设备同时发数据,信号就会在集线器内部撞车。撞车之后,数据全废,大家得等随机时间重传。这个可能发生碰撞的范围,就叫冲突域。
核心结论:
- 集线器的所有端口都在同一个冲突域里。
- 交换机的每个端口都是一个独立的冲突域。
- 全双工模式下,冲突域不存在——因为收发走不同的线。
我记得有一次去一个工厂排查网络卡顿,发现他们还在用集线器连摄像头。十几路视频流同时上传,冲突率高达 40%,画面全是马赛克。换成交换机之后,问题立刻消失。这就是冲突域带来的直接影响。
我的习惯:只要看到网络里还有 Hub,我第一件事就是建议换掉。哪怕是个最便宜的交换机,也比 Hub 强一百倍。冲突域越小,网络越稳。
3.2 广播域:丢包的真正元凶
冲突域好理解,但广播域才是我们今天的主角。什么是广播域?简单说:一个广播帧能到达的所有设备,构成一个广播域。
交换机虽然能隔离冲突域,但它不隔离广播域。默认情况下,交换机的所有端口都在同一个广播域里。这意味着,任何一台设备发一个广播帧,交换机就会把它转发到所有端口(除了接收端口)。
你想想看,如果网络里有 500 台设备,每台设备每分钟发几个广播(ARP、DHCP、NetBIOS 等等),那交换机就得复制几千次广播帧。这些广播帧占用了带宽,也消耗了所有设备的 CPU——因为每台设备收到广播都得处理一下,哪怕跟自己无关。
我曾经踩过的坑:有一次帮一个学校排查“上网慢”的问题。抓包一看,广播帧占了总流量的 30%。原因是学生宿舍里有人开了 P2P 软件,那软件疯狂发广播发现邻居。整个广播域里上千台设备全被拖累。后来用 VLAN 把宿舍区隔开,广播域缩小了,网络立刻恢复正常。
3.3 交换机工作原理:MAC 地址表与转发决策
交换机到底是怎么工作的?说白了,它做三件事:学习、转发、过滤。
我们一步步拆开看。
3.3.1 MAC 地址表的学习过程
交换机内部维护一张 MAC 地址表(也叫 CAM 表)。这张表记录了:哪个 MAC 地址在哪个端口上。
学习过程是这样的:
- 设备 A 发一个帧给设备 B。
- 交换机收到这个帧,先看源 MAC 地址。
- 交换机把源 MAC 地址和接收端口记录下来。
- 然后查目的 MAC 地址,决定往哪个端口转发。
这个过程是自动的,不需要人工干预。但要注意,MAC 地址表是有老化时间的,默认一般是 300 秒。如果某个设备长时间不发数据,它的表项就会被删除。
关键点:MAC 地址表是交换机转发决策的基础。表里查不到目的 MAC 时,交换机会把帧广播到所有端口(除了接收端口)。这就是广播帧的来源之一。
3.3.2 转发决策:三种情况
交换机收到一个帧之后,根据目的 MAC 地址,有三种处理方式:
| 情况 | MAC 地址表状态 | 交换机行为 |
|---|---|---|
| 单播已知 | 目的 MAC 在表中,且端口与源端口不同 | 只往对应端口转发 |
| 单播未知 | 目的 MAC 不在表中 | 泛洪(Flood)到所有端口(除源端口) |
| 广播/组播 | 目的 MAC 为广播地址(FF-FF-FF-FF-FF-FF)或组播地址 | 泛洪到所有端口(除源端口) |
你看,未知单播和广播都会导致泛洪。泛洪就是交换机把帧复制多份,发到所有端口。这就是广播域里所有设备都能收到广播帧的原因。
我个人的经验是:很多广播丢包问题,根源就是未知单播泛洪太多。比如 MAC 地址表被撑爆了,或者设备频繁上下线导致表项抖动,交换机就会频繁泛洪,网络质量直线下降。
3.4 广播域与冲突域的对比
这两个概念容易混淆,我习惯用一张表来对比:
| 对比项 | 冲突域 | 广播域 |
|---|---|---|
| 定义 | 可能发生信号冲突的范围 | 广播帧能到达的范围 |
| 隔离设备 | 交换机、网桥 | 路由器、三层交换机 |
| 影响 | 导致数据重传、性能下降 | 消耗带宽和设备 CPU |
| 常见问题 | 半双工模式下的碰撞 | 广播风暴、ARP 泛洪 |
| 排查方法 | 查看接口的碰撞计数 | 抓包分析广播帧比例 |
嗯,这里要注意:广播域越大,风险越高。一个广播域里如果有几百台设备,随便一台中毒发广播,整个域都受影响。所以网络设计的原则就是:在合理范围内尽量缩小广播域。
3.5 知识体系总览
为了让你更直观地理解这一章的知识结构,我画了一张图。它把广播域、冲突域、交换机工作原理串在了一起。
3.6 实战中的广播域排查要点
光讲理论不够,我分享几个实战中常用的排查思路:
- 第一步:确认广播域大小。看看交换机上接了多少台设备。如果一台交换机下接了 200 台 PC,那广播域就是 200 台。用
show mac address-table count可以快速查看 MAC 表条目数。 - 第二步:抓包看广播比例。在交换机上做端口镜像,抓 5 分钟流量。如果广播帧占比超过 5%,就要警惕了。超过 10%,基本可以断定广播影响了正常通信。
- 第三步:定位广播源。抓包之后,按源 MAC 地址统计广播帧数量。排在前几名的设备就是“广播大户”。可能是中毒的 PC,也可能是配置不当的服务器。
- 第四步:用 VLAN 缩小广播域。把不同部门或不同业务隔离开。每个 VLAN 是一个独立的广播域,广播帧不会跨 VLAN 传播。
一个小技巧:我习惯在交换机上开启 storm-control broadcast(广播风暴控制)。设置一个阈值,比如每秒 1000 个广播包。超过这个数,交换机自动丢弃多余的广播帧。这能防止一台设备发疯拖垮全网。
3.7 本章小结
这一章我们讲了三件事:
- 冲突域是物理层的概念,交换机每个端口独立一个冲突域。
- 广播域是数据链路层的概念,交换机默认不隔离广播域。
- 交换机的工作原理就是学习 MAC 地址、查表转发、未知则泛洪。