【小菜學網路】交換機與MAC地址學習
阿新 • • 發佈:2021-01-21
上一小節介紹了 **集線器** ,一種工作於物理層的簡單網路裝置。由於集線器採用廣播的方式中繼、轉發物理訊號,傳輸效率受到極大制約。
## 精準轉發
為了解決集線器工作效率低下的尷尬,我們需要設計一種更高階的網路裝置。新裝置根據乙太網幀的目的 _MAC_ 地址,將它精準地轉發到正確埠:
![](https://cdn.fasionchan.com/p/4f8cfcc7704f3a7e634bb37a8c4228ae3be83583.png#width=412px)
> 註釋:這裡 **埠** ( _port_ )指的是轉發裝置的插口,也可叫做網口。
如上圖,中間節點是轉發裝置,它在內部維護著一張主機 _MAC_ 地址與對應埠的對映表,現與 _3_ 臺主機相連。這樣一來, 當轉發裝置接到主機 _A_ 發給主機 _C_ 的資料後,根據目的 _MAC_ 地址搜尋對映表,便可將資料準確地轉發到對應的埠 _3_ 。
現在,傳輸模式變得更有針對性了——資料幀被精準轉發到正確的埠,其他埠不再收到多餘的資料:
![](https://cdn.fasionchan.com/p/3fe963220b2e39bb6dac958d4fc8035afb0a9192.png?x-oss-process=image/resize,w_340)
不僅如此,主機 _A_ 與 _B_ 通訊的同時,其他計算機也可通訊,互不干擾。轉發裝置每個埠是一個獨立的衝突域,頻寬也是獨立的。
集線器的缺陷全部避免了!
## 交換機
能夠根據乙太網幀目的地址轉發資料的網路裝置就是 **乙太網交換機** ( _ethernet switch_ ):
![](https://cdn.fasionchan.com/p/0ed02724a1ab5c184fd3106b12a6e6d699f99206.png?x-oss-process=image/resize,w_360)
交換機長相跟集線器沒啥區別嘛。當然了,大部分網路裝置都是一個佈滿埠的盒子,關鍵在於內部構造。
再看看現實中的交換機長啥樣:
![](https://cdn.fasionchan.com/p/19d5e5116be0582bfecb9c6b830a064aa6d9f99a.jpg?x-oss-process=image/resize,w_450)
總結起來,乙太網交換機屬於 **二層網路裝置** ,特點如下:
- 根據目的地址轉發乙太網幀;
- 每個埠是獨立衝突域;
- 每個埠頻寬獨立;
## Mac地址學習
交換機完美地解決集線器的缺點,但新問題又來了,對映表如何獲得呢?
最原始的方式是:維護一張靜態對映表。當新裝置接入,向對映表新增一條記錄;當裝置移除,從對映表刪除對應記錄。然而,純手工操作方式多少有些煩躁。
好在計算機領域可以實現各種花樣的自動化——通過演算法自動學習對映表。我們先來看看大致思路:
![](https://cdn.fasionchan.com/p/0018212e4156ba3b03c50b8669d4e17702baad2d.png#width=372px)
初始狀態下,對映表是空的。現在,主機 _A_ 向 _B_ 傳送一個數據幀 _FRAME1_ 。因為對映表中沒有地址 _B_ 的記錄,交換機便將資料幀廣播到其他所有埠。
由於交換機是從 `Fa0/1` 埠收到資料幀的,便知道 _A_ 連線 `Fa0/1` 埠,而資料幀的源地址就是 _A_ 的地址!此時,交換機可以將 _A_ 的地址和埠 `Fa0/1` 作為一條記錄加入對映表。交換機學習到 _A_ 的地址!
![](https://cdn.fasionchan.com/p/978d91349c17ca0c04a88d05bf5b2df9c089f521.png#width=372px)
接著,主機 _B_ 向 _A_ 回覆一個數據幀 _FRAME2_ 。由於對映表中已經存在地址 _A_ 的記錄了,因此交換機將資料幀精準轉發到埠 `Fa0/1` 。同理,交換機學習到主機 _B_ 的地址。
當主機 _C_ 開始傳送資料時,交換機同樣學到其地址,學習過程完成!
![](https://cdn.fasionchan.com/p/742e3a4ce47f0928da014869e33bc752db1bf7cb.png#width=372px)
這就是 **MAC地址自動學習** 的基本原理。
【[小菜學網路](https://fasionchan.com/network/)】系列文章首發於公眾號【小菜學程式設計】,敬請關注:
![](https://cdn.fasionchan.com/coding-fan-wechat-soso.png?x-oss-process=image/resiz