CISCO CEF(Cisco Express Forwarding,Cisco特快交換) 詳解

CEF採用一個4級每級256條通道結構的轉發表來指明轉發條目的位置,轉發表有next hop等信息,涵蓋了整個IPv4的地址範圍,並有指針指向另一個鄰接表。轉發條目(MAC地址之類)都存儲在一個單獨的鄰接表上。這兩個表包括了所有的轉發信息,而這些轉發信息是根據路由表和ARP來構造的。

CEF簡化了查詢的步驟,提高了單位時間的工作效率。而且從整體上來看,路由信息和轉發信息是分離的,數據包的轉發只根據轉發信息而不用參照路由信息,可以充分利用專用硬件的功能來達到線速轉發,而不受路由變化或者其他因素的干擾,保證了轉發的高速高效。

CEF轉發提供3張表
1>FIB:從路由選擇表中拷貝過來的轉發信息,包括路由選擇表中用於轉發路由分組所必須的最少信息。
2>鄰接表:維護一個鄰接節點以及他們相關的2層MAC重寫或嚇一跳信息數據庫
3>NetFlow Table:用於統計網絡數據等

需要指出的是,CEF的轉發信息不是存儲在cache裏的,因此也不存在過期作廢或定時刷新,只有根據路由表的變化而進行的更改,通常很穩定。而且轉發信息是從路由信息經過一定處理後轉換過來的,也就是說,如果在轉發信息裏找不到某個數據包的轉發信息,那麼也不用費心到路由那裏去了,因爲那裏肯定也沒有。這個數據包的下場不是被扔掉就是轉到其他轉發線程中去,轉發信息等於是路由信息針對於硬件轉發的一個變形。

這樣的結構佈局保證了路由功能和交換功能的分離(軟件上)。路由功能只處理三層以上信息,如路由信息處理、策略等,然後形成一個路由表,再根據這個路由表生成相應的轉發信息。轉發功能很明確,就是根據這些轉發信息來工作,沒有相關信息就拒絕。而不象MLS那樣,遇到不認識的還得回頭找路由問明白,那樣降低了轉發效率。 CEF在軟件形式上實現了路由和交換功能的分離,而並不意味着路由器物理結構上的分離,所以它也可以在一些多層交換機和低端的路由器上實施。

它的高速表現在以下兩個方面:
1>在查詢方式上簡化了步驟,提高了速度;
2>在分離了路由和轉發功能。


支持CEF的硬件平臺

Cisco首先在高端路由器平臺實現CEF,此後,Catalyst交換機也支持CEF的轉發,但是還存在一些差別,但均提供如下特性:
1. 基於“最長地址匹配”查找的高速轉發
2. 等價路徑的負載均衡
3. 逆向路徑轉發檢查(RPF)
4. 不詳路由的無效

有些CEF特性僅在路由器上實現
1. 關閉基於CEF的轉發能力
2. 每個前綴和每個前綴長度的CEF統計
3. 從負載共享路徑統計數據
4. 基於每個分組的負載均衡

當您在網絡中使用CEF時,請先考慮以下項目:
加載當前完整的Internet路由信息的平臺所需的最小內存(推薦):
- 集中路由模塊上需要128MB
- 每個線路卡上需要64MB
CEF不能在一個線路卡上和VIP-分佈式快速交換同時運行。

缺省情況下,如果Cisco IOS軟件在交換數據報時遇到CEF不支持的功能和封裝類型,它將採用其他交換方法(如最優交換、快速交換、過程交換)。

當前CEF不支持以下功能:
- 策略路由
- 網絡地址翻譯(NAT)
- 路由交換模塊上的訪問控制列表
- 多點PPP封裝
- SMDS
- 令牌環
- ATM
- ISL封裝

以下平臺支持CEF功能:
Cisco7000系列路由器(需要裝備RSP7000)
Cisco7200系列
Cisco7500系列
Cisco12000系列

第二代接口模塊(VIP2-20、VIP2-40、VIP2-50)支持CEF。

在不同的路由器平臺上,硬件對CEF的支持可能會有所不同,這要由路由器中安裝的路由模塊和其他硬件所決定。例如在Cisco12000系列路由器上,所有的線路卡都支持CEF交換;在Cisco7500系列路由器上,要實現CEF交換,需要有RSP模塊和VIP線路卡的支持。每個接口卡用自己的引擎獨立地運行CEF去轉發數據包,並且都獨自擁有一個對FIB表的拷貝。每個接口卡獨立的去交換數據包,減輕了中心路由處理模塊的負擔。




CEF操作

要了解CEF,必須先了解Supervisor的處理結構 Cisco Supervisor2結構如下
底板:
主要提供交換矩陣,32Gbit/s的總線,多播複製ASIC,網絡管理處理器,還有基於GBIC的2個接口。此外還提供PFC2和MSFC2子板的連接器
PFC2:
提供一組ASIC進行所有基於硬件的轉發。通常CEF就是在這個卡上實現的。 他提供基於3層的轉發引擎。提供各種3層表,如FIB,鄰接表等。此外,PFC還包口基於硬件的訪問控制列表和Qos機制的ASIC。
MSFC2:
MSFC2提供一個處理所有3層控制板活動的cpu 。控制板是處理路由計算的硬件體系結構的一部分。MSFC2負責處理不能由PFC2硬件元素處理的功能,以及所有路由選擇協議活動的處理,比如OSPF和BGP的路由選擇更新。MSFC2 也負責形成lP路由選擇表、FIB 表和鄰近表。

在這3個組件中,監控底板和PFC2是強制構件,而MSFC2組件是可選的(儘管它是第3層交換十分需要的),因爲它包括形成CEF表的CPU. MSFC2子卡上的CPU運行任何所配置的路由選擇協議需要的所有實例。此外,CPU還處理不能用硬件處理的分組。MSFC2是基於cisco IOS軟件的路由器,並以同樣方式配置。配置參數與Cisco 7200 系列路由器上的一樣。CEF同Supervisor一起默認啓用。事實上,它不能關閉。

對於大多數通用的CEF功能,不需要特別地配置來啓用CEF ,除了路由選擇協議、網絡接口地址等的標準配置。

在路由器初始化時,會根據路由器軟件配置中的信息構建一張路由選擇表(如靜態路由、直連路由,以及通過路由選擇協議交換動態學習到的路由)。在構建了路由選擇表之後,CPU自動創建FIB和鄰近表。FIB 和鄰近表顯示了按照最佳轉發方式進行的出現在路由選擇表中的數據。

與基於通信流的流緩存不同,cEF表是基於網絡拓撲。當一個分組進入交換機時,交換機的第3層轉發引擎ASIC根據目的網絡和最詳細的網絡掩碼澎於最長匹配查找。例如,PFC2不是基於目的地址172.31.10.3進行交換,而是查找網絡172.31.10.0/24 並交換到連接該網絡的接口上。並且不涉及除路由選擇表和預先建立的FIB 表之外的任何軟件。此外,一旦路由選擇表中發生了變化,所有的cEF 表會立即更新。這使得這個方法是高效的,緩存不會由於路由翻動而無效。CEF 更加適應網絡拓撲的變化。



CEF表

1.CEF轉發信息庫:
CEF利用轉發數據庫(FIB)來進行基於IP目的地前綴的交換決策。從概念上講,FIB類似於一個路由表或信息庫,它維護着一個包含IP路由錶轉發信息的鏡像。當網絡中路由或拓撲結構發生了變化時,IP路由表就被更新,而這些變化也將反映在FIB中。基於IP路由表中的信息,FIB維護着下一跳的地址信息。因爲FIB條目和路由表條目之間有一一對應的關係,所以FIB中包含了所有已知的路由,這樣就不用維護路由高速緩存了,而先前的交換方法(比如快速交換和最優交換)都要維護路由高速緩存。

CEF FIB 表由一棵4級層次的樹組成,如圖所示。4 級來源於IP 議所使用的犯比特地址。層次的每一級是基於32比特中的8 位。CEF 依賴最長匹配轉發算法,這意味着按降序搜索整棵樹直到“最長匹配”,即匹配最大比特數。FIB 樹分層表示,樹的頂端是最不詳細的地址,底端是最詳細的地址。每個葉以8比特爲邊界,按降序排列更詳細的表項。這棵樹(通常被認爲是一個256 路的分支樹)提供了一種用於快速查找的高效機制,確保查找過程中產生最少的延遲。這棵樹也提供一個高擴展性的體系結構,因爲它能以相比與表效率來說最小的性能開銷完全統計IPv4 編址。每個樹葉提供了一個到鄰近表中相應下一跳錶項的指針。

2.鄰接表(Adjacency Table)
如果網絡中的網絡節點只通過一跳就可以穿越鏈路層而彼此到達對方,那麼它們是鄰接的。除了FIB外,CEF還利用鄰接表來提供第二層的尋址信息。鄰接表爲所有FIB條目維護第二層的下一網段地址。
鄰接的發現 當路由器發現存在鄰接時就增加在鄰接表中,每次生成一個鄰接條目(就像ARP協議一樣),CEF會爲那個鄰接節點預先計算一個鏈路層頭標信息,並把這個頭標信息存儲在鄰接表中。當決定路由時,它就會指向下一跳以及相應的鄰接條目。隨後,在對數據包進行CEF交換時,用預先生成的頭標信息來對數據包進行封裝。
分解鄰接 一個路由表中也許存在多條到達目標網絡的路徑,例如:當路由器被配置成允許冗餘路徑和允許負載均衡時。對於每一個被分解的轉發路徑,鄰接條目會被附加一個頭標信息指示出那條路徑的下一跳地址。這種機制可以用來在多條路徑上實現負載均衡。
需要作特殊處理的鄰接類型 另外,因爲鄰接條目和下一跳地址相關聯,所以一些特殊的鄰接類型可以被用來加速交換過程。前綴被定義後,當存在以下被緩存的鄰接條目存在時,前綴需要作特殊處理。空鄰接一個以Null0接口爲目標地址的包會被拋棄,在訪問過濾器時,這可以被用作一種有效的機制。
鄰接歸納 當路由器直接和幾臺主機相連時,FIB表中維持的是這個子網的前綴,而不是各個主機的前綴。這個子網前綴是一個鄰接的歸納。當要轉發某個數據包到某個具體主機時,鄰接數據庫使用這個被歸納的鄰接。
轉出鄰接 當遇到某些作特殊處理的功能或者CEF不支持的功能時,路由器將採用更高級別的交換方法處理數據包。
丟棄鄰接 數據包被丟棄。這種鄰接類型僅僅在Cisco12000系列路由器上出現。
釋放鄰接 數據包被釋放,但是前綴仍然有效。
沒有被分解的鄰接 當鏈路層頭標信息被附加到數據包上時,FIB需要頭標指出下一跳的地址。如果FIB表中建立了一個鄰接,但是並沒有找到第二層的尋址信息,比如沒有通過ARP發現第二層的尋址信息,這個鄰接就被認爲是不完整的。這個數據包就會交給路由模塊處理,鄰接關係由ARP來決定。



CEF轉發過程

CEF的兩個表:


3層包從TCAM開始查找;進行最長匹配,得到鄰居信息,改寫原有二層數據幀(下一跳MAC地址)並轉發。
CEF表是從路由表得來,鄰居表是使用ARP解析得來的。

CEF多層交換的過程:


左側MAC-M(MAC地址)是SW。右側的MAC-M是SW。
如果目的IP地址的MAC不在鄰居表內,則SW將使用ARP進行解析,以得到目的地址的MAC地址。

ARP Throttling(ARP抑制):在未獲得目的MAC地址並且進行ARP解析時,除非ARP解析完成並且在鄰居表體現出來外,在解析期間,所有發往目的主機的包,將被丟棄,這就是ARP抑制。


FIB最多支持6個到達同一目的的鄰居條目。




CEF模式

CEF的操作模式有2種,即集中CEF模式和分散CEF模式。
可以通過其中的任意一種來啓用CEF,同一時刻用戶只能使用其一種模式。
集中CEF模式 當啓用集中CEF模式時,CEF的FIB和鄰接表駐留在路由處理器中,路由處理器來執行快速轉發。對於CEF交換來說,當線路卡不可用時,或者需要使用的功能與分散CEF交換不兼容時,就可以使用集中CEF模式。
分佈CEF模式 當啓用分佈式CEF(dCEF)時,線路卡(例如VIP線路卡或者GSR線路卡)維護着一個與FIB和鄰接表相同的拷貝。線路卡在端口適配器之間執行快速轉發,這樣,在進行交換操作時就無須RSP的參與了。dCEF使用一個“內部過程通信”(Inter Process Communication,IPC)機制,在路由處理模塊和線路卡上,保證FIB和鄰接表的同步。

在Cisco12000系列路由器中,線路卡負責執行CEF交換。在其他路由器中,或許您使用的不是同一種類型的線路卡,有可能某個接口卡不支持CEF交換。

當某個不支持CEF交換的線路卡收到數據包時,她將數據包轉發給更高的交換層(比如路由處理模塊)或者把數據包轉發給下一跳處理。這種機制允許舊的接口模塊和新的接口模塊並存。

1.Cisco12000系列千兆交換路由器上只運行dCEF模式。
2.一個VIP卡上不允許同時運行分佈式CEF交換和分佈式快速交換。
3.Cisco7200系列路由器不支持分佈式CEF交換。

附加的新功能 在配置集中模式CEF和分佈模式CEF時,您還可以配置以下功能:
1>分佈式CEF支持訪問控制列表
2>分佈式CEF支持幀中繼包
3>分佈式CEF支持數據包分片
4>支持基於每一個包或者每一個目標的負載均衡
5>支持網絡計費,可以收集數據包的個數和字節數
6>分佈式CEF支持跨隧道的交換

發給下一跳處理。這種機制允許舊的接口模塊和新的接口模塊並存。

1 Cisco12000系列千兆交換路由器上只運行dCEF模式。
2 一個VIP卡上不允許同時運行分佈式CEF交換和分佈式快速交換。
3 Cisco7200系列路由器不支持分佈式CEF交換。

附加的新功能
在配置集中模式CEF和分佈模式CEF時,您還可以配置以下功能:
1>分佈式CEF支持訪問控制列表
2>分佈式CEF支持幀中繼包
3>分佈式CEF支持數據包分片
4>支持基於每一個包或者每一個目標的負載均衡
5>支持網絡計費,可以收集數據包的個數和字節數
6>分佈式CEF支持跨隧道的交換




CEF操作

CEF:
如果用戶的Cisco路由器中有接口處理器支持CEF時,就可以啓用CEF。
爲了啓用或禁用CEF,可以在全局配置模式下利用下面的命令進行配置。
啓用標準CEF模式 ip cef switch
禁用標準CEF模式 no ip cef switch

dCEF:
當線路卡執行快速轉發時,則啓用dCEF,這樣,路由處理模塊就可以處理路由協議或者負責交換從舊的接口模塊(不支持CEF交換的模塊)過來的數據包。
在Cisco12000系列路由器上,dCEF模式是缺省啓用的。
所以啓用dCEF的命令(ip cef switch)在Cisco12000系列路由器上是沒有意義的,在配置清單上也不會列出dCEF模式被啓用。
爲了啓用或禁止dCEF操作,可以在全局配置模式下利用下面的命令進行配置。
啓用dCEF模式 ip cef distributed switch
禁用dCEF模式 no ip cef distributed switch

有時候,在某個接口配置了一項功能,而CEF或dCEF並不支持該功能,這時您就可能需要在這個特定的接口上禁止CEF或dCEF。例如,策略路由和CEF就不能一起使用。您可能想讓一個接口支持策略路由,而讓其他的接口支持CEF。在這種情況下,可以按全局模式啓用CEF,而在那個打算配置策略路由的接口上禁用CEF。這樣,除了那一個接口外,在其他所有接口上都啓用了快速轉發。

在某個接口上禁用CEF或dCEF,可以在接口配置模式: no ip route-cache cef
爾後又想重新啓用CEF,在接口配置模式下,可以使用: ip route-cache cef

在Cisco12000系列路由器上,您不可以在某個接口上禁用dCEF模式。




CEF負載均衡

基於目的地的負責均衡:
基於目的地的負載均衡允許路由器將使用多條路徑來均衡負載。對於某一源/目標主機,數據包轉發採用同一路徑,即使有多個路徑可用,也將這樣處理。對於到達不同目的地的數據包則可以採用不同的路徑。
當啓用CEF時,基於目的地的負載均衡功能缺省被啓用。大多數情況下,都採用這種負載均衡方法。
因爲基於目的地的負載均衡是依賴於對數據流的統計來分佈信息的,所以隨着“源/目的地對”個數的增加,負載均衡會變得更加有效。

基於數據包的負載均衡:
當啓用基於數據包的負載均衡功能時,必須先禁用基於目的地的負載均衡功能。爲了禁用基於目的地的負載均衡功能,可以在接口配置模式下,
no ip load-sharing per-destination
使用基於數據包的負載均衡,路由器可以在路徑上連續發送數據包,而不用考慮具體的主機或用戶情況。這種負載均衡機制採用輪轉辦法來確定每個數據包採用哪條路徑到達目的地。基於數據包的負載均衡可以保證在多條鏈路上進行負載均衡。

要啓用基於數據包的負載均衡功能,可以在接口配置模式下,
ip load-sharing per-packet



爲CEF配置網絡記賬功能

啓用收集被快速轉發到某個目的地的數據包個數和字節數
ip cef accounting per-prefix
啓用收集通過某個目的地被快速轉發的數據包的個數
ip cef accounting non-recursive
在全局配置模式中爲CEF啓用網絡記賬功能後,相應的路由處理器會收集記賬信息。當用戶爲dCEF啓用網絡記賬功能後,線路卡上會收集記帳信息。
查看網絡記帳信息 show ip cef



爲CEF配置跨隧道的交換

CEF支持跨隧道的交換,例如GRE隧道。當你啓用CEF或者dCEF模式時,跨隧道的交換會被自動啓用,所以您無需再執行任何附加操作來啓用跨隧道的交換。



CEF檢驗

Cisco7505#sh ip cef detail
IP CEF with switching (Table Version 5), flags=0x0
5 routes, 0 reresolve, 0 unresolved (0 old, 0 new), peak 0
5 leaves, 8 nodes, 9080 bytes, 10 inserts, 5 invalidations
0 load sharing elements, 0 bytes, 0 references
universal per-destination load sharing algorithm, id 9466A8C7
3(0) CEF resets, 0 revisions of existing leaves
Resolution Timer: Exponential (currently 1s, peak 1s)
0 in-place/0 aborted modifications
refcounts: 2311 leaf, 2304 node
Table epoch: 0 (5 entries at this epoch)
0.0.0.0/0, version 0, epoch 0, attached, default route handler
0 packets, 0 bytes
via 0.0.0.0, 0 dependencies
valid no route adjacency
0.0.0.0/32, version 1, epoch 0, receive
224.0.0.0/4, version 4, epoch 0
0 packets, 0 bytes
via 0.0.0.0, 0 dependencies
next hop 0.0.0.0
valid drop adjacency
224.0.0.0/24, version 3, epoch 0, receive
255.255.255.255/32, version 2, epoch 0, receive

MSFC2#sh ip cef summary
IP CEF with switching (table Version 477965)
445 routes , 0 reresolve, 0 unresolved ( 0 old, 9 new)
446 leaves, 76 nodes, 132560 bytes, 477966 inserts,
477520 invalidations
0 load sharing elements , 0 bytes, 0 references
1CEF resets , 2 revisions of exsiting leaves
Refcounts: 15824 leaf, 15038 node
Default 192.35.86.0/24
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章