目錄

簡介

必要條件

需求

採用元件

背景資訊

如何避免CEF極化

簡介

本檔案將說明思科快速轉送(CEF)極化如何造成通往目的地網路的備援路徑使用不最佳。CEF極化是雜湊演算法選擇特定路徑且冗餘路徑保持完全未使用時的效果。

必要條件

需求

本文件沒有特定需求。

採用元件

本檔案中的資訊是根據在Supervisor Engine 720上執行的Cisco Catalyst 6500交換器。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路正在作用，請確保您已瞭解任何指令可能造成的影響。

背景資訊

CEF根據由路由協定(例如增強型內部網關路由協定(EIGRP)和開放最短路徑優先(OSPF))填充的路由表來交換資料包。一旦計算路由表(RIB),CEF就會執行負載均衡。在分層網路設計中，可能存在許多第3層(L3)等價冗餘路徑。請考慮以下拓撲，其中流量從接入層流經分佈層和核心層並進入資料中心。

假設為了從路由器1(R1)[左上角]到達網路10.1.1.1，有兩條等價路徑(L1、L2)。 使用哪一條鏈路是通過雜湊演算法決定的。預設情況下，源IP(SIP)和目標IP(DIP)用作雜湊演算法中的引數。

以下是有關雜湊演算法運作方式的說明：

當只有兩條路徑時，交換機/路由器對SIP和DIP的低位位（需要選擇兩條鏈路中的任意一條時為位，3-4條鏈路為兩位，以此類推）執行異或(XOR)操作。同一SIP和DIP的XOR操作始終導致資料包使用同一鏈路。

然後，資料包將傳遞到分佈層，在分佈層使用相同的雜湊演算法和相同的雜湊輸入，並為所有流選擇單個鏈路，這會導致其他鏈路未得到充分利用。此過程稱為CEF極化(使用相同的雜湊演算法和相同的雜湊輸入，導致對ALL流使用單個等價多路徑(ECMP)連結)。

此範例更詳細地說明此程式：

1. 來源為10.240.18.1且目的地為10.240.20.1的流量在路由器A進入網路並進行CEF交換。由於有兩個等價路徑通往10.240.20.0/24網路，因此資料包中的源地址和目的地址通過雜湊演算法，結果就是到達目的地所用的特定路徑。在這種情況下，封包採用的路徑是前往路由器C。從這裡開始，封包將前往路由器F，然後到達最終目的地。

2. 來源為10.240.18.2且目的地為10.240.20.1的流量在路由器A進入網路，並且還進行CEF交換。由於有兩個等價路徑通往10.240.20.0/24網路，因此資料包中的源地址和目的地址會通過雜湊演算法，並且CEF會選擇路徑。在這種情況下，封包採用的路徑是前往路由器B。

3. 來源為10.240.18.3且目的地為10.240.20.1的流量在路由器A進入網路，並且也進行CEF交換。由於有兩個等價路徑通往10.240.20.0/24網路，因此資料包中的源地址和目的地址會通過雜湊演算法，並且CEF會選擇路徑。在這種情況下，封包採用的路徑是前往路由器B。

4. 源自10.240.18.2和10.240.18.3的資料包都到達路由器B，後者又有兩個到達10.240.20.1的等價路徑。它再次通過雜湊演算法運行這些源對和目的對集，產生的結果與路由器A上的雜湊演算法產生的結果相同。這表示兩個封包流都經過一個路徑（在本例中為通往路由器E的連結）。通往路由器D的鏈路沒有收到任何流量。

5. 在路由器E上收到來源為10.240.18.2和10.240.18.3的流量後，會沿通往路由器F的路徑交換該流量，然後交換至其最終目的地。

如何避免CEF極化

1. 在網路的每個層的預設（SIP和DIP）和full（SIP + DIP + Layer4埠）雜湊輸入配置之間替換。

Catalyst 6500為雜湊演算法提供以下幾種選擇：

- 預設 — 使用源和目的IP地址，為每個鏈路賦予不同的權重，以防止極化。

- 簡單 — 使用源IP地址和目的IP地址，每條鏈路的權重相等。

- 完全 — 使用源和目標IP地址和第4層埠號，權重不等。

- 完全簡單 — 使用源IP地址和目的IP地址以及第4層埠號，並為每條鏈路賦予相同的權重。

6500(config)#mls ip cef load-sharing ?

full    load balancing algorithm to include L4 ports

simple  load balancing algorithm recommended for a single-stage CEF router

6500(config)#mls ip cef load-sharing full ?

simple  load balancing algorithm recommended for a single-stage CEF router

<cr>
目前，沒有命令可用於檢查正在使用的負載共用演算法。要瞭解正在使用哪種方法，最好的方法是使用show running-config命令檢查當前配置。如果不存在以mls ip cef load-sharing開頭的配置，則使用預設源和目標不等權演算法。

附註：1)Catalyst 6500不支援每個封包負載共用。2)full選項在雜湊中不包括通用ID。如果在多層拓撲的每一層都使用它，則極化是可能的。建議對此命令使用simple選項，以便實現更好的負載分擔和使用更少的硬體鄰接。

2. 在網路的每一層中的偶數或奇數的ECMP鏈路之間交替使用。

CEF負載均衡不依賴於協定路由如何插入到路由表中。因此，OSPF路由表現出與EIGRP相同的行為。在分層網路中，有多台路由器在一行中執行負載共用，它們都使用相同的演算法執行負載共用。

預設情況下，雜湊演算法以這種方式進行負載均衡：

1: 1

2: 7-8

3: 1-1-1

4: 1-1-1-2

5: 1-1-1-1-1

6: 1-2-2-2-2-2

7: 1-1-1-1-1-1-1

8: 1-1-1-2-2-2-2-2
冒號前的數字表示等價路徑的數目。冒號後的數字表示每路徑轉發流量的比例。

這意味著：

- 對於兩條等價路徑，負載共用為46.666%-53.333%，而不是50%-50%。

- 對於三個等價路徑，負載共用為33.33%-33.33%-33.33%（如預期的那樣）。

- 對於四條等價路徑，負載共用是20%-20%-20%-40%，而不是25%-25%-25%-25%。

這說明，當ECMP鏈路數偶數時，流量不會進行負載均衡

12.2(17d)SXB2中引入的抗極化權重是禁用CEF偏振的一種方法。

若要啟用反極化權重，請輸入以下命令：

6500(config)# mls ip cef load-sharing full simple
如果存在兩條等價路徑並且兩條路徑需要同等使用，請使用此命令。新增關鍵字simple後，硬體可使用與Cisco IOS® CEF鄰接相同的鄰接數。如果沒有simple關鍵字，硬體將安裝額外的鄰接條目以避免平台極化。

3. Cisco IOS引入了稱為unique-ID/universal-ID的概念，可幫助避免CEF極化。此演演算法稱為通用演演算法（目前Cisco IOS版本中的預設值），會將32位路由器特定值新增到雜湊函式中（稱為通用ID — 這是交換器開機時隨機產生的值，可以手動控制）。 這會將每台路由器上的雜湊函式植入唯一的ID，從而確保沿路徑的不同路由器上的相同源/目標對雜湊值不同。此過程提供了更好的網路範圍負載共用，並避免了極化問題。由於硬體限制，這個唯一的 — ID概念不適用於偶數個等價路徑，但是對於奇數個等價路徑它非常適用。為了克服此問題，Cisco IOS在等價路徑為偶數時向硬體鄰接表新增一個鏈路，以便讓系統相信等價鏈路為奇數。

要為通用ID配置自定義值，請使用：

6500(config)ip cef load-sharing algorithm universal