天天看點

交換機之三層交換原理

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

本文簡要介紹了三層以太網交換機的二三層轉發機制,主要目的是幫助讀者進一步了解交換機的基本原理及轉發流程,以期有利于更好的從事裝置維護工作和建立于進一步學習的索引。

三層以太網交換機的轉發機制主要分為兩個部分:二層轉發和三層交換。

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

(問題1:以03開頭的MAC位址是單點傳播MAC位址還是多點傳播MAC位址)

廣播位址:48位全1,如:ff-ff-ff-ff-ff-ff

注意:

1)普通裝置網卡或者路由器裝置路由接口的MAC位址一定是單點傳播的MAC位址才能保證其與其它裝置的互通。

2)MAC位址是一個以太網絡裝置在網絡上運作的基礎,也是鍊路層功能實作的立足點。

1.2.       二層轉發介紹

交換機二層的轉發特性,符合802.1D網橋協定标準。

交換機的二層轉發涉及到兩個關鍵的線程:位址學習線程和封包轉發線程。

學習線程如下:

1)交換機接收網段上的所有資料幀,利用接收資料幀中的源MAC位址來建立MAC位址表;

2)端口移動機制:交換機如果發現一個封包的入端口和封包中源MAC位址的所在端口(在交換機的MAC位址表中對應的端口)不同,就産生端口移動,将MAC位址重新學習到新的端口;

3)位址老化機制:如果交換機在很長一段時間之内沒有收到某台主機發出的封包,在該主機對應的MAC位址就會被删除,等下次封包來的時候會重新學習。

注意:老化也是根據源MAC位址進行老化。

封包轉發線程:

1)交換機在MAC位址表中查找資料幀中的目的MAC位址,如果找到,就将該資料幀發送到相應的端口,如果找不到,就向所有的端口發送;

2)如果交換機收到的封包中源MAC位址和目的MAC位址所在的端口相同,則丢棄該封包;

3)交換機向入端口以外的其它所有端口轉發廣播封包。

1.3.       VLAN二層轉發介紹

引入了VLAN以後對二層交換機的封包轉發線程産生了如下的影響:

1)交換機在MAC位址表中查找資料幀中的目的MAC位址,如果找到(同時還要確定封包的入VLAN和出VLAN是一緻的),就将該資料幀發送到相應的端口,如果找不到,就向(VLAN内)所有的端口發送;

3)交換機向(VLAN内)入端口以外的其它所有端口轉發廣播封包。

以太網交換機上通過引入VLAN,帶來了如下的好處:

1)限制了局部的網絡流量, 在一定程度上可以提高整個網絡的處理能力。

2)虛拟的工作組,通過靈活的VLAN設定,把不同的使用者劃分到工作組内;

3)安全性,一個VLAN内的使用者和其它VLAN内的使用者不能互訪,提高了安全性。

另外,還有常見的兩個概念VLAN的終結和透傳,從字面意思上就可以很好的了解這兩個概念。所謂VLAN的透傳就是某個VLAN不僅在一台交換機上有效,它還要通過某種方法延伸到别的以太網交換機上,在别的裝置上照樣有效;終結的意思及相對,某個VLAN的有效域不能再延伸到别的裝置,或者不能通過某條鍊路延伸到别的裝置。

VLAN透傳可以使用802.1Q技術,VLAN終結可以使用PVLAN技術。

IEEE802.1Q協定是VLAN的技術标準,主要是修改了标準的幀頭,添加了一個tag字段,其中包含了VLANID等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意思是privatevlan,而我們的PVLAN意思是primary vlan。

這裡的VLAN有兩類:Primaryvlan和secondary vlan(子VLAN)。

實作了接入使用者二層封包的隔離,同時上層交換機下發的封包可以被每一個使用者接收到,簡化了配置,節省了VLAN資源。具體實作這裡不談,如果有興趣可以相關資料。

2.       三層交換流程

用VLAN分段,隔離了VLAN間的通信,用支援VLAN的路由器(三層裝置)可以建立VLAN間通信。但使用路由器來互聯企業園區網中不同的VLAN顯然不合時代的潮流。因為我們可以使用三層交換來實作。

差别1(性能):傳統的路由器基于微處理器轉發封包,靠軟體處理,而三層交換機通過ASIC硬體來進行封包轉發,性能差别很大;

差别2(接口類型):三層交換機的接口基本都是以太網接口,沒有路由器接口類型豐富;

差别3:三層交換機,還可以工作在二層模式,對某些不需路由的封包直接交換,而路由器不具有二層的功能。

首先讓我們看一下裝置互通的過程:

如圖所示:交換機上劃分了兩個VLAN,在VLAN1,VLAN2上配置了路由接口用來實作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内廣播;

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(intvlan 2)---->C   ARP請求封包,該封包在VLAN2内廣播;

7) C--->switch(int vlan 2) ARP回應封包;

8) switch(intvlan 2)---->C  icmp request (目的MAC是 C 的MAC,源MAC是int vlan 2的MAC,目的IP是C,源IP是A)同步驟4)相比封包的MAC頭進行了重新的封裝,而IP層以上的字段基本上不變;

9) C---->A   icmp reply,這以後的處理同前面icmprequest的過程基本相同。

以上的各步進行中,如果ARP表中已經有了相應的表項,則不會給對方發ARP請求封包。

怎麼樣來區分二和三層的資料流?

3526産品是三層以太網交換機,在其處理流程中既包括了二層的處理功能,又包括了三層的處理功能。

差別二三層轉發的基本模型:

如圖所示:

三層交換機劃分了2個VLAN, A和B之間的通信是在一個VLAN内完成,對與交換機而言是二層資料流,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的資料流都是在這部分來處理。

舉例:

showip route:

RoutingTables:

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   

維護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位址表,和三層的ipfdb表,這兩個表中用于儲存轉發資訊,在轉發資訊比較全的情況下,封包的轉發和處理全部由硬體來完成處理,不需要軟體的幹預。這兩個表的功能是獨立的,沒有互相的關系,因為一個封包隻要一進入交換機,硬體就會區分出這個包是二層還是三層。非此即彼。

例如:show mac all:

MAC ADDR   VLANID  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/100-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

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;

Vlantag: 該值用來表明所處的VLAN,該VLAN和路由接口是對應的;

Vlantag有效位(VTValid):用來辨別轉發出去的封包中是否需要插入Vlantag标記。

端口索引(Port):用來說明該轉發表項的出端口;

下一跳MAC:三層裝置每完成一跳的轉發,會重新封裝封包中的MAC頭,硬體ASIC晶片一般依據這個域裡面的數值來封裝封包頭。

兩個重要的概念:

解析,未解析,每次收到封包,ASIC都會從其中提取出源和目的位址在MAC Table或者 IP Fdb Table中進行查找,如果位址在轉發表中可以找到,則認為該位址是解析的,如果找不到,則認為該位址是未解析的。根據這個位址是源,還是目的,還可以有源解析,目的未解析等等的組合。

對于二層未解析,硬體本身可以将該封包在VLAN内廣播,但是對于三層封包位址的未解析封包硬體本身則不對該封包進行任何的處理,而産生CPU中斷,靠軟體來處理。

硬體部分的處理可以用這句話來描述:

收到封包後,判斷該封包是二或是三層封包,然後判斷其中的源,目的位址是否已經解析,如果已經解析,則硬體完成該封包的轉發,如果是未解析的情況,則産生CPU中斷,靠軟體來學習該未解析的位址。

3)驅動代碼部分

其中關鍵的核心有:

位址解析任務:在該任務中對已經報上來的未解析的位址進行學習,以便硬體完成後續的封包的轉發而不需軟體幹預。

位址管理任務:為了便于軟體管理和維護,軟體部分儲存了一份同硬體中轉發表相同的位址表copy。

fib(forwarding information base)表: 這個表的資訊來源于iproute table中的路由資訊,之是以把它放在了driver部分, 是為了位址解析任務在學IP位址時查找的友善。

showfib:

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)封包轉發線程主要根據位址學習線程生成的轉發表(ipfdbtable)資訊來對封包進行轉發,如果裡面的資訊足夠多,這個轉發的過程全部由硬體來完成,如果資訊不夠,則會要求位址學習線程來進行學習,同時該封包硬體不能轉發,會交給軟體協定棧來進行轉發。

2)位址學習線程主要用來生成硬體轉發表(ipfdb table)