本文以BCM56440交換芯片為例,介紹BCM StrataXGS系列芯片的報文轉發流程,幾乎所有交換芯片的報文轉發流程都包括Ingress、MMU、Egress三個階段。
BCM56440芯片的Ingress階段流水線分為幾個子階段:
1、Packet Parser
首先檢查數據幀的格式、長度(IEEE 802.3協議規定的64~1522字節報文,或者長達12KB的巨型幀)、字節對齊、CRC校驗等,然后更新端口的包統計寄存器(show counters)、處理MAC Control控制幀等。由此決定入端口報文是否需要繼續處理。
如果需要繼續處理,則解析報文的前128字節,獲取報文特征——目的MAC、源MAC、長度/類型、VLAN TAG、IP地址、UDP端口號、TCP端口號等,主要是提取Ingress Logic和ContentAware Processor需要的信息,這些信息都是后續L2轉發和L3轉發的依據。
2、Dos Checker
顧名思義,Dos Checker就是Dos攻擊檢查,該功能由Security Engine提供,主要是通過硬件機制檢查DoS攻擊。
3、Tunnel Termination(隧道終結)
隧道技術的實質是用一種網絡層的協議來傳輸另一種網絡層協議,其基本功能是封裝和加密,主要利用網絡隧道來實現。隧道的基本組成包括:隧道啟動結點、隧道終結結點、IP網等路由的分組網絡,隧道終結結點可以通過許多網絡設備和軟件實現,如企業網防火牆,VPN結點等。
4、VLAN處理
在交換機內部,所有的報文都必須攜帶VLAN Tag,入端口的報文可能是untagged、single-tagged或者double-tagged。
VLAN信息主要來自以下表項:
1) VLAN-based table (VCAP)
2) VLAN translation table (VLAN_XLATE)
3) Subnet-based table (VLAN_SUBNET)
4) Protocol-based table (VLAN_PROTOCOL)
5) Port-based table (default)
如果入端口報文是tagged的,使用報文攜帶的VLAN TAG進行后續處理。首先通過VLAN lookup table檢查VLAN TAG是否合法。如果合法,則繼續進行spanning tree, VLAN port bitmap和port filtering mode(PFM)檢查(這些字段位於VLAN表中)。如果不合法,則丟棄或者上CPU。
需要注意的是,除了Ingress Filtering做VLAN檢查之外,還要進行STP端口狀態檢查,對於非BPDU報文,只有端口處於forwarding狀態時,才允許報文進入。
5、MPLS MinM
6、L2
L2主要分為兩個階段——MAC地址學習和查表轉發。
首先檢查L2_ENTRY表中是否已存在MAC_SA和VLAN ID表項,如果存在,則認為已學習;否則,由入端口的PORT_TABLE中的CML(CPU Managed Learning)配置決定是硬件學習、拷貝到CPU還是丟棄。這個地方還涉及到MAC MOVE,即MAC地址漂移。
接下來查找MAC_DA和VLAN ID的表項,首先在L2_USER_ENTRY表中查找,如果找到表項,則認為是BPDU報文,根據表項的BPDU位值決定處理策略。0表示轉發到L2_USER_ENTRY表項的DST_MODID和DST_PORT(或者DST_TGID)字段指向的端口;1表示報文可以丟棄、拷貝到CPU或者在VLAN內洪泛。
如果L2_USER_ENTRY表中找不到表項,轉而在L2_ENTRY表中查找。如果找到,則根據DST_MODID和DST_PORT/TGID轉發。
任何單播DLF(Destination Lookup Failure)報文要可以在VLAN內洪泛、丟棄或者拷貝到CPU。選擇哪種處理策略由VLAN_PROFILE表(VLAN表有4K個表項,其中VLAN_PROFILE_PTR字段指向64個VLAN_PROFILE表項)的L2_NON_UCAST_DROP和L2_NON_UCAST_TOCPU字段決定。
組播報文的處理流程與單播報文一樣,如果在L2_ENTRY表中找到表項,則索引到L2MC表(8K表項)。
L2MC表中包含Port Bitmap表示報文轉發的目的端口,但是首先要確認這些端口是不是VLAN域的成員,如果是,則為已知組播報文,否則為未知組播報文。轉發策略由VLAN_PROFILE表項的L2_PFM字段決定。
L2_PFM為0時,所有組播報文在VLAN內洪泛。L2_PFM為1時,已知組播報文轉發到L2MC表項的PORT_BITMAP指向的端口。未知組播在VLAN內洪泛。L2_PFM為2時,未知組播報文丟棄,已知組播報文轉發到L2MC表項的PORT_BITMAP指向的端口。
廣播報文的處理流程與單播報文一樣,只不過在MAC地址學習之后,在VLAN內洪泛。
7、L3
交換芯片除了支持L2轉發之外,還支持L3轉發,即路由轉發。路由轉發允許不同VLAN的報文交互。路由轉發基於目的IP,而不是目的MAC。
使能L3轉發,需要使能PORT_TABLE或者LPORT_PROFILE_TABLE中的V4L3_ENABLE或者V6L3_ENABLE位,以及VLAN_PROFILE表中的IPV4L3_ENABLE或者IPV6L3_ENABLE位。
當報文進入L2查表轉發流程時,如果在MY_STATION_TCAM表中找到表項且IPV4_TERMINATION_ALLOWED位或者IPV6_TERMINATION_ALLOWED位置位,則進入L3轉發流程,否則執行L2轉發流程。
L3轉發第一階段是在L3 Table中查找SIP,如果找不到,則L3 Hit不置位,轉而查找DIP,報文可以被拷貝到CPU。如果找到SIP,則更新L3 Hit位,此時如果檢測到Station Movement事件,則報文被轉發到CPU並更新L3 interface table。
L3轉發第二個階段是在L3 Table中查找DIP,如果找到表項,則根據表項索引到ING_L3_NEXT_HOP或者EGR_L3_NEXT_HOP表。目的端口從ING_L3_NEXT_HOP表獲取,下一跳MAC地址和指向EGR_L3_INTF表(包含路由MAC地址和VLAN for the egress port)的索引從EGR_L3_NEXT_HOP表獲取。
8、IFP
IFP規則,主要是對指定類型的報文進行重定向、限速、包統計等動作,也可以編輯VLAN TAG信息。
9、Trunk
Trunk即聚合組,又稱為鏈路聚合(Link Aggregation),是將多個物理端口聚合在一起達到更大帶寬的手段,由IEEE 802.1ad協議定義。
BCM56440芯片最多支持128個聚合組,每個聚合組最多8個成員端口。
每個Trunk組維護一張TRUNK_GROUP表和一張TRUNK_BITMAP表。
TRUNK_GROUP表用來維護Trunk組信息,其中TG_SIZE字段表示成員端口數,BASE_PTR字段指向當前Trunk組在TRUNK_MEMBER表中的基地址(包含連續TG_SIZE個表項),RTAG字段配置Hash模式。
TRUNK_BITMAP表用來維護Trunk組成員端口位映射。
MMU階段包括Buffering, Queue Shaper, Scheduler, Port Shaper幾個子階段,主要是報文緩存和入隊列。
Egress階段包括Packet Parser, L3 & Tunneling, EGR_VLAN_XLATE/VLAN/STP檢查,Mirror, Packet Modify, ECAP,Loopback幾個子階段。