(57)【要約】  様々な例示的実施形態は、以下のステップのうちの１つまたは複数を含む方法および関連するネットワークノードに関し、そのステップとは、ネットワークデバイスの第１の入力ラインカードで、メッセージを受信するステップであって、メッセージが宛先アドレスを含む、受信するステップと、メッセージを、第１の入力ラインカードによって、第２の入力ラインカードに、第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されているとの決定に基づいて、送信するステップと、第２の入力ラインカードによって、また宛先アドレスと関連するルーティング情報に基づいて、メッセージが、ネットワークデバイスの第１の出力ラインカードを介して別のネットワークデバイスに転送されるべきであると決定するステップと、メッセージを、第２の入力ラインカードによって、第１の出力ラインカードに、メッセージが転送されるべきであるとの決定に基づいて、送信するステップと、メッセージを、第１の出力ラインカードによって、別のネットワークデバイスに送信するステップとである。
2015529061.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークデバイスの第１の入力ラインカードで、宛先に向けて転送されるべきメッセージを受信するステップ（９１０）であって、メッセージが宛先アドレスを含む、受信するステップと、
第１の入力ラインカードによって、ネットワークデバイスの第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されていると決定するステップ（９２０、９２５、９３０）と、
メッセージを、第１の入力ラインカードによって、第２の入力ラインカードに、第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されているとの決定に基づいて、送信するステップ（９３５）と、
第２の入力ラインカードによって、また宛先アドレスと関連するルーティング情報に基づいて、メッセージが、ネットワークデバイスの第１の出力ラインカードを介して別のネットワークデバイスに転送されるべきであると決定するステップ（９５０、９５５）と、
メッセージを、第２の入力ラインカードによって、第１の出力ラインカードに、メッセージが、ネットワークデバイスの第１の出力ラインカードを介して別のネットワークデバイスに転送されるべきであるとの決定に基づいて、送信するステップ（９７０）と、
メッセージを、第１の出力ラインカードによって、別のネットワークデバイスに送信するステップと
を含む、メッセージを転送するためにネットワークデバイスによって実行される方法。
【請求項２】
第１の出力ラインカードが、第１の入力ラインカードおよび第２の入力ラインカードのうちの１つを備える、請求項１に記載の方法。
【請求項３】
宛先アドレスがコンテンツ名である、請求項１に記載の方法。
【請求項４】
メッセージを第２のラインカードに送信するステップ（９３５）が、メッセージを、第１の入力ラインカードによって、第２の入力ラインカードの入力ポートに送信するステップを含む、請求項１に記載の方法。
【請求項５】
第１の入力ラインカードが、転送情報の第１のセットを格納し、第２の入力ラインカードが、転送情報の第１のセットと異なる転送情報の第２のセットを格納する、請求項１に記載の方法。
【請求項６】
第１の入力ラインカードによって、ネットワークデバイスの第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されていると決定するステップ（９２０、９２５、９３０）が、
ハッシュ化された宛先アドレスを生成するために、少なくとも宛先アドレスの一部に関してハッシュ関数を実行するステップ（９２０）と、
第２の入力ラインカードの割り当てられた識別子が、ハッシュ化された宛先アドレスに対応すると決定するステップ（９２５、９３０）と
を含む、請求項１から５のいずれか一項に記載の方法。
【請求項７】
ルーティング情報を記憶するように構成されたルーティング情報ベース（ＲＩＢ）記憶装置（２１２）と、
複数のラインカード（２２２）と、
プロセッサ（２１４）とを備え、プロセッサ（２１４）が、
第１の識別子を複数のラインカードのうちの第１の入力ラインカード（２２２）と関連付け、第２の識別子を複数のラインカードのうちの第２の入力ラインカード（２２２）と関連付けるラインカードテーブルを生成し、
転送情報の第１のセットを、ルーティング情報および第１の識別子に基づいて生成し、
転送情報の第１のセットと異なる転送情報の第２のセットを、ルーティング情報および第２の識別子に基づいて生成し、
ラインカードテーブルおよび転送情報の第１のセットを、第１の入力ラインカード（２２２）に提供し、また
ラインカードテーブルおよび転送情報の第２のセットを、第２の入力ラインカード（２２２）に提供するように構成された、メッセージを転送するためのネットワークデバイス。
【請求項８】
転送情報の第１のセットを、ルーティング情報および第１の識別子に基づいて生成する際に、プロセッサ（２１４）が、
アドレスプレフィックスおよび関連付けられた転送情報を、ルーティング情報に基づいて生成し、
値を生成するために、アドレスプレフィックスに関して、数学的演算を実行し、
値が第１の識別子にマッチすると決定し、また
アドレスプレフィックスを、第１の識別子にマッチする値に基づいて、転送情報の第１のセットに含めるように構成された、請求項７に記載のネットワークデバイス。
【請求項９】
プロセッサ（２１４）が、
第２の入力ラインカード（２２２）が故障したことの表示を受信し、
第１の識別子を第１の入力ラインカード（２２２）と関連付け、第２の識別子を、複数のラインカードのうちの第１の出力ラインカードと関連付ける更新されたラインカードテーブルを生成し、
転送情報の第３のセットを、ルーティング情報および第２の識別子に基づいて生成し、また
更新されたラインカードテーブルおよび転送情報の第３のセットを、第１の出力ラインカード（２２２）に提供するようにさらに構成された、請求項７に記載のネットワークデバイス。
【請求項１０】
第１の入力ラインカード（２２２）が、
ラインカードテーブルを記憶するように構成された第１のメモリ（５４０）と、
宛先デバイスに向けて転送されるべき、宛先アドレスを含むメッセージを受信し、
第２の識別子および宛先アドレスに基づいて、第２の入力ラインカードがメッセージを処理すべきと決定し、また
メッセージを、第２の入力ラインカードに、第２の入力ラインカードがメッセージを処理すべきと決定するのに基づいて、送信するように構成された、第１の処理マネージャ（５１０）と
を備える、請求項７から９のいずれか一項に記載のネットワークデバイス。
【請求項１１】
第２の入力ラインカード（２２２）が、
第２の入力ラインカードがメッセージを処理すべきと決定するように構成された第２の処理マネージャ（５１０）と、
第１の出力ラインカードがメッセージを別のネットワークデバイスに転送し、メッセージを第１の出力ラインカードに送信すると決定するように構成された、転送モジュール（５２０、５３０）と
を備える、請求項１０に記載のネットワークデバイス。
【請求項１２】
第２の入力ラインカード（２２２）が、キャッシュテーブルを記憶するように構成されたメモリ（５４０）をさらに備え、
転送モジュールが、第１の出力ラインカードがメッセージを他のネットワークデバイスに転送すべきと決定する際に、
キャッシュテーブルが宛先アドレスと関連付けられたエントリを格納すると決定し、エントリが第１の出力ラインカードを識別すると決定するように構成された、キャッシュ（５２０）である、請求項１１に記載のネットワークデバイス。
【請求項１３】
第２の入力ラインカード（２２２）が、転送情報の第２のセットを記憶するように構成されたハッシュテーブル記憶装置をさらに備え、
転送モジュールが、第１の出力ラインカード（２２２）がメッセージを他のネットワークデバイスに転送すべきと決定する際に、
宛先アドレスの最長マッチングプレフィックスを有する、転送情報の第２のセットのエントリを識別し、
エントリが第１の出力ラインカードを識別すると決定するように構成された、最長プレフィックスマッチング（ＬＰＭ）ブロック（５３０）である、請求項１１に記載のネットワークデバイス。
【請求項１４】
宛先アドレスの最長マッチングプレフィックスを有する、転送情報の第２のセットのエントリを識別する際に、ＬＰＭブロック（５３０）が、最長マッチングプレフィックスの長さを判定するために、分散ブルームフィルタのセット（５３２）を利用する、請求項１３に記載のネットワークデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で開示される様々な例示的実施形態は、一般に、コンピュータネットワーキングに関する。
【背景技術】
【０００２】
インターネットは、マシン同士を相互接続する媒体から、マシンを映像や写真などのコンテンツと接続する媒体へと発展した。インターネットはＩＰアドレスによるルーティング情報などの様々な技術の上に発展したが、インターネットの現在の状態を考えると、将来のアーキテクチャは別の仕組みを利用する可能性がある。多くの提案の中にある共通原則は、これらの将来のアーキテクチャがマシン自体にではなく、提供されるコンテンツにその中心があることであろう。
【０００３】
コンテンツ中心のネットワーキングは、場所ではなく名前によってコンテンツが要求される、より最近のパラダイムである。このパラダイムは、名前ベースのルーティングを利用でき、ルータは、「コンテンツ名」に基づいて、トラフィックを宛先サーバに転送することができる。したがって、インターネットルータは、転送されるコンテンツに関する明示的な情報を提供され得る。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｓｏｎｇらによる、また２００９年にＩＥＥＥによって発行された「ＩＰｖ６  Ｌｏｏｋｕｐｓ  ｕｓｉｎｇ  Ｄｉｓｔｒｉｂｕｔｅｄ  ａｎｄ  Ｌｏａｄ  Ｂａｌａｎｃｅｄ  Ｂｌｏｏｍ  Ｆｉｌｔｅｒｓ  ｆｏｒ  １００Ｇｂｐｓ  Ｃｏｒｅ  Ｒｏｕｔｅｒ  Ｌｉｎｅ  Ｃａｒｄｓ」
【発明の概要】
【発明が解決しようとする課題】
【０００５】
名前ベースのルーティングの１つの成果は、ＩＰアドレスが、変形形態の数において制約され、地理的にまとめられている一方で、コンテンツ名は、同様の名前でコンテンツをホストするサーバの場所にかかわらず、事実上いかなる値ももつことができ、どこに位置するサーバも指し示すことができることである。したがって、名前ベースのルーティングテーブルのエントリの数は、ＩＰｖ４またはＩＰｖ６のルーティングテーブルよりも数桁大きいものであり得る。これは、効率的にテーブルを格納すること、およびトラフィックをテーブルを使用して迅速に転送することにおける新しい課題を提示する。
【課題を解決するための手段】
【０００６】
様々な例示的実施形態の簡潔な概要が以下に提示される。以下の概要において何らかの簡略化および省略が行われる場合があるが、それは本発明の範囲を限定するためではなく、様々な例示的実施形態の何らかの態様を取り上げて紹介することが意図されている。当業者が本発明の概念を形にし、使用できるようにするのに十分な、本発明の例示的な好ましい実施形態に関する詳細を、後節で説明する。
【０００７】
様々な例示的実施形態は、メッセージを転送するためにネットワークデバイスによって実行される方法に関し、その方法は、ネットワークデバイスの第１の入力ラインカードで、宛先に向けて転送されるべきメッセージを受信するステップであって、メッセージが宛先アドレスを含む、受信するステップと、第１の入力ラインカードによって、ネットワークデバイスの第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されていると決定するステップと、メッセージを、第１の入力ラインカードによって、第２の入力ラインカードに、第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されているとの決定に基づいて、送信するステップと、第２の入力ラインカードによって、また宛先アドレスと関連するルーティング情報に基づいて、メッセージが、ネットワークデバイスの第１の出力ラインカードを介して別のネットワークデバイスに転送されるべきであると決定するステップと、メッセージを、第２の入力ラインカードによって、第１の出力ラインカードに、メッセージが、ネットワークデバイスの第１の出力ラインカードを介して別のネットワークデバイスに転送されるべきであるとの決定に基づいて、送信するステップと、メッセージを、第１の出力ラインカードによって、別のネットワークデバイスに送信するステップとを含む。
【０００８】
第１の出力ラインカードが、第１の入力ラインカードおよび第２の入力ラインカードのうちの１つを備える、様々な実施形態が述べられる。
【０００９】
宛先アドレスがコンテンツ名である、様々な実施形態が述べられる。
【００１０】
メッセージを第２のラインに送信するステップが、メッセージを、第１の入力ラインカードによって、第２の入力ラインカードの入力ポートに送信するステップを含む、様々な実施形態が述べられる。
【００１１】
第１の入力ラインカードによって、ネットワークデバイスの第２の入力ラインカードが宛先アドレスと関連するルーティング情報を備えて構成されていると決定するステップが、ハッシュ化された宛先アドレスを生成するために、少なくとも宛先アドレスの一部に関してハッシュ関数を実行するステップと、第２の入力ラインカードの割り当てられた識別子が、ハッシュ化された宛先アドレスに対応すると決定するステップとを含む、様々な実施形態が述べられる。
【００１２】
第１の入力ラインカードが、転送情報の第１のセットを格納し、第２の入力ラインカードが、転送情報の第１のセットと異なる転送情報の第２のセットを格納する、様々な実施形態が述べられる。
【００１３】
様々な例示的実施形態は、メッセージを転送するためのネットワークデバイスに関し、そのネットワークデバイスは、ルーティング情報を格納するように構成されたルーティング情報ベース（ＲＩＢ：Ｒｏｕｔｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｂａｓｅ）記憶装置と、複数のラインカードと、プロセッサとを備え、プロセッサが、第１の識別子を複数のラインカードのうちの第１の入力ラインカードと関連付け、第２の識別子を複数のラインカードのうちの第２の入力ラインカードと関連付けるラインカードテーブルを生成し、転送情報の第１のセットを、ルーティング情報および第１の識別子に基づいて生成し、転送情報の第１のセットと異なる転送情報の第２のセットを、ルーティング情報および第２の識別子に基づいて生成し、ラインカードテーブルおよび転送情報の第１のセットを、第１の入力ラインカードに提供し、またラインカードテーブルおよび転送情報の第２のセットを、第２の入力ラインカードに提供するように構成されている。
【００１４】
転送情報の第１のセットを、ルーティング情報および第１の識別子に基づいて生成する際に、プロセッサが、アドレスプレフィックスおよび関連付けられた転送情報を、ルーティング情報に基づいて生成し、値を生成するために、アドレスプレフィックスに関して、数学的演算を実行し、値が第１の識別子にマッチすると決定し、またアドレスプレフィックスを、第１の識別子にマッチする値に基づいて、転送情報の第１のセットに含めるように構成された、様々な実施形態が述べられる。
【００１５】
プロセッサが、第２の入力ラインカードが故障したことの表示を受信し、第１の識別子を第１の入力ラインカードと関連付け、第２の識別子を、複数のラインカードのうちの第１の出力ラインカードと関連付ける更新されたラインカードテーブルを生成し、転送情報の第３のセットを、ルーティング情報および第２の識別子に基づいて生成し、また更新されたラインカードテーブルおよび転送情報の第３のセットを、第１の出力ラインカードに提供するようにさらに構成された、様々な実施形態が述べられる。
【００１６】
第１の入力ラインカードが、ラインカードテーブルを記憶するように構成された第１のメモリと、宛先デバイスに向けて転送されるべき、宛先アドレスを含むメッセージを受信し、第２の識別子および宛先アドレスに基づいて、第２の入力ラインカードがメッセージを処理すべきと決定し、またメッセージを、第２の入力ラインカードに、第２の入力ラインカードがメッセージを処理すべきと決定するのに基づいて、送信するように構成された、第１の処理マネージャとを備える、様々な実施形態が述べられる。
【００１７】
第２の入力ラインカードが、第２の入力ラインカードがメッセージを処理すべきと決定するように構成された第２の処理マネージャと、第１の出力ラインカードがメッセージを別のネットワークデバイスに転送し、メッセージを第１の出力ラインカードに送信すると決定するように構成された、転送モジュールとを備える、様々な実施形態が述べられる。
【００１８】
第２の入力ラインカードが、キャッシュテーブルを記憶するように構成されたメモリをさらに備え、転送モジュールが、第１の出力ラインカードがメッセージを他のネットワークデバイスに転送すべきと決定する際に、キャッシュテーブルが宛先アドレスと関連付けられたエントリを格納すると決定し、エントリが第１の出力ラインカードを識別すると決定するように構成された、キャッシュである、様々な実施形態が述べられる。
【００１９】
第２の入力ラインカードが、転送情報の第２のセットを記憶するように構成されたハッシュテーブル記憶装置をさらに備え、転送モジュールが、第１の出力ラインカードがメッセージを他のネットワークデバイスに転送すべきと決定する際に、宛先アドレスの最長マッチングプレフィックスを有する、転送情報の第２のセットのエントリを識別し、エントリが第１の出力ラインカードを識別すると決定するように構成された、最長プレフィックスマッチング（ＬＰＭ：Ｌｏｎｇｅｓｔ  Ｐｒｅｆｉｘ  Ｍａｔｃｈｉｎｇ）ブロックである、様々な実施形態が述べられる。
【００２０】
宛先アドレスの最長マッチングプレフィックスを有する、転送情報の第２のセットのエントリを識別する際に、ＬＰＭブロックが、最長マッチングプレフィックスの長さを判定するために、分散ブルームフィルタのセットを利用する、様々な実施形態が述べられる。
【００２１】
様々な例示的実施形態は、メッセージを転送するためのネットワークデバイスに関し、そのネットワークデバイスは、転送情報の第１のセットを格納する第１の入力ラインカードと、転送情報の第１のセットと異なる転送情報の第２のセットを格納する第２の入力ラインカードとを備え、そこでは、第１の入力ラインカードが、転送されるべきメッセージを受信し、メッセージを第２の入力ラインカードに送信するように構成され、第２の入力ラインカードが、メッセージを転送情報の第２のセットに基づいて転送するように構成される。
【００２２】
転送情報の第１のセットおよび転送情報の第２のセットがコンテンツアドレスプレフィックスの転送情報を格納する、様々な実施形態が述べられる。
【００２３】
ネットワークデバイスが、スイッチングファブリックを備え、メッセージを転送情報の第２のセットに基づいて転送する際に、第２の入力ラインカードが、メッセージをスイッチングファブリックを介して送信するように構成される、様々な実施形態が述べられる。
【００２４】
第１の入力ラインカードが、メッセージと関連付けられた宛先アドレスが、第２の入力ラインカードに割り当てられていると決定するように構成された、様々な実施形態が述べられる。
【００２５】
メッセージと関連付けられた宛先アドレスが、第２の入力ラインカードに割り当てられていると決定する際に、第１の入力ラインカードが、ハッシュ値を、少なくとも宛先アドレスの一部に基づいて生成し、インデックスを、ハッシュ値、およびネットワークデバイス向けに構成されたいくつかのラインカードに基づいて生成し、またインデックスが第２の入力ラインカードに対応すると決定するように構成された、様々な実施形態が述べられる。
【００２６】
転送情報の第２のセットが、長さが異なる複数のアドレスプレフィックスの転送情報を含み、メッセージを転送情報の第２のセットに基づいて転送する際に、第２の入力ラインカードが、メッセージの宛先アドレスを抽出し、最初のプレフィックスの長さを判定するために分散ブルームフィルタのセットを宛先アドレスに適用し、また少なくとも、最初のプレフィックスの長さを有するアドレスプレフィックスの転送情報を評価することで、転送情報の第２のセットの検索を開始するように構成された、様々な実施形態が述べられる。
【００２７】
様々な例示的実施形態をより理解するために、以下の添付図面を参照する。
【図面の簡単な説明】
【００２８】
【図１】メッセージをルーティングするための例示的ネットワークの図である。
【図２】メッセージをルーティングするための例示的ネットワークデバイスの図である。
【図３】ルーティング情報を格納するための例示的データ配置の図である。
【図４】ラインカード間で転送情報の分散を行うための例示的方法の図である。
【図５】例示的ラインカードの図である。
【図６】ラインカードの例示的メモリ内容の図である。
【図７】キャッシュデータを格納するための例示的データ配置の図である。
【図８】転送情報を格納するための例示的データ配置の図である。
【図９】メッセージを転送するための例示的方法の図である。
【図１０】最長プレフィックスマッチングを実行するための例示的方法の図である。
【発明を実施するための形態】
【００２９】
理解を容易にするために、実質的に同じもしくは同様の構造または実質的に同じもしくは同様の機能を有する要素を示すために、同一の参照番号が使用されている。
【００３０】
上述のように、出現しつつある様々なルーティングパラダイムは、インターネットおよび他のネットワーク上でトラフィックをルーティングする際に使用されるルーティングテーブルの拡大を提案する。より規模の大きいテーブルは、より大きくより高速なメモリおよびより高速なプロセッサによって提供可能であるが、この手法は、おそらく非常に高額である。したがって、ルーティングテーブルおよび／または様々なルーティング動作を複数のハードウェアエンティティに分散させることができる経路解決の方法を実装することが望ましい可能性がある。以下の説明を考えれば、様々な追加の目的および利益が明らかであろう。当業者であれば、本明細書で説明する様々な例は、名前ベースのルーティングに関して説明されているが、説明する方法およびシステムは、例えば、ＩＰｖ４またはＩＰｖ６プロトコルによるルーティングなどの他の環境で有用であり得ることが明らかであろう。
【００３１】
ここで図面を参照すると、様々な例示的実施形態の開示された広範な態様がある。図面では同様の参照番号は、同様の構成要素またはステップを表す。
【００３２】
図１は、メッセージをルーティングするための例示的ネットワーク１００を示す。様々な実施形態において、例示的ネットワーク１００は、インターネットまたはその一部であってもよい。当業者には、例示的ネットワーク１００が、いくつかの点で、簡略化されていることが明らかであろう。例えば、例示的ネットワーク１００は、多数の追加のクライアント、サーバ、ルータ、スイッチ、および／または他のネットワークデバイスを含んでもよい。図に示すように、例示的ネットワーク１００は、いくつかのネットワークデバイス、すなわち、１つのクライアントデバイス１１０、２つのサーバ１２０、１３０、および５つのルータ１４０ａ−ｅを含んでもよい。本明細書において使用される用語「ルータ」は、データメッセージを受信してデータメッセージをその最終的な宛先に向けて転送することができる任意のネットワークデバイスを指すと理解することができる。したがって、用語「ルータ」は、例えば、スイッチ（レイヤ２）や本来のルータ（レイヤ３）などの、ネットワークのＯＳＩモデルの任意のレイヤで動作するネットワークデバイスを包含することができる。さらに、用語「メッセージ」は、例えば、フレームやパケットなどの、あるデバイスから別のデバイスに転送される、データの任意のチャンクを包含すると理解されよう。
【００３３】
図に示すように、ルータ１４０ａ−ｅは、メッセージがこれらのデバイス間で交換できるように、クライアントデバイス１１０、サーバ１２０、およびサーバ１３０を相互接続することができる。先に述べたように、例示的ネットワーク１００は簡略化された構成なので、したがって、図に示されているネットワークデバイス間に通信を提供する、いくつかの中間ルータおよび／または他のネットワークデバイス（図示せず）が存在する場合がある。例えば、ルータ１４０ｃは、サーバ１２０に、１つまたは複数の中間ネットワークデバイス（図示せず）を経由して接続される場合がある。
【００３４】
クライアントデバイス１１０は、ネットワークを介してコンテンツを要求し、受信することができる任意のデバイスであり得る。例えば、クライアントデバイス１１０には、パーソナルコンピュータ、ラップトップ、携帯電話、タブレット、または他のデバイスが含まれてもよい。サーバ１２０、１３０はそれぞれ、要求を受信し、コンテンツを供給することができる任意のデバイスであり得る。例えば、サーバ１２０、１３０にはそれぞれ、パーソナルコンピュータ、スタンドアロンサーバ、ブレードサーバ、または他のデバイスが含まれてもよい。サーバ１２０、１３０はそれぞれ、いくつかのコンテンツ項目のホストとして機能することができ、各項目は、少なくとも１つのコンテンツ名によって識別される。図に示すように、例えば、サーバ１２０は、「ＴＵＸ／ｎｏｔｅｓ．ｔｘｔ」、「ＪＤＯＥ／ｎｏｔｅｓ．ｔｘｔ」、および「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２／ｖｉｄ．ａｖｉ」と識別される３つのコンテンツ項目のホストとして機能してもよい。別の例として、サーバ１３０も、「／ＪＤＯＥ／ＰＡＰＥＲＳ／ＰａｐｅｒＡ．ｐｄｆ」、「／ＪＤＯＥ／ＰＡＰＥＲＳ／ＰａｐｅｒＢ．ｐｄｆ」、および「／ＪＤＯＥ／ＶＩＤＥＯＳ／ａｂｃ．ｍｐｇ」と識別される３つのコンテンツ項目のホストとして機能してもよい。クライアントデバイス１１０は、要求メッセージを送信することにより、これらの項目のいずれかの配信を要求することができ、要求メッセージは次いで、ルータ１４０ａ−ｅによって適切なサーバ１２０、１３０にルーティング可能である。このルーティングは、要求されたコンテンツの名前に基づいて実行することができる。したがって、コンテンツ名は、要求メッセージの宛先アドレスと見なされ得る。サーバ１２０、１３０は次いで、適切なコンテンツの位置を特定するための要求を使用し、コンテンツをクライアントデバイス１１０にルータ１５０ａ−ｅを介して送り返すことができる。
【００３５】
例として、図１は、要求メッセージ１５０をルータ１４０ａに送信するクライアントデバイス１１０を示す。要求メッセージ１５０は、「／ＪＤＯＥ／ＶＩＤＥＯＳ／ａｂｃ．ｍｐｇ」という宛先アドレスを含むことができる。したがって、メッセージ１５０は、サーバ１３０によって格納されているコンテンツを要求することができる。要求メッセージ１５０を受信すると、ルータ１４０ａは次いで、要求メッセージ１５０をその最終的な宛先に向けて進めるために、どのルータ、すなわちどの「ネクストホップ」に、要求メッセージ１５０が転送されるべきかを判定できるよう、様々なルーティング動作を実行することができる。この能力を提供するために、ルータ１４０ａ−ｅはそれぞれ、ネットワーク１００向けのルーティングテーブルを含んでもよい。あるいは、ルータ１４０ａ−ｅは共に、分散ルーティングテーブルを実装してもよい。したがって、各ルータ１４０ａ−ｅは、このルータ１４０ａ−ｅのセットと関連付けられたルーティングテーブルの、全体ではないが、一部を含んでもよい。例えば、各ルータ１４０ａ−ｅは、ルータ１４０ａ−ｅが使用可能なルーティングレコードを格納できるように割り当てたアドレス範囲を割り当てられてもよい。様々な代替実施形態において、ネットワーク１００は、ルータではなく、分散ルーティングテーブルの一部を含む、１つまたは複数のネットワークデバイスを含んでもよい。例えば、ネットワーク１００は、分散ルーティングテーブルの一部を格納するとともに、ルータ１４０ａ−ｅが他のルータ１４０ａ−ｅにメッセージ転送の支援を行うであろうやり方に類似した方法でルータ１４０ａ−ｅに対しメッセージ転送を支援する、専用サーバ（図示せず）を含んでもよい。複数のネットワークデバイス間のルーティングテーブルの分散に関するさらなる詳細は、２０１２年３月１５日に出願された同時係属出願第１３／４２１，３８９号に記載されており、その全体は、引用によりあらゆる目的で本明細書に組み込まれている。
【００３６】
様々な代替実施形態において、要求メッセージ１５０は、要求されたコンテンツの特定の「チャンク」をアドレス指定してもよい。例えば、要求メッセージ１５０は、「／ＪＤＯＥ／ＶＩＤＥＯＳ／ａｂｃ．ｍｐｇ／ｃｈｕｎｋ２」を要求してもよい。特定のコンテンツ項目のすべてのチャンクが同じ場所に格納されている様々な実施形態においては、メッセージの処理に使用される宛先アドレスは、チャンク識別子を省略してもよく、したがって、「／ＪＤＯＥ／ＶＩＤＥＯＳ／ａｂｃ．ｍｐｇ」に基づいてルーティングする。例えば、コンテンツが複数のサーバ間で分散され得る実施形態などの様々な代替実施形態においては、ルータは、チャンク識別子に基づいてもルーティングでき、したがって、この例では、「／ＪＤＯＥ／ＶＩＤＥＯＳ／ａｂｃ．ｍｐｇ／ｃｈｕｎｋ２」に基づいてルーティングする。
【００３７】
図２は、メッセージをルーティングするための例示的ネットワークデバイス２００を示す。ネットワークデバイス２００は、例示的ネットワーク１００のルータ１４０ａ−ｅのうちの１つまたは複数に対応することができる。したがって、ネットワークデバイス２００は、メッセージをコンテンツ名などの宛先アドレスに基づいてルーティングするように構成可能である。図に示すように、例示的ネットワークデバイスは、制御プレーン２１０およびデータプレーン２２０を備えることができる。制御プレーン２１０は、ルーティング情報ベース（ＲＩＢ）記憶装置２１２、プロセッサ２１４、およびメモリ２１６を備えることができる。データプレーンは、複数のラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂ、および複数のスイッチングファブリック２３０、２３２を備えることができる。
【００３８】
ＲＩＢ記憶装置２１２は、ＲＩＢなどのルーティング情報を記憶するように構成されたデバイスであり得る。ＲＩＢ記憶装置２１２には、読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学式記憶媒体、フラッシュメモリデバイス、および／または類似の記憶媒体などのマシン可読記憶媒体が含まれてもよい。例えば、ＲＩＢ記憶装置２１２には、様々なネクストホップデバイスを経由してどの宛先アドレスに到達できるかに関する情報を記憶しているＳＲＡＭが含まれてもよい。ＲＩＢ記憶装置２１２の例示的コンテンツは、図３に関連して以下でより詳細に示される。
【００３９】
プロセッサ２１４は、マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、または他のデバイスなどの処理デバイスであり得る。プロセッサ２１４は、様々な制御プレーン機能を実行するように構成可能である。メモリ２１６は、プロセッサ２１４をサポートすることができる任意のメモリデバイスを備えてもよい。例えば、メモリ２１６は、１つまたは複数のＳＲＡＭチップを備えてもよい。
【００４０】
様々な実施形態において、プロセッサ２１４は、転送情報の１つまたは複数のセットをＲＩＢ記憶装置２１２のコンテンツに基づいて生成し、転送情報ベース（ＦＩＢ：Ｆｏｒｗａｒｄｉｎｇ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｂａｓｅ）などの、転送情報の１つまたは複数のセットをラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに提供するように構成可能である。この生成は、知られている各アドレスプレフィックスに対する最善の経路の選択、および適切な出力ポートまたはラインカードとのネットホップデバイスの関連付けを含んでもよい。
【００４１】
様々な実施形態において、プロセッサ２１４は、転送情報の別々のセットをラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂのそれぞれに提供するように構成可能である。図４に関連して以下でより詳細に示されるように、プロセッサ２１４は、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに、全転送情報のサブセットを提供してもよい。プロセッサ２１４はまた、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに、どのラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂが所与の宛先アドレスを有するメッセージの処理に有用な転送情報を与えられているかを判定するのに有用なラインカードテーブルを提供してもよい。
【００４２】
ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂはそれぞれ、１つまたは複数の入力ポートおよび１つまたは複数の出力ポートを有する、メッセージの受信ならびに転送を行うことができるデバイスを構成することができる。各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂは、入力ラインカード２２２ａ、２２４ａ、２２６ａおよび出力ラインカード２２２ｂ、２２４ｂ、２２６ｂとして有用であり得る。入力ラインカード２２２ａ、２２４ａ、２２６ａはそれぞれ、メッセージを別の外部デバイスまたはスイッチングファブリック２３０、２３２から受信して、次にメッセージを適切な出力ラインカード２２２ｂ、２２４ｂ、２２６ｂにスイッチングファブリック２３０、２３２を介して送信するように構成可能である。出力ラインカード２２２ｂ、２２４ｂ、２２６ｂは、メッセージをスイッチングファブリック２３０、２３２から受信して、メッセージをネクストホップのネットワークデバイスに出力するように構成可能である。このように、本明細書において使用される用語「入力ラインカード」および「出力ラインカード」は、入力機能および出力機能をそれぞれ実行する同じタイプの物理デバイスを指し得る。さらに、「ラインカード」は、「入力ラインカード」と「出力ラインカード」の両方になってもよい。データプレーン２２０は、多数の追加のラインカード（図示せず）を備えてもよい。様々な実施形態において、データプレーン２２０は、５００個または１０００個のラインカード（図示せず）を含んでもよい。
【００４３】
スイッチングファブリック２３０、２３２は、メッセージをラインカード２２２ｂ、２２４ｂ、２２６ｂ間で転送するように構成された、ハードウェア、またはマシン可読媒体上で符号化されたマシン実行可能命令を含むことができる。データプレーン２２０が、より少ないまたは追加のスイッチングファブリック（図示せず）を含んでもよいことが理解されよう。様々な実施形態において、データプレーン２２０は、８個または１６個のスイッチングファブリック（図示せず）を含んでもよい。
【００４４】
図５−１０に関連して以下でより詳細に説明されるように、入力ラインカード２２２ａ、２２４ａ、２２６ａは、適切な出力ラインカード２２２ｂ、２２４ｂ、２２６ｂをローカルの転送情報ベース（ＦＩＢ）に基づいて選択することができる。メッセージを受信すると、入力ラインカード２２２ａ、２２４ａ、２２６ａは、最初に、ローカルのＦＩＢが、メッセージを転送するのに有用な転送情報を含む可能性があるかを判定するために、ローカルのラインカードテーブルを調べることができる。転送情報を含む可能性がない場合、入力ラインカード２２２ａ、２２４ａ、２２６ａは、メッセージを、この転送情報にアクセスできる別の入力ラインカード２２２ａ、２２４ａ、２２６ａに転送することができる。例えば、メッセージ経路２４０によって示されるように、入力ラインカード１  ２２２ａは、メッセージを受信して、入力ラインカード２  ２２４ａが、メッセージを転送するのに有用な転送情報を格納している可能性があるかを判定することができる。その後、入力ラインカード１  ２２２ａは、メッセージを入力ラインカード２  ２２４ａにスイッチングファブリック２３０、２３２のうちの１つを介して転送することができる。次に、ラインカード２  ２２４ａは、出力ラインカード１  ２２ｂがメッセージをネクストホップに転送すべきか判定するために、ローカルに格納された転送情報を使用することができる。これは、例えば、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂが、別々のデバイスに接続された複数のポートを備えているという場合であり得る。入力ラインカード２は次いで、メッセージを出力ラインカード１  ２２２ｂに伝達でき、出力ラインカード１  ２２２ｂは次いで、メッセージを別のネットワークデバイスに転送することができる。
【００４５】
場合によっては、ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂは、ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂが、そのための有用な転送情報を格納しているメッセージを受信することがある。例えば、メッセージフロー２５０において、ラインカードＮ  ２２６ａは、メッセージを外部デバイスから受信して、ローカルに格納された転送情報に基づいて、ラインカード２  ２２４ｂがメッセージをネクストホップに転送すべきであると判定することができる。入力ラインカードＮ  ２２６ａは次いで、メッセージを直接、出力ラインカード２  ２２４ｂに転送でき、出力ラインカード２  ２２４ｂは、メッセージをネクストホップデバイスに転送することができる。
【００４６】
図３は、ルーティング情報を格納するための例示的データ配置３００を示す。データ配置３００は、例えば、オブジェクト、配列、リンクリスト、ツリー、および／またはハッシュテーブルなどの様々なデータ構造を使用して実装可能である。データ配置３００は、例えば、例示的ネットワークデバイス２００のＲＩＢ記憶装置２１２に記憶可能である。データ配置３００は、コンテンツプレフィックスフィールド３１０、ネクストホップフィールド３２０、およびメトリックフィールド３３０などのいくつかのフィールドを含むことができる。
【００４７】
コンテンツプレフィックスフィールド３１０は、少なくともコンテンツ名または他の宛先アドレスの一部を格納することができる。コンテンツプレフィックスフィールド３１０の値は、エントリが、値にマッチするトラフィックに適用されることを示すことができる。ネクストホップフィールド３２０は、関連付けられたプレフィックスにマッチするトラフィックをその宛先に向けてルーティングすることができるネクストホップデバイスの識別情報を格納することができる。様々な実施形態において、ネクストホップフィールド３２０は、代替方法として、またはさらに、トラフィックにマッチするための、出力ラインカードおよび／もしくは出力ポートの表示を格納することができる。メトリックフィールド３３０は、どの経路が最も速いか、最も安いか、もしくはさもなければ特定のプレフィックスにとって好ましいかを判定するのに有用な１つまたは複数のメトリックを格納することができる。
【００４８】
例として、データ配置３００は、いくつかのエントリ３４０−３８０を含んでいるように示される。データ配置３００は、多数の追加のエントリ３９０を含んでもよい。第１のエントリ３４０は、コンテンツプレフィックス「／ＴＵＸ」にマッチするトラフィックがネクストホップ「ｂ」に転送されてもよく、またこの経路と関連付けられたメトリックが「２」の値に設定されていることを示すことができる。次のエントリ３５０はまた、コンテンツプレフィックス「／ＴＵＸ」にマッチするトラフィックに適用されてもよく、ネクストホップ「ｄ」が同様に、「３」というメトリックでではあるものの、このトラフィックを宛先に向けて転送することができることを示している。転送情報を生成すると、プロセッサ２１４は、「／ＴＵＸ」プレフィックスにマッチするトラフィックの転送に使用されるよう、これらのエントリ３４０、３５０のうちの１つを選択することができる。この場合、プロセッサ２１４は、「２」というより低いメトリック値をエントリが保持しているので、第１のエントリ３４０を選択することができる。このように、プロセッサ２１４は、ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに対し、提供された転送情報を通じてこのトラフィックをネクストホップｂに転送するように指示することができる。
【００４９】
第３および第４のエントリ３６０、３７０は、同様に、プレフィックス「／ＪＤＯＥ」にマッチするトラフィックに対して使用可能な経路およびコストを指定することができる。すべてのエントリが、同じ長さのプレフィックスを含むことができるわけではない。第５のエントリ３８０によって示されるように、コンテンツプレフィックス「／ＪＤＯＥ／ＰＡＰＥＲＳ」にマッチするトラフィックは、ネクストホップ「ｄ」に「１」のメトリックコストで転送可能である。所与のメッセージがプレフィックス「／ＪＤＯＥ」と「／ＪＤＯＥ／ＰＡＰＥＲＳ」の両方にマッチする場合があるが、本明細書で説明されるネットワークデバイスは、「最長プレフィックスマッチング」を利用することができ、それによってメッセージを最長のマッチングプレフィックスに従ってルーティングする。図３の例では、情報が転送情報としてラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに提供された場合、メッセージは、第５のエントリ３８０の情報に従って転送されるはずである。
【００５０】
図４は、ラインカード間で転送情報の分散を行うための例示的方法４００を示す。方法４００は、プロセッサ２１４などの、ネットワークデバイス２００の構成要素によって実行可能である。方法４００は、例えば、ＲＩＢが変わったときや、ラインカードの故障または他の理由によってアクティブなラインカードの数が変わったときなど、転送情報がラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに提供されるべきときにはいつも実行可能である。
【００５１】
方法４００は、ステップ４０５を起点とし、ステップ４１０に進むことができ、そこで、プロセッサ２１４は、整数を各アクティブなラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに割り当てることができる。このステップは、システムのすべてのラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂ、アクティブなラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂのみ、または故障実績のないラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂのみへの整数の割当てを含んでもよい。次に、ステップ４１５で、プロセッサ２１４は、割り当てられた整数に基づいてラインカードテーブルを生成することができる。ラインカードテーブルは、例えば、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂの識別情報を、割り当てられた整数と関連付けるテーブルであってもよい。
【００５２】
ステップ４２０で、プロセッサ２１４は、マスタＦＩＢを、ＲＩＢから、当技術分野で知られている任意の方法に従って生成することができる。このステップは、例えば、様々なアドレスプレフィックスに対する様々なネクストホップと関連付けられたメトリック、様々なアドレスプレフィックスの統合、またはネクストホップデバイスの、対応する出力ラインカードもしくは出力ポートへの置換えを評価することを含んでもよい。
【００５３】
プロセッサ２１４は次いで、ステップ４２５で、ＦＩＢエントリを検索することにより、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂ向けのＦＩＢを作成するための、マスタＦＩＢにわたる反復適用を開始することができる。次に、プロセッサ２１４は、ステップ４３０で、どのラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂがＲＩＢエントリを受信すべきかを判定することができる。この例では、プロセッサ２１４は、エントリによって保持されているコンテンツプレフィックスの第１の構成要素「ｂ１」を検索してもよい。例えば、エントリがプレフィックス「／ＪＤＯＥ／ＶＩＤＥＯＳ」と関連している場合、プロセッサ２１４は、構成要素「／ＪＤＯＥ」を検索することができる。次に、プロセッサ２１４は、例えば、ＣＲＣ−６４などのハッシュ関数を使用して構成要素をハッシュしてハッシュ値ｈ（ｂ１）を生成することができる。プロセッサは次いで、ｈ（ｂ１）を、Ｎを法としてその値を求めることにより、インデックス「ｉ」を生成することができ、ここでＮはアクティブなラインカードの数である。得られるインデックス「ｉ」は、整数「ｉ」の割当て先のラインカードを判定するために、ステップ４１５で生成されたラインカードテーブルと共に使用することができる。整数「ｉ」をラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂにマッチさせた後、プロセッサ２１４は、ステップ４３５で、ＦＩＢエントリを、整数ｉ向けに送信されるべきＦＩＢ、すなわちＦＩＢｉに追加することができる。次に、ステップ４４０で、プロセッサ２１４は、マスタＦＩＢが、処理すべき追加のエントリを含んでいるかを判定することができる。含んでいる場合、プロセッサ２１４は、ステップ４２５に戻ることができる。そうでない場合、方法４００は、ステップ４４５に進むことができる。
【００５４】
ステップ４４５で、プロセッサ２１４は、変数「ｊ」を「０」の値に初期設定することにより、アクティブなラインカードにわたり反復適用を開始することができる。次に、ステップ４５０で、プロセッサ２１４は、ラインカードテーブルおよびＦＩＢｊを、ステップ４１０で整数「ｊ」を割り当てられたラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに転送することができる。次いで、プロセッサ２１４は、ステップ４５５で、「ｊ」の値を増加させ、ステップ４６０で、追加のアクティブなラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂが処理されるべき状態のままでないかを判定することができる。「ｊ」の現在の値がアクティブなラインカードの数ｎ以上でない場合、プロセッサ２１４は、ステップ４５０に戻ることができる。そうでない場合、方法４００は、ステップ４６５で、終了に進むことができる。
【００５５】
方法に対する様々な修正が可能であることが理解されよう。例えば、マスタＦＩＢを生成し、次いでそのＦＩＢをサブセットに分割するのではなく、プロセッサが、各ラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂに対して直接または同時にＦＩＢを生成することができる。様々な追加の修正が明らかであろう。
【００５６】
図５は、例示的ラインカード５００を示す。ラインカード５００は、例示的ネットワークデバイス２００のラインカード２２２ａ−ｂ、２２４ａ−ｂ、２２６ａ−ｂのうちの１つまたは複数に対応し得る。ラインカード５００は、処理マネージャ５１０、キャッシュ５２０、最長プレフィックスマッチング（ＬＰＭ）ブロック５３０、ＳＲＡＭ５４０、およびハッシュテーブル記憶装置５５０を備えることができる。ＬＰＭブロックは、分散ブルームフィルタモジュール５３２および経路検索器５３４を備えることができる。
【００５７】
処理マネージャ５１０は、転送されるべきメッセージを受信し、ラインカード５００もしくは他の何らかのラインカード５００がメッセージを処理すべきかを判定するように構成された、ハードウェア、および／またはマシン可読記憶媒体上の実行可能命令を含むことができる。図９に関連して以下でより詳細に説明されるように、ラインカードは、宛先アドレスをメッセージから抽出し、少なくともアドレスの一部に関して数学的演算を実行し、またＳＲＡＭ５４０に記憶されたラインカードテーブルを使用して、どのラインカードがメッセージを処理するように構成されたＦＩＢを含むかを判定することができる。処理マネージャ５１０が、別のラインカードがメッセージを処理すべきと判定した場合、処理マネージャ５１０は、メッセージを当該他のラインカードに伝達することができる。そうでない場合、処理マネージャ５１０は、メッセージをキャッシュ５２０に伝達して、メッセージの処理を開始することができる。
【００５８】
キャッシュ５２０は、ＳＲＡＭ５４０に記憶されたキャッシュテーブルが、現在のメッセージのアドレスにマッチするエントリを含むかを判定するように構成された、ハードウェア、および／またはマシン可読記憶媒体上の実行可能命令を含むことができる。エントリを含む場合、キャッシュ５２０は、キャッシュエントリによって識別されるように、メッセージを出力ラインカードに転送することができる。キャッシュヒットがない場合、キャッシュ５２０は、メッセージをＬＰＭブロック５３０の分散ブルームフィルタモジュール５３２に転送することができる。
【００５９】
分散ブルームフィルタモジュール５３２は、ＳＲＡＭ５４０に記憶されたブルームフィルタを利用して、現在のメッセージに対する最長プレフィックスマッチのありえそうな長さを判定するように構成された、ハードウェア、および／またはマシン可読記憶媒体上の実行可能命令を含むことができる。分散ブルームフィルタモジュール５３２は、例えば、その全体が引用によりあらゆる目的で本明細書に組み込まれている、Ｓｏｎｇらによる、また２００９年にＩＥＥＥによって発行された「ＩＰｖ６  Ｌｏｏｋｕｐｓ  ｕｓｉｎｇ  Ｄｉｓｔｒｉｂｕｔｅｄ  ａｎｄ  Ｌｏａｄ  Ｂａｌａｎｃｅｄ  Ｂｌｏｏｍ  Ｆｉｌｔｅｒｓ  ｆｏｒ  １００Ｇｂｐｓ  Ｃｏｒｅ  Ｒｏｕｔｅｒ  Ｌｉｎｅ  Ｃａｒｄｓ」に記載されている分散ブルームフィルタ手順を適用することができる。分散ブルームフィルタモジュール５３２は次いで、最長プレフィックスマッチのありえそうな長さの表示と共に、メッセージを経路検索器５３４に転送することができる。
【００６０】
経路検索器５３４は、メッセージの最長プレフィックスマッチを求めて、ハッシュテーブル記憶装置５５０に記憶されたＦＩＢを検索することができる。分散ブルームフィルタモジュール５３２が示す長さに基づいて、経路検索器５３４は、示された長さのマッチングプレフィックスを探すことにより、ＦＩＢの検索を開始することができる。分散ブルームフィルタモジュール５３２が偽陽性に遭遇した場合、経路検索器５３４は、最終的にメッセージの最長プレフィックスマッチを有するエントリを特定するまで、徐々に、検索されているプレフィックスの長さを短縮することができる。ＬＰＭブロック５３０は次いで、特定されたエントリによって示されるように、メッセージを出力ラインカードに転送することができる。
【００６１】
ＳＲＡＭ５４０は、ラインカード５００に有用な様々なデータを記憶するように構成された、ハードウェア、および／またはマシン可読記憶媒体上の実行可能命令を含むことができる。ＳＲＡＭ５４０の例示的コンテンツは、図６に関連して以下でより詳細に示される。ＳＲＡＭは、複数の２ポート３２ＫビットＳＲＡＭブロックを含んでもよい。例えば、ＤＲＡＭやフラッシュメモリなど、様々な他のタイプのメモリが使用されてもよいことが理解されよう。
【００６２】
ハッシュテーブル記憶装置５５０は、ラインカード５００のＦＩＢを記憶するように構成された、ハードウェア、および／またはマシン可読記憶媒体上の実行可能命令を含むことができる。したがって、ハッシュテーブル記憶装置には、読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学式記憶媒体、フラッシュメモリデバイス、および／または類似の記憶媒体などのマシン可読記憶媒体が含まれてもよい。ハッシュテーブル記憶装置５５０の例示的コンテンツは、図８に関連して以下でより詳細に示される。
【００６３】
ハッシュテーブル記憶装置５５０は、ラインカード５００の他の構成要素から物理的に切り離されたデバイスとして実装される「オフチップメモリ」を構成することができる。処理マネージャ５１０、キャッシュ５２０、ＬＰＭブロック５３０、およびＳＲＡＭ５４０は、例えば、マイクロプロセッサ、ＦＰＧＡ、またはＡＳＩＣなどのシングルチップとして実装することができる。
【００６４】
図６は、ラインカードの例示的メモリ内容６００を示す。例示的メモリ内容６００は、ＳＲＡＭ５４０の内容を示すことができる。図に示すように、メモリ内容６００は、ラインカードテーブル６１０、キャッシュテーブル６２０、および複数のブルームフィルタ６３０を含むことができる。ラインカードテーブル６１０は、制御プレーンから受信可能であり、各アクティブなラインカードを、割り当てられた整数と関連付けることができる。キャッシュテーブル６２０は、最長プレフィックスマッチング動作をバイパスする際に使用するいくつかのキャッシュエントリを格納することができる。キャッシュテーブル６２０の例示的コンテンツは、図７に関連して以下でより詳細に示される。ブルームフィルタ６３０は、最長プレフィックスマッチの長さを推定する際に使用されるように、ブルームフィルタの選択された数、すなわち「ｋ」を含んでもよい。数「ｋ」は、ブルームフィルタを評価するときに偽陽性の可能性を低減する、または最小化するために、例えば、ブルームフィルタ式に基づいて、選択されてもよい。
【００６５】
図７は、キャッシュデータを格納するための例示的データ配置７００を示す。データ配置７００は、例えば、オブジェクト、配列、リンクリスト、ツリー、および／またはハッシュテーブルなどの様々なデータ構造を使用して実装可能である。データ配置７００は、例えば、例示的ラインカード５００のＳＲＡＭ５４０に記憶可能である。データ配置７００は、コンテンツ名フィールド７１０や出力カードフィールド７２０などのいくつかのフィールドを含むことができる。コンテンツ名フィールド７１０は、キャッシュエントリが適用され得る先の宛先アドレスを示すことができる。出力カードフィールド７２０は、適用可能な宛先アドレスを保持するパケットを転送するために適切な出力ラインカードまたは出力ポートを示すことができる。出力カードフィールド７２０は、ラインカード識別子によって出力ラインカードを直接識別できるか、例えば、ネクストホップデバイスや出力ポートによって出力ラインカードを間接的に識別できる。
【００６６】
例として、例示的データ配置７００は、２つのキャッシュエントリ７３０、７４０を格納しているように示される。データ配置７００は、多数の追加のエントリ７５０を含んでもよい。第１のキャッシュエントリ７３０は、宛先アドレス「／ＪＤＯＥ／ＰＡＰＥＲＳ／ＰａｐｅｒＡ．ｐｄｆ」を含むメッセージが、出力ラインカード２  ２４０ｂに対応し得るラインカード「２」を介して転送されるべきであることを示すことができる。第２のキャッシュエントリ７４０は、宛先アドレス「／ＪＤＯＥ／ｎｏｔｅｓ．ｔｘｔ」を含むメッセージが、出力ラインカード１  ２２０ｂに対応し得るラインカード「１」を介して転送されるべきであることを示すことができる。
【００６７】
図８は、ＦＩＢなどの転送情報を格納するための例示的データ配置８００を示す。データ配置８００は、例えば、オブジェクト、配列、リンクリスト、ツリー、および／またはハッシュテーブルなどの様々なデータ構造を使用して実装可能である。データ配置８００は、例えば、例示的ラインカード５００のハッシュテーブル記憶装置５５０に記憶可能である。データ配置８００は、バケットフィールド８４０、コンテンツプレフィックスフィールド８２０、および出力カードフィールド８３０などのいくつかのフィールドを含むことができる。バケットフィールドは、バケット識別子を示すことができる。明らかであろうが、用語「バケット」は、ハッシュテーブルのアドレス指定できる要素を指すことができる。各バケットは、転送情報の複数のセットを含んでもよい。コンテンツプレフィックスフィールド８２０は、転送情報が当てはまるコンテンツプレフィックスを示すことができる。コンテンツプレフィックスは、ハッシュ値として格納可能である。出力カードフィールド８３０は、適用可能な宛先アドレスを保持するパケットを転送するために適切な出力ラインカードまたは出力ポートを示すことができる。出力カードフィールド８３０は、ラインカード識別子によって出力ラインカードを直接識別できるか、例えば、ネクストホップデバイスや出力ポートを示すことによって出力ラインカードを間接的に識別できる。
【００６８】
例として、例示的データ配置８００は、「ｐ」個のバケット８４０−８８０を格納しているように示される。第１のバケット８４０は、ＣＲＣ−６４ハッシュなどの、プレフィックス「／ＪＤＯＥ」のハッシュを格納し、またマッチングメッセージが出力カード「１」を介して転送されるべきであることを示す、転送情報の単一のセットを含んでもよい。第２のバケット８５０は、ルーティング情報の２つのセットを含んでもよい。第２のバケットは、最長プレフィックスマッチ「／ＴＵＸ」の場合、メッセージは出力カード「１」を介して転送されるべきであり、最長プレフィックスマッチ「／ＪＤＯＥ／ＶＩＤＥＯＳ」の場合、メッセージは出力カード「２」を介して転送されるべきであることを示してもよい。転送情報のこれらの２つのセットは、適切なバケットを決定するために使用される数学的演算が、両方のプレフィックスに対してバケット「２」を識別できるため、同じバケットを占めることができる。例えば、「ｐ」を法とした、どちらのプレフィックスのハッシュ値も、２の値を生じさせることができる。残りのバケット８６０−８８０の例示的データの意味は、以上の説明を考えれば、明らかであろう。
【００６９】
図９は、メッセージを転送するための例示的方法９００を示す。例示的方法は、例えば、ラインカード５００の構成要素によって実行可能である。方法９００は、ステップ９０５を起点とし、ステップ９１０に進むことができ、そこで、処理マネージャ５１０は、転送されるべきメッセージを受信することができる。メッセージは、別のネットワークデバイスから、または別のラインカードからスイッチングファブリックを介して、受信することができる。次に、ステップ９１５で、処理マネージャは、第１の構成要素、すなわち「ｂ１」を、メッセージによって保持されているコンテンツ名から抽出することができる。次いで、ステップ９２０では、処理マネージャは、ｂ１に基づいてラインカードインデックス「ｉ」を生成することができる。この手順は、方法４００のステップ４３０で転送情報を分散させるためにプロセッサ２１４によって使用される手順に類似していることがある。処理マネージャは、ｂ１をハッシュし、ｎを法としてハッシュを計算することができ、ここでｎはアクティブなラインカードの数である。このインデックスを使用すると、処理マネージャ５１０は、ステップ９２５で、レコード「ｉ」をラインカードテーブルから検索し、ステップ９３０で、レコードが、処理マネージャ５１０が属するラインカードを識別するかを判定することができる。レコードが別のラインカードを示した場合、処理マネージャは、ステップ９３５で、メッセージを、識別されたラインカードの入力ポートに転送でき、方法９００は、ステップ９７５で、終了に進むことができる。識別されたラインカードは次いで、メッセージをさらに処理するために、方法９００を実行することができる。
【００７０】
一方、レコードが現在のラインカードを識別した場合、方法９００は、ステップ９４０に進むことができ、そこで、キャッシュ５２０が、キャッシュテーブルを検索して、任意のエントリが、受信されたメッセージのコンテンツ名にマッチするかを判定することができる。キャッシュヒットがあった場合、キャッシュ５２０は、ステップ９５０で、適切な出力ラインカードをキャッシュエントリから決定することができる。そうでない場合、ＬＰＭブロック５３０は、ステップ９５５で、適切な出力ラインカードを決定するために、最長プレフィックスマッチングをＦＩＢを使用して実行することができる。例示的ＬＰＭ手順は、図１０に関連して以下でより詳細に示される。適切な出力ラインカードを識別した後、ＬＰＭブロック５３０は、転送情報を将来使用するためにキャッシュするかどうかを判定することができる。様々な実施形態において、ＬＰＭブロック５３０は、すべての特定されたレコードをキャッシュしてもよい。他の実施形態において、ＬＰＭブロック５３０は、所定の長さを超えるコンテンツ名にマッチするレコードのみをキャッシュしてもよい。例えば、ステップ９６０で、ＬＰＭブロックは、メッセージによって保持されているコンテンツ名の長さが事前設定された閾値「Ｔ」より長いかどうかを判定することができる。コンテンツ名の長さが「Ｔ」を超える場合、ＬＰＭブロック５３０は、ステップ９６５で、コンテンツ名および識別された出力カードをキャッシュすることができる。最後に、ステップ９７０で、ラインカード５００は、メッセージを、識別されたラインカードの出力ポートに転送でき、方法９００は、ステップ９７５で、終了に進むことができる。
【００７１】
図１０は、最長プレフィックスマッチングを実行するための例示的方法１０００を示す。方法１０００は、ＬＰＭブロック５３０の構成要素によって実行可能である。方法１０００は、ステップ１００５を起点とし、ステップ１０１０に進むことができ、そこで、分散ブルームフィルタモジュール５３２は、いくつかのハッシュ関数、すなわち「ｋ」を、コンテンツ名のそれぞれのあり得るプレフィックスに適用することができる。例えば、コンテンツ名「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２／ｖｉｄ．ａｖｉ」の場合、分散ブルームフィルタモジュール５３２は、プレフィックス「／ＪＤＯＥ」、「／ＪＤＯＥ／ＶＩＤＥＯＳ」、「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２」、および「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２／ｖｉｄ．ａｖｉ」を、「ｋ」ハッシュ関数のそれぞれを使用してハッシュすることができる。
【００７２】
次に、ステップ１０１５で、分散ブルームフィルタモジュール５３２は、適切なブルームフィルタを各ハッシュ化されたプレフィックスに適用することができる。例えば、プレフィックスに適用された各ハッシュ関数は、別々のブルームフィルタと関連付け可能である。つまり第１のハッシュ関数に従ってハッシュ化された各プレフィックスは、第１のブルームフィルタに適用されてよく、第２のハッシュ関数に従ってハッシュ化された各プレフィックスは、第２のブルームフィルタに適用されてよい、など。各ブルームフィルタの適用の結果は、そのブルームフィルタに従って各プレフィックスがＦＩＢにマッチを有する可能性があるかを示すビットフィールドになってもよい。例えば、ビットフィールド「０１１０」は、プレフィックス「／ＪＤＯＥ／ＶＩＤＥＯＳ」および「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２」がＦＩＢマッチを有する可能性があり、一方、プレフィックス「／ＪＤＯＥ」および「／ＪＤＯＥ／ＶＩＤＥＯＳ／ＪＤ２０１２／ｖｉｄ．ａｖｉ」はマッチするものを有していないことを示すことができる。分散ブルームフィルタモジュール５３２は次いで、ステップ１０２０で、単一のマスタビットフィールドを生成するために「ｋ」ビットフィールドのそれぞれを組み合わせることができる。例えば、分散ブルームフィルタモジュール５３２は、「ｋ」ビットフィールドのすべての論理「ＡＮＤ」を生成することができる。マスタビットフィールドは、ステップ１０２５で、ありえそうな最長プレフィックスマッチの長さ「ｍ」を識別するために、分散ブルームフィルタモジュール５３２によって使用可能である。例えば、マスタビットフィールドの第１の「１」の位置は、ありえそうな最長プレフィックスマッチの長さに対応可能である。
【００７３】
次に、経路検索器５３４は、第１に、ステップ１０３０で、コンテンツ名の第１の「ｍ」構成要素をハッシュして、ＦＩＢで最長プレフィックスマッチを検索し始めることができる。次に、経路検索器５３４は、ステップ１０３５で、値「ｆ」をハッシュ値またはその一部に基づいて、「ｐ」、すなわちバケットの総数を法として、計算することにより、どのバケットにアクセスすべきかを判定することができる。経路検索器５３４は次いで、ステップ１０４０で、バケット「ｆ」をＦＩＢから検索し、バケットが、コンテンツ名の第１の「ｍ」構成要素にマッチするルーティング情報を含むかを判定することができる。バケットがマッチするものを含まない場合、経路検索器５３４は、ステップ１０５０で、最長マッチングプレフィックスの長さの次の候補を決定するために、マスタビットフィールドを使用することができる。経路検索器５３４は次いで、ステップ１０３０に戻ることができる。経路検索器５３４がＦＩＢでマッチするエントリを特定すると、経路検索器５３４は、メッセージを出力するために、マッチするエントリによって示されたラインカードが使用されるべきかを判定することができる。方法１０００は次いで、ステップ１０６０で、終了に進むことができる。
【００７４】
以上の説明によれば、様々な実施形態が、メッセージをルーティングするために規模の大きいルーティングテーブルの有効利用を可能にすることは明らかであろう。例えば、転送情報を複数のラインカード間で分散させることにより、ネクストホップ探索のタスクは、そうしたデバイス間で分散可能であり、それによって、規模の大きいルーティングテーブルをサポートする効率的な方法を提供する。さらに、宛先アドレスのサブセットを複数のラインカードのそれぞれに割り当てることにより、ネクストホップ探索は、効率的で信頼性のある方法で委譲可能である。
【００７５】
以上の説明から、本発明の様々な例示的実施形態がハードウェアまたはファームウェアに実装されてもよいことは明らかであろう。さらに、様々な例示的実施形態は、本明細書で詳述された動作を実行するために、少なくとも１つのプロセッサによって読取りおよび実行が可能な、マシン可読記憶媒体上に記憶された命令として実行されてもよい。マシン可読記憶媒体は、情報を、パーソナルコンピュータもしくはラップトップコンピュータ、サーバ、または他のコンピューティングデバイスなどのマシンが読み取ることができる形式で記憶するための任意のメカニズムを含んでもよい。したがって、有形の、持続的な、マシン可読記憶媒体には、読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学式記憶媒体、フラッシュメモリデバイス、および類似の記憶媒体が含まれてもよい。
【００７６】
当業者であれば、本明細書における任意のブロック図は、本発明の原理を具体化する例示的な回路の概念図を表すことが理解されよう。同様に、任意のフローチャート、フローダイアグラム、状態遷移図、擬似コード等は、実質的に、マシン可読媒体において示すことができ、したがって、そのようなコンピュータまたはプロセッサが明示的に示されるかどうかを問わず、コンピュータまたはプロセッサによって実行できる様々なプロセスを表すことが理解されよう。
【００７７】
様々な例示的実施形態が、そのある特定の例示的態様を特に参照して詳細に説明されてきたが、本発明は、他の実施形態も可能であり、その詳細は、様々な明白な関連において修正形態も可能であることを理解されたい。当業者には容易に明らかになるように、変形形態および修正形態は、本発明の趣旨および範囲内にとどまりながら生じ得る。したがって、前述の開示、説明、および図は、例示のみを目的としており、本発明をいかなる形でも限定するものではなく、本発明は、特許請求の範囲によってのみ定義される。
【図１】
2015529061.tif 000003
【図２】
2015529061.tif 000004
【図３】
2015529061.tif 000005
【図４】
2015529061.tif 000006
【図５】
2015529061.tif 000007
【図６】
2015529061.tif 000008
【図７】
2015529061.tif 000009
【図８】
2015529061.tif 000010
【図９】
2015529061.tif 000011
【図１０】
2015529061.tif 000012
【国際調査報告】
2015529061.tif 000013
2015529061.tif 000014
2015529061.tif 000015
2015529061.tif 000016