路由器的三層轉發主要依靠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 三層交換機硬體結構
三層交換機内部的兩大部分是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表=>查三層轉發表=>發送);
從上述兩種組網情況下的轉發流程可以看出,三層交換機的轉發具有以下特點:
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位址表中就可以了,硬體三層表項無需頻繁更新。
這兩種處理方式的交換晶片各有優勢,不同廠商會根據成本、可靠性、産品定位等各方面因素來進行選擇,這也使得不同型号的三層交換機在同一應用環境中可能有不同的表現。
本文轉自q狼的誘惑 51CTO部落格,原文連結:http://blog.51cto.com/liangrui/1875729,如需轉載請自行聯系原作者