1. 程式人生 > >深入剖析三層交換機的工作過程

深入剖析三層交換機的工作過程

路由器的三層轉發主要依靠CPU進行,而三層交換機的三層轉發依靠ASIC晶片完成,這就決定了兩者在轉發效能上的巨大差別當然,三層交換機並不能完全替代路由器,路由器所具備的豐富的介面型別、良好的流量服務等級控制、強大的路有能力等仍然是三層交換機的薄弱環節。目前的三層交換機一般是通過VLAN來劃分二層網路並實現二層交換的,同時能夠實現不同VLAN間的三層IP互訪。在討論三層交換機的轉發原理之前有必要交代一下不同網路的主機之間互訪時的行為

(1)源主機在發起通訊之前,將主機的IP與目的主機的IP進行比較,如果兩者位於同一個網段(用網路掩碼計算後具有相同的網路號),那麼源主機直接向目的主機發送ARP請求,在收到目的主機的ARP應答後獲得對方的物理層(MAC)地址,然後用對方MAC作為報文的目的MAC進行報文傳送。位於同一VLAN(網段)中的主機互訪時屬於這種情況,這時用於互連的交換機作二層交換轉發;

(2)檔源主機判斷目的主機與主機位於不同的網段時,它會通過閘道器(Gateway)來遞交報文,即傳送ARP請求來獲取閘道器IP地址對應的MAC,在得到閘道器的ARP應答後,用閘道器MAC作為報文的目的MAC進行報文傳送。注意,傳送報文的源IP是源主機的IP,目的IP仍然是目的主機的IP。位於不同VLAN(網段)中的主機互訪時屬於這種情況,這時用於互連的交換機作三層交換轉發。

為了後續討論的三層交換原理便於理解,這裡簡單介紹一下三層交換機內部結構,如圖1所示:

圖1 三層交換機硬體結構

三層交換機內部的兩大部分是ASID和CPU,它們的作用分別如下:

1.ASIC:完成主要的二三層轉發功能,內部包含用於二層轉發的MAC地址表以及用於IP轉發的三層轉發表;

2.CPU:用於轉發的控制,主要維護一些軟體表項(包括軟體路由表、軟體ARP表等等),並根據軟體表項的轉發資訊來配置ASIC的硬體三層轉發表。當然,CPU本身也可以完成軟體三層轉發。

從三層交換機的結構和各部分作用可以看出,真正決定高速交換轉發的是ASIC中的二三層硬體表項,而ASIC的硬體表項來源於CPU維護的軟體表項。

下面分別以兩種組網情況下主機間的通訊來解釋三層交換機的轉發原理。

組網1如圖2所示,通訊的源、目的主機連線在同一臺三層交換機上,但它們位於不同VLAN(網段)。對於三層交換機來說,這兩臺主機都位於它的直連網段內,它們的IP對應的路由都是直連路由。

圖2 三層轉發組網

圖2中標明瞭兩臺主機的MAC、IP地址、閘道器,以及三層交換機的MAC、不同VLAN配置的三層介面IP。當PC A 向PC B 發起ICMP請求時,流程如下:(假設三層交換機上還未建立任何硬體轉發表項)

1.PC A 首先檢查出目的IP地址2.1.1.2(PC B)與自己不在同一個網段,因此它發出請求閘道器地址1.1.1.1對應MAC的ARP請求;

2.L3_SW收到PC A 的ARP請求後,檢查請求報文,發現被請求IP是自己的三層介面IP,因此傳送ARP應答並將自己的三層介面MAC(MAC S)包含在其中。同時它還會把PC A 的IP 地址與MAC地址對應起來(1.1.1.2<==>MAC A)關係記錄到自己的ARP表項中去(因為ARP請求報文中包含了傳送者的IP和MAC);

3.PC A得到閘道器(L3_SW)的ARP應答後,組裝ICMP請求報文併發送,報文的目的MAC = MAC S 、源MAC = MAC A 、源IP=1.1.1.2、目的IP = 2.1.1.2;

4.L3_SW收到報文後,首先根據報文的源MAC+VID(即VLAN ID)更新MAC地址表。然後,根據報文的目的MAC+VID查詢MAC地址表,發現匹配了自己三層介面MAC的表項。這裡說明一下,三層交換機為VLAN配置三層介面IP後,會在交換晶片的MAC地址表中新增三層介面MAC+VID的表項,並且為表項的三層轉發標誌置位。當報文的目的MAC匹配這樣的表項以後,說明需要作三層轉發,於是繼續查詢交換晶片的三層表項;

5.晶片根據報文的目的IP去查詢其三層表項,由於之前未建立任何表項,因此查詢失敗,於是將報文送到CPU去進行軟體處理;

6.CPU根據報文的目的IP去查詢其軟體路由表,發現匹配了一個直連網段(PC B對應的網段),於是繼續查詢其軟體ARP表,仍然查詢失敗。然後L3_SW會在目的網段對應的VLAN3的所有埠傳送請求地址2.1.1.2對應MAC的ARP請求;

7.PC B收到L3_SW傳送的ARP請求後,檢查發現被請求IP是自己的IP,因此傳送ARP應答並將自己的MAC(MAC B)包含在其中。同時,將L3_SW的IP與MAC的對應關係(2.1.1.1<==>MAC S)記錄到自己的ARP表中去;

8.L3_SW收到PC B的ARP應答後,將其IP和MAC對應關係(2.1.1.2<==>MAC B)記錄到自己的ARP表中去,並將PC A的ICMP請求報文傳送給PC B,報文的目的MAC修改為PC B 的MAC(MAC B),源MAC修改為自己的MAC(MAC S)。同時,在交換晶片的三層表項中根據剛才得到的三層轉發資訊新增表項(內容包括IP、MAC、出口VLAN、出埠等),這樣後續的PC A傳送PC B的報文就可以通過該硬體三層表項直接轉發了;

9.PC B收到L3_SW轉發過來的ICMP請求報文以後,迴應ICMP應答給PC A。ICMP應答報文的轉發過程與前面類似,只是由於L3_SW在之前已經得到PC A的IP和MAC對應關係了,也同時在交換晶片中添加了相關的三層表項,因此這個報文直接由交換晶片硬體轉發給PC A;

這樣,後續的往返報文都經過查MAC表=>查三層轉發表的過程由交換晶片直接進行硬體轉發了。

從上述流程可以看書,三層交換正是充分利用了“一次路由(首包CPU轉發並建立三層轉發硬體表項)、多次交換(後續包晶片硬體轉發)”的原理實現了轉發效能與三層交換的完美統一。

下面介紹另一種組網情況的三層轉發流程,如圖3所示。

如圖3 三層轉發組網2

圖3中標明瞭兩臺主機的MAC、IP地址、閘道器,以及兩臺三層交換機的MAc、不同VLAN配置的三層介面IP。假設L3_SW1上配置了靜態路由:ip route2.1.1.0 255.255.255.0 3.1.1.2;L3_SW2上配置了靜態路由:ip route1.1.1.0 255.255.255.0 3.1.1.1。當然,路由資訊也可以通過動態路由協議的互動來獲得,有關路由的知識請查閱相關文件。

這種組網情況下的轉發過程與圖2的組網1情況是類似的,下面的流程講解中降省略部分前面已經分析過的細節問題。當PCA向PCB發起ICMP請求時,流程如下:(假設三層交換機上還未建立任何硬體轉發表項)

1.PC A首先檢查出目的IP地址2.1.1.2(PC B)與自己不在同一個網段,因此它通過ARP解析得到閘道器地址1.1.1.1對應的MAC(MAC S1)。然後,PC A組裝ICMP請求報文併發送,報文的目的MAC=MAC S1、源MAC=MAC A、源IP=1.1.1.2、目的IP=2.1.1.2;

2.L3_SW1收到報文後,首先根據報文的源MAC+VID更新MAC地址表。然後,根據報文的目的MAC+VID查詢MAC地址表,發現匹配了自己三層介面MAC的表項,於是繼續查詢晶片的三層轉發表;

3.由於之前未建立任何表項,因此三層轉發表查詢失敗,於是將報文送到CPU去進行軟體處理;

4.CPU根據報文的目的IP去查詢其路由軟體表,發現匹配路由2.1.1.0/24,其下一跳IP地址為3.1.1.2,於是繼續查詢3.1.1.2是否有對應的ARP,仍然查詢失敗。然後L3_SW1在下一跳地址3.1.1.2對應的VLAN4內發起ARP請求,並得到L3_SW2的迴應,從而得到I和MAC對應關係(3.1.1.2<==>MAC S2);

5.L3_SW1將Pc A發出的ICMP請求報文轉發給L3_Sw2,報文的目的MAC修改為L3_SW2的MAC(MAC S2),源MAc修改為自己的MAC(MAC S1)。同時,將剛剛用到的轉發資訊新增到交換晶片的三成轉發表中去,包括匹配的網段2.1.1.0/24、下一跳地址的MAC(MAC S2)、出口VLAN、出埠。這樣,後續發往2.1.1.2的報文就可以直接通過交換晶片硬體轉發了;

6.L3_SW2收到報文後,與組網1中的處理類似,經過查MAC表=>查三層轉發表=>送CPU=>匹配直連路由=>ARP解析=>轉發報文同時新增硬體表項的過程,將報文轉發給PC B,此時報文的目的MAC修改為PC B的MAC(MAC B),源MAC修改為L3_SW2的MAC(MAC S2)。這樣後續發往2.1.1.2的報文就直接由交換晶片硬體轉發了;

7.PC B收到來自PC A的ICMP請求報文後進行ICMP應答。由於在ICMP請求報文轉發的過程中,每個網段的兩端節點都已經通過ARP解析得到了對方的IP和MAC對應關係,因此應答報文的轉發完全由交換晶片完成(查MAC表=>查三層轉發表=>傳送);

這樣,後續的往返報文都經過查MAC表=>查三層轉發表的過程由交換晶片直接進行硬體轉發了。

從上述兩種組網情況下的轉發流程可以看出,三層交換機的轉發具有以下特點:

1.首包通過CPU轉發,同時建立交換晶片硬體表項;後續包由交換晶片直接硬體轉發,即常說的“一次路由、多次交換”;

2.交換晶片的硬體轉發並不關心路由的具體下一跳IP地址是多少,硬體三層表項中只包含了目的地址(或網段)、目的IP(或下一跳IP)對應的MAC、出口VLAN、出埠;(這裡說明一下,並不是所有的三層交換機的硬體三層表項都會包含“出埠”的。)

3.IP報文每經過一次三層轉發,它的源、目的MAC都會變化,但是源IP、目的IP是始終不變。

在三層交換轉發中,交換晶片(ASIC)起到了至關重要的作用,因此三層交換機的效能和轉發特點主要取決於交換晶片的實現機制。在三層交換原理一節中講解的三層交換原理只是一個大致的轉發流程,對於使用了不同交換晶片的三層交換機,其硬體轉發過程中的一些細節內容是有所區別的。本節主要就硬體三層表項的結構和查表方式介紹幾種不同的實現。

從前面的描述可以看出,三層轉發是必然需要路由資訊的,而轉發過程中的路由選擇決定了報文的最終出口如何,三層交換機只是將這種路由功能整合到交換晶片中去了。路由選擇存在精確匹配和最長匹配兩種方式,精確匹配即目的IP地址與路由的地址資訊必須完全吻合,而最長匹配則是選擇所有包含了目的地址的路由中掩碼最長的一條。

早期的三層交換機上,其交換晶片多采用精確匹配的方式,它們的硬體三層表項中只包含其目的IP地址,並不帶掩碼資訊。比如在轉發目的IP為2.1.1.2的報文時,通過軟體查詢匹配了非直路由2.1.1.0/24,那麼就將2.1.1.2的轉發資訊新增到交換晶片中去,如果繼續來了目的IP為2.1.1.3的報文需要轉發,則需要重新進行軟體查詢,並在交換晶片中為2.1.1.3增加新的表項。這樣的選錄方式表項結構對交換晶片的硬體資源要求很高,因為晶片中整合的表項儲存空間是有限的,如果要發大量目的IP地址不同的報文那麼就需要新增大量的硬體表項。曾經氾濫一時的衝擊波病毒,就導致了當時大量的只支援精確匹配的三層交換機資源耗盡。因為衝擊波病毒的手段之一就是傳送巨數量的網段掃描報文,而多數三層交換機上都配置了預設路由,這樣所有的報文在CPU軟體查詢都能夠找到匹配路由,進而針對每一個病毒報文的目的IP都需要新增硬體表項並迅速將硬體資源滿。這樣,大部分使用者的正常資料流由於轉發資源耗盡而得不到高速處理了。

由於精確匹配方式的三層交換機的這種缺陷,後期的三層交換機增加了對最長匹配方式的支援,即硬體三層表項中可同時包含IP地址和掩碼,在查詢時遵循最長匹配原則。這種型別的三層交換機,一般在軟體路由表建立時就將路由資訊新增到硬體三層表中去,包括直連路由和非直連路由。對於直連路由,對應的硬體三層表項的“to CPU”標誌位始終置1,報文的目的IP匹配這樣的表項被送往CPU處理,CPU軟體會在直連網段傳送ARP請求,並將獲取的ARP資訊作為主機路由新增到硬體表項中(對應的“to CPU”標誌位置0),這樣後續的同樣目的IP的報文就直接通過新新增的硬體表項轉發了;對於非直連路由,當下一跳地址對應ARP資訊還未獲得時,對應的硬體三層表項的“to CPU”標誌位置1,報文的目的IP匹配這樣的表項以後被送往CPU處理,CPU軟體會在下一跳地址對應的直連網段傳送ARP請求,並使用獲取的ARP資訊中的下一跳MAC、出口VLAN等資訊更新對應的硬體三層表項,然後將其“to CPU”標誌位置0,這樣後續的目的IP匹配該非直連路由的報文就能夠直接通過修改後的硬體表項轉發了。

目前,大多數的三層交換機均能夠同時支援精確匹配表項和最長匹配表項,一般來說精確匹配表項對應於軟體中的ARP表,最長匹配表項對應於軟體中的直連路由和非直連路由。

在交換機三層轉發流程中,曾經提到,硬體三層表項由目的IP(或網段)、目的IP(或下一跳IP)對應MAC、出口VLAN、出埠組成,採用這樣表項的三層交換晶片一般直接通過查詢三層轉發表項就能夠完成轉發。這種處理機制流程簡單、轉發效率高,但是也使得CPU軟體對硬體表項的配置控制比較複雜,因為每當IP地址對應的MAC和物理端口出現變化,就必須對三層轉發表項進行更新。而在交換機上二層資訊變化的可能性是比較大的,特別是交換機支援鏈路聚合、生成樹等冗餘機制,所以在某些應用環境中CPU不得不經常的對三層轉發表進行更新,一旦更新出現問題(特別是出埠錯誤)必然對轉發造成嚴重的不利影響。

不過,並不是所有的三層交換機的硬體三層表項都帶有出埠資訊,部分交換晶片使用的硬體表項只包括目的IP(或網段)、目的IP(或下一跳IP)對應的MAC、出口VLAN,從轉發流程上來說有以下變化:根據報文的目的IP查詢三層轉發表後,只得到了目的IP(或下一跳IP)對應的MAC和出口VLAN;然後繼續根據MAC+VID去查詢MAC地址表,並最終獲得出埠資訊,如果查詢MAC表失敗的話會在出口VLAN進行廣播。這樣的處理機制雖然增加了晶片處理複雜度,但是流程更加清晰合理,CPU的處理更加簡單,因為物理出口的變化只需要反映在MAC地址表中就可以了,硬體三層表項無需頻繁更新。

這兩種處理方式的交換晶片各有優勢,不同廠商會根據成本、可靠性、產品定位等各方面因素來進行選擇,這也使得不同型號的三層交換機在同一應用環境中可能有不同的表現。