概述
MAC地址学习虽然说起来比较简单,但是在工作中,还是经常看小伙伴不能正确的应用,遇到问题时也比较迷茫,不知道如何分析问题。究其原因,可能还是对MAC地址学习的工作原理了解的不够,所以我今天写一篇文章,给还迷糊的小伙伴在普及一下,如果是已经了解的同学,可以当做复习。
MAC地址简介
在OSI七层模型中,每一层都有不同标识符,用来区分不同的设备,这样它们之间才能对等的进行通信。而MAC地址是数据链路层(layer2)标识符,在数据链路层唯一标识一台设备。
OSI七层模型
MAC地址总共有48个比特(bit),在工作中通常使用16进制来表示,一般有两种写法,一种是:HH:HH:HH:HH:HH:HH格式,如下图:
HH:HH:HH:HH:HH:HH
另外一种是:HHHH:HHHH:HHHH,如下图:
HHHH:HHHH:HHHH
中间可以使用冒号(:)或者点(.)分割,看具体的厂商实现。
源MAC vs 目的MAC
我们注意到,在一个以太网报文中,有两个MAC地址:源MAC、目的MAC,如下图所示:
源MAC、目的MAC
那么这两个MAC地址有什么区别呢?这也是大家容易犯迷糊的地方,其实只要记住三句话就可以了:
源MAC地址是属于报文发送者; 目的MAC地址是属于报文终结者; 交换机接收到报文以后,会记录源MAC,同时根据目的MAC查找出接口。 MAC地址学习原理
MAC地址学习是针对于交换机来说的,它说的是交换机在收到一个报文时,会把报文的源MAC地址记录在MAC地址表项中。
如下图所示,交换机E0/1接口收到任何PC1发送的报文,都会把源地址记录在MAC地址表项中:
记录MAC地址表项
交换机MAC地址表项的格式类似于下图:
MAC地址表项
当交换机从别的接口,收到目的MAC是0000:0000:1111的报文时,就会从E0/1接口转发出去,这个也称为查找MAC地址表。
下面我们以一个具体的例子来阐述上面的内容。
原理举例
拓扑
拓扑图
三台PC配置同一个网段的IP地址; 交换机和三台PC相连的接口配置同一个ss VLAN 10;
MAC地址学习
初始情况下,交换机的MAC地址表项是空的,如下图:
初始的MAC Table
ARP报文
交换机都会记录报文的源MAC地址,同时更新在MAC地址表项中,如下图所示:
更新MAC地址表
下次如果收到目的MAC为0000.0000.1111的报文,就会只从E0/1接口转发出去,如下图所示:
特定出接口
估计看到这里,有小伙伴就会问:如果交换机接收到的报文,在MAC地址表找不到目的MAC对应的表项该怎么办?
答案是:在同一个VLAN里进行泛洪。
例如此时PC2发送一个报文,其目的MAC地址为0000.0000.4444,交换机没有这个表项,则交换机会把报文同时发送到PC1和PC3,如下图所示:
交换机泛洪报文
总结
各位小伙伴看完上面的描述,应该对MAC地址学习的原理了解了吧,我们简单的总结出3条结论:
MAC地址学习,记录是接收报文的源MAC地址; 交换机收到报文以后,会根据目的MAC地址查找出接口; 如果找不到出接口,会从同一个VLAN里的所有接口转发出去(泛洪);如果找到出接口,会只从特定的出接口转发出去,这个就是MAC地址学习的真正目的:减少网络的流量。
如果各位还有疑问,欢迎留言讨论,也非常欢迎各位关注我的头条号,一起讨论网络问题!