未知单播:交换机是收到数据包后,读取数据包的目的MAC,并查找自已的MAC表,查找目的MAC对应的端口,从而判断从哪个口端口转发出此数据包,若MAC表里没有此目的MAC,那对于此交换机来说就是未知单播,那就把数据包泛洪到同一VLAN下除接收端口外的其它全部端口。
未知单播包过多带来的问题:正常情况下交换机有未知单播包是正常现象,但若未知单播包过多过大时,会严重影响网络带宽及设备性能,导致网络慢及通讯中断。
交换机的MAC表是如何产生的:交换机收到数据包时,会读取数据包的源MAC,并把源MAC与接收端口记录到交换机MAC表里。
下图为交换机的MAC表
而如下几种情况会产生未知单播包泛洪:
1、电脑的ARP老化时间与交换机的MAC表老化时间不一致
案例:电脑A向电脑B不停发送UDP包,由于电脑A上的ARP表未老化仍有电脑B的IP对应的MAC,故仍可发送封装了目的MAC B的单播包,但此时电脑B已离线且交换机上的MAC表又老化掉了,交换机就只有把此单播包泛洪出去,但此时目标主机已离线,将不会回应此报文,故交换机的MAC表也就一直学习不到MACB,且由于是UDP包,故电脑A仍会不停发送,交换机收到后就会不停泛洪到除连接电脑的A以外的所有端口从而导致端口数据过大引起网络丢包不稳定。此泛洪需要等到电脑A的ARP表老化掉才能结束,ARP表老化后,电脑A访问电脑B时,需要先发送ARP广播包,问询电脑B的MAC地址。
解决方法:可以在交换机上设置静态MAC表,绑定电脑B的MAC与端口;或者确保交换机的MAC老化时间比windows的ARP老化时间短,windows的ARP老化时间默认为120s。
2、核心三层交换机的ARP表比MAC表的老化时间长
电脑A与电脑B不同网段,现电脑A向电脑B发送数据包(源IP:IPA,目的IP:IPB,源MAC:MACA,目的MAC:三层交换机的MAC),三层核心交换机收到后,先查询ARP表,找寻IPB对应的MACB,假设此时三层核心交换机的ARP表未老化,那交换机就封闭新的数据包(源IP:IPA,目的IP:IPB,源MAC:MACA,目的MAC:MACB)准备发出,发出前查询自己的MAC表,但若此时MAC表老化了,那就只能把此单播包泛洪出去,若此时电脑B离线不能响应此数据包,那核心交换机MAC表就一直学习不到MACB,泛洪就一直存在。
解决方法:把三层核心交换机的MAC表老化时间老化时间设置比ARP表老化时间小。
3、非对称路由
如下图网络有两个出口AR1与AR2,而PC的网关指向AR1,PC访问外网时从AR1外出时,LSW1可以学习到PC的MAC信息,但互联网回包从AR2回来时(AR里都做了关于PC的静态ARP,故可直接封装目标MAC,而不需要ARP),由于LSW2的MAC表没有PC的MAC,故LSW2泛洪此未知单播。
4、 生成树的TC
5、MAC表溢出
防止未知单播泛洪的方法:
1、strom-control
config_g4/20#storm-control unicast threshold 10000
2、阻止未知单播
config_g4/20#switchport block unicast
3、VLAN修剪
trunk口不要放行所有VLAN,只放行需要的VLAN
4、修改ARP与MAC老化时间
修改ARP的老化时间小于MAC的老化时间