尽管mac地址学习的概念很简单,但在实际工作中,许多人仍然无法正确应用它,遇到问题时也感到困惑,不知如何分析。这可能是因为对mac地址学习的工作原理了解不够。所以今天我写这篇文章,向那些仍然感到困惑的人普及一下。如果你已经了解了,可以视为复习。
在osi七层模型中,每一层都有不同的标识符用于区分不同的设备,这样它们才能够进行等级相同的通信。而mac地址是数据链路层(第二层)的标识符,用于在数据链路层上唯一标识设备。
osi七层模型
mac地址总共包含48位(bit)信息,在工作中通常使用16进制表示。通常有两种写法,一种是hh:hh:hh:hh:hh:hh格式,如下图:
hh:hh:hh:hh:hh:hh
另一种写法是hhhh:hhhh:hhhh,如下图:
hhhh:hhhh:hhhh
中间可以使用冒号(:)或点(.)进行分割,具体厂商会有所不同。
我们注意到,在以太网数据包中有两个mac地址:源mac地址和目的mac地址,如下图所示:
源mac地址和目的mac地址
那么这两个mac地址有什么区别呢?这也是容易混淆的地方,实际上只需要记住以下三句话:
- 源mac地址属于报文的发送者;
- 目的mac地址属于报文的接受者;
- 交换机收到报文后,会记录源mac地址,并通过目的mac地址查找相应的接口。
mac地址学习涉及到交换机的工作原理。当交换机接收到一个报文时,它将会把报文的源mac地址记录在mac地址表中。
如下图所示,交换机e0/1接口接收到pc1发送的任何报文,都会将源mac地址记录在mac地址表中:
mac地址表项记录
交换机的mac地址表项格式如下图所示:
mac地址表项
当交换机从其他接口接收到目的mac地址为0000:0000:1111的报文时,它会从e0/1接口进行转发,也称为通过mac地址表查找。
下面我们以一个具体的例子来阐述上述内容。
拓扑
拓扑图
- 三台pc配置在同一个网络段上;
- 交换机和三台pc通过接口连接并配置相同的访问vlan 10;
mac地址学习
初始情况下,交换机的mac地址表项为空,如下图所示:
初始的mac地址表
当pc1发送任何报文到交换机时,例如arp报文:
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地址学习的目的:减少网络流量。