四、三層交換機的工作過程
路由器的三層轉發主要依靠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。當PCA向PCB 發起ICMP請求時,流程如下:(假設三層交換機上還未建立任何硬件轉發表項)
1.PCA首先檢查出目的IP地址2.1.1.2(PCB)與自己不在同一個網段,因此它發出請求網關地址1.1.1.1對應MAC的ARP請求;
2.L3_SW收到PCA的ARP請求后,檢查請求報文,發現被請求IP是自己的三層接口IP,因此發送ARP應答并將自己的三層接口MAC(MAC S)包含在其中。同時它還會把PCA的IP 地址與MAC地址對應起來(1.1.1.2《==》MAC A)關系記錄到自己的ARP表項中去(因為ARP請求報文中包含了發送者的IP和MAC);
3.PCA得到網關(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去查找其軟件路由表,發現匹配了一個直連網段(PCB對應的網段),于是繼續查找其軟件ARP表,仍然查找失敗。然后L3_SW會在目的網段對應的VLAN3的所有端口發送請求地址2.1.1.2對應MAC的ARP請求;
7.PCB收到L3_SW發送的ARP請求后,檢查發現被請求IP是自己的IP,因此發送ARP應答并將自己的MAC(MAC B)包含在其中。同時,將L3_SW的IP與MAC的對應關系(2。1。1。1<==>MAC S)記錄到自己的ARP表中去;
8。L3_SW收到PCB的ARP應答后,將其IP和MAC對應關系(2.1.1.2《==》MAC B)記錄到自己的ARP表中去,并將PCA的ICMP請求報文發送給PCB,報文的目的MAC修改為PCB 的MAC(MAC B),源MAC修改為自己的MAC(MAC S)。同時,在交換芯片的三層表項中根據剛才得到的三層轉發信息添加表項(內容包括IP、MAC、出口VLAN、出端口等),這樣后續的PC A發送PCB的報文就可以通過該硬件三層表項直接轉發了;
9.PCB收到L3_SW轉發過來的ICMP請求報文以后,回應ICMP應答給PC A。ICMP應答報文的轉發過程與前面類似,只是由于L3_SW在之前已經得到PCA的IP和MAC對應關系了,也同時在交換芯片中添加了相關的三層表項,因此這個報文直接由交換芯片硬件轉發給PCA;
這樣,后續的往返報文都經過查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(PCB)與自己不在同一個網段,因此它通過ARP解析得到網關地址1。1。1。1對應的MAC(MAC S1)。然后,PCA組裝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解析=>轉發報文同時添加硬件表項的過程,將報文轉發給PCB,此時報文的目的MAC修改為PCB的MAC(MAC B),源MAC修改為L3_SW2的MAC(MAC S2)。這樣后續發往2。1。1。2的報文就直接由交換芯片硬件轉發了;
7。PCB收到來自PCA的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 CUP”標志位始終置1,報文的目的IP匹配這樣的表項被送往CPU處理,CPU軟件會在直連網段發送ARP請求,并將獲取的ARP信息作為主機路由添加到硬件表項中(對應的“to CUP”標志位置0),這樣后續的同樣目的IP的報文就直接通過新添加的硬件表項轉發了;對于非直連路由,當下一跳地址對應ARP信息還未獲得時,對應的硬件三層表項的“to CUP”標志位置1,報文的目的IP匹配這樣的表項以后被送往CPU處理,CPU軟件會在下一跳地址對應的直連網段發送ARP請求,并使用獲取的ARP信息中的下一跳MAC、出口VLAN等信息更新對應的硬件三層表項,然后將其“to CUP”標志位置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地址表中就可以了,硬件三層表項無需頻繁更新。
這兩種處理方式的交換芯片各有優勢,不同廠商會根據成本、可靠性、產品定位等各方面因素來進行選擇,這也使得不同型號的三層交換機在同一應用環境中可能有不同的表現。
評論
查看更多