華爲三層以太網交換機基本原理及轉發流程

1. 二層轉發流程
1.1. MAC地址介紹
MAC 地址是48 bit 二進制的地址,如:00-e0-fc-00-00-06。
可以分爲單播地址、多播地址和廣播地址。
單播地址:第一字節最低位爲0,如:00-e0-fc-00-00-06
多播地址:第一字節最低位爲1,如:01-e0-fc-00-00-06
廣播地址:48 位全1,如:ff-ff-ff-ff-ff-ff
注意:
1)普通設備網卡或者路由器設備路由接口的MAC 地址一定是單播的MAC 地址才能保證其與其它設備的互通。
2) MAC 地址是一個以太網絡設備在網絡上運行的基礎,也是鏈路層功能實現的立足點。
1.2. 二層轉發介紹
交換機二層的轉發特性,符合802.1D 網橋協議標準。
交換機的二層轉發涉及到兩個關鍵的線程:地址學習線程和報文轉發線程。
學習線程如下:
華爲認證技術文章
2
1)交換機接收網段上的所有數據幀,利用接收數據幀中的源MAC 地址來建立MAC 地址表;
2)端口移動機制:交換機如果發現一個包文的入端口和報文中源MAC地址的所在端口不同,就產生端口移動,將MAC 地址重新學習到新的端口;
3)地址老化機制: 如果交換機在很長一段時間之內沒有收到某臺主機發出的報文,在該主機對應的MAC 地址就會被刪除,等下次報文來的時候會重新學習。
注意: 老化也是根據源MAC 地址進行老化。
報文轉發線程:
1)交換機在MAC 地址表中查找數據幀中的目的MAC 地址,如果找到,就將該數據幀發送到相應的端口,如果找不到,就向所有的端口發送;
2)如果交換機收到的報文中源MAC 地址和目的MAC 地址所在的端口相同,則丟棄該報文;
3)交換機向入端口以外的其它所有端口轉發廣播報文。
1.3. VLAN二層轉發介紹
報文轉發線程:
引入了VLAN 以後對二層交換機的報文轉發線程產生了如下的影響:
1)交換機在MAC 地址表中查找數據幀中的目的MAC 地址,如果找到(同時還要確保報文的入VLAN 和出VLAN 是一致的),就將該數據幀發送到相應的端口,如果找不到,就向(VLAN 內)所有的端口發送;
2)如果交換機收到的報文中源MAC 地址和目的MAC 地址所在的端口相同,則丟棄該報文;
3)交換機向(VLAN 內)入端口以外的其它所有端口轉發廣播報文。
以太網交換機上通過引入VLAN,帶來了如下的好處:
1)限制了局部的網絡流量, 在一定程度上可以提高整個網絡的處理能力。
2)虛擬的工作組,通過靈活的VLAN 設置,把不同的用戶劃分到工作
華爲認證技術文章
3
組內;
3)安全性,一個VLAN 內的用戶和其它VLAN 內的用戶不能互訪,
提高了安全性。
另外,還有常見的兩個概念VLAN 的終結和透傳, 從字面意思上就可以很好的瞭解這兩個概念。所謂VLAN 的透傳就是某個VLAN 不僅在一臺交換機上有效,它還要通過某種方法延伸到別的以太網交換機上,在別的設備上照樣有效;終結的意思及相對,某個VLAN 的有效域不能再延伸到別的設備,或者不能通過某條鏈路延伸到別的設備。
VLAN 透傳可以使用802.1Q 技術,VLAN 終結可以使用PVLAN 技術。
IEEE802.1Q 協議是VLAN 的技術標準,主要是修改了標準的幀頭,添加了一個tag 字段,其中包含了VLAN ID 等VLAN 信息,具體實現這裏不談,如果有興趣可以看相關的標準和資料。
注意:在Trunk 端口轉發報文的時候,如果報文的VLAN Tag 等於端口上配置的默認VLAN ID,則該報文的Tag 應該去掉,對端收到這個不帶Tag 信息的報文後, 從端口的PVID 獲得報文的所屬VLAN 信息,因此配置的時候必須保證連接兩臺交換機之間的一條Trunk 鏈路兩端的PVID 設置相同。
爲什麼要去Tag 呢?
這樣做是爲了保證一般的用戶插到Trunk 上以後,仍舊可以正常通信,因爲普通用戶無法識別帶有802.1Q Vlan 信息的報文。
使用802.1Q 技術可以很好的實現VLAN 的透傳,可是有的時候需要把VLAN 終結掉,也就是說這個VLAN 邊界在哪裏終止,PVLAN 技術可以很好的實現這個功能, 同時達到節省VLAN 的目的。cisco 的PVLAN 意思是private vlan,而我們的PVLAN 意思是primary vlan。
這裏的VLAN 有兩類:Primary vlan 和secondary vlan(子VLAN)。
實現了接入用戶二層報文的隔離,同時上層交換機下發的報文可以被每一個用戶接收到,簡化了配置,節省了VLAN 資源。具體實現這裏不談,如果有興趣可以相關資料。
華爲認證技術文章
4
下面談談三層交換流程。
用VLAN 分段,隔離了VLAN 間的通信,用支持VLAN 的路由器(三層設備)可以建立VLAN 間通信。但使用路由器來互聯企業園區網中不同的VLAN 顯然不合時代的潮流。因爲我們可以使用三層交換來實現。
差別1(性能):傳統的路由器基於微處理器轉發報文,靠軟件處理,而三層交換機通過ASIC 硬件來進行報文轉發,性能差別很大;
差別2(接口類型):三層交換機的接口基本都是以太網接口,沒有路由器接口類型豐富;差別3:三層交換機,還可以工作在二層模式,對某些不需路由的包文直接交換,而路由器不具有二層的功能。
首先讓我們看一下設備互通的過程:

如圖所示:交換機上劃分了兩個VLAN,在VLAN1,VLAN 2 上配置了路由接口用來實現vlan1 和 vlan 2 之間的互通。
A 和B 之間的互通(以A 向B 發起ping 請求爲例):
1) A 檢查報文的目的IP 地址,發現和自己在同一個網段;
2) A---->B ARP 請求報文,該報文在VLAN1 內廣播;
3) B---->A ARP 迴應報文;
4) A---->B icmp request;
5) B---->A icmp reply;
A 和C 之間的互通(以A 向C 發起ping 請求爲例):
1) A 檢查報文的目的IP 地址,發現和自己不在同一個網段;
2) A---->switch(int vlan 1) ARP 請求報文,該報文在VLAN1 內廣播;
華爲認證技術文章
5
3) 網關---->A ARP 迴應報文;
4) A---->switch icmp request(目的MAC 是 int vlan 1 的MAC,源MAC 是A 的MAC,目的IP 是C,源IP 是A);
5) switch 收到報文後判斷出是三層的報文。檢查報文的目的IP 地址,發現是在自己的直連網段;
6) switch(int vlan 2)---->C ARP 請求報文,該報文在VLAN2 內廣播;
7) C--->switch(int vlan 2) ARP 迴應報文;
8) switch(int vlan 2)---->C icmp request (目的MAC 是 C 的MAC,源MAC 是 int vlan 2 的MAC,目的IP 是C,源IP 是A)同步驟4)相比報文的MAC 頭進行了重新的封裝, 而IP 層以上的字段基本上不變;
9) C---->A icmp reply,這以後的處理同前面icmp request 的過程基本相同。
以上的各步處理中,如果ARP 表中已經有了相應的表項,則不會給對方發ARP 請求報文。
怎麼樣來區分二和三層的數據流?
3526 產品是三層以太網交換機,在其處理流程中既包括了二層的處理
功能,又包括了三層的處理功能。
區別二三層轉發的基本模型:
vlan 1 vlan 2
A C
1.1.1.1
255.255.0.0
1.1.1.2
255.255.0.0
2.2.2.2
255.255.0.0
2.2.2.1
255.255.0.0
1.1.1.3
255.255.0.0
B
如圖所示:
三層交換機劃分了2 個VLAN, A 和B 之間的通信是在一個VLAN 內

6
完成,對與交換機而言是二層數據流,A 和C 之間的通信需要跨越VLAN,是三層的數據流。
上面提到的是宏觀的方法,具體到微觀的角度,一個報文從端口進入後,Swtich 設備是怎麼來區分二層包文,還是三層報文的呢?
從A 到B 的報文由於在同一個VLAN 內部, 報文的目的MAC 地址將是主機B 的MAC 地址,而從A 到C 的報文,要跨越VLAN,報文的目的MAC 地址是設備虛接口VLAN1 上的MAC 地址。
因此交換機區分二三層報文的標準就是看報文的目的MAC地址是否等於交換機虛接口上的MAC 地址。
以華爲S3526 交換機爲例,三層交換機整個處理流程中分成了三個大的部分:
1)平臺軟件協議棧部分
這部分中關鍵功能有:運行路由協議,維護路由信息表;
IP 協議棧功能,在整個系統的處理流程中,這部分擔負着重要的功能,當硬件不能完成報文轉發的時候,這部分可以代替硬件來完成報文的三層轉發。另外對交換機進行telnet, ping, ftp,snmp 的數據流都是在這部分來處理。
舉例:
show ip route:
Routing Tables:
Destination/Mask Proto Pre Metric Nexthop Interface
0.0.0.0/0 Static 60 0 10.110.255.9 VLAN-Interface2
10.110.48.0/21 Direct 0 0 10.110.48.1 VLAN-Interface1
10.110.48.1/32 Direct 0 0 127.0.0.1 InLoopBack0
10.110.255.8/30 Direct 0 0 10.110.255.10 VLAN-Interface2
10.110.255.10/32 Direct 0 0 127.0.0.1 InLoopBack0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoopBack0
華爲認證技術文章
7
維護ARP 表
show arp:
IpAddress Mac_Address VLAN ID Port Name Type
10.110.255.9 00e0.fc00.5518 2 GigabitEthernet2/1 Dynamic
10.110.51.75 0010.b555.f039 1 Ethernet0/9 Dynamic
10.110.54.30 0800.20aa.f41d 1 Ethernet0/10 Dynamic
10.110.51.137 0010.a4aa.fce6 1 Ethernet0/12 Dynamic
10.110.50.90 0010.b555.e04f 1 Ethernet0/8 Dynamic
2)硬件處理流程
主要的表項是:二層MAC 地址表,和三層的ip fdb 表,這兩個表中用於保存轉發信息,在轉發信息比較全的情況下,報文的轉發和處理全部由硬件來完成處理,不需要軟件的干預。 這兩個表的功能是獨立的,沒有相互的關係,因爲一個報文只要一進入交換機,硬件就會區分出這個包是二層還是三層。非此即彼。
例如:show mac all:
MAC ADDR VLAN ID STATE PORT INDEX AGING TIME(s)
0000.21cf.73f4 1 Learned Ethernet0/19 266
0002.557c.5a79 1 Learned Ethernet0/12 225
0004.7673.0b38 1 Learned Ethernet0/9 262
0005.5d04.9648 1 Learned Ethernet0/16 232
0005.5df5.9f64 1 Learned Ethernet0/16 300
MAC 地址表是精確匹配的IVL 方式, 其中關鍵的參數是:Vlan ID, Port
index。
例如:show ipfdb all:
0: System 1: Learned 2: UsrCfg Age 3: UsrCfg noAge Other: Error
Ip Address RtIf Vtag VTValid Port Mac Status
10.11.83.77 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 1
10.11.198.28 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 1
10.63.32.2 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 1
10.72.255.100 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 2
華爲認證技術文章
8
10.75.35.103 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 2
10.75.35.106 2 2 Invalid GigabitEthernet2/1 00-e0-fc-00-55-18 2
路由接口索引(RtIf):該索引用來確定該轉發表項位於哪個路由接口下面,對3526 產品來講,支持的路由接口數目是32;
Vlan tag: 該值用來表明所處的VLAN,該VLAN 和路由接口是對應的;
Vlan tag 有效位(VTValid):用來標識轉發出去的報文中是否需要插入
Vlan tag 標記。
端口索引(Port):用來說明該轉發表項的出端口;
下一跳MAC:三層設備每完成一跳的轉發,會重新封裝報文中的MAC頭,硬件ASIC 芯片一般依據這個域裏面的數值來封裝報文頭。
兩個重要的概念:
解析,未解析,每次收到報文,ASIC 都會從其中提取出源和目的地址在MAC Table 或者 IP Fdb Table 中進行查找,如果地址在轉發表中可以找到,則認爲該地址是解析的,如果找不到,則認爲該地址是未解析的。根據這個地址是源,還是目的,還可以有源解析,目的未解析等等的組合。對於二層未解析,硬件本身可以將該報文在VLAN 內廣播,但是對於三層報文地址的未解析報文硬件本身則不對該報文進行任何的處理,而產生CPU 中斷,靠軟件來處理。
硬件部分的處理可以用這句話來描述:
收到報文後,判斷該報文是二或是三層報文,然後判斷其中的源,目的地址是否已經解析,如果已經解析,則硬件完成該報文的轉發,如果是未解析的情況,則產生CPU 中斷,靠軟件來學習該未解析的地址。
3)驅動代碼部分
其中關鍵的核心有:
地址解析任務:在該任務中對已經報上來的未解析的地址進行學習,以便硬件完成後續的報文的轉發而不需軟件干預。
地址管理任務:爲了便於軟件管理和維護,軟件部分保存了一份同硬件中轉發表相同的地址表copy。
華爲認證技術文章
9
fib(forwarding information base)表: 這個表的信息來源於ip route table 中的路由信息,之所以把它放在了driver 部分, 是爲了地址解析任務在學IP 地址時查找的方便。
舉例:
show fib:
Destination/Mask Nexthop Flag Interface
0.0.0.0/0 10.110.255.9 I VLAN-Interface2
10.110.48.0/21 10.110.48.1 D VLAN-Interface1
10.110.48.1/32 127.0.0.1 D InLoopBack0
10.110.255.8/30 10.110.255.10 D VLAN-Interface2
10.110.255.10/32 127.0.0.1 D InLoopBack0
127.0.0.0/8 127.0.0.1 D InLoopBack0
三層轉發主要涉及到兩個關鍵的線程:
地址學習線程和報文轉發線程,這個和二層的線程是類似的;
1)報文轉發線程主要根據地址學習線程生成的轉發表(ipfdb table)信息來對報文進行轉發,如果裏面的信息足夠多,這個轉發的過程全部由硬件來完成,如果信息不夠,則會要求地址學習線程來進行學習,同時該報文硬件不能轉發,會交給軟件協議棧來進行轉發。
2)地址學習線程主要用來生成硬件轉發表(ipfdb table)其實ipfdb table 和二層的MAC 地址表也是類似的,只不過裏面的具體表項所代表的含義和所起的作用不同罷了。
有一個問題:在路由器等軟件轉發引擎中,每收一個報文都會去查路由表查下一跳,然後再查ARP 表找下一跳的MAC,可是在三層交換機(如S3526)中,報文轉發的時候不需要去查路由表和ARP 表,這樣的話,這兩個表是不是就沒有什麼作用了?
回答當然是否定的,在S3526 的三層轉發流程中,過程一般都是這樣的,第一個報文硬件無法轉發,要進行IP 地址的學習,同時爲了保證不丟包,該報文也由軟件來進行轉發,在學習完成以後,第二,第三個報文以華爲認證技術文章
10
後就一直是由硬件來完成轉發了,這個過程也可以套用“一次路由,多次交換”來形象的進行總結,在一次路由中,要利用路由表和ARP 表來學習IP 地址,和轉發第一個報文,在以後的多次交換過程中,則只要有ipfdb table 就可以了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章