例解三層交換原理

二層交換機的二層數據交換一般都是使用ASIC(Application 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地址”,先把發送給目的主機的數據發給網關。

wKioJlJYrOKhyIG9AAD-P3SmTpU503.jpg

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

(4)網關在收到源主機發送給目的主機的數據後,由於查看得知源主機和目的主機的IP地址不在同一網段,於是把數據報上傳到三層交換引擎(ASIC芯片),在裏面查看有無目的主機的三層轉發表。

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

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

以後到達目的主機的數據包就可以直接利用三層硬件轉發表中的轉發表項進行數據交換,不用再查看CPU中的路由表了。

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

三層交換示例

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

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

本示例中雖然劃分了VLAN,但是在下面的數據轉發流程中我們並沒有提到VLAN標記,那是因爲在本示例中,通信雙方主機都連接到同一個三層交換機上,端口類型均爲Access類型,發送和接收的數據幀都是無VLAN標記的。在下節介紹的示例中,在數據的轉發過程中將會涉及到VLAN標記問題。

wKioOVJYrPfiOxHAAACR3oOiFRI644.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 A的IP地址(作爲“目的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 B的IP地址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 B的IP地址(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 B的IP地址、MAC地址、進入交換機的端口號等信息下發到三層交換機的三層轉發中。此時轉發表中就有到達PC A和PC B這兩條對應的表項了。

(10)三層交換機CPU根據獲得的PC B的MAC地址和端口信息,以及軟件路由表信息,把由PC A發來的IP數據包轉發給PC B,這樣就完成了PC A到PC B的第一次單向通信。

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章