摘要
交換機之所以能夠直接對目的節點傳送數據包,而不是像集線器一樣以廣播方式對所有節點傳送數據包,最關鍵的技術就是交換機可以識別連在網路上的節點的網卡MAC地址,並把它們放到一個叫做MAC地址表的地方。這個MAC地址表存放於交換機的快取中,並記住這些地址,這樣一來當需要向目的地址傳送數據時,交換機就可在MAC地址表中查找這個MAC地址的節點位置,然後直接向這個位置的節點傳送。所謂MAC地址數量是指交換機的MAC地址表中可以最多存儲的MAC地址數量,存儲的MAC地址數量越多,那么數據轉發的速度和效率也就就越高。
但是不同檔次的交換機每個連線埠所能夠支持的MAC數量不同。在交換機的每個連線埠,都需要足夠的快取來記憶這些MAC地址,所以Buffer(快取)容量的大小就決定了相應交換機所能記憶的MAC地址數多少。通常交換機只要能夠記憶1024個MAC地址基本上就可以了,而一般的交換機通常都能做到這一點,所以如果對網路規模不是很大的情況下,這參數無需太多考慮。當然越是高檔的交換機能記住的MAC地址數就越多,這在選擇時要視所連網路的規模而定了。
地址表建立過程
交換機技術在轉發數據前必須知道它的每一個連線埠所連線的主機的MAC地址,構建出一個MAC地址表。當交換機從某個連線埠收到數據幀後,讀取數據幀中封裝的目的地MAC地址信息,然後查閱事先構建的MAC地址表,找出和目的地地址相對應的連線埠,從該連線埠把數據轉發出去,其他連線埠則不受影響,這樣避免了與其它連線埠上的數據發生碰撞。因此構建MAC地址表是交換機的首要工作。下面舉例說明交換機建立地址表的過程。
假設主機A向主機C傳送一個數據幀(每一個數據幀中都包含有源MAC地址和目的MAC地址),當該數據幀從E0連線埠進入交換機後,交換機通過檢查數據幀中的源MAC地址欄位,將該欄位的值(主機A的MAC地址)放入MAC地址表中,並把它與E0連線埠對應起來,表示E0連線埠所連線的主機是A。此時,由於在MAC地址表中沒有關於目的地MAC地址(主機C的MAC地址)的條目。交換機技術將此幀向除了E0連線埠以外的所有連線埠轉發,從而保證主機C能收到該幀(這種操作叫flooding)。
同理,當交換機收到主機B、C、D的數據後也會把他們的地址學習到,寫入地址表中,並將相應的連線埠和MAC地址對應起來。最終會把所有的主機地址都學習到,構建出完整的地址表。此時,若主機A再向主機C傳送一個數據幀,套用交換機技術則根據它的MAC地址表中的地址對應關係,將此數據幀僅從它的E2連線埠轉發出去。從而僅使主機C接收到主機A傳送給它的數據幀,不再影響其他連線埠。那么在主機A和主機C通信的同時其他主機(比如主機B和主機D)之間也可以通信。
當交換機建立起完整的MAC地址表之後,對數據幀的轉發是通過查找MAC地址表得到對應的連線埠,從而將數據幀通過特定的連線埠傳送出去的。但是,對於從一個連線埠進入的廣播數據及在地址表中找不到地址條目的數據,交換機會把該數據幀從除了進入連線埠之外的所有連線埠轉發出去。從這個角度來說,交換機互連的設備處於同一個廣播域內,但它們處於不同的碰撞域內,並且處於不同區域!
提示這裡為了解釋交換機如何建立MAC地址表,假設A向C發了一個數據幀。實際情況並非如此,並不是主機間必須進行通信交換機才能學習到MAC地址。實際上是當網卡驅動載入之後交換機就學習到了主機的MAC地址。讀者如果仔細觀察就會發現,Windows系統啟動過程還沒完成,交換機技術就學習到了主機的MAC地址。