1. 程式人生 > >交換晶片二(L2轉發原理)

交換晶片二(L2轉發原理)

對於交換晶片來說,L2轉發是一個最基本的功能。L2功能主要包括ingress過濾、MAC學習和老化、根據MAC+VLAN轉發、廣播與洪泛、生成樹控制等基本功能。

L2轉發的具體流程如圖3所示:

    從埠進入交換晶片的包首先檢查TAG,對於tagged包,判斷是否是802.1p的包,(802.1p的包vid為0),對於untagged的包和802.1p的包,根據系統配置加上tag(這些配置包括:基於MAC的vlan、基於子網的vlan、基於協議的vlan和基於埠的vlan)。經過這一步以後,到交換晶片內部的包都變成802.1Q的tagged包了(vid為1-4094,4095保留),如果設定了ingress過濾,就會檢查本埠是否在該vid對應的VLAN中,對於本埠不在該vid對應的VLAN中的包就丟棄。對於沒有設定ingress過濾,或者設定ingress過濾但本埠在該vid對應的VLAN中的包進行STP埠狀態檢查,對於BPDU以外的包,只有埠處於forwarding狀態,才允許包進入。然後進行源MAC地址檢查,以原MAC+VID的雜湊為索引查詢L2 TABLE,如果沒有找到,就把這個表項(原MAC+VID)以及對應的埠寫到L2 TABLE中,這個過程稱為MAC地址學習。當然地址學習的方法有很多種,可以是硬體學習,也可以是軟體學習,可以根據PORT表中的CMI欄位的配置來進行。

圖3 L2轉發流程

      下一步進行目的MAC地址檢查:目的MAC地址為廣播地址(0xffffffff)的包,在vlan內廣播出去;目的MAC地址為組播地址的包,進行組播流程的處理;對於單播包,查詢L2 TABLE,如果沒有找到,就在vlan內進行洪泛;如果找到,檢查表項中的L3 bit是否設定,如果設定了L3 bit,就進行L3流程的轉發;否則就轉發到L2 TABLE表項中的埠去,在egress方向,也有egress過濾設定(預設是使能的),如果egress埠不在vlan中也是不能轉發的。至此,L2轉發流程完成了。與地址學習相反的過程是地址老化。地址老化的機制是:ASIC內部有個定時器,稱為age timer,命令列可以對這個暫存器進行設定,每次查詢L2 TABLE時(包括原地址查詢和目的地址查詢,可以配置),如果命中,就會設定hit標誌。當老化時間到後,ASIC把hit標誌清除,當下一個老化時間到後,ASIC把hit為0的地址設定為無效,這就是為什麼實際地址老化的時間為1~2倍agingTime的原因。

2.2 L2轉發相關的表項

2.2.1 port表

圖4 port表

Port表是一個非常重要的表,有很多與埠相關的控制都在這裡設定。每個埠對應一個表項,按埠號進行索引。下面介紹一下重要的設定:

1) PVID:設定PORT_VID

2) 預設優先順序:設定PORT_PRI 

3) 流分類使能:設定FILTER_ENABLE 

4) VLAN轉換使能:設定VT_ENABLE和VT_MISS_DROP 

5) Ingress過濾使能:設定EN_IFILTER 

6) 信任COS還是信任DSCP:對於IPV4:TRUST_DSCP_V4=0:信任COS;

TRUST_DSCP_V4=1:信任DSCP,對於IPV6:同樣設定TRUST_DSCP_V6。 

7) Ingress方向mirror使能:設定MIRROR 

8) MAC地址學習方式:設定CML 

9) IP組播是否使用VLAN資訊:設定IPMC_DO_VLAN 

10) L3轉發使能:設定V4L3_ENABLE和V6L3_ENABLE 

11) 是否丟棄BPDU:設定DROP_BPDU 

12) 控制是否轉發帶tag和不帶tag的包:設定PORT_DIS_TAG和PORT_DIS_UNTAG 

13) Pause幀控制:設定PASS_CONTROL_FRAMES 

14) 基於子網的VLAN使能:設定SUBNET_BASED_VID_ENABLE 

15) 基於MAC的VLAN使能:設定MAC_BASED_VID_ENABLE 

16) 設定堆疊口:HIGIG_PACKET 

17) 設定NNI口:NNI_PORT 

18) 修改優先順序使能:MAP_TAG_PACKET_PRIORITY 

19) 堆疊口modid設定:MY_MODID 【什麼叫堆疊口?】

20) Out tpid設定:OUTER_TPID 

21) 基於MAC和基於子網的VLAN優先順序設定:VLAN_PRECEDENCE 

22) 是否允許單臂橋功能:PORT_BRIDGE 

23) IP組播點陣圖設定:IGNORE_IPMC_L2_BITMAP和IGNORE_IPMC_L3_BITMAP

2.2.2 egress port表

                                               圖5 egress port表

EGR_PORT是一組暫存器,每個埠一個,用於EGRESS方向的控制,有幾個重要設定介紹如下:

1) 設定egress埠型別:PORT_TYPE=0,UNI埠;PORT_TYPE=1,NNI埠 

2) 設定egress過濾:EN_EFILTER=1

2.2.3 L2地址表

                                             圖6 L2地址表

      56504的L2地址表大小為16K,5630X的L2地址表大小為8K,地址表使用MAC+VID的hash值作為索引查表。實際上56504的L2地址表hash值為4K,每個hash值對應4條地址,這樣最多可以儲存4條hash衝突的地址。地址表中每個表項都儲存了MAC_ADDR和VLAN_ID。MAC學習的時候使用原MAC+VID的hash查表,把表中的MAC+VID與包中的MAC+VID進行比較,如果完全相等,表示找到了。然後看埠(TGID_PORT)是否相等,如果不相等表示地址發生了遷移,對於動態學習的地址需要更新port;如果相等表示命中,更新hit標誌。其他幾個重要的功能介紹如下:

1) 設定靜態地址:STATIC_BIT=1 

2) 設定L3轉發標誌:L3=1 

3) 設定本地址的包都轉發到CPU去:CPU=1 

4) 設定本地址匹配的包丟棄:SRC_DISCARD=1、DST_DISCARD=1 

5) 設定本地址匹配的包對某些埠阻塞:MAC_BLOCK_INDEX 

6) 設定本地址匹配的包映象:MIRROR=1 

7) 設定組播索引:L2MC_PTR 

8) 地址有效標誌:VALID=1

2.2.3 VLAN表

Vlan表分為ingress和egress兩個部分,分別對應入口控制和出口控制。

                                             圖7 ingress vlan表

    Ingress Vlan表中主要包含了埠列表,用於ingress filter功能。PFM是用於控制組播洪泛的開關。PFM=0,組播在vlan內洪泛;PFM=1,註冊的組播按組播錶轉發,未註冊的組播在vlan內洪泛;PFM=2,註冊的組播按組播錶轉發,未註冊的組播丟棄。STG用於標識本vlan所屬的生成樹組。

                                             圖8 egress vlan表

Egress vlan表中除了PFM和STG外,還包含了出口方向的埠點陣圖,以及哪些埠以untag的方式傳送本vlan的包。