我们公司最近网络突然变得特别卡,大家都骂骂咧咧的,上班都没法干活。我负责这块,赶紧查,发现Ping内网核心交换机地址的时候,有时候会丢包,断断续续的。
一开始觉得可能是无线干扰或者DHCP服务器出问题了,但排查了一圈,什么也没发现。后来在核心交换机上做了端口镜像,用Wireshark抓包看了看,发现有个怪现象——网络里有很多组播报文,目的地是224开头的那些IP地址。
我们公司压根就没开什么视频会议或者IPTV,哪来的这么多组播?我查了一下资料,才知道这叫未知组播,就是交换机找不到对应的组播表项,就默认把它当成广播在VLAN里到处发。这一发可不得了,占用了大量带宽,还把终端设备的CPU都搞忙了,大家都在处理这些没用的包。
问题根源找到了,是这些未知组播闹的。但为什么会有?可能是某个电脑上的Windows LLMNR或者mDNS服务在乱发,也可能是有人搞了恶意攻击。不管怎样,我们得先把它堵住。
我查了H3C交换机的文档,有个叫风暴控制的功能,可以限制未知组播占接口带宽的比例。我在交换机上配了`storm-constrain multicast ratio 10`,意思是限制未知组播最多占10%的带宽,超过就触发动作。我还设了`control block`,防止它一直冲击。
配完之后,效果立竿见影。Ping不再丢包了,无线网络也恢复了正常,大家终于不骂了。但我知道这只是治标,治本还得看看架构问题。
我们公司的网络架构是:核心交换机是二层的,所有网关都在防火墙(飞塔)上,核心交换机和防火墙之间只有一条千兆光纤链路。平时流量一大,这条链路就容易饱和,就算组播被抑制了,正常业务流量也可能把带宽撑爆。
于是我想到了链路聚合。正好交换机上有两个千兆端口空着,防火墙那边也有两个,不如把两条光纤捆在一起,变成一条2Gbps的链路,还能互相备份。我在H3C交换机上创建了二层聚合接口,把两个物理端口加进去,设成Trunk,允许所有业务VLAN通过。防火墙那边也配了LACP Trunk,两边参数一致。
配置好之后,测试了ping和文件传输,丢包率彻底没了,大文件下载速度也翻倍了。我还故意拔掉一根光纤,业务没断,切换时间不到一秒,冗余效果也验证了。
现在网络稳定多了,但也不能掉以轻心。我准备装个SNMP监控软件,盯着核心链路的带宽利用率和风暴控制触发次数,防止以后出问题。另外,其实更彻底的办法是启用IGMP Snooping并丢弃未知组播,但因为我们公司确实没有合法的组播业务,用风暴控制也够用了。
总结一下这次排查的经验:遇到网络卡顿,先抓包看流量,别瞎蒙。组播风暴是容易忽略的坑,风暴控制能快速止血。而架构瓶颈得靠链路聚合来扩容,治标治本一起上。最后提醒一下,风暴控制的比例别设太低,比如低于5%可能会把正常协议包(比如VRRP、OSPF)也误杀,建议留10%到20%的余量。链路聚合两端VLAN列表必须一致,否则会出环路。
以后公司设备多了,可能还需要把核心交换机升级成三层,把网关下移到交换机,减少防火墙单点压力,再配合VXLAN之类的技术,让网络更灵活。这次折腾下来,也算涨了不少经验。
热门跟贴