概要
このドキュメントでは、Cisco Express Forwarding(CEF)の偏波が原因で、宛先ネットワークへの冗長パスが最適に使用されない状況が引き起こされる仕組みについて説明します。CEF の極性はハッシュ アルゴリズムが特定のパスを選択し、冗長パスがまったく使用されていない場合に起こります。
前提条件
要件
このドキュメントに特有の要件はありません。
使用するコンポーネント
このドキュメントの情報は、Supervisor Engine 720 が稼働する Cisco Catalyst 6500 スイッチに基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期(デフォルト)設定の状態から起動しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
背景説明
CEF は、Enhanced Interior Gateway Routing Protocol(EIGRP)や Open Shortest Path First (OSPF)などのルーティング プロトコルによって取り込まれたルーティング テーブルに基づいてパケットを切り替えます。CEF は、ルーティング テーブル(RIB)が計算されるとロードバランシングを実行します。階層型ネットワーク設計では、多くのレイヤ 3(L3)等コスト冗長パスが存在することがあります。トラフィックがディストリビューションおよびコアを介してアクセス レイヤからデータセンターへ流れる場合に、このトポロジを検討してください。
ルータ 1(R1)(左上)からネットワーク 10.1.1.1 に到達するために、2 つの等コスト パス(L1 および L2)があると仮定します。 2 つのリンクのどちらを使用するかは、ハッシュ アルゴリズムによって判断されます。デフォルトでは、送信元 IP(SIP)と宛先 IP(DIP)は、ハッシュ アルゴリズムでパラメータとして使用されます。
ここでは、ハッシュ アルゴリズムの動作について説明します。
パスが 2 つしかない場合、スイッチまたはルータは SIP および DIP の下位ビット(2 つのリンクのいずれかを選択する必要がある場合は 1 ビット、3 ~ 4 つのリンクの場合は 2 ビットなど)で排他的論理和(XOR)演算を実行します。同じ SIP と DIP の XOR 演算を実行すると、常にパケットで同じリンクが使用されます。
次に、パケットがディストリビューション レイヤに渡されます。そこでは、同じハッシュ アルゴリズムが同じハッシュ入力とともに使用され、すべてのフローに対して 1 つのリンクが選択されます。他のリンクは利用されません。このプロセスは CEF の極性(同じハッシュ アルゴリズムと同じハッシュ入力が使用され、その結果すべてのフローで単一の等コスト マルチパス(ECMP)リンクが使用される)と呼ばれます。
次の例で、このプロセスについて詳しく説明します。
- 送信元を 10.240.18.1、宛先を 10.240.20.1 とするトラフィックは、ルータ A でネットワークに入り、CEF で切り替えられます。10.240.20.0/24 ネットワークへの等コストパスが 2 つあるため、パケットの送信元アドレスと宛先アドレスがハッシュ アルゴリズムに使用され、その結果、宛先に到達するために特定のパスが使用されます。この例で、パケットが辿るパスはルータ C に向かっています。そこから、パケットはルータ F に移動し、最終的な宛先に到達します。
- 送信元を 10.240.18.2、宛先を 10.240.20.1 とするトラフィックも、ルータ A でネットワークに入り、CEF で切り替えられます。10.240.20.0/24 ネットワークへの等コスト パスが 2 つあるため、パケットの送信元アドレスと宛先アドレスがハッシュ アルゴリズムに使用され、CEF が 1 つのパスを選択します。この例で、パケットが辿るパスはルータ B に向かっています。
- 10.240.18.3 を送信元、10.240.20.1 を宛先とするトラフィックは、ルータ A でネットワークに入り、CEF でも切り替えられます。10.240.20.0/24 ネットワークへの等コスト パスが 2 つあるため、パケットの送信元アドレスと宛先アドレスがハッシュ アルゴリズムに使用され、CEF が 1 つのパスを選択します。この例で、パケットが辿るパスはルータ B に向かっています。
- 10.240.18.2と10.240.18.3から送信されたパケットはルータBに到着し、ルータBは10.240.20.1に到達するための2つの等コストパスを持ちます。また、送信元と宛先のペアのセットをハッシュアルゴリズムを使用して実行し、ルータAで生成された結果とは同です。つまり、パケットの両方のストリームは 1 つのパス、この例ではルータ E に向かうリンクに沿って渡されます。ルータ D へのリンクはトラフィックを受信しません。
- 10.240.18.2 と 10.240.18.3 から送信されたトラフィックは、ルータ E で受信された後ルータ F へのパスに切り替えられて、最終的な宛先に到達します。
CEF の極性を回避する方法
- ネットワークの各レイヤで、default(SIP と DIP)と full(SIP + DIP + レイヤ 4 ポート)ハッシュ入力設定を交互に使用します。
Catalyst 6500 では次のハッシュ アルゴリズムを選択できます。
- default:極性を避けるために各リンクに不均等に重み付けして、送信元と宛先の IP アドレスを使用します。
- simple:各リンクに均等に重み付けして、送信元と宛先の IP アドレスを使用します。
- full:不均等に重み付けして、送信元と宛先の IP アドレスとレイヤ 4 ポート番号を使用します。
- full simple:各リンクに均等に重み付けして送信元と宛先の 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 option を使用することをお勧めします。
- ネットワークの各層で偶数と奇数の ECMP リンクを切り換えます。
CEF ロードバランシングは、プロトコルのルートがどのようにルーティング テーブルに挿入されるかに依存しません。したがって、OSPF ルートは EIGRP と同じ動作を示します。1 つの行にロードシェリングを実行する複数のルータが存在する階層型ネットワークでは、すべてのルータが同じアルゴリズムを使用してロードシェアリングを実行します。
デフォルトでは、ハッシュ アルゴリズムによるロード バランシングは次のようになります。
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
コロンの前の数値は、等コスト パスの数を表します。コロンの後の数値は、パスごとに転送されるトラフィックの比率を表します。
したがって、次のようになります。
- 2 つの等コスト パスの場合、ロード シェアリングは 50%-50% ではなく 46.666%-53.333% です。
- 3 つの等コスト パスの場合、ロードシェアリングは(予想どおり)33.33%-33.33%-33.33%です。
- 4 つの等コスト パスの場合、ロード シェアリングは 25%-25%-25%-25% ではなく 20%-20%-20%-40% です。
これは、ECMP リンクの数が偶数である場合、トラフィックはロードバランシングされないことを示します。
CEF の極性を無効にする方法の 1 つは、anti-polarization weight を使用することです。これはバージョン 12.2(17d)SXB2 で導入された機能です。
anti-polarization weight を有効にするには、次のコマンドを入力します。
6500(config)# mls ip cef load-sharing full simple
等コスト パスが 2 つあり、どちらも均等に使用する必要がある場合は、このコマンドを使用します。キーワード simple を追加すると、ハードウェアで Cisco IOS® CEF の隣接関係と同数の隣接関係を使用できるようになります。simple キーワードを使用しない場合、ハードウェアではプラットフォームの極性を避けるために追加の隣接関係エントリがインストールされます。
- Cisco IOS にはユニーク ID/ユニバーサル ID と呼ばれる CEF 極性を回避する概念が導入されています。ユニバーサル アルゴリズム(現在の Cisco IOS バージョンのデフォルト)と呼ばれるこのアルゴリズムは、32 ビットのルータ固有の値をハッシュ関数(この値はユニバーサル ID と呼ばれ、スイッチの起動時にランダムに生成される値であり、手動で制御できます)。 これにより、各ルータのハッシュ関数にユニーク ID がシードされ、同じ送信元/宛先のペアが、そのパス上の他のルータでは異なる値にハッシュされるようになります。このプロセスにより、ネットワーク全体のロードシェアリングが改善され、極性の問題を回避できます。このユニーク ID の概念は、等コスト パスの数が偶数の場合は、ハードウェアの制限により機能しません。ただし、等コスト パスの数が奇数の場合は問題なく機能します。この問題を解決するため、Cisco IOS では、等コスト パスの数が偶数の場合に、ハードウェア隣接関係テーブルにリンクを 1 つ追加し、システムに等コスト リンクの数が奇数であると認識させます。
ユニバーサル ID のカスタマイズされた値を設定するには、次のコマンドを使用します。
6500(config)ip cef load-sharing algorithm universal