(一)大家常常聽到的“一次路由,多次交換”,可以簡單的理解爲:在完成對收到的第一個新數據流進行路由後,產生一個MAC地址與IP地址的映射表,當具有相同地址信息的數據流再次通過時,即根據此表直接在二層完成轉發。
(二)下面以一個例子,解釋三層交換機的轉發原理。
如圖1所示,該組網內,通信的源主機、目的主機連接在同一臺三層交換機上,但它們位於不同VLAN(網段)。
對於三層交換機來說,這兩臺主機都位於它的直連網段內,它們的IP對應的路由都是直連路由。
圖1 三層轉發組網1
圖1中標明瞭兩臺主機(A、B)的MAC、IP地址、網關,以及三層交換機S3600的MAC、不同VLAN配置的三層接口IP。
源主機: 簡稱PC A | MAC地址 簡稱MAC A | IP 1.1.1.2 | 網關1.1.1.1
目的主機: 簡稱PC B | MAC地址 簡稱MAC B | IP 2.1.1.2 | 網關2.1.1.1
交換機: 簡稱S3600 | MAC地址 簡稱MAC S | VLAN2三層接口IP 1.1.1.1
VLAN3三層接口IP 2.1.1.1
(三)當 PC A 向 PC B 發起ICMP請求(ping)時,數據交換的過程如下:(假設三層交換機上還未建立任何硬件轉發表項,此次交換爲首次)
(1) 根據前面的描述,PC
A檢查出目的IP地址2.1.1.2(PC
B)與自己不在同一網段,因此它發出請求:請求網關地址1.1.1.1對應MAC的ARP請求;
(2) 三層交換機S3600收到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得到網關(S3600的VLAN2
1.1.1.1)的ARP應答後,組裝ICMP請求報文併發送,源MAC=MAC
A、源IP=1.1.1.2、報文的目的MAC=MAC
S、目的IP=2.1.1.2;
(4) S3600收到報文後,首先根據報文的源MAC+VID(即VLAN
ID)更新MAC地址表。然後,根據報文的目的MAC+VID查找MAC地址表,發現匹配了自己三層接口MAC的表項。(這裏說明一下,在BCM的chip中,MAC地址條目可以簡單分爲兩種:一種是交換機通過收取報文時源MAC地址的學習。第二種是當爲三層交換機爲VLAN配置三層接口IP後,會在交換芯片的MAC地址表中添加三層接口MAC+VID的表項,並且爲表項的三層轉發標誌置位。當報文的目的MAC匹配這樣的表項以後,說明需要作三層轉發,於是繼續查找交換芯片的三層表項)
(5) 交換芯片根據報文的目的IP去查找其三層表項,由於之前未建立任何表項,因此查找失敗,於是將報文送到CPU去進行軟件處理;
(6) CPU根據報文的目的IP去查找其軟件路由表,發現匹配了一個直連網段(PC
B對應的網段),於是繼續查找其軟件ARP表,仍然查找失敗。然後S3600會在目的網段對應的VLAN
3的所有端口發送請求地址2.1.1.2對應MAC的ARP請求;
(7) PC
B收到S3600發送的ARP請求後,檢查發現被請求IP是自己的IP,因此發送ARP應答並將自己的MAC(MAC
B)包含在其中。同時,將S3600的IP與MAC的對應關係(2.1.1.1<==>MAC
S)記錄到自己的ARP表中去;
(8) S3600收到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收到S3600轉發過來的ICMP請求報文以後,迴應ICMP應答給PC
A。ICMP應答報文的轉發過程與前面類似,只是由於S3600在之前已經得到PC
A的IP和MAC對應關係了,也同時在交換芯片中添加了相關三層表項,因此這個報文直接由交換芯片硬件轉發給PC
A;
(10) 這樣,後續的往返報文都經過查MAC表=>查三層轉發表的過程由交換芯片直接進行硬件轉發了。
從上述流程可以看出,三層交換機正是充分利用了“一次路由(首包CPU轉發並建立三層硬件表項)、多次交換(後續包芯片硬件轉發)”的原理實現了轉發性能與三層交換的完美統一。