1. 程式人生 > >例解三層交換原理

例解三層交換原理

10659021_13805023700Byl.png10659021_1380502392qOYJ.jpg
    三層交換原理一直是許多讀者朋友最難理解的,在日常的讀者交流中也經常見到有讀者提出這方面的問題,特別是三層交換與路由原理方面的區別與聯絡。其實三層交換機不僅同時與二層交換和路由有著密切的聯絡,同時與要依靠三層的ARP協議。下面具體剖析一下三層交換原理。

7.7.5 三層交換原理

    二層交換機的二層資料交換一般都是使用ASICApplication Specific Integrated Circuit ,專用積體電路)的硬體晶片中的CAM表來實現的,因為是硬體轉發,所以轉發效能非常高。而三層交換機的三層轉發也是依靠ASIC晶片完成的(路由器的路由功能主要依靠CPU軟體進行的),但其中除了二層交換用的

CAM表外,還儲存有專門用於三層轉發的三層硬體轉發表。

三層交換機的三層交換原理比較複雜,不同網路環境下、不同廠家的三層交換機的三層交換流程都不完全相同。如圖7-55所示的僅一個直接連線在一臺三層交換機上的兩個不同網段主機三層交換的基本流程,各主要步驟解釋如下:

1源主機在發起通訊之前,將自己的IP地址與目的主機的IP地址進行比較,如果源主機判斷目的主機與自己位於不同網段時,它需要通過閘道器來遞交報文的,所以它首先需要通過一個ARP請求報文獲取閘道器的MAC地址(在源主機不知道閘道器MAC地址的情形下),即源主機先發送ARP請求幀以獲取閘道器IP地址對應的MAC地址。

2)閘道器在收到源主機發來的

ARP請求報文後以一個ARP應答報文進行迴應,在應答報文中的“源MAC地址”就包含了閘道器的MAC地址。

3)在得到閘道器的ARP應答後,源主機再用閘道器MAC地址作為報文的“目的MAC地址”,以源主機的IP地址作為報文的“源IP地址”,以目的主機的IP地址作為“目的IP地址”,先把傳送給目的主機的資料發給閘道器。

10659021_1380502195ppPe.jpg

圖7-55 三層交換基本流程

(4)閘道器在收到源主機發送給目的主機的資料後,由於檢視得知源主機和目的主機的IP地址不在同一網段,於是把資料報上傳到三層交換引擎(ASIC晶片),在裡面檢視有無目的主機的三層轉發表。

(5)如果在三層硬體轉發表中沒有找到目的主機的對應表項,則向CPU請求檢視軟體路由表,如果有目的主機所在網段的路由表項,則還需要得到目的主機的MAC地址,因為資料包在鏈路層是要經過幀封裝的。於是三層交換機CPU向目的主機所在網段傳送一個ARP廣播請求包,以獲得目的主機MAC地址。

(6)交換機獲得目的主機MAC地址後,向ARP表中新增對應的表項,並轉發由源主機到達目的主機的靈氣包。同時三層交換機三層引擎會結合路由表生成目的主機的三層硬體轉發表。

    以後到達目的主機的資料包就可以直接利用三層硬體轉發表中的轉發表項進行資料交換,不用再檢視CPU中的路由表了。

以上流程適用位於不同VLAN(網段)中的主機互訪時屬於這種情況,這時用於互連的交換機作三層交換轉發。這就是“一次路由,多次交換”的原理。

7.7.6 三層交換示例

    在三層交換中,同一交換機上的不同網段主機通訊和不同交換機上的不同網段主機通訊的基本原理是一樣的,只是具體流程有所區別。本節僅以比較簡單的“同一交換機上的不同網段主機通訊”這種情形來解釋上節介紹的三層交換原理。

如圖7-56所示,通訊的源、目的主機連線在同一臺三層交換機上,但它們位於不同VLAN(也位於不同網段)。對於三層交換機來說,這兩臺主機都位於它的直連網段內,它們的IP對應的路由都是直連路由。圖中已標明瞭兩臺主機的MAC地址、IP地址、閘道器IP地址(也就是對應VLAN介面IP地址),以及三層交換機的MAC地址。

    【說明】本示例中雖然劃分了VLAN,但是在下面的資料轉發流程中我們並沒有提到VLAN標記,那是因為在本示例中,通訊雙方主機都連線到同一個三層交換機上,埠型別均為Access型別,傳送和接收的資料幀都是無VLAN標記的。在下節介紹的示例中,在資料的轉發過程中將會涉及到VLAN標記問題。

10659021_1380502213ix99.jpg

圖7-56 同一交換機上不同網段主機間的三層交換示例

     當PC A要第一次PC B發向資料包時,資料包的傳輸流程如下:(假設三層交換機上當前還未建立任何硬體轉發表項)

    (1)PC A首先檢查出目的IP地址2.1.1.2(PC B)與自己不在同一網段,覺得就這樣直接傳送肯定不行,於是把要傳送的資料包先快取起來。它知道這個資料包必須經過閘道器來轉發,所以先檢視一下自己是已經知道閘道器的MAC地址(也就是在PC A主機的ARP表中檢視是否有與閘道器IP地址對應的MAC地址表項)。如果有,則直接把要傳送給PC B的資料包在封裝成資料幀時,把“目的MAC地址”欄位的值設為閘道器的MAC地址(也就是三層交換機的MAC地址MAC S,交換機上各埠、各VLAN是共享一個或多個MAC地址的)。

    (2)如果PC A在自己的ARP表中沒有找到閘道器MAC地址,則先向閘道器發出(其實是會向本VLAN內所有節點發出)一個ARP廣播請求報文,以獲取閘道器IP地址1.1.1.1所對應的MAC地址。此ARP請求報文的“源MAC地址”欄位是PC A的MAC地址“MAC A”,“目的MAC地址”因為未知,以全0格式填充;“源IP地址”和“目的IP地址”欄位分別填上PC A的IP地址(1.1.1.2)和閘道器的IP地址(1.1.1.1)。

    ARP請求報文向下傳輸到了乙太網資料鏈路層後被再次封裝成乙太網幀,乙太網幀頭中的“源MAC地址”欄位值仍為PC A的MAC地址“MAC A”,“目的MAC地址”欄位值為廣播MAC地址FF-FF-FF-FF-FF-FF以,“幀型別”欄位填上ARP的協議號0x0806。有關ARP報文和ARP幀格式參見本章7.3.10節。

    (3)三層交換機在收到PC A發來的ARP請求報文後,檢查請求報文發現被請求IP地址(也就是“目的IP地址”)是自己的三層介面IP地址,於是向PCA A發回一個ARP應答報文,並將對應的三層介面MAC(MAC S)填充在應答報文中的“目的MAC地址“欄位其中。同時通過對PC A傳送的ARP請求報文分析,把PC A的IP地址與MAC地址對應關係(1.1.1.2<==>MAC A)記錄到自己的ARP表中去,然後把PC AIP地址(作為“目的IP地址”)、MAC地址(作為“下一跳MAC地址”),以及與交換機直接相連的埠號等資訊下發到三層交換機ASIC晶片中的三層硬體轉發表。此時在三層硬體轉發表中就有了第一個轉發表項,即PC A的轉發表項。

    【說明】在三層交換機中,最關鍵的就是它有一個專門用於三層轉發的三層硬體轉發表,它和“ARP之間有聯絡,但也有區別。ARP表中只是IP地址和MAC地址的對映關係,不包括轉發出口,也不包括對應的VLAN ID,而三層硬體轉發表中則包括了全部這些,形成一個:目的IP地址、VLAN ID、埠和下一跳MAC地址的關係表項。因為在進行三層轉發時,改變的是幀封裝後的源和目的MAC地址這兩個欄位,原來輸入IP包中的“目的MAC地址”作為轉發的“下一跳MAC地址”,原來的“源MAC地址”改為三層交換機自身的MAC地址,源和目的IP地址都不變(因為這是封裝在幀的“資料”部分)。另外,三層轉發表是儲存在ASCI硬體晶片上的,直接由ASIC晶片呼叫,而ARP表是儲存在內在中,由CPU軟體呼叫。但三層硬體轉發表項還是由CPU提供的。

    (4)PC A在收到閘道器的ARP應答報文後,把要傳送給PC B的資料包經過幀封裝後的 “目的MAC地址”修改為閘道器MAC地址(MAC S1),其它不變,先把資料包發給閘道器(三層交換機)。

    (5)三層交換機在收到這個資料包後,因為“目的MAC地址”為交換機自己的MAC地址,而且“目的IP地址”和“源IP地址”不在同一網段,所以會直接提交到負責三層交換的ASIC晶片,根據包中的“目的IP地址”(PC BIP地址2.1.1.2)在三層硬體轉發表中檢視有無對應表項,因為是第一次通訊,所以結果是查詢失敗,於是將資料包再轉送到CPU去進行軟體路由處理。

    (6)CPU同樣會根據包中的“目的IP地址”去查詢其軟體路由表,發現匹配了一個直連網段(PC B對應的網段),於是繼續查在ARP表中查詢對應的MAC地址項。同樣是由於是第一次查詢,所以仍然查詢失敗。如果在ARP表中找到了對應的MAC地址,則資料可以直接由軟體路由錶轉發了。

    (7)下面仍以在ARP表中也沒找到PC B對應的MAC地址為例進行介紹。此時三層交換機CPU會在PC B所在網段的AN 3中所有埠傳送一個ARP廣播請求報文,查詢“目的IP地址”為2.1.1.2所對應MAC地址。報文經過幀封裝後的“源MAC地址”是三層交換機的MAC地址(MAC S),“目的MAC地址”全為0,“源IP地址”是VLAN 3網段的閘道器IP地址(2.1.1.1),“目的IP地址”是PC BIP地址(2.1.1.2)。

    (8)PC B在收到三層交換機CPU傳送的ARP請求報文後,檢查發現被請求的IP地址是自己的IP地址,於是傳送一個ARP應答報文,並將自己的MAC地址(MAC B)包含在其中。同時,將三層交換機上VLAN 3網段的閘道器IP地址與MAC地址的對應關係(2.1.1.1<==>MAC S)記錄到自己的ARP表中去。

    (9)三層交換機CPU在收到PC B的ARP應答報文後,將其IP地址和MAC地址對應關係(2.1.1.2<==>MAC B)記錄到自己的ARP表中去,把PC BIP地址、MAC地址、進入交換機的埠號等資訊下發到三層交換機的三層轉發中。此時轉發表中就有到達PC APC B這兩條對應的表項了。

    (10)三層交換機CPU根據獲得的PC BMAC地址和埠資訊,以及軟體路由表資訊,把由PC A發來的IP資料包轉發給PC B,這樣就完成了PC APC B的第一次單向通訊。

    由於晶片內部的三層引擎中已經儲存了從PC A到達PC B的完整轉發路徑資訊,所以以後PC APC B之間進行通訊,或其它網段的站點想要與PC APC B進行通訊時,三層交換機的ASIC晶片就會直接把包從對應的三層硬體轉發表項中指定的埠轉發出去,而不必再把包交給CPU進行路由處理。這就是所謂的“一次路由(指通過CPU路由表查到了對應的直連網段),多次交換的原理,大大提高了轉發速度。