1、MAC漂移现象

        MAC地址漂移是指设备上一个VLAN内有两个或者三个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。通常认为第一个学习到MAC地址的接口是正确的出接口,称为源端口(Original Port),后学习的端口是漂移端口(Move Port),漂移端口通常是在环路上或者下挂网络中有环路的端口。

        设备出现MAC地址漂移时,设备CPU占用率会有不同程度的升高。

        在规划网络时,可以通过下面两种方式来避免MAC地址漂移:

        (1)提高接口MAC地址学习优先级。当不同接口学到相同的MAC地址表项时,高优先级接口学到的MAC地址表项可以覆盖低优先级接口学到的MAC地址表项,防止MAC地址在接口间发生漂移。

        (2)不允许相同优先级的接口发生MAC地址表项覆盖。当伪造网络设备所连接口的优先级与安全的网络设备相同时,后学习到的伪造网络设备的MAC地址表项不会覆盖之前正确的表项。但如果网络设备下电,仍会学习到伪造网络设备的MAC地址,当网络设备再次上电时将无法学习到正确的MAC地址。

2、MAC漂移解决方法      

2.1 配置MAC地址防漂移

2.1.1  提高接口MAC地址学习优先级

    进入系统视图。

    system-view

    进入接口视图。

    interface interface-type interface-number

    配置接口学习MAC地址的优先级。

    mac-address learning priority priority-id

    缺省情况下,接口学习MAC地址的优先级为0。取值范围是0~3,数值越大优先级越高。

    返回系统视图。

    quit


2.1.2 不允许相同优先级的接口发生MAC地址漂移

    配置不允许相同优先级的接口发生MAC地址漂移。

    undo mac-address learning priority priority-id allow-flapping

    缺省情况下,允许相同优先级的接口发生MAC地址漂移。

2.2 配置MAC刷新ARP功能

        在以太网中,主机设备是根据MAC地址来发送、接收以太网数据帧。ARP用于提供IP地址到MAC地址的映射。当不同网段间通信时,需要使用ARP表项来将IP地址映射到正确的MAC地址及相应的出接口上。

        一般来说设备上的MAC表项和ARP表项的出接口是一致的。在某一时间点t1,MAC地址表项和ARP表项的出接口是一致的,都是interface1;但是当端口切换后,t2时间时,MAC地址表项的出接口在收到报文时立即刷新为interface2,但是ARP表项的出接口还是interface1,需要等到t3时间点即ARP表项的老化时间到达后,通过ARP老化探测,才会刷新为interface2。这样就在t2时间点和t3时间点之间,ARP表项的出接口是不可用的,会导致不同网段间设备的通信中断。

        MAC刷新ARP可以实现在MAC出接口更新时,直接刷新ARP表项的出接口的功能。配置方法如下:

    进入系统视图。

    system-view

    配置MAC刷新ARP功能。

    mac-address update arp enable

    该命令只对动态ARP表项生效,不会更新静态ARP表项。

    使用arp anti-attack entry-check { fixed-mac | fixed-all | send-ack } enable命令配置ARP表项固化功能后,MAC刷新ARP功能不生效。

    使能了MAC刷新ARP功能后,只有MAC表项的出接口发生变化,才会更新对应的ARP表项。

2.3 配置基于接口关闭MAC地址学习


    创建VLAN,并将接口加入到VLAN中。


    # 将10GE1/0/1加入VLAN 10和VLAN 20。


    <HUAWEI> system-view

    [HUAWEI] sysname DeviceA

    [DeviceA] vlan batch 10 20

    [DeviceA] interface 10ge 1/0/1

    [DeviceA-10GE1/0/1] port link-type trunk

    [DeviceA-10GE1/0/1] port trunk allow-pass vlan 10 20

    [DeviceA-10GE1/0/1] quit


    配置基于接口关闭MAC地址学习。


    # 在接口10GE1/0/1上关闭MAC地址学习,端口学习到新的MAC地址的报文直接丢弃。


    [DeviceA] interface 10ge 1/0/1

    [DeviceA-10GE1/0/1] mac-address learning disable action discard      #关闭MAC地址学习功能

    [DeviceA-10GE1/0/1] quit


关闭MAC地址学习功能的缺省动作为forward,即对报文按照MAC地址表项进行转发,如果没有对应的MAC地址表项,则广播该报文。当配置动作为discard时,会对报文的源MAC地址进行匹配,当接口和MAC地址与MAC地址表项匹配时,对该报文进行转发;当接口和MAC地址与MAC地址表项不匹配时,丢弃该报文。

2.4 配置端口聚合

        如果出现mac漂移的源端口和漂移端口是同一个主机且做同一个业务网卡使用,可以将这两个接口配置eth-trunk。

2.5 配置接口为二层接口

    [DeviceA] interface 10ge 1/0/1

    [DeviceA-10GE1/0/1] portswitch                       #将接口从三层模式切换到二层模式