概述
mac地址學習雖然說起來比較簡單,但是在工作中,還是經(jīng)常看小伙伴不能正確的應(yīng)用,遇到問題時也比較迷茫,不知道如何分析問題。究其原因,可能還是對MAC地址學習的工作原理了解的不夠,所以我今天寫一篇文章,給還迷糊的小伙伴在普及一下,如果是已經(jīng)了解的同學,可以當做復(fù)習。
MAC地址簡介
在OSI七層模型中,每一層都有不同標識符,用來區(qū)分不同的設(shè)備,這樣它們之間才能對等的進行通信。而MAC地址是數(shù)據(jù)鏈路層(layer2)標識符,在數(shù)據(jù)鏈路層唯一標識一臺設(shè)備。

OSI七層模型
MAC地址總共有48個比特(bit),在工作中通常使用16進制來表示,一般有兩種寫法,一種是:HH:HH:HH:HH:HH:HH格式,如下圖:

HH:HH:HH:HH:HH:HH
另外一種是:HHHH:HHHH:HHHH,如下圖:

HHHH:HHHH:HHHH
中間可以使用冒號(:)或者點(.)分割,看具體的廠商實現(xiàn)。
源MAC vs 目的MAC
我們注意到,在一個以太網(wǎng)報文中,有兩個MAC地址:源MAC、目的MAC,如下圖所示:

源MAC、目的MAC
那么這兩個MAC地址有什么區(qū)別呢?這也是大家容易犯迷糊的地方,其實只要記住三句話就可以了:
- 源MAC地址是屬于報文發(fā)送者;
- 目的MAC地址是屬于報文終結(jié)者;
- 交換機接收到報文以后,會記錄源MAC,同時根據(jù)目的MAC查找出接口。
MAC地址學習原理
MAC地址學習是針對于交換機來說的,它說的是交換機在收到一個報文時,會把報文的源MAC地址記錄在MAC地址表項中。
如下圖所示,交換機E0/1接口收到任何PC1發(fā)送的報文,都會把源地址記錄在MAC地址表項中:

記錄MAC地址表項
交換機MAC地址表項的格式類似于下圖:

MAC地址表項
當交換機從別的接口,收到目的MAC是0000:0000:1111的報文時,就會從E0/1接口轉(zhuǎn)發(fā)出去,這個也稱為查找MAC地址表。
下面我們以一個具體的例子來闡述上面的內(nèi)容。
原理舉例
拓撲

拓撲圖
- 三臺PC配置同一個網(wǎng)段的IP地址;
- 交換機和三臺PC相連的接口配置同一個Access VLAN 10;
MAC地址學習
初始情況下,交換機的MAC地址表項是空的,如下圖:

初始的MAC Table
當PC1發(fā)送的任何報文到達交換機時,例如ARP報文:

ARP報文
交換機都會記錄報文的源MAC地址,同時更新在MAC地址表項中,如下圖所示:

更新MAC地址表
下次如果收到目的MAC為0000.0000.1111的報文,就會只從E0/1接口轉(zhuǎn)發(fā)出去,如下圖所示:

特定出接口
估計看到這里,有小伙伴就會問:如果交換機接收到的報文,在MAC地址表找不到目的MAC對應(yīng)的表項該怎么辦?
答案是:在同一個VLAN里進行泛洪。
例如此時PC2發(fā)送一個報文,其目的MAC地址為0000.0000.4444,交換機沒有這個表項,則交換機會把報文同時發(fā)送到PC1和PC3,如下圖所示:

交換機泛洪報文
總結(jié)
各位小伙伴看完上面的描述,應(yīng)該對MAC地址學習的原理了解了吧,我們簡單的總結(jié)出3條結(jié)論:
- MAC地址學習,記錄是接收報文的源MAC地址;
- 交換機收到報文以后,會根據(jù)目的MAC地址查找出接口;
- 如果找不到出接口,會從同一個VLAN里的所有接口轉(zhuǎn)發(fā)出去(泛洪);
- ?如果找到出接口,會只從特定的出接口轉(zhuǎn)發(fā)出去,這個就是MAC地址學習的真正目的:減少網(wǎng)絡(luò)的流量。
如果各位還有疑問,歡迎留言討論,也非常歡迎各位關(guān)注我的頭條號,一起討論網(wǎng)絡(luò)問題!