内容

概要

前提条件

要件

使用するコンポーネント

表記法

背景説明

ロード バランシングとは

CEF の前に：複数のパスまたはルートの収集

CEF ロード シェアリングの設定

CEF ロード バランシングの内部メカニズム

CEF ロード バランシングの検証

リンク変更後のロード シェアリング

ロード シェアリング情報が削除されるまでの有効期限

既知の問題

ハードウェアによる CEF ロード バランシングのサポート

関連情報

関連するシスコ サポート コミュニティ ディスカッション

概要

このドキュメントでは、Cisco Express Forwarding を使用しているときに、Cisco IOS ソフトウェアが複数のパラレル リンク間のレイヤ 3 ロード バランシングを実装する方法について詳しく説明します。

前提条件

要件

このドキュメントの内容は、シスコ エクスプレス フォワーディングの 2 つのデータ構造について理解していることが前提となっています。

- 転送情報ベース(FIB)

- 隣接テーブル

Cisco Express Forwardingの動作の概要については、このドキュメントの「関連情報」セクションを参照してください。

使用するコンポーネント

このドキュメントの内容は、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。

このマニュアルの情報は、特定のラボ環境に置かれたデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、初期（デフォルト）設定の状態から起動しています。実稼動中のネットワークで作業をしている場合、実際にコマンドを使用する前に、その潜在的な影響について理解しておく必要があります。

表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。

背景説明

Cisco IOS では、ルータを介してパケットを転送するために、内部メカニズムとして IP スイッチングを使用します。使用するメカニズムには、プロセススイッチング、ファースト スイッチング、そして CEF があります。多くのパケットをスイッチするために、3 つのメカニズムのいずれを使用するかによって、システム全体のパフォーマンスとロード バランシングに与える影響が決まります。

IP スイッチングのメカニズムでは、パケット単位および宛先単位という 2 つの一般的なモードをサポートしています。次のテーブルでは、両方のモードについて、利点と不都合の概略を示します。

宛先単位

パケット単位

IP スイッチングのメカニズム

宛先単位でのファースト スイッチングおよび CEF

パケット単位でのプロセス スイッチングおよび CEF

長所

ファースト スイッチングの場合、複数のパスが有効な場合でも、与えられた宛先に対して同一のパスを使用することが保証されます。CEF スイッチングの場合、複数のパスが有効な場合でも、与えられた発信元ホストと宛先ホストのペアに対して同一のパスを使用することが保証されます。異なるペアに対するトラフィックは、別のパスを使用する傾向があります。

パケット単位のロード バランシングによるパスの使用では、ルータが個々のホストやユーザのセッションを考慮することなく連続してデータ パケットを送信できるため、好ましいものです。各パケットが宛先に到達するためのパスの決定には、ラウンドロビン方式が使用されます。

デメリット

ファースト スイッチングの場合、宛先単位のスイッチングでは、ある宛先へのパケットが毎回同じパスを辿るため、不均等なロード シェアリングが発生することがあります。CEF スイッチングでは、発信元と宛先のペアの数が少ない場合に、不均等な分配が生じることがあります。宛先単位のロードバランシングは、トラフィックの統計的な分散に依存します。発信元と宛先のペアの数が増加した場合は、ロード シェアリングが効果的です。

与えられた発信元ホストと宛先ホストのペアに対するパケットは、異なるパスを取る場合があり、パケットの並び替えが発生することがあります。この方法は、順序どおりの配送が要求される Voice over IP（VoIP）などのフローには推奨されません。

ロード バランシングとは

ロード バランシングとは、ルータが複数のパスを経由してパケットを宛先の IP アドレス（IP プレフィクスとも呼ばれる）に送信する機能を意味します。

ロード バランシングについて説明する前に、次の用語を定義しておきます。

ターム

定義

プレフィックス

192.16.10.0/24などの宛先IPネットワークについて説明します。Cisco IOSは、ダイナミックルーティングプロトコルを使用したメッセージ交換またはスタティックルートの手動設定によって得られた情報を使用して、宛先IPプレフィックスをルーティングテーブルに追加します。

パス

ある宛先プレフィクスへ到達するための有効な経路を意味します。Cisco IOS では、各パスにコストを割り当てています。宛先プレフィクスへのアクティブな一連のパスは、コストが均等な場合と不均等な場合があります。

セッション

2 つの IP ノード間での単方向のコミュニケーション フローを意味します。あるセッションにあるパケットは、すべて同一の発信元と宛先の IP アドレスを使用します。

その他の情報については、「ロード バランシングの機能の仕方」を参照してください。

CEF の前に：複数のパスまたはルートの収集

CEF では、IP ルーティング テーブルにあるパス情報を使用して、複数のリンクの間でトラフィックのバランスを取ります。このため、適切な CEF ロード バランシングの確認は、IP ルーティング テーブルの内容の確認から始まります。

次のトポロジでは、ルータ A とルータ B の 2 つのルータが、high-level data link control（HDLC; 高レベル データリンク制御）のカプセル化を使用して、3 つのシリアル インターフェイスでバックツーバックに接続されています。

ルータ A

ルータ B

interface Ethernet 0

ip address  192.168.20.1 255.255.255.0

!

interface Serial1

ip address 10.10.10.1 255.255.255.0

!

interface Serial2

ip address 20.20.20.1 255.255.255.0

!

interface Serial3

ip address 30.30.30.1 255.255.255.0

ip ospf cost 100

!

router ospf 1

network 10.10.10.0 0.0.0.255 area 0

network 20.20.20.0 0.0.0.255 area 0

network 30.30.30.0 0.0.0.255 area 0

network 192.168.20.0 0.0.0.255 area 0

interface Serial1

ip address 10.10.10.2 255.255.255.0

clockrate 2000000

!

interface Serial2

ip address 20.20.20.2 255.255.255.0

clockrate 148000

!

interface Serial3

ip address 30.30.30.2 255.255.255.0

ip ospf cost 100

clockrate 148000

router ospf 1

network 10.10.10.0 0.0.0.255 area 0

network 20.20.20.0 0.0.0.255 area 0

network 30.30.30.0 0.0.0.255 area 0

maximum-paths 1

ルータBが、ルータAのイーサネットインターフェイスIPネットワーク192.168.20.0に到達するための1つ以上のパスを選択する方法を見てみましょう。

- デフォルトでは、Open Shortest Path First（OSPF）により、宛先への単一の最適なパスがサポートされています。このシナリオでは、Router B は 1 に等しい最大パスで設定されています。したがって、Router B は、それが最初にどれを受信したかに基づいて、可能性のある等価パスの中から 1 つのパスのみを選択します。ルータ B は、シリアル 2 を 192.168.20.0 ネットワークへの単一の経路として選択することから開始します。show ip cef コマンドおよび show ip route コマンドを使用して、現在のパスの設定を確認します。

RouterB#show ip cef  192.168.20.0

192.168.20.0/24, version 59, cached adjacency to Serial2

0 packets, 0 bytes

via 20.20.20.1, Serial2, 0 dependencies

next hop 20.20.20.1, Serial2

valid cached adjacency

RouterB#show ip route  192.168.20.0

Routing entry for  192.168.20.0/24

Known via "ospf 1", distance 110, metric 74, type intra area

Redistributing via ospf 1

Last update from 20.20.20.1 on Serial2, 00:03:58 ago

Routing Descriptor Blocks:

* 20.20.20.1, from 204.204.204.1, 00:03:58 ago, via Serial2

Route metric is 74, traffic share count is 1

- OSPF に maximum-paths コマンドを使用して、ルーティング テーブルに複数のパスを許可します。OSPF では、等コストロード バランシングだけを許しています。不等コストロード シェアリングを設定するには、Interior Gateway Protocol（IGP; 内部ゲートウェイ プロトコル）として、Enhanced Interior Gateway Routing Protocol/Interior Gateway Routing Protocol（EIGRP/IGRP）を設定します。 IGRPおよびEIGRPにおける不等コストパスの負荷バランシング（バリアンス）の仕組みを参照してください。を参照してください。

RouterB(config)#router ospf 1

RouterB(config-router)#maximum-paths ?

<1-6>  Number of paths

RouterB(config-router)#maximum-paths 3

- show ip routeコマンドを使用して、ルーティングテーブルに192.168.20.0への2つのパスが含まれていることを確認します。

RouterB#show ip route  192.168.20.0

Routing entry for  192.168.20.0/24

Known via "ospf 1", distance 110, metric 74, type intra area

Redistributing via ospf 1

Last update from 10.10.10.1 on Serial1, 00:00:11 ago

Routing Descriptor Blocks:

* 20.20.20.1, from 204.204.204.1, 00:00:11 ago, via Serial2

Route metric is 74, traffic share count is 1

10.10.10.1, from 204.204.204.1, 00:00:11 ago, via Serial1

Route metric is 74, traffic share count is 1

!--- The route metric is 74 for both paths.

- 3 つの等コストのパスをサポートするように OSPF を設定しましたが、show ip route の出力には、アクティブなパスが 2 つしか表示されていません。この理由を調べるために、show ip ospf interface コマンドを使用します。シリアル 3 は、シリアル 1 とシリアル 2 よりも高いコストが与えられているため、不均等になっています。

RouterB#show ip ospf interface s1

Serial1 is up, line protocol is up

Internet Address 10.10.10.4/24, Area 0

Process ID 1, Router ID 100.100.100.1, Network Type POINT_TO_POINT, Cost: 64

RouterB#show ip ospf interface s2

Serial2 is up, line protocol is up

Internet Address 20.20.20.2/24, Area 0

Process ID 1, Router ID 100.100.100.1, Network Type POINT_TO_POINT, Cost: 64

RouterB#show ip ospf interface s3

Serial3 is up, line protocol is up

Internet Address 30.30.30.2/24, Area 0

Process ID 1, Router ID 100.100.100.1, Network Type POINT_TO_POINT, Cost: 100

- show run コマンドを使用して、Serial 3 が ip ospf cost 100 コマンドで設定されているかどうかを確認します。no ip ospf cost 100 サブインターフェイス コマンドを使用して、シリアル 3 を設定から削除し、すべて 3 つのシリアル リンクのコストを均等にします。

RouterB#show run interface s3

Building configuration...

Current configuration:

!

interface Serial3

ip address 30.30.30.2 255.255.255.0

no ip directed-broadcast

ip ospf cost 100

ip ospf interface-retry 0

- show ip routeコマンドは、192.168.20.0ネットワークへの3つの等コストパスを表示するようになりました。

RouterB#show ip route  192.168.20.0

Routing entry for  192.168.20.0/24

Known via "ospf 1", distance 110, metric 74, type intra area

Redistributing via ospf 1

Last update from 10.10.10.1 on Serial1, 00:00:01 ago

Routing Descriptor Blocks:

* 20.20.20.1, from 204.204.204.1, 00:00:01 ago, via Serial2

Route metric is 74, traffic share count is 1

30.30.30.1, from 204.204.204.1, 00:00:01 ago, via Serial3

Route metric is 74, traffic share count is 1

10.10.10.1, from 204.204.204.1, 00:00:01 ago, via Serial1

Route metric is 74, traffic share count is

次に、CEF ロード バランシングで、パケットを転送するためにルーティング テーブルの情報が使用される方法を見てみましょう。

CEF ロード シェアリングの設定

CEF では、ロードシェア テーブルを使用してロード バランシングを行っています。シスコルータでの他のすべてのロード バランシングと同様に、ロード バランシングの決定は発信インターフェイスで行われます。他のスイッチング方法と異なる点は、CEF では、パスの発信元と宛先の両方のアドレスに基づいてパスが追跡されることです。簡単に言うと、パスは IP セッションであり、各セッションは論理的に一意な発信元と宛先のアドレスのペアであると言えます。

ロード バランシングが行われる方法を理解するには、まずテーブルが関連付けられている方法を理解する必要があります。CEF テーブルでは、16 のハッシュ バケット（ロード シェア テーブル）をポイントします。これらのハッシュ バケットは、パラレル パスのための隣接関係テーブルをポイントしています。詳細は、「CEF ロード バランシングの内容」を参照してください。スイッチされる各パケットは、発信元アドレスと宛先アドレスのペアに分けられ、ロードシェア テーブルと照合されます。

注：Cisco Express Forwardingスイッチングには、主に宛先単位とパケット単位の2種類があります。1 台のルータで両方のタイプが使用されている場合は、それぞれのタイプごとに固有のロードシェア テーブルが保持されます。

宛先単位のロード バランシングでは、ルータは複数のパスを使用してロード シェアリングを行うことができます。宛先単位のロード バランシングは、CEF を有効にした際にデフォルトで有効になります。これは、ほとんどの状況で選択されるロード バランシング方法です。宛先単位のロード バランシングは、統計的なトラフィック分散に依存するため、発信元と宛先のペアの数が増加した場合は、ロード シェアリングが効果的です。

パケット単位のロード バランシングでは、ルータは、個々のホストまたはユーザ セッションを考慮することなく、連続したデータ パケットをパスに送信できます。各パケットが宛先に到達するためのパスの決定には、ラウンドロビン方式が使用されます。パケット単位のロード バランシングでは、複数リンク上でのバランシングが確実に行われます。パケット単位のロード バランシングによるパスの利用はよいものですが、与えられた発信元と宛先のホストのペアに向けたパケットに異なるパスが選択され、これによりパケットの並び替えが発生する場合があります。このため、パケット単位のロード バランシングは、順序どおりにパケットが宛先に到達することに依存する、VOIP などのデータ トラフィックには適しません。パケット単位のロード バランシングは、発信元と宛先の単一のペアに対するパスが過負荷にならないように、使用できます。

パケット単位と宛先単位の方法を変更するには、ip load-sharing コマンドを使用します。

7200-1.3(config)#interface fast 0/0

7200-1.3(config-if)#ip load-sharing ?

per-destination  Deterministic distribution

per-packet       Random distribution

7200-1.3(config-if)#ip load-sharing per-packet

変更を確認するには、show cef interface コマンドを使用します。

7200-1.3#show cef interface fast 0/0

FastEthernet0/0 is up (if_number 3)

Corresponding hwidb fast_if_number 3

Corresponding hwidb firstsw->if_number 3

Internet address is 172.16.81.13/24

ICMP redirects are always sent

Per packet load-sharing is enabled

IP unicast RPF check is disabled

Inbound access list is not set

Outbound access list is not set

IP policy routing is disabled

Hardware idb is FastEthernet0/0

Fast switching type 1, interface type 18

IP CEF switching enabled

IP Feature Fast switching turbo vector

IP Feature CEF switching turbo vector

Input fast flags 0x0, Output fast flags 0x0

ifindex 1(1)

Slot 0 Slot unit 0 VC -1

Transmit limit accumulator 0x0 (0x0)

IP MTU 1500

CEF ロード バランシングの内部メカニズム

CEF ロード バランシングを支えている、内部メカニズムを詳しく見てみましょう。

- 各セッション（上記の表を参照）がアクティブなパスに割り当てられます。

- セッションのパスへの割り当てが行われます。これには、発信元と宛先の IP アドレスを取得するハッシュ機能に加え、最近の Cisco IOS のリリースではエンドツーエンドのパスの割り当てを無作為に行う一意のハッシュ ID が使用されます。

- アクティブなパスが、16 のハッシュ バケットのうちのいくつかに内部的に割り当てられます。パスのバケットへの割り当ては、ロード バランシングのタイプとアクティブなパスの数によって変わります。

- ハッシュ機能を使用した結果は、有効なバケットの 1 つ、つまりセッションに使用するパスを選択するために使用されます。

- ルータによって転送されるすべてのセッションに対して、それぞれのアクティブ パスが同じ番号のセッションを搬送します。

これらの CEF の内容の例を見てみましょう。

1. 宛先プレフィクスに対するアクティブ パスの数を 2 つに減らすには、maximum-paths コマンドを使用します。

RouterB(config)#router ospf 1

RouterB(config-router)#maximum-paths 2

2. show ip cef {プレフィクス} internal コマンドを使用して、パスのバケットへの割り当てを表示します。

RouterB#show ip cef  192.168.20.0 internal

192.168.20.0/24, version 66, per-destination sharing

0 packets, 0 bytes

via 20.20.20.1, Serial2, 0 dependencies

traffic share 1

next hop 20.20.20.1, Serial2

valid adjacency

via 30.30.30.1, Serial3, 0 dependencies

traffic share 1

next hop 30.30.30.1, Serial3

valid adjacency

0 packets, 0 bytes switched through the prefix

Load distribution: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 (refcount 1)

!--- The load distribution line summarizes how each path is !--- assigned to the hash buckets.

Hash  OK  Interface                 Address         Packets

1     Y   Serial2                   point2point           0

2     Y   Serial3                   point2point           0

3     Y   Serial2                   point2point           0

4     Y   Serial3                   point2point           0

5     Y   Serial2                   point2point           0

6     Y   Serial3                   point2point           0

7     Y   Serial2                   point2point           0

8     Y   Serial3                   point2point           0

9     Y   Serial2                   point2point           0

10    Y   Serial3                   point2point           0

11    Y   Serial2                   point2point           0

12    Y   Serial3                   point2point           0

13    Y   Serial2                   point2point           0

14    Y   Serial3                   point2point           0

15    Y   Serial2                   point2point           0

16    Y   Serial3                   point2point

16 のハッシュ バケットは、ロード バランシングのタイプとアクティブ パスの数によって設定されます。簡単なケースは、パスの数が偶数の場合です。16 個のバケットは、アクティブ パスで均等に埋められます。16 の数がアクティブ パスの数によって割り切れない場合、最後の方の残りのバケットは無効になります。次の表では、ハッシュ バケットが 2 つまたは 3 つのアクティブ パスを探す方法を示します。

バケット/パス

0

1

0

3

4

5

6

7

8

9 ミリ秒

10

11

12

13

14

15

0

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

3

0

1

0

0

1

0

0

1

0

0

1

0

0

1

0

X

次の例では、宛先へのパスが 3 つあります。CEF がハッシュ バケット 16 を削除し、3 つのシリアル リンクがハッシュ バケットの 1 から 15 まで均等に割り当てられていることに注目してください。

RouterB#show ip cef  192.168.20.0 interface

192.168.20.0/24, version 64, per-destination sharing

0 packets, 0 bytes

via 20.20.20.1, Serial2, 0 dependencies

traffic share 1

next hop 20.20.20.1, Serial2

valid adjacency

via 30.30.30.1, Serial3, 0 dependencies

traffic share 1

next hop 30.30.30.1, Serial3

valid adjacency

via 10.10.10.1, Serial1, 0 dependencies

traffic share 1

next hop 10.10.10.1, Serial1

valid adjacency

0 packets, 0 bytes switched through the prefix

Load distribution: 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 (refcount 1)

!--- The active paths are assigned to hash buckets in a !--- round-robin pattern.

Hash  OK  Interface                 Address         Packets

1     Y   Serial2                   point2point           0

2     Y   Serial3                   point2point           0

3     Y   Serial1                   point2point           0

4     Y   Serial2                   point2point           0

5     Y   Serial3                   point2point           0

6     Y   Serial1                   point2point           0

7     Y   Serial2                   point2point           0

8     Y   Serial3                   point2point           0

9     Y   Serial1                   point2point           0

10    Y   Serial2                   point2point           0

11    Y   Serial3                   point2point           0

12    Y   Serial1                   point2point           0

13    Y   Serial2                   point2point           0

14    Y   Serial3                   point2point           0

15    Y   Serial1                   point2point           0

!--- Hash bucket 16 has been removed.

注：宛先に対しては1つのパスを選択しますが、Cisco Express Forwardingの宛先単位およびファーストスイッチングのメカニズムでは、そのパスの選択方法が異なります。CEF では、発信元と宛先の両方の IP アドレスが考慮されますが、ファースト スイッチングでは宛先の IP アドレスしか考慮されません。

CEF ロード バランシングの検証

ルータ上での CEF ロード バランシングを検証するには、次のステップに従います。

1. CEF がルータ上でグローバルに有効になっていることを確認します。

S3-4K-2#show ip cef

%CEF not running

Prefix                      Next Hop                     Interface

!--- This output shows Cisco Express Forwarding is not enabled. !--- Use ip cef command in global configuration to enable it.

2. 特定の発信インターフェイスで、パケット単位または宛先単位のスイッチングが有効になっていることを確認します。デフォルトは宛先単位です。

RouterA#show cef interface s1

Serial1 is up (if_number 3)

Internet address is 10.10.10.1/24

ICMP redirects are always sent

Per packet loadbalancing is disabled

IP unicast RPF check is disabled

Inbound access list is not set

Outbound access list is not set

Interface is marked as point to point interface

Hardware idb is Serial1

Fast switching type 4, interface type 40

IP CEF switching enabled

!--- Cisco Express Forwarding is enabled on the interface.

IP CEF Fast switching turbo vector

Input fast flags 0x0, Output fast flags 0x0

ifindex 5(5)

Slot 0 Slot unit 1 VC -1

Transmit limit accumulator 0x0 (0x0)

IP MTU 1500

3. ルーティング テーブルと CEF フォワーディング テーブルに、すべてのパラレル パスが含まれていることを、show ip route コマンドを使って確認します。

RouterB#show ip route 192.168.20.0

Routing entry for 192.168.20.0/32, 1 known subnets

O       192.168.20.1 [110/65] via 20.20.20.1, 00:06:54, Serial1

[110/65] via 10.10.10.1, 00:06:54, Serial2

[110/65] via 30.30.30.1, 00:06:54, Serial3

4. show ip cef コマンドを使用して、CEF FIB を確認します。

RouterB#show ip cef 192.168.20.0

192.168.20.0/24, version 18, per-destination sharing

0 packets, 0 bytes

via 30.30.30.1, Serial3,   0 dependencies

traffic share 1

next hop 30.30.30.1, Serial3

valid adjacency

via 20.20.20.1, Serial2, 0 dependencies

traffic share 1

next hop 20.20.20.1, Serial2

valid adjacency

via 10.10.10.1, Serial1, 0 dependencies

traffic share 1

next hop 10.10.10.1, Serial1

valid adjacency

0 packets, 0 bytes switched through the prefix

tmstats: external 0 packets, 0 bytes

internal 0 packets, 0 bytes

RouterB#show ip cef 192.168.20.0 internal

192.168.20.0/24, version 18, per-destination sharing

0 packets, 0 bytes

via 30.30.30.1, Serial3, 0 dependencies

traffic share 1

next hop 30.30.30.1, Serial3

valid adjacency

via 20.20.20.1, Serial2, 0 dependencies

traffic share 1

next hop 20.20.20.1, Serial2

valid adjacency

via 10.10.10.1, Serial1, 0 dependencies

traffic share 1

next hop 10.10.10.1, Serial1

valid adjacency

0 packets, 0 bytes switched through the prefix

tmstats: external 0 packets, 0 bytes

internal 0 packets, 0 bytes

Load distribution: 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 (refcount 1)

Hash  OK  Interface                 Address         Packets

1     Y   Serial3                   point2point           0

2     Y   Serial2                   point2point           0

3     Y   Serial1                   point2point           0

4     Y   Serial3                   point2point           0

5     Y   Serial2                   point2point           0

6     Y   Serial1                   point2point           0

7     Y   Serial3                   point2point           0

8     Y   Serial2                   point2point           0

9     Y   Serial1                   point2point           0

10    Y   Serial3                   point2point           0

11    Y   Serial2                   point2point           0

12    Y   Serial1                   point2point           0

13    Y   Serial3                   point2point           0

14    Y   Serial2                   point2point           0

15    Y   Serial1                   point2point           0

注：上記のロードシェアテーブルは、負荷分散0 1 2 0 1 2(1)を示しています。.各ルートのトラフィック共有は1です。このことは、3 つの等コストのルート間で、等コストの宛先単位ロード シェアリングが行われることを示します。

5. シスコ エクスプレス フォワーディングの隣接関係を確認します。

RouterB#show adjacency detail

Protocol Interface                 Address

IP       Serial1                   point2point(11)

0 packets, 0 bytes

0F000800

CEF   expires: 00:02:31

refresh: 00:00:31

IP       Serial2                   point2point(11)

0 packets, 0 bytes

0F000800

CEF   expires: 00:02:31

refresh: 00:00:31

IP       Serial3                   point2point(11)

0 packets, 0 bytes

0F000800

CEF   expires: 00:02:31

refresh: 00:00:31

6. 予想される CEF ロードバランシング メカニズムが、すべての発信インターフェイスで設定されていることを確認します。

RouterB#show ip cef  192.168.20.0

192.168.20.0/24, version 89, per-destination sharing

0 packets, 0 bytes

via 10.10.10.1, Serial1, 0 dependencies

traffic share 1

next hop 10.10.10.1, Serial1

valid adjacency

[output omitted]

7. ハッシュ バケットのアカウンティングを有効にし、ネットワークでの CEF パターンが分かりやすくなるように統計情報を収集します。たとえば、宛先に対するスイッチされたパケットの数やバイト数、あるいは宛先を経由してスイッチされたパケットの数などの情報を収集したい場合があります。次のコマンドを使用します。

router(config)# ip cef accounting load-balance-hash

Packet フィールドの下の値を見て、パケットのフローを確認します。

RouterB#show ip cef 192.168.20.0 internal

[...]

Load distribution: 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 (refcount 1)

Hash  OK  Interface                 Address         Packets

1     Y   Serial                    point2point           0

2     Y   Serial2                   point2point           0

3     Y   Serial1                   point2point           0

4     Y   Serial3                   point2point           0

5     Y   Serial2                   point2point          35

6     Y   Serial1                   point2point           0

7     Y   Serial3                   point2point           0

8     Y   Serial2                   point2point          60

9     Y   Serial1                   point2point           0

10    Y   Serial3                   point2point           0

11    Y   Serial2                   point2point           0

12    Y   Serial1                   point2point           0

13    Y   Serial3                   point2point           0

14    Y   Serial2                   point2point          30

15    Y   Serial1                   point2point           0

125 のパケットがシリアル 2 を経由して流れたことが分かります。トラフィックの生成に ping を使用する場合、ping パケットが CEF スイッチ ルータを通過する必要があることに注意してください。つまり、ping パケットはある CEF スイッチ インターフェイスから入力され、CEF スイッチされて、他の CEF スイッチ インターフェイスから送信される必要があります。

注：送信元と宛先のペアの数が増えると、宛先単位のロードシェアリングが効果的になります。

8. プレフィクスにトラフィックを送信している間に、show interface コマンドの出力を得ます。「txload」と「rxload」の値を調べます（インターフェイスによっては、「load」の値を 1 つだけ表示しているものもあります。これは、送信と受信の両方が考慮されています）。 パケット単位のロード バランシングではパケットの数を均等に分配しますが、パラレル リンクではパケットのサイズによってわずかに不均等な割合トが見られる場合があります。

Serial1/0:0 is up, line protocol is up

reliability 255/255, txload 10/255, rxload 3/255

Serial1/1:0 is up, line protocol is up

reliability 255/255, txload 18/255, rxload 3/255

9. CEF 宛先単位ロード バランシングでは、次のコマンドを使用して、セッションが割り当てられるパスを決めることができます。キーワードとして internal を追加し、使用されているハッシュ バケットを表示します。

show ip cef exact-route {source-ip-address} {dest-ip-address} [internal]

RouterB# show ip cef exact-route 50.50.50.2 192.168.20.1  internal

50.50.50.2      -> 192.168.20.1   : Serial9/0 (next hop 20.20.20.1)

Bucket 4 from 15, total 3 paths

RouterB# show ip cef exact-route 5.5.5.1 192.168.20.1  internal

5.5.5.1         ->192.168.20.1   : Serial9/0 (next hop 20.20.20.1)

Bucket 7 from 15, total 3 paths

RouterB# show ip cef exact-route 6.6.6.1 192.168.20.1  internal

6.6.6.1         -> 192.168.20.1   : Serial9/0 (next hop 20.20.20.1)

Bucket 7 from 15, total 3 paths

RouterB# show ip cef exact-route 8.8.8.1 192.168.20.1  internal

8.8.8.1         -> 192.168.20.1   : Serial9/0 (next hop 20.20.20.1)

Bucket 13 from 15, total 3 paths

10. 出力された内容が不均等である場合は、次のことを考慮してください。

- 一意の発信元と宛先アドレスのペア、またはパラレル リンクを通過するセッションの数。

- 各セッションのパケットの数とサイズ。1 つのセッションに膨大な数のパケットがありませんか。宛先単位のロード バランシングは統計的なトラフィック分散に依存し、発信元と宛先のペアの数が増加した場合にはロード シェアリングが効果的です。

リンク変更後のロード シェアリング

ルーティング テーブルの変更によって、宛先へのアクティブ パスの数が調整された場合、シスコ エクスプレス フォワーディングでは、show ip cef {プレフィクス} internal コマンドの出力にあるロード バランス構造をアップデートします。次に CEF では、新しく着信したパケットを、隣接関係や対応するハッシュ バケットと照合します。選択されたバケットは、前に使用されたものと同じ場合もあれば、違う場合もあります。

次のステップでは、宛先プレフィクスへのアクティブ パスの数が変更された後に、CEF ロード バランシング情報が更新される方法について説明します。

1. 宛先プレフィクスが 2 つのパスを経由して到達可能であると仮定します。パス 1 は非アクティブですが、パス 2 はアクティブで、すべてのトラフィックを搬送しています。

2. パス 1 が再び使用可能になると、IP ルーティング再収束プロセスが開始されます。

3. この時点で、CEF によって両方のパスについて負荷のバランスが取られるため、パス 2 を経由する既存のフローは保持されません。これにより、パス 1は使用されないままになります。つまり、CEF では、あるセッションへのパケットを有効なパス上に転送できることと、選択されているハッシュ バケットによっては、あるフローについて新しいパスを選択できることについては考慮されません。

ロード シェアリング情報が削除されるまでの有効期限

ルーティング テーブル内で変更が行われた後、CEF では、アクティブ パスをハッシュ バケットに割り当てているロード バランシング構造を削除し、再構築します。再構築プロセスの間にはパケットが失われる場合もあります。show ip cef {プレフィクス} internal コマンドを使用すると、ロード シェアリング情報が削除されるまでの有効期限が表示されます。

router#show ip cef 10.10.128.0 int

10.10.128.0/28, version 63, per-destination sharing

0 packets, 0 bytes

via 10.8.0.31, 0 dependencies, recursive

next hop 10.8.2.49, POS0/0/0

valid adjacency

Load sharing information due for deletion

Cisco bug ID CSCdm87127 では、デフォルトルート 0.0.0.0 に対するアクティブ パスの数を変更する際に、失われるパケットの数を最小にするという改善が行われています。とりわけ、CEF では、このルートに対するアクティブ パスの最大数のために、空白の FIB エントリを割り当てています。

既知の問題

CEF ロード バランシングは、4 つのパスの場合には均等になりません。詳細は、CSCdm87756（登録ユーザ専用）を参照してください。

Cisco IOS の 12.0(16)S 以前のバージョンでは、show ip cef exact-route コマンドを入力すると、Cisco 12000 シリーズ インターネット ルータまたは Cisco 7500/RSP シリーズ ルータで Route Processor（RP; ルート プロセッサ）のリロードが生じる場合があります。この状態は、宛先プレフィクスが再帰的であり、ルータでネクスト ホップへのロード シェアリングが行われている場合に発生します。詳細は、この問題を解決している「CSCdt80914」を参照してください。

6500シリーズプラットフォームでは、パケット単位のCEFロードバランシングはサポートされていません。これはハードウェアの制限が原因で、現在のところ宛先ごとのロードバランシングしか可能ではありません。したがって、唯一のオプションは、分散マルチリンクポイントツーポイントプロトコル(dMLPPP)またはレイヤ4フローのロードシェアリングを使用することです。

ハードウェアによる CEF ロード バランシングのサポート

CEF のパケット単位のロード バランシングは、当初はソフトウェア ベースで転送を行うプラットフォームでサポートされていました。このようなプラットフォームには、2600、3600、および 7200 シリーズが含まれます。パケット単位のロード バランシングは、現在はハードウェアでサポートされており、NSE-1 を組み込んだ 7200 シリーズ、7300、および 10000 シリーズで Parallel Express Forwarding（PXF）を使用しています。Catalyst 6000シリーズでは、MSFC2上のCisco IOS Cisco Express Forwarding ip load-sharing per-packet、ip cef accounting per-prefix、およびip cef accounting non-recursiveコマンドは、MSFC2上のソフトウェアでスイッチングされるトラフィックにのみ適用されます。は、PFC2またはDFC搭載スイッチングモジュールでハードウェアレイヤ3でスイッチングされます。詳細は、『スーパバイザ エンジン 2 での IP ユニキャスト レイヤ 3 スイッチングの設定』を参照してください。

注：NSE-100プロセッサカードを搭載したCisco 7300ルータでは、PXFでのパケット単位のロードバランシングはサポートされていません。PXF でサポートされるのは宛先単位のロード バランシングだけです。ただし、ルータの CLI で設定コマンドが使用可能であったため、サポート対象であるかのような誤解を招いていました。これは修正済みで、Cisco bug ID CSCdx63389 に記録されています。

12000 シリーズでは、すべてのレイヤ 3 フォワーディングエンジン上でパケット単位のロード バランシングが行えます。ただし、エンジン 3 と 4 は除きます。各ラインカードは転送の決定を独立して行います。各 IP フローの実際のルートを表示するには、ハードウェアベースの CEF テーブルを使用しているラインカードの、exec slot X show ip hardware-cef exact-route <発信元> <宛先> コマンドを使用します。

関連情報

- シスコ エクスプレス フォワーディング

- Cisco Express Forwarding によるロード バランシング

- IPルーティングサポート

- テクニカル サポートとドキュメント – Cisco Systems