路由是基於數據包的IP頭部中的目的IP位址進行查找的;
查找的是路由表。 那麼什麼是乙太網二層交換(switching)呢?
為了將內網中的多台PC互聯起來,使得PC之間能夠以最簡單的方式進行通信,我們往往會用一台接入層的交換機來連接PC,如下圖:
這時候我們說,連接在這台交換機上的PC,都屬於一個LAN。這些PC都擁有同一個網段的IP位址,同時也處於同一個廣播域中,所謂的一個廣播域,指的是一個廣播數據幀所能泛洪的範圍,舉個簡單的例子,那就是PC1發送一個廣播幀,接在交換機上的所有的PC都會收到這個廣播數據幀並且都要去分析這個報文(即使它可能並不需要這個數據並且最終將收到的數據幀丟棄,但check數據是否是發送給自己的這一過程仍然會消耗設備資源)。
現在我們來分析一下,PC1發送一個數據包給PC4時,都發生了什麼。
1.PC1構造IP數據包,IP報文頭部里的源IP位址為自己的IP也就是IP1,目的IP位址為IP2。
上述IP數據包為了能夠在乙太網環境中去傳輸,還需要封裝上一個乙太網的頭部。在乙太網頭部中源MAC地址為MAC1,目的MAC地址為MAC2(這裡我們暫且忽略ARP的過程)。
2.這個數據幀發送到了PC1所連接的交換機上。我們知道路由器都維護一張路由表,用於數據的轉發,而交換機在做數據交換的時候依據的是MAC地址表。在初始情況下,交換機的MAC表是空的。那麼當交換機收到PC-A發送出來的這個數據幀時,它首先將數據幀的乙太網頭部中的源MAC地址學習到MAC地址表,並與收到該數據幀的接口及VLAN進行關聯。如下圖:
3.接下去交換機會拿著這個數據幀的乙太網頭部中目的MAC地址,到MAC地址表中去查詢。由於此時MAC地址表中,並沒有匹配MAC2這個地址的條目,因此交換機將對這個數據幀進行泛洪Flooding,所謂泛洪就是將這個數據幀從除了收到它的接口之外的所有其他接口都發一份拷貝。這樣做的目的事實上是:「哥不知道你在哪,哥索性就全都發一份,愛誰誰」。
4.連接在該台交換機上的其他PC都能收到這個數據幀,但是除了PC2之外的其他PC在收到這個數據幀之後,將bit流成幀並查看乙太網頭部的目的MAC,發現該MAC與本機的MAC並不一致,因此判斷這個數據幀並非發送給自己,於是丟棄。
而PC2在收到這個數據幀並查看目的MAC發現,這個數據幀的目的MAC與自己的MAC是相同的,因此判斷這個數據幀是發送給自己的,於是進行CRC校驗,校驗成功後將乙太網頭部解封裝,將內層的IP數據將給IP協議棧去處理,進一步查看IP頭部,發現IP頭部中的目的IP位址就是本機的IP,於是將IP頭部解封裝,將內層的payload將給上層協議處理。如此一來PC1發送給PC2的數據就完成了單向的傳輸。對於交換機而言,MAC地址表里就有了一個條目。
現在,PC2要回送數據給PC1,數據的構造如下圖所示:
5.交換機在收到這個數據幀後,首先是查看數據幀乙太網頭部的源MAC地址,將該MAC地址學習到MAC地址表中,並關聯到接收該數據幀的接口24。
6.接下去交換機拿著數據幀乙太網頭部中的目的MAC到自己的MAC地址表里去查,結果發現MAC1這個目的MAC地址在MAC地址表中是有一條匹配表項的,並且關聯到接口1,於是交換機將這個數據幀交換到接口1。這就是所謂的交換(switching)。
這個數據幀最終被PC-A接收到,這就完成了一個在乙太網環境中的數據交互過程。
小結一下:所謂的乙太網環境中的二層交換(lay2-switching),就是指的當一台二層交換機收到一個數據幀時,分析數據幀頭部的目的MAC地址,拿著MAC地址去MAC地址表中進行查找,如果有匹配項,則將數據幀從該匹配項所關聯的接口換出去,如果沒有匹配項,則將數據幀進行泛洪。所以:乙太網二層交換是基於數據幀的幀頭中的目的MAC地址進行查找的;
查找的是MAC地址表。