发布时间:2023-12-14 18:00
MAC地址表记录了相连设备的MAC地址、接口号以及所属的VLAN ID之间的对应关系,是VLAN内数据转发的决策表,是决定交换机转发行为的标准,交换机就是根据这张表负责将数据帧传输到指定的主机上的。
MAC表一般包含动态MAC地址、静态MAC地址和黑洞MAC地址。
动态MAC地址: 由接口通过报文中的源MAC地址学习获得,表项可老化,默认老化时间为300s,可以通过命令修改老化时间,老化时间到后,会清除学习到的动态MAC地址。
静态MAC地址: 由用户手工配置,不会老化,接口和MAC地址静态绑定后,其他接口收到目的MAC是该MAC地址的报文将会被丢弃,但是一个接口和MAC地址静态绑定后,不会影响该接口动态MAC地址表项的学习。
黑洞MAC地址:设备收到源MAC或者目的地址是该MAC地址的报文将会被丢弃。
下面通过实验去配置、理解上述三种类型的MAC地址,网络拓扑如下图所示:
网络拓扑在初始化,mac地址表没有任何表项,只有数据包经过后,才会动态学习到mac地址和接口的对应关系。
利用PING命令,从PC1 ping PC2,我们就可以在MAC表里看到PC1和PC2的MAC地址以及对应的接口了。现在我们看到的就是学习到动态MAC地址表项,,Type 为 dynamic
将PC2的MAC地址配置成静态MAC地址,再看一下表项,可以看到在mac地址表中出现了静态mac地址表项,而且已经将PC2的mac地址从动态表项中移除。
假如我们将Client2从接口2移到接口4,并在原来接口2上,重新接入一台MAC地址不同的客户端,我们来通过抓包看一下Client2能不能发送和收到数据包。
接口G0/0/1抓包结果:
接口G0/0/2抓包结果:
由抓包结果可知,目的地址是静态MAC表项的,将从绑定的端口(G0/0/2)发送出去,在G0/0/4端口上被丢弃,所以G0/0/4收不到该ICMP Request包
而从Client2 ping Client1时
接口G0/0/4抓包结果:
由该抓包结果可知,G0/0/4接口可以接受源地址为静态MAC地址的数据包,并且可以到达G0/0/1口。
通过上述两个抓包实验,我们验证了,将MAC地址和接口绑定后,目的地址为该MAC地址的只能有绑定接口转发,其他非绑定接口将会丢弃;而针对源地址为该MAC地址的数据包,非绑定接口能够接收。
将Client3的MAC地址设定为黑洞MAC地址,可以看到表项出现了blackhole类型的mac地址,再通过抓包看一下实验效果。
从Client3 ping Client1 G0/0/3接口抓包如下:
接口G0/0/1接口如下:
从上述抓包结果我们可以看到,针对源地址是黑洞MAC的数据包,设备直接丢弃,所以G0/0/1收不到ARP数据包
交换机在接收到数据帧以后,首先会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。
交换机把从某一个端口接收到的数据帧向除了接收端口以外的其他端口转发。泛洪是一点到多点的转发行为。
交换机在以下几种情况下会泛洪数据帧:
(1)收到广播数据帧(目的MAC是全F)
(2)收到组播数据帧
(3)收到未知的单播数据帧(未知的单播帧是指数据帧的目的MAC地址在MAC地址表中不存在)
交换机从某一个端口收到数据帧后从另一个端口转发出去,转发是一种点到点的转发行为。
交换机转发数据帧流程:交换机收到数据帧以后根据数据帧的目的MAC查看本地MAC地址表,如果MAC地址表中存在目的MAC地址,则将数据帧从目的MAC地址绑定的端口转发出去,如果MAC地址表中不存在MAC地址,则执行泛洪转发。
交换机接收到数据帧的端口和转发数据帧的端口是同一个端口,则丢弃数据帧不转发。
总结: 从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。
注意: 交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。
display mac address vlan 1
display mac-address //查看mac地址表
display mac-address aging-time //老化时间
mac-address aging-time x //修改老化时间s(不建议)
mac-address static abcd-1234-5678 GigbitEthernet 0/0/2 vlan 10
mac-address blackhole adbc-1234-5678