(57)【要約】いくつかのデバイスを備える分散顧客構内機器（ＣＰＥ）を提供するための技法が開示される。分散ＣＰＥは、第１のデバイス上で実行されるように構成された制御プレーン・サブシステムと、第２のデバイス上で実行されるように構成された第１のデータプレーン・サブシステムと、第３のデバイス上で実行されるように構成された第２のデータプレーン・サブシステムとを含むことができる。第２のデバイスは、第１のネットワーク機能を実行することができる第１の仮想マシンを実行するようにさらに構成され得る。第３のデバイスは、第２のネットワーク機能を実行することができる第２の仮想マシンを実行するようにさらに構成され得る。特定の実施形態では、制御プレーン・サブシステムは、第１のデータプレーン・サブシステムおよび第２のデータプレーン・サブシステムの転送機能性を制御し、第１のネットワーク機能および第２のネットワーク機能を制御するように構成され得る。特定の実施形態では、第１のデバイスおよび第２のデバイスは、顧客構内機器（ＣＰＥ）デバイスである。
2019533340.tif 000002
【特許請求の範囲】
【請求項１】
第１の位置に配置された制御プレーン・サーバ・コンピュータであって、
１つまたは複数のプロセッサ、および
前記１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリ
を備え、前記命令は、実行されたとき、前記制御プレーン・サーバ・コンピュータに、
複数のデバイス上の動作を制御するために１つまたは複数のネットワーク・インターフェースを使用してネットワーク制御パケットを送信する制御プレーン・サブシステムを実行させる、制御プレーン・サーバ・コンピュータと、
第２の位置に配置された、前記複数のデバイスのうちの第１のデバイスであって、
１つまたは複数のプロセッサ、および
前記１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリ
を備え、前記命令は、実行されたとき、前記第１のデバイスに、
ネットワーク・データ・パケットを転送するように構成された第１のデータプレーン・サブシステムを実行することであって、前記ネットワーク・データ・パケットの前記転送は、前記制御プレーン・サーバ・コンピュータから受信された前記ネットワーク制御パケットのうちの１つに少なくとも基づく、実行すること、および
第１のネットワーク機能を実行することができる第１の仮想マシンをインスタンス化することを行わせる、第１のデバイスと、
第３の位置に配置された、前記複数のデバイスのうちの第２のデバイスであって、
１つまたは複数のプロセッサ、および
前記１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリ
を備え、前記命令は、実行されたとき、前記第２のデバイスに、
ネットワーク・データ・パケットを転送するように構成された第２のデータプレーン・サブシステムを実行することであって、前記ネットワーク・データ・パケットの前記転送は、前記制御プレーン・サーバ・コンピュータから受信された前記ネットワーク制御パケットのうちの１つに少なくとも基づく、実行すること、および
第２のネットワーク機能を実行することができる第２の仮想マシンをインスタンス化することを行わせる、第２のデバイスと
を備える分散顧客構内機器（ＣＰＥ）。
【請求項２】
前記複数のデバイスは顧客構内機器（ＣＰＥ）デバイスである、請求項１に記載の分散顧客構内機器。
【請求項３】
前記第１のネットワーク機能は仮想ネットワーク機能（ＶＮＦ）である、請求項１に記載の分散顧客構内機器。
【請求項４】
前記第１のネットワーク機能は、ネットワーク・ファイアウォール、ネットワーク・レベル２転送、ネットワーク・レベル３転送、仮想プライベート・ネットワーク（ＶＰＮ）、アクセス制御リスト（ＡＣＬ）、または構内交換機（ＰＢＸ）のうちの１つまたは複数である、請求項１に記載の分散顧客構内機器。
【請求項５】
前記第１のデバイスは、
前記制御プレーン・サーバ・コンピュータの前記制御プレーン・サブシステムから１つまたは複数のネットワーク制御パケットを受信し、
前記第１のデバイスにおいて第３の仮想マシンをインスタンス化し、
前記１つまたは複数のネットワーク制御パケットの受信に基づいて、前記第１のデバイスにおいて前記第３の仮想マシンの内部で実行される第３のネットワーク機能をインスタンス化するように構成される、請求項１に記載の分散顧客構内機器。
【請求項６】
前記第１の仮想マシンは、前記制御プレーン・サーバ・コンピュータからの前記ネットワーク制御パケットのうちの１つの受信に少なくとも基づいて、前記第１のデバイスによってインスタンス化される、請求項１に記載の分散顧客構内機器。
【請求項７】
前記第１のネットワーク機能は、前記制御プレーン・サーバ・コンピュータからの前記ネットワーク制御パケットのうちの少なくとも１つのネットワーク制御パケットの受信に少なくとも基づいて構成される、請求項１に記載の分散顧客構内機器。
【請求項８】
前記第１の位置はデータセンタであり、前記第２の位置および前記第３の位置は顧客構内である、請求項１に記載の分散顧客構内機器。
【請求項９】
前記第１のデバイスは、前記第１の仮想マシンをインスタンス化するために、前記データプレーン・サブシステムおよびハイパーバイザを備える、前記メモリに記憶されたホスト・ソフトウェア・スタックを備える、請求項１に記載の分散顧客構内機器。
【請求項１０】
前記第１の位置における前記制御プレーン・サーバ・コンピュータと前記第２の位置における前記第１のデバイスとは、ネットワーク・チャネルを使用して接続される、請求項１に記載の分散顧客構内機器。
【請求項１１】
前記制御プレーン・サーバ・コンピュータと前記第１のデバイスとの間の距離は、閾値を上回る、請求項１に記載の分散顧客構内機器。
【請求項１２】
第１のデバイス上で実行されるように構成された制御プレーン・サブシステムと、
第２のデバイス上で実行されるように構成された第１のデータプレーン・サブシステムであって、前記第２のデバイスはさらに、第１のネットワーク機能を実行することができる第１の仮想マシンを実行するように構成される、第１のデータプレーン・サブシステムと、
第３のデバイス上で実行されるように構成された第２のデータプレーン・サブシステムであって、前記第３のデバイスはさらに、第２のネットワーク機能を実行することができる第２の仮想マシンを実行するように構成される、第２のデータプレーン・サブシステムと
を備え、
前記制御プレーン・サブシステムは、前記第１のデータプレーン・サブシステムおよび前記第２のデータプレーン・サブシステムの転送機能性を制御し、前記第１のネットワーク機能および前記第２のネットワーク機能を制御するように構成される、分散顧客構内機器。
【請求項１３】
前記第１のデバイスおよび前記第２のデバイスは、顧客構内機器（ＣＰＥ）デバイスである、請求項１２に記載の分散顧客構内機器。
【請求項１４】
前記第１のネットワーク機能は仮想ネットワーク機能（ＶＮＦ）である、請求項１２に記載の分散顧客構内機器。
【請求項１５】
前記第１のネットワーク機能は、ネットワーク・ファイアウォール、ネットワーク・レベル２転送、ネットワーク・レベル３転送、仮想プライベート・ネットワーク（ＶＰＮ）、アクセス制御リスト（ＡＣＬ）、または構内交換機（ＰＢＸ）のうちの１つまたは複数である、請求項１２に記載の分散顧客構内機器。
【請求項１６】
前記第１のデバイスは、
前記制御プレーン・サーバ・コンピュータから１つまたは複数のネットワーク制御パケットを受信し、
前記１つまたは複数のネットワーク制御パケットの受信に基づいて、前記第１のデバイスにおいて第３の仮想マシンをインスタンス化し、
前記１つまたは複数のネットワーク制御パケットの受信に基づいて、前記第１のデバイスにおいて前記第３の仮想マシンの内部で実行される第３のネットワーク機能をインスタンス化するように構成される、請求項１２に記載の分散顧客構内機器。
【請求項１７】
ネットワーク・パケットをルーティングする方法であって、
第１のデバイスから、第２のデバイス上で実行されるように構成されたデータプレーン・サブシステムの転送機能性を制御することと、
前記第１のデバイスから、前記第２のデバイス上の仮想マシンのインスタンス化を制御することと、
前記第１のデバイスから、前記仮想マシンにおけるネットワーク機能の実行を制御することと
を含む方法。
【請求項１８】
第１のデバイスから、前記転送機能性、前記仮想マシンの前記インスタンス化、および前記ネットワーク機能の前記実行を制御するために制御プレーン・サブシステムを実行することを含む、請求項１７に記載の方法。
【請求項１９】
前記第１のデバイスから、第３のデバイス上で実行されるように構成された第２のデータプレーン・サブシステムの転送機能性を制御することと、
前記第１のデバイスから、前記第２のデバイス上の第２の仮想マシンのインスタンス化を制御することと、
前記第１のデバイスから、前記第２の仮想マシンにおける第２のネットワーク機能の実行を制御することと
をさらに含む、請求項１７に記載の方法。
【請求項２０】
ネットワーク・データ・パケットを転送するための方法であって、
第１のデバイスにおいて、前記第１のデバイスについての前記ネットワーク・データ・パケットの転送機能性を変更するための、サーバからのネットワーク制御パケットを受信することと、
前記第１のデバイス上でホスト・ソフトウェア・スタック内で実行されているデータプレーン・サブシステムにおいて前記第１のデバイスの前記転送機能性を変更することと、
前記第１のデバイスにおいて、第１のネットワーク・データ・パケットを受信することと、
前記データプレーン・サブシステムを使用して前記第１のネットワーク・データ・パケットを転送することと、
前記第１のデバイスにおいて、第２のネットワーク・データ・パケットを受信することと、
前記第１のデバイスにおいて仮想マシン内で実行されるネットワーク機能を使用して前記第２のネットワーク・データ・パケットを処理することであって、前記ホスト・ソフトウェア・スタックにおけるハイパーバイザが、前記仮想マシンをインスタンス化する、処理することと
を含む方法。
【請求項２１】
前記第１のデバイスは顧客構内機器（ＣＰＥ）である、請求項１７に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本特許出願は、「ＤＩＳＴＲＩＢＵＴＥＤ  ＣＵＳＴＯＭＥＲ  ＰＲＥＭＩＳＥ  ＥＱＵＩＰＭＥＮＴ」という名称の２０１６年９月９日に出願された米国仮特許出願第６２／３８５，３５２号、および「ＤＩＳＴＲＩＢＵＴＥＤ  ＣＵＳＴＯＭＥＲ  ＰＲＥＭＩＳＥ  ＥＱＵＩＰＭＥＮＴ」という名称の２０１６年１０月２８日に出願された米国非仮特許出願第１５／３８８，０８２号の優先権を主張するものである。米国仮特許出願第６２／３８５，３５２号および米国非仮特許出願第１５／３８８，０８２号の内容は、あらゆる目的でそれらの全体が参照により本明細書に組み込まれる。
【０００２】
本開示は、一般に、データのルーティングおよび転送に関し、より詳細には、顧客構内機器（ｃｕｓｔｏｍｅｒ  ｐｒｅｍｉｓｅｓ  ｅｑｕｉｐｍｅｎｔ：ＣＰＥ）の制御、構成および管理を集中化および改善するための技法に関する。
【背景技術】
【０００３】
従来、ＣＰＥは、顧客に対する特定のネットワークベースのサービスを容易にするためのハードウェアベースの解決策を提供するデバイスである。ＣＰＥは、加入者の構内に配置された任意の端末／デバイスおよび関連機器であり得る。いくつかの例では、ＣＰＥは、ネットワーク・オペレータまたはキャリアの通信チャネルと接続される。いくつかの例では、ＣＰＥは、ネットワーク・オペレータのサービスを顧客に提供するためのネットワーク・オペレータの分界点（「デマーク（ｄｅｍａｒｃ）」）を提供する。言い換えれば、ＣＰＥは、ネットワーク・オペレータの顧客構内に存在する拡張部分として機能し、ネットワーク・オペレータによって顧客に提供されるサービスを促進する。デマークは、ネットワーク・オペレータの配線インフラストラクチャまたは中央局のいずれかに配置された機器から顧客機器を分離するために建物、複合施設、またはシステムに確立されたポイントである。
【０００４】
ＣＰＥは、一般に、電話、ルータ、スイッチ、レジデンシャル・ゲートウェイ（ＲＧ）、セットトップ・ボックス、固定モバイル・コンバージェンス製品、ホーム・ネットワーク・アダプタ、インターネット・アクセス・ゲートウェイなどのデバイスであって、ＬＡＮ（ローカル・エリア・ネットワーク）、デジタル加入者線（ＤＳＬ）もしくは他のブロードバンド・インターネット・ルータ、ボイス・オーバ・インターネット・プロトコル（ＶｏＩＰ）基地局、または特定のサービス・プロバイダによって使用される他のシステムを介して、通信サービス・プロバイダのサービスに顧客がアクセスすることを可能にし、サービスを顧客の家または構内の周辺へ配信するデバイスを指すことができる。また、主要な電話システムおよびほとんどの構内交換機（ＰＢＸ）も含まれる。
【０００５】
一般に、ＣＰＥが顧客の構内に物理的にいったん配置されると、ＣＰＥに対する何らかの変更により技術者が顧客を訪問することになり、よりコストおよび不都合が生じる結果となる。さらに、特定の機能性もしくはサービスがＣＰＥによってサポートされていない場合、またはＣＰＥのアップグレードが必要な場合、通常はＣＰＥを交換する必要があり、顧客またはネットワーク・オペレータに追加のコストをもたらすことになる。さらに、ＣＰＥは、単一機能デバイスであり、顧客は、同じＣＰＥを使用して複数のサービスおよび機能性を有効にして使用できないことがある。
【０００６】
本明細書を通してＣＰＥについて論じられるが、いくつかの実施形態では、ＣＰＥの代わりにルータを使用して、本明細書に論じられるいくつかの実施形態を実施することもできる。さらに、いくつかの例では、ＣＰＥそれ自体が、ネットワーク・データ・パケットの転送などのルータの機能を実行してよい。ルータは、ネットワーク間でデータ（たとえば、ネットワーク・データ・パケット）を転送して、データのそのソースからその意図した宛先への送達を促進するように構成された特殊なネットワーク・デバイスである。ルータは、インターネットワーク・トポロジを通じて最適なルートまたはデータ経路を決定し、これらの最適経路を使用してネットワーク・データ・パケットを移送するように構成されている。また、ルータは、ファイアウォールやサービス品質（ＱｏＳ）など他の様々なサービスも提供する。
【０００７】
従来のルータは、典型的には、ネットワーク・パケットをルーティングし、制御プレーン・サブシステム（ｃｏｎｔｒｏｌ  ｐｌａｎｅ  ｓｕｂｓｙｓｔｅｍ）および１つまたは複数のデータプレーン・サブシステム（ｄａｔａ  ｐｌａｎｅ  ｓｕｂｓｙｓｔｅｍ）を備え、それらは全て、単一のボックスまたはシャーシ内に収容されている。ネットワーク・パケットは、ネットワーク制御パケットおよびネットワーク・データ・パケットを含むことができる。ネットワーク制御パケットは一般に、ネットワークそれ自体の作成および動作に使用される、ルータ（たとえば、制御プレーン・サーバ・コンピュータ（ｃｏｎｔｒｏｌ  ｐｌａｎｅ  ｓｅｒｖｅｒ  ｃｏｍｐｕｔｅｒ））で生成または受信されたパケットを指すことがある。一例では、ネットワーク制御パケットは、データプレーン・サブシステムを更新および／または構成することができる。ネットワーク・データ・パケットは一般に、中間ネットワーク・デバイスによって他のエンド・デバイスに転送される、エンド・デバイス・ユーザ・アプリケーションで生成されたパケットを指すことができる。
【０００８】
データプレーンは、従来のシステムではラインカード（ｌｉｎｅｃａｒｄ）として実装されることがあり、データプレーンの１つまたは複数のポートを介してネットワーク・データ・パケットを受信および転送するように構成されている。転送は、データプレーンによって記憶された情報を転送することに基づいて行われる。データプレーンがネットワーク・データ・パケットを転送するために使用する転送情報は、典型的には、ルータの制御プレーン・サブシステムによってプログラムされ、制御プレーン・サブシステムは、１つまたは複数の管理カードを備え得る。制御プレーン・サブシステムは、ルータによって実行されるネットワーキング関連機能を制御するように構成され、そうした機能は、たとえば、ルーティング情報（たとえばルーティング情報テーブル）を維持すること、ルーティング情報に基づいて情報を転送するデータ転送プレーンをプログラムすること、様々なネットワーキング制御プロトコルを取り扱うこと、制御プレーンで終端するパケット（たとえば、制御および／またはデータ・パケット）の処理を取り扱うこと、処理アクセス制御リスト（ＡＣＬ）、サービス品質（ＱｏＳ）、管理機能を処理することなどを含む。
【０００９】
先に示したように、従来のルータでは、ルータの制御プレーン・サブシステム、および制御プレーン・サブシステムによって制御されるデータプレーンは、ルータの同じ物理的ネットワーク・デバイス・ボックスまたはシャーシ内に物理的に全て一緒に配置される。結果として、ルータの制御プレーン・サブシステムおよびデータプレーン・サブシステムの間に静的な関係がある。このことにより、そのようなルータを何万個も含み得る大きなネットワーク（たとえばインターネット）内のそのようなルータのプログラミングは、複雑で柔軟性に欠けるものとなる。そのようなネットワークに対して変更（たとえば、データ経路の追加または再構成、ネットワーク・デバイスの追加または削除）が必要なとき、変更に影響される各個別のルータ・ボックスは、個別にプログラムまたは再プログラムされなければならない。このようなルータ単位中心の管理要件は、そのようなネットワークの管理を非常に複雑かつ時間のかかるものとする。結果として、従来のルータを使用するネットワークは、現在（および将来）のネットワーク・アプリケーション、たとえば、クラウド・コンピューティング、モバイル・コンピューティング、リアルタイムおよびオンデマンドのビデオ・トラフィックなどで望まれる柔軟性および動的設定可能性に欠けることになる。
【００１０】
したがって、従来のＣＰＥ、特にルーティング能力を実装するＣＰＥのネットワークを維持することは、費用がかかり、複雑であり、柔軟性に欠け、アップグレードおよび管理が困難である。
【発明の概要】
【発明が解決しようとする課題】
【００１１】
本開示は、一般に、データのルーティングおよび転送に関し、より詳細には、顧客構内機器（ＣＰＥ）の制御、構成および管理を集中化および改善するための技法に関する。
【課題を解決するための手段】
【００１２】
特定の実施形態において、新規の分散ＣＰＥが提供される。特定の実施形態によれば、分散ＣＰＥは、集中制御プレーン・サーバ・コンピュータと、ソフトウェア・データプレーン・サブシステムをネイティブに（すなわち仮想化なしに）実行するいくつかのＣＰＥとを含む。制御プレーン・サブシステムを実行する制御プレーン・サーバ・コンピュータが、ＣＰＥを制御する。各ＣＰＥは、仮想マシンをホストし、それぞれの仮想マシンにおいて仮想ネットワーク機能（ＶＮＦ）を実行する能力も有してよい。
【００１３】
特定の実施形態では、ソフトウェア・データプレーン・サブシステムに対するオーバーレイ・ネットワークと共に集中制御プレーン・サブシステムを有することにより、単一の大きなルータに似るビューがオペレータに提供される。また、制御プレーン・サブシステムとデータプレーン・サブシステムの分離により、パケット転送のためにＣＰＥにおけるハードウェア・リソースのフィールド利用を最大化し、より処理集約的であるがレイテンシに敏感でない（または比較的敏感でない）タスクであり得る制御プレーン・タスクを、リモートの集中制御プレーン・サブシステムへ押し出す。さらに、このＣＰＥ設計は、ソフトウェア・データプレーン・サブシステムによるネイティブ・パケット処理を可能にすると共に、ＣＰＥが仮想ネットワーク機能を使用して特定のネットワーク機能をアップグレードおよび／または増強することを可能にする。したがって、開示されている技法は、ネットワークの管理の改善を可能にする。
【００１４】
例示的な分散顧客構内機器（ＣＰＥ）は、第１の位置に配置された制御プレーン・サーバ・コンピュータと、第２の位置に配置された、複数のデバイスのうちの第１のデバイスと、第３の位置に配置された、複数のデバイスのうちの第２のデバイスとを含むことができる。複数のデバイスは、顧客構内機器（ＣＰＥ）デバイスであってよい。特定の実施形態では、第１の位置はデータセンタであり、第２の位置および第３の位置は顧客構内である。特定の実施形態では、第１の位置における制御プレーン・サーバ・コンピュータと第２の位置における第１のデバイスとは、ネットワーク・チャネルを使用して接続され得る。特定の実施形態では、制御プレーン・サーバ・コンピュータと第１のデバイスとの間の距離は、閾値上回るものとしてよい。
【００１５】
制御プレーン・サーバは、１つまたは複数のプロセッサ、および１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリを備えることができ、命令は、実行されたとき、制御プレーン・サーバ・コンピュータに、複数のデバイス上の動作を制御するために１つまたは複数のネットワーク・インターフェースを使用してネットワーク制御パケットを送信する制御プレーン・サブシステムを実行させる。
【００１６】
第１のデバイスは、１つまたは複数のプロセッサ、および１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリを備えることができ、命令は、実行されたとき、第１のデバイスに、ネットワーク・データ・パケットを転送するように構成された第１のデータプレーン・サブシステムを実行することであって、ネットワーク・データ・パケットの転送は、制御プレーン・サーバ・コンピュータから受信されたネットワーク制御パケットのうちの１つに少なくとも基づく、実行すること、および第１のネットワーク機能を実行することができる第１の仮想マシンをインスタンス化することを行わせる。特定の実施形態では、第１のデバイスは、第１の仮想マシンをインスタンス化するために、データプレーン・サブシステムおよびハイパーバイザ（ｈｙｐｅｒｖｉｓｏｒ）を備える、メモリに記憶されたホスト・ソフトウェア・スタックを備える。第１のネットワーク機能は、仮想ネットワーク機能（ＶＮＦ）であってよい。特定の実施形態では、第１のネットワーク機能は、ネットワーク・ファイアウォール、ネットワーク・レベル２転送（ｎｅｔｗｏｒｋ  ｌｅｖｅｌ  ２  ｆｏｒｗａｒｄｉｎｇ）、ネットワーク・レベル３転送（ｎｅｔｗｏｒｋ  ｌｅｖｅｌ  ３  ｆｏｒｗａｒｄｉｎｇ）、仮想プライベート・ネットワーク（ＶＰＮ）、アクセス制御リスト（ＡＣＬ）、または構内交換機（ＰＢＸ）である。
【００１７】
特定の実施形態では、第１のデバイスは、制御プレーン・サーバ・コンピュータの制御プレーン・サブシステムから１つまたは複数のネットワーク制御パケットを受信し、第１のデバイスにおいて第３の仮想マシンをインスタンス化し、１つまたは複数のネットワーク制御パケットの受信に基づいて、第１のデバイスにおいて第３の仮想マシンの内部で実行される第３のネットワーク機能をインスタンス化するように構成され得る。
【００１８】
特定の実施形態では、第１の仮想マシンは、制御プレーン・サーバ・コンピュータからのネットワーク制御パケットのうちの１つの受信に少なくとも基づいて、第１のデバイスによってインスタンス化される。特定の実施形態では、第１のネットワーク機能は、制御プレーン・サーバ・コンピュータからのネットワーク制御パケットのうちの少なくとも１つのネットワーク制御パケットの受信に少なくとも基づいて構成される。
【００１９】
第２のデバイスは、１つまたは複数のプロセッサ、および１つまたは複数のプロセッサによって実行可能な命令を記憶するメモリを備えることができ、命令は、実行されたとき、第２のデバイスに、ネットワーク・データ・パケットを転送するように構成された第２のデータプレーン・サブシステムを実行することであって、ネットワーク・データ・パケットの転送は、制御プレーン・サーバ・コンピュータから受信されたネットワーク制御パケットのうちの１つに少なくとも基づく、実行すること、および第２のネットワーク機能を実行することができる第２の仮想マシンをインスタンス化することを行わせる。
【００２０】
別の例示的な分散顧客構内機器は、第１のデバイス上で実行されるように構成された制御プレーン・サブシステムと、第２のデバイス上で実行されるように構成された第１のデータプレーン・サブシステムであって、第２のデバイスはさらに、第１のネットワーク機能を実行することができる第１の仮想マシンを実行するように構成される、第１のデータプレーン・サブシステムと、第３のデバイス上で実行されるように構成された第２のデータプレーン・サブシステムであって、第３のデバイスはさらに、第２のネットワーク機能を実行することができる第２の仮想マシンを実行するように構成される、第２のデータプレーン・サブシステムとを備えることができ、制御プレーン・サブシステムは、第１のデータプレーン・サブシステムおよび第２のデータプレーン・サブシステムの転送機能性を制御し、第１のネットワーク機能および第２のネットワーク機能を制御するように構成される。
【００２１】
特定の実施形態では、第１のデバイスおよび第２のデバイスは、顧客構内機器（ＣＰＥ）デバイスであってよい。特定の実施形態では、第１のネットワーク機能は仮想ネットワーク機能（ＶＮＦ）であってよい。特定の実施形態では、第１のネットワーク機能は、ネットワーク・ファイアウォール、ネットワーク・レベル２転送、ネットワーク・レベル３転送、仮想プライベート・ネットワーク（ＶＰＮ）、アクセス制御リスト（ＡＣＬ）、または構内交換機（ＰＢＸ）のうちの１つまたは複数を含むことができる。
【００２２】
特定の実施形態では、第１のデバイスは、制御プレーン・サーバ・コンピュータから１つまたは複数のネットワーク制御パケットを受信し、１つまたは複数のネットワーク制御パケットの受信に基づいて、第１のデバイスにおいて第３の仮想マシンをインスタンス化し、１つまたは複数のネットワーク制御パケットの受信に基づいて、第１のデバイスにおいて第３の仮想マシンの内部で実行される第３のネットワーク機能をインスタンス化するように構成される。
【００２３】
特定の実施形態では  第１のデバイスから、第２のデバイス上で実行されるように構成されたデータプレーン・サブシステムの転送機能性を制御し、第１のデバイスから、第２のデバイス上の仮想マシンのインスタンス化を制御し、第１のデバイスから、仮想マシンにおけるネットワーク機能の実行を制御するための例示的な方法が開示される。上記方法は、第１のデバイスから、転送機能性、仮想マシンのインスタンス化、およびネットワーク機能の実行を制御するために制御プレーン・サブシステムを実行することを含むことができる。上記方法は、第１のデバイスから、第３のデバイス上で実行されるように構成された第２のデータプレーン・サブシステムの転送機能性を制御することと、第１のデバイスから、第２のデバイス上の第２の仮想マシンのインスタンス化を制御することと、第１のデバイスから、第２の仮想マシンにおける第２のネットワーク機能の実行を制御することとをさらに含むことができる。
【００２４】
特定の実施形態では、ネットワーク・データ・パケットを転送するための例示的な方法は、第１のデバイスにおいて、第１のデバイスについてのネットワーク・データ・パケットの転送機能性を変更するための、サーバからのネットワーク制御パケットを受信することと、第１のデバイス上でホスト・ソフトウェア・スタック内で実行されているデータプレーン・サブシステムにおいて第１のデバイスの転送機能性を変更することと、第１のデバイスにおいて、第１のネットワーク・データ・パケットを受信することと、データプレーン・サブシステムを使用して第１のネットワーク・データ・パケットを転送することと、第１のデバイスにおいて、第２のネットワーク・データ・パケットを受信することと、第１のデバイスにおいて仮想マシン内で実行されるネットワーク機能を使用して第２のネットワーク・データ・パケットを処理することであって、ホスト・ソフトウェア・スタックにおけるハイパーバイザが、仮想マシンをインスタンス化する、処理することとを含むことができる。第１のデバイスは、顧客構内機器（ＣＰＥ）であってよい。
【図面の簡単な説明】
【００２５】
【図１】本発明の実施形態による分散顧客構内機器を示す簡略ブロック図である。
【図２】本発明の特定の実施形態による、ソフトウェア・データプレーン・サブシステムを備える物理デバイスを示す例示的なブロック図である。
【図３】本発明の特定の実施形態による、ソフトウェア制御プレーン・サブシステムを備える物理デバイスを示す例示的なブロック図である。
【図４】本開示の１つまたは複数の例示的態様による、本発明の実施形態を実施するための方法を示すフロー図である。
【図５】本開示の１つまたは複数の例示的態様による、本発明の実施形態を実施するための方法を示す別のフロー図である。
【図６】本開示の１つまたは複数の例示的態様による、分散ルータの様々なコンポーネントを実行するために使用され得るコンピューティング・システムまたはデバイスの簡略ブロック図である。
【発明を実施するための形態】
【００２６】
以下の説明では、説明の目的で本発明の実施形態の完全な理解を与えるために具体的詳細が述べられている。しかしながら、これらの具体的詳細なしに様々な実施形態が実施され得ることは明らかであろう。図および説明は限定を意図するものではない。「例示的」という語は、本明細書では「例、実例、または例示の役目をすること」を意味するために使用される。本明細書において「例示的」として説明される実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいまたは有利であると解釈されるべきではない。
【００２７】
特定の実施形態では、新規の分散ＣＰＥが提供される。特定の実施形態によれば、分散ＣＰＥは、集中制御プレーン・サーバ・コンピュータと、ソフトウェア・データプレーン・サブシステムをネイティブに（すなわち仮想化なしに）実行するいくつかのＣＰＥとを含む。制御プレーン・サブシステムを実行する制御プレーン・サーバ・コンピュータが、ＣＰＥを制御する。各ＣＰＥは、仮想マシンをホストし、それぞれの仮想マシンにおいて仮想ネットワーク機能（ＶＮＦ）を実行する能力も有してよい。
【００２８】
特定の実施形態では、ソフトウェア・データプレーン・サブシステムに対するオーバーレイ・ネットワークと共に集中制御プレーン・サブシステムを有することにより、単一の大きなルータに似るビューがオペレータに提供される。また、制御プレーン・サブシステムとデータプレーン・サブシステムの分離により、パケット転送のためにＣＰＥにおけるハードウェア・リソースのフィールド利用を最大化し、より処理集約的であるがレイテンシに敏感でない（または比較的敏感でない）タスクであり得る制御プレーン・タスクを、リモートの集中制御プレーン・サブシステムへ押し出す。さらに、このＣＰＥ設計は、ソフトウェア・データプレーン・サブシステムによるネイティブ・パケット処理を可能にすると共に、ＣＰＥが仮想ネットワーク機能を使用して特定のネットワーク機能をアップグレードおよび／または増強することを可能にする。したがって、開示されている技法は、ネットワークの管理の改善を可能にする。
【００２９】
図１は、本発明の実施形態による分散顧客構内機器（ＣＰＥ）１００を示す簡略ブロック図である。図１に示す実施形態は、単に例であり、本発明の請求される実施形態を不当に限定するように意図されていない。当業者であれば、多くの変形形態、代替形態、および修正形態を認識するであろう。たとえば、他のいくつかの実施形態では、分散ＣＰＥ１００は、図１に示されるよりも多いまたは少ないコンポーネントを有してもよく、２つ以上のコンポーネントを組み合わせてもよく、またはコンポーネントの異なる構成または配置を有してもよい。たとえば、分散ＣＰＥ１００は、ソフトウェア・データプレーン・サブシステムを実行する物理デバイスを図１に開示されているよりも多く有してよく、各物理デバイスは、仮想ネットワーク機能を実行するために１つまたは複数の仮想マシンを実行する。
【００３０】
図１に示す分散ＣＰＥ１００は、複数のデバイス（たとえば、１０２、１０４および１０６）を含み、各デバイスは、制御プレーン・レイヤ、または１つもしくは複数のデータプレーン・サブシステムを備えるデータプレーン・レイヤを含む。図１を参照して開示される物理デバイスは、図６に開示される１つまたは複数のコンポーネントを使用して実装され得る。分散ＣＰＥ１００は、（ＯＳＩモデルの）レイヤ２およびレイヤ３のルーティング機能性を提供するように構成される。分散ＣＰＥ１００は、開放型システム間相互接続（ＯＳＩ）モデルのレイヤ４〜７における機能性も提供してよい。
【００３１】
特定の実施形態では、物理デバイス１０４および物理デバイス１０６のような、ソフトウェア・データプレーン・サブシステムを実行するデバイスは、顧客構内機器（ｃｕｓｔｏｍｅｒ  ｐｒｅｍｉｓｅｓ  ｅｑｕｉｐｍｅｎｔ：ＣＰＥ）、顧客構内設備（ｃｕｓｔｏｍｅｒ  ｐｒｅｍｉｓｅ  ｅｑｕｉｐｍｅｎｔ：ＣＰＥ）、ユニバーサルＣＰＥまたはｕＣＰＥ、仮想ＣＰＥまたはｖＣＰＥと呼ばれることがある。特定の実施形態では、制御プレーン・サブシステム１２８を有する物理デバイス１０２、ならびにソフトウェア・データプレーン・サブシステム（１０８、１１８）を有する複数の物理デバイス（１０４、１０６）が、本明細書では集合的に分散ＣＰＥ１００システムと呼ばれることがある。
【００３２】
特定の実施形態では、図１によって示されるように、ソフトウェア制御プレーン・サブシステム１２８は、集中物理デバイス１０２内に存在し、集中物理デバイス１０２は、それぞれ異なる物理デバイス（１０４、１０６）上に存在するいくつかのソフトウェア・データプレーン・サブシステム（１０８、１１８）と通信する。図１に示すように、ソフトウェア制御プレーン・サブシステム１２８を備える物理デバイス１０２は、それぞれソフトウェア・データプレーン・サブシステム（１０８、１１８）を備える複数の物理デバイス（１０４、１０６）を、一対多の関係で制御することができる。特定の実施形態では、制御プレーン・サブシステム１２８によって制御されるデータプレーン・サブシステムは、ソフトウェア・データプレーン・サブシステム（１０８、１１８）および／またはハードウェア・データプレーン・サブシステム（図示せず）を含む異なるタイプのものとすることができる。制御プレーン・サブシステムは、ネットワーク１３４を介して制御チャネル１３２などのネットワーク・チャネルを使用して、並行してまたは同時に複数のデータプレーン・サブシステムと通信することができる。
【００３３】
特定の実施形態では、これらの物理デバイス（１０２、１０４および１０６）は地理的に分散されてよい。たとえば、分散ＣＰＥ１００は、地理的に分散された分局配置を可能にし、この場合、ソフトウェア制御プレーン・サブシステム１２８は、中央データセンタに配置された物理デバイス１０２に存在してよく、各ソフトウェア・データプレーン・サブシステム（たとえば１０８、１１８）は、複数の異なる位置にある複数の異なる局（すなわち顧客構内）にわたって地理的に分散された別個の物理デバイス（たとえば１０４、１０６）に存在してよい。特定の実施形態では、ソフトウェア制御サブシステム１２８を備える物理デバイス１０２と、ソフトウェア・データプレーン・サブシステム（１０８、１１８）を備える物理デバイス（１０４、１０６）との間の距離は、特定の閾値上回るものとしてよい。物理デバイスは、有線または無線通信ネットワーク・チャネルを使用して互いに接続され得る。他の特定の実施形態では、制御プレーン・サブシステムおよびデータプレーン・サブシステムをホストする物理デバイスは、統合されたマルチサービス・プラットフォームを提供するために単一のシャーシに設けられ得る。
【００３４】
以下により詳細に開示されるように、物理デバイス（たとえば１０４、１０６）は、仮想ネットワーク機能（ＶＮＦ）をホストしてもよい。特定の例では、ＶＮＦは、ネットワーク機能仮想化（ＮＦＶ）と呼ばれることもあり、これは、本開示の範囲から逸脱することなくＶＮＦと交換可能に使用され得る。特定の実施形態では、ＶＮＦは、明確に定義されかつプログラム可能なパケット処理機能を実施するために１つまたは複数の仮想マシンまたはコンテナ内で実行されるプログラムの集合を指すことがある。特定の実装形態では、基礎となるハードウェア（たとえばプロセッサ）、オペレーティング・システム、および／またはハイパーバイザが、ソフトウェア・データプレーン・サブシステム（たとえば１０８、１１８）と一緒に、仮想ネットワーク機能（ＶＮＦ）をホストするための仮想化技術をサポートすることができる。たとえば、物理デバイス１０４は、ソフトウェア・データプレーン・サブシステム１０８、オペレーティング・システム・カーネル１１０、およびハイパーバイザ１１２を含むことができる。ハイパーバイザ１１２は、仮想マシン（ＶＭ  Ａ１１４およびＶＭ  Ｂ１１６）をインスタンス化し、仮想マシンにおいてネットワーク機能を実行することができる。同様に、物理デバイス１０６は、ソフトウェア・データプレーン・サブシステム１１８、オペレーティング・システム・カーネル１２０、およびハイパーバイザ１２２を含むことができる。ハイパーバイザ１２２は、仮想マシン（ＶＭ  Ｘ１２４およびＶＭ  Ｙ１２６）をインスタンス化し、仮想マシンにおいてネットワーク機能を実行することができる。特定の実施形態では、分散ＣＰＥ１００は、物理デバイス（１０４、１０６）上でネイティブ（すなわち仮想化なし）データプレーン転送および／またはルーティング機能性を提供すると共に、仮想化を使用して、新しい機能性を追加する、または既存のソフトウェア・データプレーン転送機能性を増強する柔軟性を提供する。
【００３５】
ＶＮＦをサポートおよびホストするために仮想化技術を使用することは、上記に開示されているが、特定の実施形態では、仮想化ハードウェア・サポートなしに、さらにいくつかの例ではハイパーバイザなしに、ソフトウェア・コンテナを使用してＶＮＦを実装することができる。たとえば、ＶＮＦは、Ｕｎｉｘ／Ｌｉｎｕｘベースのカーネルによって促進されるＵｎｉｘ／Ｌｉｎｕｘベースのコンテナを使用することができる。
【００３６】
特定の実施形態では、コントローラ（図示せず）が、ＮＥＴＣＯＮＦおよび／またはＯｐｅｎＦｌｏｗなどのプロトコルを使用して物理デバイス１０２においてソフトウェア制御プレーン・サブシステム１２８を構成することができる。
【００３７】
ソフトウェア制御プレーン・サブシステム１２８は、コントローラから受信されたネットワーク・ポリシを実装するように構成され得る。一実施形態では、制御プレーン・サブシステム１２８は、ポリシを実装するために、ソフトウェア制御プレーン・サブシステム１２８によって制御されるデータプレーン・サブシステム（１０８、１１８）が行うべきアクションのセットへ、ポリシを変換するように構成される。したがって、ソフトウェア制御プレーン・サブシステム１２８は、コントローラから受信されたネットワーク・ポリシを取得し、それらをソフトウェア・データプレーン・サブシステム（１０８、１１８）のアクションに変換することを担当する。ソフトウェア制御プレーン・サブシステム１２８は、ソフトウェア・データプレーン・サブシステムがそれらの初期化フェース中にそれら自体をソフトウェア制御プレーン・サブシステム１２８に登録したとき、それがどのソフトウェア・データプレーン・サブシステムを制御するかを学習する。特定の実施形態では、制御プレーン・サブシステムは、ＮＥＴＣＯＮＦやＯｐｅｎＦｌｏｗなどの通信プロトコルを使用して外部からプログラム可能であり、ＲＥＳＴ  ＡＰＩを使用してプログラムされてもよい。
【００３８】
ソフトウェア制御プレーン・サブシステム１２８は、ソフトウェア・データプレーン・サブシステム（１０８、１１８）と通信するために様々な異なる通信技法を使用してよい。特定の実施形態では、図１に示すように、ソフトウェア制御プレーン・サブシステム１２８は、ソフトウェア・データプレーン・サブシステム（１０８、１１８）の両方と通信するために制御チャネル１３２を使用する。一実施形態では、制御チャネル１３２を介するメッセージングは、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｐｅｎ  Ｎｏｔａｔｉｏｎ）カプセル化を用いたＺｅｒｏＭＱトランスポート・メカニズムを使用することができる。ＺｅｒｏＭＱ（ＯＭＱまたは０ＭＱまたはＺＭＱとも表記される）は、スケーラブルな分散または並列アプリケーションでの使用を目的とした高性能非同期メッセージング・ライブラリである。それは、専用メッセージ・ブローカなしで実行できるメッセージ・キューを提供する。ライブラリは、馴染みあるソケット・スタイルＡＰＩを有するように設計される。それは、インプロセス、プロセス間、ＴＣＰ、およびマルチキャストのような様々なトランスポートにわたってアトミック・メッセージを搬送するソケットを提供する。その非同期Ｉ／Ｏモデルは、スケーラブルなマルチコア・アプリケーションを可能にする。ＪＳＯＮは、分散ネットワーク・システムの階層ビューを提供するためのメカニズムを提供する。ソフトウェア制御プレーン・サブシステム１２８の観点から、それは、ソフトウェア・データプレーン・サブシステムまたはハードウェア・データプレーン・サブシステムと通信するときに、同じ制御チャネル１３２および同じ通信方式を使用してよい。この意味で、ソフトウェア制御プレーン・サブシステム１２８は、それがソフトウェア・データプレーンと通信しているかそれともハードウェア・データプレーンと通信しているかを区別しない。
【００３９】
たとえば、ソフトウェア制御プレーン・サブシステム１２８は、コントローラからユーザによって構成されたファイアウォール・ポリシを受信することができる。これに応じて、ソフトウェア制御プレーン・サブシステム１２８は、ファイアウォール・ポリシのデータ・モデル表現を作成し、ローカル・データ構造にポリシ関連情報を記憶することができる。次いで、ソフトウェア制御プレーン・サブシステム１２８は、データ・モデル表現をＪＳＯＮ表現に変換することができ、次いで、その表現は、ＺｅｒｏＭＱメッセージにカプセル化され、制御チャネル１３２を介してＺｅｒｏＭＱバスを使用して様々なデータプレーン・サブシステムに伝達される。
【００４０】
ソフトウェア制御プレーン・サブシステム１２８はまた、制御チャネル１３２を介してデータプレーン・サブシステムを含む１つまたは複数の物理デバイスからメッセージを受信することができる。これらのメッセージは、たとえば、データプレーン・サブシステムおよび／またはＶＮＦについてのステータスおよび状態情報を、制御プレーン・サブシステムに伝達することができる。たとえば、データプレーン・サブシステムでの変化（たとえば、インターフェース状態変化）がある場合、その情報は、データプレーン・サブシステムによってＪＳＯＮ表現にカプセル化され、次いで、ＺｅｒｏＭＱメッセージ・バスにカプセル化され、制御チャネル１３２を使用して制御プレーン・サブシステム１２８に送信される。次いで、制御プレーン・サブシステム１２８は、状態変化に応答するためにアクションを行うことができる（たとえば、状態情報の変更、ルータの変更など）。
【００４１】
特定の実施形態では、物理デバイス１０２は、オペレーティング・システム・カーネル１３０およびソフトウェア制御プレーン・サブシステム１２８を含む。オペレーティング・システム・カーネル１３０およびソフトウェア制御プレーン・サブシステム１２８は、インテル（登録商標）またはＡＭＤ（登録商標）または他のプロセッサによって提供されるプロセッサなどの１つまたは複数の処理エンティティによって実行される、命令（コードまたはプログラム）のセットとして実装される。たとえば、ソフトウェア制御プレーン・サブシステム１２８は、図６に示され後述されるようなコンピューティング・システムによって実行され得る。マルチコア・プロセッサ環境では、制御プレーン・サブシステムは、１つまたは複数のプロセッサの１つまたは複数のコアによって実行され得る。１つまたは複数のプロセッサによって実行される１つまたは複数の仮想マシンを含む仮想化環境において、制御プレーン・サブシステムは、仮想マシン内で実行されもしくは仮想マシンによりホストされてよく、またはさらに、ハイパーバイザ（たとえばＫＶＭハイパーバイザ）もしくはネットワーク・オペレーティング・システムによってホストされてもよい。制御プレーン・サブシステムは、ベアメタル上および仮想マシン内などに配備されてよい。本明細書ではソフトウェア制御データプレーン１２８が開示されているが、特定の実装形態では、本開示の範囲から逸脱することなくハードウェア制御データプレーンが実装されもよい。
【００４２】
ソフトウェア制御プレーン・サブシステム１２８は、データプレーン・サブシステム（１０８、１１８）および／またはＶＮＦの構成および管理を担当する。たとえば、ソフトウェア制御プレーン・サブシステム１２８は、分散ネットワークに関するルーティングおよびトポロジ情報を維持するように構成される。次いで、この情報は、ソフトウェア制御プレーン・サブシステム１２８によって、１つまたは複数のデータプレーン・サブシステムおよび／またはＶＮＦをプログラムするために使用され、そうすることで、それらは、データ・パケットのそのソースからその意図した宛先への送達を促進するようにデータ・パケットを転送することが可能になる。特定の実施形態では、ソフトウェア制御プレーン・サブシステム１２８は、転送情報をソフトウェア・データプレーン・サブシステム、および／またはＶＮＦにダウンロードするように構成される。次いで、この転送情報は、ソフトウェア・データプレーン・サブシステムを含む物理デバイスによって受信されたネットワーク・データ・パケットを転送するために、ソフトウェア・データプレーン・サブシステムおよび／またはＶＮＦによって使用される。ソフトウェア制御プレーン・サブシステム１２８はまた、他のポリシ関連（たとえば、ファイアウォール・ポリシに関係付けられた）情報をデータプレーン・サブシステムにダウンロードしてもよい。
【００４３】
制御プレーン・サブシステム１２８がネットワークおよびトポロジ情報を受信し得る様々な方法がある。制御プレーン・サブシステム１２８は、ネットワーク・デバイス間のネットワークおよびトポロジ情報を交換する様々なネットワーキング・プロトコルをサポートするために処理を行うことができる。制御プレーン・サブシステム１２８は、分散ネットワーク・システムの他のコンポーネントを宛先とするまたはそれによって発信される制御プレーンパケットを生成および処理することができる。たとえば、制御プレーン・サブシステム１２８は、互いに、または他のネットワーク・デバイスもしくはシステムとトポロジ情報を交換し、ルーティング情報プロトコル（ＲＩＰ）、オープン・ショーテスト・パス・ファースト（ｏｐｅｎ  ｓｈｏｒｔｅｓｔ  ｐａｔｈ  ｆｉｒｓｔ：ＯＳＰＦ）またはボーダ・ゲートウェイ・プロトコル（ＢＧＰ）などのルーティング・プロトコルを使用して、ルーティング・テーブルを構築／維持することができる。
【００４４】
物理デバイス１０４および物理デバイス１０６内で具現されるソフトウェア・データプレーン・サブシステム（１０８、１１８）はそれぞれ、分散ＣＰＥ１００のデータ転送レイヤを表す。たとえば、分散ＣＰＥ１００の実装形態は、それぞれの物理デバイス（１０４、１０６）上で実行される１つまたは複数のソフトウェア・データプレーン・サブシステム（１０８、１１８）のみを有し、ハードウェア・データプレーン・サブシステムを有しなくてよい。
【００４５】
物理デバイス（１０４、１０６）は、仮想ネットワーク機能（ＶＮＦ）などの追加のネットワーク機能をサポートするために、ソフトウェア・データプレーン・サブシステム（１０８、１１８）と一緒に仮想化技術をサポートすることもできる。特定の例では、ＶＮＦは、ネットワーク機能仮想化（ＮＦＶ）と呼ばれることもあり、これは、本開示の範囲から逸脱することなくＶＮＦと交換可能に使用され得る。特定の実施形態では、ＶＮＦは、明確に定義されかつプログラム可能なパケット処理機能を実施するために１つまたは複数の仮想マシンまたはコンテナ内で実行されるプログラムの集合を指すことがある。特定の実装形態では、基礎となるハードウェア（たとえばプロセッサ）、オペレーティング・システム、および／またはハイパーバイザが、ソフトウェア・データプレーン・サブシステム（たとえば１０８、１１８）と一緒に、仮想ネットワーク機能（ＶＮＦ）をホストするための仮想化技術をサポートすることができる。
【００４６】
仮想化技術は、同じ物理リソースを共有する異なる動作環境の間の隔離を実現する。言い換えれば、仮想化は、コンピューティング・リソースの物理的制約からの論理的抽象化を実現する。１つの一般的な抽象化は、仮想マシン（ゲストとも呼ばれる）またはＶＭと呼ばれ、これは、ＶＭにおいて実行されているコンテンツに、抽象化を維持しながら物理ハードウェアへの直接的インターフェースを提供する。仮想化技術は、同じ物理的ハードウェア上で実行されている複数のＶＭが独立して動作して互いに隔離されることを可能にする。システム上の１つまたは複数のＶＭは、ハイパーバイザ（仮想化マシン・モニタすなわちＶＭＭとも呼ばれる）によって管理される。ハイパーバイザは、仮想マシンのホストおよび管理を担当するソフトウェアまたはファームウェア・レイヤである。ハイパーバイザは、システムのプロセッサ、メモリを管理し、各ＶＭに対する他のリソースを割り振る。
【００４７】
図１を再び参照すると、物理デバイス１０４は、ソフトウェア・データプレーン・サブシステム１０８、オペレーティング・システム・カーネル１１０、およびハイパーバイザ１１２を含むことができる。ハイパーバイザ１１２は、仮想マシン（ＶＭ  Ａ１１４およびＶＭ  Ｂ１１６）をインスタンス化し、仮想マシンにおいて仮想ネットワーク機能を実行することができる。仮想マシンをインスタンス化することは、仮想マシンのページ・テーブルおよび物理リソースをセットアップすること、仮想マシンのイベント処理、および、ゲスト・オペレーティング・システムなどの仮想マシン・イメージを仮想マシンにロードすることを含むことができる。同様に、物理デバイス１０６は、ソフトウェア・データプレーン・サブシステム１１８、オペレーティング・システム・カーネル１２０、およびハイパーバイザ１２２を含むことができる。ハイパーバイザ１２２は、仮想マシン（ＶＭ  Ｘ１２４およびＶＭ  Ｙ１２６）をインスタンス化し、仮想マシンにおいて仮想ネットワーク機能を実行することができる。特定の実施形態では、分散ＣＰＥ１００は、物理デバイス上でネイティブ（すなわち仮想化なし）データプレーン転送およびルーティング機能性を提供すると共に、仮想化を使用して、新しい機能性を追加するまたは既存のデータプレーン転送機能性を増強する柔軟性を、仮想ネットワーク機能（ＶＮＦ）を使用して提供する。
【００４８】
ＶＮＦをサポートおよびホストするために仮想化技術を使用することは、上記に開示されているが、特定の実施形態では、仮想化ハードウェア・サポートなしに、または、さらにいくつかの例ではハイパーバイザなしに、ソフトウェア・コンテナを使用してＶＮＦを実装することができる。たとえば、ＶＮＦは、Ｕｎｉｘ／Ｌｉｎｕｘベースのカーネルによって促進されるＵｎｉｘ／Ｌｉｎｕｘベースのコンテナを使用することができる。
【００４９】
ＶＮＦは、１つまたは複数の仮想マシンにおいて動作する特定のネットワーク機能の処理を担当することができる。強化されたネットワーキング機能性を提供するために、個々の仮想化ネットワーク機能をビルディング・ブロック様式で一緒につなげるまたは組み合わせることができる。ハイパーバイザは、物理デバイス（１０４、１０６）が、仮想マシンにおいて顧客構内でＶＮＦ、たとえば、レベル２（Ｌ２）、レベル３（Ｌ３）ネットワーキング機能、ファイアウォール、仮想プライベート・ネットワーク（ＶＰＮ）終端、アクセス制御リスト（ＡＣＬ）などを実行することを可能にする。たとえば、顧客がローカル電話集約のために顧客構内で構内交換機（ＰＢＸ）を動作させることを選択した場合、顧客は、データプレーンも実行しているホスト・ソフトウェアで実行されているハイパーバイザによってホストされる仮想マシンにおいてＶＮＦとしてＰＢＸを配備することができる。したがって、ソフトウェア・データプレーン・サブシステムを実行する（ＣＰＥとしても知られる）物理デバイスは、ネイティブ・データプレーン機能性を維持しながら、ホストされたＶＭとして新しい追加の機能性をホストおよび実行することができる。同様に、他の特定の実施形態では、他のネットワーキングまたは他の機能、たとえば、ディープ・パケット・インスペクション（ＤＰＩ）機能、ネットワーク分析機能、ネットワーク機械学習機能、または他の適切な機能などが、ＣＰＥのホスト・ソフトウェア・スタック上で仮想マシンにおけるＶＮＦとして配備され得る。
【００５０】
特定の例では、ソフトウェア制御プレーン・サブシステム１２８は、命令または制御メッセージをそれぞれの物理デバイスに提供することによって、ソフトウェア・データプレーン・サブシステムおよびハイパーバイザをホストする物理デバイスにおける仮想マシンのインスタンス化を制御する。さらに、ソフトウェア制御プレーン・サブシステム１２８は、制御メッセージをそれぞれの物理デバイスに提供することによって、仮想マシンにおける仮想ネットワーク機能のインスタンス化を制御し、仮想ネットワーク機能を適切に構成してもよい。仮想ネットワーク機能をインスタンス化することは、仮想マシンにおいてネットワーキング動作を行うためにネットワーク機能に対する命令をロードし実行することを含むことができる。仮想ネットワーク機能をインスタンス化することは、仮想ネットワーク機能に関連付けられた特定のパラメータおよび機能を構成することを含むこともできる。
【００５１】
集合的に、それぞれの物理デバイス上で実行されるハイパーバイザによってホストされるソフトウェア・データプレーン・サブシステム（１０８、１１８）およびＶＮＦを実行している物理デバイス（１０４、１０６）は、ソフトウェア制御プレーン・サブシステム１２８から受信された転送および構成情報に基づいて、データ・パケットを受信しネットワーク内の次のホップへデータ・パケットを転送することを担当する。ソフトウェア・データプレーン・サブシステムを備える各物理デバイスは、ソフトウェア制御プレーン・サブシステムから受信された転送情報を用いてプログラムされる。ソフトウェア・データプレーン・サブシステムおよび／またはＶＮＦは、データ・パケットを転送するために転送情報を使用する。特定の実装形態では、ソフトウェア・データプレーン・サブシステムおよび／またはＶＮＦは、（ＯＳＩモデルの）レイヤ２およびレイヤ３のルーティング機能性をサポートする。特定の実施形態では、データプレーン・サブシステムおよび／またはＶＮＦは、ＯＳＩレイヤ４〜７の機能性も提供してよい。ソフトウェア・データプレーン・サブシステムおよび／またはＶＮＦはまた、ステートフルおよびステートレス・ファイアウォールなどのルータ関連の機能性、アプリケーション・フロー、アプリケーション・ロジック・ゲートウェイ、ネットワーク・アクセス・デバイス（ＮＡＤ）能力を提供することがあり、いくつかの例では、レイヤ４ルーティングおよびより高レベルのデータ・パケット・インスペクション能力の部分的または完全な実装、ＭＰＬＳ関連の処理、ネットワーク・アドレス変換（ＮＡＴ）、ステートフル・ネットワーク接続ストレージ（ＮＡＳ）、階層型ＱｏＳ（サービス品質）、Ｑ−ｉｎ−Ｑ、インターネット・プロトコル・セキュリティ（ＩＰｓｅｃ）のサポート、総称ルーティング・カプセル化（ＧＲＥ）、仮想拡張ＬＡＮ（ＶＸＬＡＮ）、データフローの分析および管理のための様々なツール、ディープ・パケット・インスペクション（ＤＰＩ）、最長パケット一致（ＬＰＭ）パケット・ルックアップ、仮想プライベート・ネットワーク（ＶＰＮ）、ならびに他の機能性を提供することがある。
【００５２】
ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、物理デバイス（１０４、１０６）のポートを介してネットワーク・データ・パケットを受信することができる。ポートは、論理ポートまたは物理ポートであってよい。次いで、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、受信したネットワーク・データ・パケットをどのように転送するかを決定する。この決定の一部として、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、受信したデータ・パケットから情報（たとえばヘッダ情報）を抽出し、抽出した情報から、ネットワーク・データ・パケットのソースおよび宛先情報を決定し、次いで、抽出した情報、転送情報、および、ソフトウェア・データプレーン・サブシステムによってソフトウェア制御プレーン・サブシステム１２８から受信されソフトウェア・データプレーン・サブシステム（１０８、１１８）によって記憶された他の適用可能なポリシに関連する情報に基づいて、ネットワーク・データ・パケットをどのように転送するかを決定することができる。特定の実施形態では、ソフトウェア・データプレーン・サブシステム（１０８、１１８）が、受信したネットワーク・データ・パケットをどのように転送するかを決定することができない場合、パケットが破棄される。さもなければ、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、パケットをその意図した宛先への通信を促進するように、ネットワーク・データ・パケットを次のホップに転送するために使用すべき出力ポートを決定する。次いで、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、決定した出力ポートを使用してネットワーク・データ・パケットを転送する。
【００５３】
ソフトウェア・データプレーン・サブシステム（１０８、１１８）、カーネル（１１０、１２０）、ハイパーバイザ（１１２、１２２）、および、仮想マシンにおいて実行されるそれぞれのＶＮＦは、１つまたは複数の処理エンティティ、たとえば、インテル（登録商標）、ＡＭＤ（登録商標）、Ｐｏｗｅｒ、ＡＲＭにより提供されるプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、またはフィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはネットワーク処理ユニット（ＮＰＵ）などによって実行される命令（またはコード）のセットとして実装される。たとえば、図１に示すソフトウェア・データプレーン・サブシステム（１０８、１１８）は、図６に示され後述されるようなコンピューティング・システムによって実行され得る。異なるプロセッサ・アーキテクチャ上で実行されている異なるソフトウェア・データプレーン・サブシステムが、同じソフトウェア制御プレーン・サブシステム１２８によって制御されてよい。
【００５４】
上記に示したように、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、１つまたは複数のＮＰＵによって実行されてもよい。ＮＰＵは、一般に、ネットワーク関連機能を処理するために特に設計され最適化されたプログラマブル・マルチコア・マイクロプロセッサである。ネットワーク・プロセッサは、典型的にはソフトウェア・プログラマブル・デバイスであり、汎用中央処理装置と同様の一般的特性を有し、パターン・マッチング、キー・ルックアップ、計算、ビット操作、バッファの割当ておよび管理など、ネットワーク関連機能を実行するために最適化される。
【００５５】
ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、高速データ・パケット転送能力を提供するように構成される。一実施形態では、ソフトウェア・データプレーン・サブシステム（１０８、１１８）は、Ｌｉｎｕｘベースの転送パイプラインを使用することができる。別の実施形態では、さらに速い処理のために、ネットワーク・データ・パケットを高速で並列に処理するのを可能にするＭＣＥＥ（マルチコア実行環境）アーキテクチャが使用される。ＭＣＥＥモデルを使用するソフトウェア・データプレーン・サブシステムは、受信されたネットワーク・データ・パケットを、それらのネットワーク・データ・パケットの処理に割り当てられた個々のコアに分散するように構成される。各コアは、それが受信したネットワーク・データ・パケットを処理し、ネットワーク・データ・パケットをアウトバウンド・ポートに転送する。パケット処理は、ＭＣＥＥアーキテクチャを使用するとかなり迅速であり、なぜならば、それにより、ネットワーク・データ・パケットの並列処理と、ネットワーク・データ・パケットの処理に割り当てられたいくつかの処理リソースへのネットワーク・データ・パケットの分散とが可能になるからである。
【００５６】
そのような分散ＣＰＥ１００において、顧客構内（すなわちＣＰＥデバイス）に配置された物理デバイス（１０４、１０６）は、ホスト・ソフトウェア・スタックの一部としてソフトウェア・データプレーン・サブシステム（１０８、１１８）およびハイパーバイザ（１１２、１２２）を実行するが、制御プレーン機能性は実行せず、代わりに、制御プレーン・サブシステム１２８をホストするリモートの集中物理デバイス１０２と対話する。特定の実施形態では、ソフトウェア・データプレーン・サブシステム（１０８、１１８）を実行する顧客構内（すなわちＣＰＥデバイス）に配置された物理デバイス（１０４、１０６）は、制御プレーン・サブシステムを有しない。他の実施形態では、ソフトウェア・データプレーン・サブシステム（１０８、１１８）を実行する顧客構内に配置された物理デバイス（１０４、１０６）（すなわちＣＰＥデバイス）は、制御プレーン・ソフトウェアを有することができるが、そのような機能性を無効にしてよく、または制御プリーン機能性に関連付けられた命令を実行しなくてよい。
【００５７】
特定の実施形態では、顧客構内に配置された物理デバイス（１０４、１０６）における制御プレーン・サブシステムおよび／または制御プレーン機能性の欠如は、主要な制御プレーン機能性、たとえば、ルーティング・プロトコル、ＭＰＬＳなど、および図３でより詳細に論じられる他の主要な制御プレーン・サブシステム機能性を、そのようなデバイス（１０４、１０６）が提供または実行しないことを意味することがある。特定の実施形態では、ソフトウェア・データプレーン・サブシステムを備える物理デバイス（１０４、１０６）が、主要な制御プレーン・サブシステム機能性をまったく実行せずに、分散ＣＰＥ１００におけるリモート物理デバイス（１０２）および他のリモート・ノード上で動作する制御プレーン・サブシステム１２８に対する接続性を提供するソフトウェア・データプレーン・サブシステムへの制御プレーン・システム・インターフェースをやはり提示することができる。
【００５８】
特定の実施形態では、ソフトウェア・データプレーン・サブシステムに対するオーバーレイ・ネットワークと共に集中制御プレーン・サブシステム１２８を有することにより、単一の大きなルータに似るビューがオペレータに提供される。また、制御プレーン・サブシステムとデータプレーン・サブシステムのそのような分離により、分散機器（すなわちＣＰＥ）のハードウェア・リソースが、ネットワーク・データ・パケットを転送するためにハードウェア・リソースのフィールド利用を最大化することを可能にし、より処理集約的であるがレイテンシに敏感でない（または比較的敏感でない）タスクであり得る制御プレーン・タスクを、リモートの集中制御プレーン・サブシステムへ押し出す。集中制御プレーン・サブシステムは、複数のＣＰＥにおいて動作する複数のソフトウェア・データプレーン・サブシステムを制御することができる。
【００５９】
特定の実施形態では、開示される特定の態様が、新しいデータプレーン・サブシステムを用いて、ＣＰＥなどのデバイス上のネイティブ・ソフトウェア・データ・プレーン・サブシステムの機能性を増強することをサポートすることもできる。たとえば、ハイパーバイザを使用するホスト・ソフトウェア・スタックは、仮想マシンに新しいデータプレーン・サブシステムを導入し、ネイティブ・データプレーン・サブシステムを使用して物理ネットワークと仮想マシン内の新しいデータプレーン・サブシステムとの間でネットワーク・データ・パケットをサービス・チェイニングすることができる。特定の実施形態では、ハイパーバイザはラインカード内にあり、いくつかのそのようなラインカードがネットワーク全体を通して分散された機能である。
【００６０】
また、制御プレーン機能性を集中化することは、個々のＣＰＥデバイスにおける高速転送のための分散データプレーン機能性を提供し続けながら、制御プレーン機能性の統合／集約を可能にする。これはまた、全てのそれらの分散ＣＰＥデバイスの制御が集中化されるので、ネットワークの容易な構成、および全部の分散デバイスの維持を促進する。ソフトウェア制御プレーン・サブシステムにおける単一の命令は、個々のＣＰＥ上で動作している全ての関連ソフトウェア・データプレーン・サブシステムに解釈され広められることが可能である。
【００６１】
特定の実施形態では、これにより、サービス型ソフトウェア（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）モデルが可能になり、このモデルでは、管理者が、データセンタにおける１つの制御プレーン・サブシステム・インターフェイスを介して引き出される分散ルータ・インターフェイスを介して全てつながるローカル・サービス機能に追加される相互接続分岐およびＳＰ  ＬＡＮ機能性を実行することができる。
【００６２】
特定の実施形態では、オーケストレーション・レイヤ（ｏｒｃｈｅｓｔｒａｔｉｏｎ  ｌａｙｅｒ）が、分散機能を有する１つのルータのように見えるシステムの単一の可視化を提供することができ、そのルータ用のソフトウェア制御プレーン・サブシステム１２８は、データセンタで実行されていて、ソフトウェア・データプレーン・サブシステム、ならびに仮想マシンおよびＶＦＮ機能性をサポートするハイパーバイザは、ＣＰＥなどの個々のデバイス上で実行されている。たとえば、管理者がログインしてインターフェースを見たとき、物理的なｅｔｈ０インターフェースがオースティンにあってもよく、ｅｔｈ１インターフェースがデンバーにあってもよく、それに対し、制御プレーン・サブシステムそれ自体はカリフォルニア州サンノゼで実行されてもよい。
【００６３】
図２は、本開示の特定の態様による、ソフトウェア・データプレーン・サブシステムを備える物理デバイス２００を示す例示的なブロック図である。たとえば、物理デバイス２００は、図１の例示的な物理デバイス１０４または１０６を示す。デバイス２００は、分散ＣＰＥ１００の例示的なＣＰＥデバイスであり得る。図２に示すように、デバイス２００は、メモリ２３０およびハードウェア・リソース２２０を含むことができる。ハードウェア・リソース２２０は、１つまたは複数のプロセッサ２２２および物理ネットワーク・インターフェース２２４を含むことができるが、それらに限定されない。図６に関して開示される他のいくつかのコンポーネントが、デバイス２００を実装する際に利用されてもよい。物理ネットワーク・インターフェース２２４は、デバイス２００におけるネットワーク・データおよび制御パケットを送信および受信するための物理ポートを提供することができる。言い換えれば、物理ネットワーク・インターフェース２２４は、デバイス２００とプライベートまたはパブリック・ネットワーク（たとえば１３４）との間の相互接続のポイントである。たとえば、イーサネットポートが物理ネットワーク・インターフェースであってよい。ハードウェア・リソース２２０における１つまたは複数のプロセッサ２２２は、ネットワーク・データ・パケット転送に関連付けられた動作を実行するために、ストレージ・デバイス６２５および／またはネットワークからホスト・ソフトウェア・スタック２２６をメモリ２３０内にロードすることができる。
【００６４】
メモリ２３０は、オペレーティング・システム・カーネル空間（またはカーネル）２０４およびユーザ空間２０８を含むいくつかの領域へ論理的に分割され得る。カーネル空間２０４からロードされた命令は、１つまたは複数のプロセッサ２２２にロードされると、カーネル・モードで実行することができる。同様に、ユーザ空間２０８からロードされた命令は、１つまたは複数のプロセッサ２２２にロードされると、ユーザ・モードで実行することができる。カーネル・モードでカーネル２０４から実行される命令は、いくつかの例では、より高い特権を有してよく、プロセッサに関連付けられた特定の制御レジスタを操作するなどの特権命令を実行できてよい。
【００６５】
特定の実施形態では、ハイパーバイザ２０６は、先に論じたように、仮想化環境をサポートするために、ホスト・ソフトウェア・スタック２２６の一部としてカーネル２０４と共に実装、追加、または実行され得る。そのような環境において、カーネル２０４、ハイパーバイザ２０６、およびユーザ空間２０８の一部として実行されているソフトウェア・コンポーネントは、ホスト・ソフトウェア・スタック２２６の一部と見なされてよい。図２に示すように、メモリ２３０からデバイス２００上で実行されているハイパーバイザ２０６は、ＶＮＦをホストするために、ＶＭ１（２２８−１）、ＶＭ２（２２８−２）、およびＶＭ  Ｎ（２２８−Ｎ）（簡単にするため、集合的にＶＭ２２８とも呼ばれる）などのいくつかの仮想マシンを管理することができる
【００６６】
特定の実施形態では、ＣＰＥ２００は、ハードウェアにサポートされた仮想化された環境、またはカーネルベースの仮想マシン（ＫＶＭ）および／もしくはクイック・エミュレータ（Ｑｕｉｃｋ  Ｅｍｕｌａｔｏｒ：Ｑｅｍｕ）を使用するソフトウェアベースの仮想化環境（すなわちエミュレーション）を有することができる。たとえば、ＫＶＭは、名前空間の仮想化、およびプロセッサ仮想化によってサポートされるリソースの仮想化を可能にすることができる。他方で、Ｑｅｍｕは、プロセッサ／カーネルが仮想化しないリソースをエミュレートする。たとえば、Ｑｅｍｕは、ネットワーク・インターフェース・カード（ＮＩＣ）インターフェースをエミュレートする。
【００６７】
特定の実施形態では、ＬｉｂＶｉｒｔ２１６は、ハイパーバイザ２０６とＶＭ２２８との間の追加のレイヤとして使用される。特定の実施形態では、ＬｉｂＶｉｒｔ２１６は、アプリケーション・プログラマブル・インターフェース（ＡＰＩ）をＱｅｍｕへ提供することができる。ＬｉｂＶｉｒｔ２１６はまた、ＶＭの始動、停止、および管理などの仮想化機能を管理するためのツールセットを提供する。加えて、特定の実施形態では、本開示の態様によれば、ＬｉｂＶｉｒｔ２１６コマンドは、ソフトウェア制御プレーン・サブシステム１２８によってＶＭ２２８がリモート管理されることが可能なように、デバイス２００によって提示される。特定の例では、ＯｐｅｎＳｔａｃｋなどのプロトコルは、ＬｉｂＶｉｒｔ２１６  ＡＰＩを通じて直接ＶＭ２２８を管理するためにソフトウェア制御プレーン・サブシステム１２８によって使用され得る。
【００６８】
カーネルにおける物理ネットワーク・インターフェース２２４で受信されたネットワーク・データ・パケットは、イーサネット・ドライバによってカーネル空間内で処理される。カーネルのネットワーキング・スタックは、ネットフィルタリング、ルーティングを実行し、次いで、処理されたパケットを、異なる物理ネットワーク・インターフェースを介して送出することができる。しかしながら、特定の実装形態では、ネットワーク・インフラストラクチャをサポートするデバイス２００のいくつかの態様は、システムの応答性を向上するためにユーザ空間２０８の一部として実装され得る。たとえば、ソフトウェア・データプレーン・サブシステム２３２が、ユーザ空間２０８におけるホスト・ソフトウェア・スタック２２６内に実装され得る。１つの例示的な実装形態では、ソフトウェア・データプレーン・サブシステム２３２は、例示的なＬ２パケット処理パイプライン２１２およびＬ３パケット処理パイプライン２１４を実装することができる。カーネル２０４は、ソフトウェア・データプレーン・サブシステム２３２によって提供される機能を促進することができる。たとえば、一実装形態では、カーネル２０４は、カーネル２０４からシャドウ・インターフェース・ドライバ（ｓｈａｄｏｗ  ｉｎｔｅｒｆａｃｅ  ｄｒｉｖｅｒｓ）を実行することができる。これらのシャドウ・インターフェース・ドライバは、カーネル性能に無視できるほどの負担をかけるだけで、パケットを受け取り、それらをソフトウェア・データプレーン・サブシステム２３２のためのユーザ空間パケット・パイプライン（ブロック２１２および２１４）に移動することができる。ソフトウェア・データプレーン・サブシステム２３２内のユーザ空間２０８において、パケットは、プロセッサまたは処理コア上で実行されているリアルタイム・スレッドを使用して処理され得る。リアルタイム・スレッドは、他のスレッドもしくはタスクよりも高い優先度を使用して実行されてよく、または専用のリソースが割り当てられてもよい。特定の実装形態では、ネットワーク・データ・パケットの処理などの特定のタスクに対してリアルタイム・スレッドを割り当てることが、そのスレッドの処理に対して物理的コアを割り当てることをもたらし、その結果、ネットワーク・データ・パケットの比較的ジッターフリーで優先された処理をもたらし得る。
【００６９】
本開示の態様によれば、特定のネットワーキング機能が、ホストスタックソフトウェア２２６のユーザ空間２０８内のソフトウェア・データプレーン・サブシステム２３２によって処理される。そのような実装形態は、分散ＣＰＵ１００の柔軟性を許容し、デバイス２００の顧客構内への配備の後、デバイス２００は、ホスト・ソフトウェア・スタック２２８におけるソフトウェア・データプレーン・サブシステム２３２の一部として実装されたネイティブルーティング能力を使用してルーティング機能性を提供することができ、ＶＭ２２８においてルーティング能力を提供することによってネットワーク機能性を増強または置換することができる。
【００７０】
特定の実施形態では、デバイス２００は、分散ＣＰＥ１００におけるリモート物理デバイス１０２および他のリモート・ノード上で動作する制御プレーン・サブシステム１２８に対する接続性を提供するネットワーキング・スタック２３４を含むことができる。  ネットワーキング・スタック２３４は、デバイス２００のための基本的なネットワーキング機能性、たとえば、動的ホスト構成プロトコル（ＤＨＣＰ）を使用して割り当てられたアドレスを取得すること、データプレーン・サブシステム起動プロセスをリモート・ソーシングすること、デバイス２００を制御プレーン・サブシステムを含む物理デバイスに接続することなどを提供する。ネットワーキング・スタック２３４は、ルーティング・プロトコル、ＭＰＬＳなど、および図３により詳細に論じられる他の主要な制御プレーン・サブシステム機能性を実行せず、単に接続性をリモート・システムに提供する。
【００７１】
特定の実施形態では、デバイス２００は、コマンドライン・インターフェース（ＣＬＩ）を直接使用して受信された、または表現状態転送（ｒｅｐｒｅｓｅｎｔａｔｉｏｎａｌ  ｓｔａｔｅ  ｔｒａｎｓｆｅｒ：ＲＥＳＴ）およびＮＥＴＣＯＮＦなどのプロトコルを使用し制御プレーン・サブシステム１２８からリモートで受信された、全ての新しいコマンドから生じる状態を隔離できる、ローカル・システム・データ・モデル２３６を含むことができる。特定の実施形態では、ローカル・システム・データ・モデル２３６は、ユーザ資格情報、（ノードへのリモート・アクセスを可能にするための）ｓｓｈサービス、およびローカル・インターフェースのための構成など、ローカル・パラメータおよび機能を管理／構成することができる。特定の実施形態では、ローカル・システム・データ・モデル２３６は、制御プレーン・サブシステムを備える物理デバイスによって管理されるデータ・モデルの部分的ビューをキャッシュまたは維持することができる。
【００７２】
そのような分散ＣＰＥ１００において、顧客構内に配置されたデバイス２００は、ホスト・ソフトウェア・スタック２２６の一部としてソフトウェア・データプレーン・サブシステム２３２およびハイパーバイザ２０６を実行するが、制御プレーン機能を実行せず、代わりに、制御プレーン・サブシステム１２８をホストするリモートの集中物理デバイス１０２と対話することに留意されたい。特定の実施形態では、ソフトウェア・データプレーン・サブシステム２３２を実行する顧客構内に配置されたデバイス２００は、制御プレーン・サブシステムを有しない。他の実施形態では、ソフトウェア・データプレーン・サブシステム２３２を実行するデバイス２００は、制御プレーン・ソフトウェアを有することができるが、そのような機能性を無効にしてよく、または制御プリーン機能性に関連付けられた命令を実行しなくてよい。
【００７３】
特定の実施形態では、上述されたように、物理デバイス２００上の制御プレーン・サブシステムおよび／または制御プレーン機能性の欠如は、主要な制御プレーン機能性、たとえば、ルーティング・プロトコル、ＭＰＬＳなど、および図３でより詳細に論じられる他の主要な制御プレーン・サブシステム機能性を、提供または実行しないことを意味することがある。
【００７４】
図３は、本開示の特定の態様による、ソフトウェア制御プレーン・サブシステムを備える物理デバイス３００を示す例示的なブロック図である。たとえば、物理デバイス３００は、図１の例示的な物理デバイス１０２を示す。図３に示すように、デバイス３００は、メモリ３３０およびハードウェア・リソース３２０を含むことができる。ハードウェア・リソース３２０は、１つまたは複数のプロセッサ３２２および物理ネットワーク・インターフェース３２４を含むことができるが、それらに限定されない。図６に関して開示される他のいくつかのコンポーネントが、デバイス３００を実装する際に使用されてもよい。物理ネットワーク・インターフェース３２４は、デバイス３００におけるネットワーク制御パケットを送信および受信するための物理ポートを提供することができる。言い換えれば、物理ネットワーク・インターフェース３２４は、デバイス２００とプライベートまたはパブリック・ネットワーク（たとえば３１４）との間の相互接続のポイントである。たとえば、イーサネットポートが物理ネットワーク・インターフェースであってよい。特定の実施形態では、ハードウェア・リソース３２０における１つまたは複数のプロセッサ３２２は、ネットワーク・データ・パケット転送に関連付けられた動作を実行するために、ストレージ・デバイス６２５および／またはネットワークからカーネル３０４、データ・モデル３１０、およびソフトウェア制御プレーン・サブシステム３１５をメモリ３３０内にロードすることができる。特定の実装形態では、データ・モデル３１０およびソフトウェア制御プレーン・サブシステム３１５の少なくとも部分が、ユーザ空間３０６内に実装され得る。
【００７５】
特定の実施形態では、制御プレーン・サーバ・コンピュータとも呼ばれる制御プレーンを実行しているデバイスが、分散されたＣＰＥなどのソフトウェア・データプレーン・サブシステムを有する全ての物理デバイスの統一され集中化されたビューを維持するように、データ・モデル３１０を実装する。データ・モデル３１０は、異なるコマンド・インターフェースを介し、コマンドライン・インターフェース（ＣＬＩ）を直接使用して、または表現状態転送（ＲＥＳＴ）およびＮＥＴＣＯＮＦなどのプロトコルを使用しコントローラからリモートで受信された、全ての新しいコマンドから生じる状態を隔離できる。そのような動作モード・コマンドを使用して、分散ＣＰＥ１００の状態が、データ・モデル３１０において制御プレーン・サーバ・コンピュータで維持され得る。
【００７６】
一実装形態では、データ・モデル３１０は、ＹＡＮＧ（ｙｅｔ  ａｎｏｔｈｅｒ  ｎｅｘｔ  ｇｅｎｅｒａｔｉｏｎ）モデルを使用して実装され得る。ＹＡＮＧは、ＮＥＴＣＯＮＦのためのデータ・モデリング言語である。ＹＡＮＧは、ネットワーク要素の構成データおよび状態データの両方をモデル化するために使用することができる。さらに、ＹＡＮＧは、ネットワーク要素によって発せられたイベント通知のフォーマットを定義するために使用することができる。したがって、ＹＡＮＧを使用して実装されたデータ・モデル３１０は、分散ＣＰＥ１００が、統一されたモデルを使用して遷移状態および静的状態を維持することを可能にする。そのような統一されたデータ・モデル３１０の実装形態は、システムにおける様々なデータ要素のより良い同期を可能にする。
【００７７】
ソフトウェア制御プレーン・サブシステム３１５は、データ・モデル３１０に結合され、コントローラから受信されたコマンドまたはネットワーク・ポリシを実装するように構成され得る。一実施形態では、ソフトウェア制御プレーン・サブシステム３１５は、コントローラから受信されたネットワーク・ポリシを取得し、それらをデータプレーン・サブシステム（１０８、１１８）のアクションに変換することを担当する。ソフトウェア制御プレーン・サブシステム３１５は、ソフトウェア・データプレーン・サブシステムがそれらの初期化の際にそれら自体をソフトウェア制御プレーン・サブシステム３１５に登録したとき、それがどのソフトウェア・データプレーン・サブシステムを制御するかを学習する。
【００７８】
ソフトウェア制御プレーン・サブシステム３１５は、ソフトウェア・データプレーン・サブシステム（１０８、１１８）と通信するために様々な異なる通信技法を使用してよい。特定の実施形態では、図１に示すように、ソフトウェア制御プレーン・サブシステム３１５は、ソフトウェア・データプレーン・サブシステム（１０８、１１８）の両方と通信するために制御チャネル１３２を使用する。一実施形態では、制御チャネル１３２を介するメッセージングは、ＪＳＯＮ（ＪａｖａＳｃｒｉｐｔ  Ｏｐｅｎ  Ｎｏｔａｔｉｏｎ）カプセル化を用いたＺｅｒｏＭＱトランスポート・メカニズムを使用することができる。ＺｅｒｏＭＱ（ＯＭＱまたは０ＭＱまたはＺＭＱとも表記される）は、スケーラブルな分散または並列アプリケーションでの使用を目的とした高性能非同期メッセージング・ライブラリである。それは、専用メッセージ・ブローカなしで実行できるメッセージ・キューを提供する。ライブラリは、馴染みあるソケット・スタイルＡＰＩを有するように設計される。それは、インプロセス、プロセス間、ＴＣＰ、およびマルチキャストのような様々なトランスポートにわたってアトミック・メッセージを搬送するソケットを提供する。その非同期Ｉ／Ｏモデルは、スケーラブルなマルチコア・アプリケーションを可能にする。ＪＳＯＮは、分散ネットワーク・システムの階層ビューを提供するためのメカニズムを提供する。
【００７９】
たとえば、データ・モデル３１０は、コントローラからユーザによって構成されたファイアウォール・ポリシを受信し、ファイアウォール・ポリシのデータ・モデル表現を作成し、データ・モデル３１０にポリシ関連情報を記憶することができる。次いで、ソフトウェア制御プレーン・サブシステム３１５は、データ・モデル表現をＪＳＯＮ表現に変換することができ、次いで、その表現は、ＺｅｒｏＭＱメッセージにカプセル化され、制御チャネル１３２を介してＺｅｒｏＭＱバスを使用して様々なデータプレーン・サブシステムに伝達される。
【００８０】
ソフトウェア制御プレーン・サブシステム３１５はまた、制御チャネル１３２を介してデータプレーン・サブシステムからメッセージを受信することができる。これらのメッセージは、たとえば、データプレーン・サブシステムおよび／またはＶＮＦについてのステータスおよび状態情報を、ソフトウェア制御プレーン・サブシステム３１５に伝達することができる。たとえば、ソフトウェアデータプレーン・サブシステムでの変化（たとえば、インターフェース状態変化）がある場合、その情報は、ソフトウェア・データプレーン・サブシステムによってＪＳＯＮ表現にカプセル化され、次いで、ＺｅｒｏＭＱメッセージ・バスにカプセル化され、制御チャネル１３２を使用して制御プレーン・サブシステム３１５に送信される。次いで、制御プレーン・サブシステム３１５は、状態変化に応答するためにアクションを行うことができる（たとえば、データ・モデル３１０の更新、ルータ変更など）。
【００８１】
特定の実施形態では、制御プレーン・サーバ・コンピュータ３００は、オペレーティング・システム・カーネル３０４、データ・モデル３１０のためのロジック、およびソフトウェア制御プレーン・サブシステム３１５を含む。オペレーティング・システム・カーネル３０４、データ・モデル３１０のためのロジック、およびソフトウェア制御プレーン・サブシステム３１５は、インテル（登録商標）もしくはＡＭＤ（登録商標）より提供されるプロセッサまたは他のプロセッサなどの１つまたは複数の処理エンティティによって実行される命令（コードまたはプログラム）のセットとして実装される。たとえば、制御プレーン・サブシステム１２８は、図６に示され後述されるようなコンピューティング・システムによって実行され得る。マルチコア・プロセッサ環境では、制御プレーン・サブシステムは、１つまたは複数のプロセッサの１つまたは複数のコアによって実行され得る。１つまたは複数のプロセッサによって実行される１つまたは複数の仮想マシンを含む仮想化環境において、ソフトウェア制御プレーン・サブシステム３１５は、仮想マシン内で実行されもしくは仮想マシンによりホストされてよく、またはさらに、ハイパーバイザ（たとえばＫＶＭハイパーバイザ）もしくはネットワーク・オペレーティング・システムによってホストされてもよい。本明細書ではソフトウェア制御データプレーン３１５が開示されているが、特定の実装形態では、本開示の範囲から逸脱することなくハードウェア制御データプレーンが実装されもよい。
【００８２】
ソフトウェア制御プレーン・サブシステム３１５は、データプレーン・サブシステム（１０８、１１８）および／またはＶＮＦの構成および管理を担当する。たとえば、制御プレーン・サブシステム３１５は、分散ネットワークに関するルーティングおよびトポロジ情報を維持するように構成される。次いで、この情報は、制御プレーン・サブシステムによって、１つまたは複数のデータプレーン・サブシステムおよび／またはＶＮＦをプログラムするために使用され、そうすることで、それらは、データ・パケットのそのソースからその意図した宛先への送達を促進するようにデータ・パケットを転送することが可能になる。特定の実施形態では、ソフトウェア制御プレーン・サブシステム３１５は、転送情報をソフトウェア・データプレーン・サブシステムまたはＶＮＦにダウンロードするように構成される。次いで、この転送情報は、ソフトウェア・データプレーン・サブシステムを含む物理デバイスによって受信されたデータ・パケットを転送するために、データプレーン・サブシステムおよび／またはＶＮＦによって使用される。ソフトウェア制御プレーン・サブシステム３１５はまた、他のポリシ関連（たとえば、ファイアウォール・ポリシに関係付けられた）情報をデータプレーン・サブシステムにダウンロードしてもよい。
【００８３】
ソフトウェア制御プレーン・サブシステム３１５がネットワークおよびトポロジ情報を受信し得る様々な方法がある。ソフトウェア制御プレーン・サブシステム３１５は、ネットワーク・デバイス間のネットワークおよびトポロジ情報を交換する様々なネットワーキング・プロトコルをサポートするために処理を行うことができる。ソフトウェア制御プレーン・サブシステム３１５は、分散ネットワーク・システムの他のコンポーネントを宛先とするまたはそれによって発信される制御プレーンパケットを生成および処理することができる。たとえば、制御プレーン・サブシステム３１５は、互いに、または他のネットワーク・デバイスもしくはシステムとトポロジ情報を交換し、ルーティング情報プロトコル（ＲＩＰ）、オープン・ショーテスト・パス・ファースト（ＯＳＰＦ）またはボーダ・ゲートウェイ・プロトコル（ＢＧＰ）などのルーティング・プロトコルを使用して、ルーティング・テーブルを構築／維持することができる。
【００８４】
また、データ・モデル３１０、ならびにソフトウェア制御プレーン・サブシステム３１５およびソフトウェア・データプレーン・サブシステム２３２の分岐を使用して、制御プレーン機能性を集中化することは、ＣＰＥなどの個々のデータ転送デバイスにおける高速転送のための分散データプレーン機能性を提供し続けながら、制御プレーン機能性の統合／集約を可能にする。これにより、ネットワークの容易な構成、および分散デバイスの維持もまた、制御プレーン・サーバ・コンピュータにおいてそれらの全ての分散デバイスの制御が集中化されるために促進される。制御プレーン・サブシステムにおける単一の命令は、個々のＣＰＥ上で動作している全ての関連データプレーン・サブシステムに解釈され広められることが可能である。
【００８５】
特定の実施形態では、これにより、サービス型ソフトウェア・モデルが可能になり、このモデルでは、管理者が、データセンタにおける１つの制御プレーン・サブシステム・インターフェイスを介して引き出される分散ルータ・インターフェイスを介して全てつながるローカル・サービス機能に追加される相互接続分岐およびＳＰ  ＬＡＮ機能性を実行することができる。
【００８６】
特定の実施形態では、制御プレーン・サーバ・コンピュータは、分散機能を有する１つのルータのように見えるシステムの単一の可視化を提供できるオーケストレーション・レイヤ（図示せず）をホストすることもでき、そのルータ用のソフトウェア制御プレーン・サブシステムは、データセンタで実行されていて、ソフトウェア・データプレーン・サブシステム、ならびに仮想マシンおよびＶＦＮ機能性をサポートするハイパーバイザは、個々に実行されている。
【００８７】
図４は、本開示の１つまたは複数の例示的態様による、本発明の実施形態を実施するための方法４００を示すフロー図である。１つまたは複数の態様によれば本明細書に説明される方法および／または方法ステップのいずれかおよび／または全てが、物理デバイス１０４（もしくはデバイス１０６）、デバイス２００、またはコンピュータ・システム６００によって、および／または物理デバイス１０４（もしくはデバイス１０６）、デバイス２００、またはコンピュータ・システム６００に内で実装され得る。一実施形態では、図４に関連して説明される方法ステップのうちの１つまたは複数が、プロセッサ６１０または別のプロセッサなどのコンピューティング・システム６００の１つまたは複数のプロセッサによって実装される。加えてまたは代わりに、本明細書に説明される方法および／または方法ステップのいずれかおよび／または全ては、コンピュータ可読命令、たとえば、メモリ６３５、ストレージ６２５、または別のコンピュータ可読媒体などのコンピュータ可読媒体に記憶されたコンピュータ可読命令で実装されてよい。
【００８８】
ブロック４０２で、デバイスのコンポーネントは、第１のデバイスについてのネットワーク・データ・パケットのネットワーク・データ・パケット転送を変更するための第１のネットワーク制御パケットを受信することができる。特定の実施形態では、デバイスは顧客構内に配置されてよく、ＣＰＥデバイスと呼ばれることがある。ネットワーク制御パケットは一般に、ネットワーク自体の作成および動作に使用される、ネットワーク・デバイス（たとえば、制御プレーン・サーバ・コンピュータ）で生成または受信されたパケットを指すことがある。一例では、ネットワーク制御パケットは、デバイス上で実行されるデータプレーン・サブシステムおよび／またはＶＮＦを更新および／または構成することができる。ネットワーク制御パケットを使用する例示的なプロトコルは、ＡＲＰ、ＢＧＰ、ＯＳＰＦ、およびネットワークを一緒に制御する他のプロトコルを含むが、これらに限定されない。
【００８９】
ブロック４０４で、デバイスのコンポーネントは、第１のデバイス上でホスト・ソフトウェア・スタック内で実行されているデータプレーン・サブシステムにおいてデバイスの転送機能性を変更することができる。
【００９０】
ブロック４０６で、デバイスは、第１のネットワーク・データ・パケットを受信することができる。ネットワーク・データ・パケットは一般に、中間ネットワーク・デバイスによって他のエンド・デバイスに転送される、エンド・デバイス・ユーザ・アプリケーションで生成されたパケットを指すことができる。ネットワーク・デバイスの観点からは、ネットワーク・データ・パケットは常に輸送宛先インターネット・プロトコル（ＩＰ）アドレスを有し、データプレーン・サブシステムの宛先ＩＰアドレスベースの転送プロセスを使用してルーティングされる。
【００９１】
ブロック４０８で、デバイスは、データプレーン・サブシステムを使用して第１のネットワーク・データ・パケットを転送することができる。
【００９２】
ブロック４１０で、デバイスは、第２のネットワーク・データ・パケットを受信する。ブロック４１２で、デバイスは、第１のデバイスにおいて仮想マシン内で実行されるネットワーク機能を使用して第２のネットワーク・データ・パケットを処理することができ、ホスト・ソフトウェア・スタックにおけるハイパーバイザが、仮想マシンをインスタンス化する。特定の実装形態では、ネットワーク機能を実装することは、ネットワーク・ノードまたは機能性を実装することを含むことができる。
【００９３】
図４に示す特定のステップは、本発明の実施形態による動作のモード間の切替えの特定の方法を提供することは理解されよう。他の系列のステップが代替実施形態で相応に実行されてもよい。たとえば、本発明の代替実施形態では、上述されたステップを他の順序で実行してもよい。さらに、特定の用途に応じて、追加のステップまたはステップに対する変形が加えられまたは除去されてもよい。当業者であれば、プロセスの多くの変形、修正、および代替形態を認識および理解するであろう。
【００９４】
図５は、本開示の１つまたは複数の例示的態様による、本発明の実施形態を実施するための方法５００を示すフロー図である。１つまたは複数の態様によれば、本明細書に説明される方法および／または方法ステップのいずれかおよび／または全てが、物理デバイス１０２、デバイス３００、またはコンピュータ・システム６００によって、および／または物理デバイス１０２、デバイス３００、またはコンピュータ・システム６００内で実装され得る。一実施形態では、図５に関連して説明される方法ステップのうちの１つまたは複数が、プロセッサ６１０または別のプロセッサなどのコンピューティング・システム６００の１つまたは複数のプロセッサによって実装される。加えてまたは代わりに、本明細書に説明される方法および／または方法ステップのいずれかおよび／または全ては、コンピュータ可読命令、たとえば、メモリ６３５、ストレージ６２５、または別のコンピュータ可読媒体などのコンピュータ可読媒体に記憶されたコンピュータ可読命令で実装されてよい。
【００９５】
ブロック５０２で、制御プレーン・サーバ・コンピュータなどの第１のデバイスが、制御プレーン・サブシステムを実行することができる。特定の実施形態では、制御プレーン・サブシステムは、命令を有するソフトウェア制御プレーン・サブシステムであり、命令は、メモリのストレージ・デバイスからロードされ１つまたは複数のプロセッサ上で実行される。第１のデバイスは、制御プレーン・サーバ・コンピュータおよびいくつかの他のデバイス、たとえばＣＰＥデバイスなどを含むオーバーレイ・ネットワークに対するインターフェースを提供することができる。全てのデバイスは集合的に分散ＣＰＥを表すことができる。
【００９６】
ブロック５０４で、第１のデバイスは、第２のデバイス上で実行されるように構成された第１のソフトウェア・データプレーン・サブシステムの転送機能性を制御することができる。いくつかのシナリオでは、第２のデバイスは顧客構内に配置され、ＣＰＥと呼ばれることがある。特定の実装形態では、第１のデバイスは、ネットワーク制御パケットを第２のデバイスに送信することによって、第２のデバイス上でデータプレーン・サブシステムを制御する第１のソフトウェア制御プレーン・サブシステムを実行することができる。ネットワーク制御パケットは一般に、ネットワークそれ自体の作成および動作に使用される、ネットワーク・デバイスで生成または受信されたパケットを指すことができる。ネットワーク・デバイスの観点からは、ネットワーク制御パケットは常に受信宛先ＩＰアドレスを有し、ネットワーク・デバイス・ルート・プロセッサにおけるＣＰＵによって処理される。一例では、ネットワーク制御パケットは、デバイス上で実行されるデータプレーン・サブシステムおよび／またはＶＮＦを更新および／または構成することができる。ネットワーク制御パケットを使用する例示的なプロトコルは、ＡＲＰ、ＢＧＰ、ＯＳＰＦ、およびネットワークを一緒に制御する他のプロトコルを含むが、これらに限定されない。
【００９７】
ブロック５０６で、第１のデバイスはさらに、第２のデバイス上の第１の仮想マシンのインスタンス化を制御することができる。特定の実施形態では、第１のデバイスのコンポーネントが仮想化技術をサポートする。たとえば、第１のデバイスは、仮想化をサポートするプロセッサを含み、仮想マシンのインスタンス化および管理を可能にするためのハイパーバイザを実行することができる。仮想マシンは、特定の機能の実行のための隔離された環境を提供することができる。
【００９８】
ブロック５０８で、第１のデバイスは、第２のデバイス上で実行される第１の仮想マシンにおける第１のネットワーク機能の実行を制御することができる。ネットワーク機能は仮想ネットワーク機能を指すことができる。仮想ネットワーク機能は、第２のデバイスのネットワーク能力を向上または増強する仮想マシンにおいて実行される任意のネットワーク機能を含むことができる。ＶＮＦの例は、レベル２（Ｌ２）、レベル３（１．３）ネットワーキング機能、ファイアウォール、仮想プライベート・ネットワーク（ＶＰＮ）終端、アクセス制御リスト（ＡＣＬ）、ディープ・パケット・インスペクション（ＤＰＩ）機能、ネットワーク分析機能、ネットワーク機械学習機能などを含むことができるが、これらに限定されない。
【００９９】
ブロック５１０で、第１のデバイスは、第３のデバイス上で実行されるように構成された第２のソフトウェア・データプレーン・サブシステムの転送機能性を制御することができる。いくつかのシナリオでは、第２のデバイスは顧客構内に配置され、ＣＰＥデバイスと呼ばれることがある。
【０１００】
ブロック５１２で、第１のデバイスはさらに、第３のデバイス上の第２の仮想マシンのインスタンス化を制御することができる特定の実施形態では、第１のデバイスのコンポーネントが仮想化技術をサポートする。たとえば、第１のデバイスは、仮想化をサポートするプロセッサを含み、仮想マシンのインスタンス化および管理を可能にするためのハイパーバイザを実行することができる。
【０１０１】
ブロック５１４で、第１のデバイスは、第３のデバイス上で実行される仮想マシンにおける第２のネットワーク機能の実行を制御することができる。
【０１０２】
特定の実施形態では、第１、第２および第３デバイスは、まとめて分散ＣＰＥまたは分散ＣＰＥシステムと呼ばれることがある。制御プレーン・サーバ・コンピュータとも呼ばれる第１のデバイスは、ソフトウェア制御プレーン・サブシステムを含み、ソフトウェア・データプレーン・サブシステムを実行するネットワークにおける様々なデバイスと対話するための統一されたインターフェースおよびネットワーク・オーバーレイを提供することができる。ソフトウェア・データプレーン・サブシステムを実行するデバイスの各々は、仮想化をサポートし、ハイパーバイザを実行して仮想マシンのインスタンス化をすることもできる。デバイスの各々は、仮想マシンにおいてＶＮＦを実行することができる。
【０１０３】
分散ＣＰＥは、ネットワークの集中化されたモデリングおよび制御を可能にする、高度に統合されながらスケーラブルで柔軟なネットワーク環境を提供すると共に、仮想化を使用してＶＮＦでチェイニングすることによってソフトウェア・データプレーン・サブシステムを備える物理デバイス（またはＣＰＥ）の各々においてデータプレーン機能性を置換および増強する能力を提供することができる。
【０１０４】
図５に示す特定のステップは、本発明の実施形態による動作のモード間の切替えの特定の方法を提供することは理解されよう。他の系列のステップが代替実施形態で相応に実行されてもよい。たとえば、本発明の代替実施形態では、上述されたステップを他の順序で実行してもよい。さらに、特定の用途に応じて、追加のステップまたはステップに対する変形が加えられまたは除去されてもよい。当業者であれば、プロセスの多くの変形、修正、および代替形態を認識および理解するであろう。
【０１０５】
図６は、本発明の一実施形態による、分散ルータの様々なコンポーネントまたはサブシステムを実行するために使用され得るコンピューティング・システムまたはデバイス６００の簡略ブロック図である。いくつかの実施形態では、コンピューティング・システム６００は、上述された任意の方法を実装するように構成される。たとえば、コンピュータ・システム６００のような１つまたは複数のコンピュータ・システムは、コントローラ１０２などの分散ルータの１つまたは複数のサブシステム、１つまたは複数の制御プレーン・サブシステム１０４、および１つまたは複数のソフトウェア・データプレーン・サブシステム１０８を実行するために使用され得る。
【０１０６】
コンピュータ・システム６００は、以下に限定されないが、パーソナルコンピュータ、ポータブルコンピュータ、ワークステーション、ネットワークコンピュータ、メインフレーム、キオスク、ＰＤＡ、携帯電話、または他の任意のデータ処理システムを含む様々なタイプのものとすることができる。コンピュータおよびネットワークの性質は絶え間なく変化するため、図６に示されるコンピュータ・システム６００の説明は、コンピュータ・システムの好ましい実施形態を例示するための単なる具体例として意図されている。図６に示されるシステムよりも多数または少数のコンポーネントを有する他の多くの構成が可能である。
【０１０７】
コンピュータ・システム６００は、バス６０５を介して電気的に結合できるハードウェア要素を備えて示されている。ハードウェア要素は、１つまたは複数のプロセッサ６１０、１つまたは複数の入力デバイス６１５、１つまたは複数の出力デバイス６２０、通信サブシステム６３０、およびストレージ・サブシステム６４０を含むことができる。バス・サブシステム６０５は、コンピュータ・システム６００の様々なコンポーネントおよびサブシステムを意図されたように互いに通信させるためのメカニズムである。バス・サブシステム６０５は単一のバスとして簡略的に示されているが、バス・サブシステムの代替実施形態は複数のバスを利用してもよい。
【０１０８】
プロセッサ６１０は、コンピュータ・システム６００の処理リソースを表し、限定としてではなく、１つもしくは複数の汎用プロセッサ、および／または１つもしくは複数の専用プロセッサ（たとえば、デジタル信号処理チップ、および／もしくはグラフィックス・アクセラレーション・プロセッサなど）を含むことができる。プロセッサ６１０は、１つまたは複数のマルチコア・プロセッサを含むことができる。
【０１０９】
入力デバイス６１５は、コンピュータ・システム６００への入力を提供するための１つまたは複数の様々なメカニズム、たとえば、限定としてではなく、マウス、キーボード、タッチパッド、および／またはタブレットなどを含むことができる。出力デバイス６２０は、コンピュータ・システム６００から情報を出力するための１つまたは複数の様々なメカニズム、たとえば、限定としてではなく、表示ユニットおよび／またはプリンタなどを含むことができる。
【０１１０】
コンピュータ・システム６００はまた、コンピュータ・システム６００へ／からの通信を促進する通信サブシステム６３０を含むことができる。通信サブシステム６３０は、限定としてではなく、モデム、ネットワークカード（無線または有線）、赤外線通信デバイス、ならびに／または無線通信デバイスおよび／もしくはチップセット（たとえば、Ｂｌｕｅｔｏｏｔｈ（登録商標）デバイス、８０２．１１デバイス、ＷｉＦｉデバイス、ＷｉＭａｘデバイス、セルラ通信機構など）を含むことができる。通信サブシステム６３０は、本明細書に説明されているネットワーク、他のコンピュータ・システム、および／または任意の他のデバイスとデータが交換されることを可能にすることができる。特定の実施形態では、通信サブシステム６３０は、上記の教示に従ってハードウェア・データプレーンを実装するために使用される転送ハードウェアを含むことができる。
【０１１１】
ストレージ・サブシステム６４０は、１つまたは複数のプロセッサ６１０によって実行できる情報およびコード（命令）を記憶するための非一時的を提供する。たとえば、ストレージ・サブシステム６４０は、本発明の実施形態の機能性を提供する基本的プログラミングおよびデータ構成を記憶するように構成され得る。本発明の実施形態によれば、本発明の機能性を実装するソフトウェア・コード命令またはモジュールがストレージ・サブシステム６４０に記憶され得る。これらのソフトウェア・モジュールはプロセッサ６１０によって実行され得る。ストレージ・サブシステム６４０は、本発明に従って使用されるデータを記憶するためのリポジトリを提供することもできる。ストレージ・サブシステム６４０は、メモリ・サブシステム６４２およびファイル／ディスク・ストレージ・サブシステム６４４を備えることができる。
【０１１２】
メモリ・サブシステム６４２は、プログラム実行中の命令およびデータの記憶のためのメイン・ランダム・アクセス・メモリ（ＲＡＭ）、固定された命令が記憶される読み取り専用メモリ（ＲＯＭ）、およびフラッシュ・メモリなどを含むことができる。様々なソフトウェア要素、たとえば、オペレーティング・システム６４６、デバイス・ドライバ、実行可能ライブラリ、および／または１つもしくは複数のアプリケーション・プログラム６４８などの他のコードが、システム・メモリ６４２内に配置されてよく、そのようなコードは、本明細書に説明されているように、様々な実施形態によって提供されるコンピュータ・プログラムを含むことができ、ならびに／または他の実施形態によって提供される方法および／または構成システムを実装するように設計することができる。
【０１１３】
ファイル・ストレージ・サブシステム６４４は、プログラムおよびデータ・ファイルのための持続的（不揮発性）ストレージを提供し、ハードディスク・ドライブ、関連したリムーバブル・メディアを伴うフロッピーディスク・ドライブ、コンパクトディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）ドライブ、光学式ドライブ、リムーバブル・メディア・カートリッジ、ローカルおよび／またはネットワーク・アクセス可能ストレージ、ならびに他の類似の記憶媒体を含むことができる。
【０１１４】
本明細書で使用される「機械可読媒体」および「コンピュータ可読媒体」という用語は、機械を特定の様式で動作させるデータを提供することに関与する任意の非一時的媒体を指す。コンピュータ・システム６００を使用して実装された実施形態において、様々なコンピュータ可読媒体が、命令／コードを実行のためにプロセッサ６１０に提供することに関与してもよく、および／またはそのような命令／コードを記憶するために使用されてもよい。コンピュータ可読媒体は、不揮発性媒体および揮発性媒体などの多くの形態を取ってよい。
【０１１５】
上述された方法、システム、およびデバイスは例である。様々な実施形態が、様々な手順またはコンポーネントを適宜に省略、置換、または追加し得る。たとえば、代替構成において、説明された方法が説明されたのとは異なる順序で実行されてもよく、ならびに／または様々な段階が追加され、省略され、および／もしくは組み合わされてもよい。特定の実施形態に関して説明された特徴は、様々な他の実施形態で組み合わされてもよい。実施形態の異なる態様および要素が同様に組み合わされてもよい。技術は進歩しているので、要素の多くは、開示の範囲をそれらの特定の例に限定しない例である。
【０１１６】
実施形態の完全な理解を提供するために、説明で具体的な詳細が与えられる。しかしながら、実施形態はこれらの具体的な詳細なしに実施され得る。たとえば、実施形態を不明瞭にすることを避けるために、周知の回路、プロセス、アルゴリズム、構造、および技法は不必要な詳細なしに示されている。この説明は、単に例示的な実施形態を提供し、本発明の範囲、利用可能性、または構成を限定することを意図していない。むしろ、上記の実施形態の説明は、本発明の実施形態を実装するための実施可能な説明を当業者に提供する。本発明の趣旨および範囲から逸脱することなく、要素の機能および配置に対して様々な変更が行われ得る。
【０１１７】
本発明の特定の実施形態が説明されているが、様々な修正形態、変更形態、代替構成、および均等物も本発明の範囲内に包含される。本発明の実施形態は、特定の具体的なデータ処理環境内の動作に限定されず、複数のデータ処理環境内で自由に動作してよい。また、特定の実施形態が特定の一連のトランザクションおよびステップを使用して説明されているが、本発明の範囲が説明された一連のトランザクションおよびステップに限定されないことは当業者には明らかであろう。いくつかのフローチャートは動作を逐次プロセスとして説明しているが、動作の多くは並列または同時に実行することができる。また、動作の順序が並べ替えられてもよい。プロセスは、図に含まれない追加のステップを有してもよい。
【０１１８】
さらに、ハードウェアとソフトウェアの特定の組み合わせを使用して特定の実施形態が説明されているが、ハードウェアとソフトウェアの他の組み合わせも本発明の範囲内であることを認識されたい。本発明の特定の実施形態は、ハードウェアのみで、またはソフトウェア（たとえば、コード・プログラム、ファームウェア、ミドルウェア、マイクロコードなど）のみで、またはそれらの組み合わせを使用して実装され得る。本明細書で説明されている様々なプロセスは、任意の組み合わせで同じプロセッサまたは異なるプロセッサ上に実装され得る。したがって、コンポーネントまたはモジュールが特定の動作を実行するように構成されるものとして説明されている場合、そのような構成は、たとえば、動作を行うように電子回路を設計することによって、またはコンピュータ命令もしくはコードを実行することなどにより動作を行うようにプログラム可能な電子回路（マイクロプロセッサなど）をプログラムすることによって、またはそれらの任意の組み合わせによって達成され得る。プロセスは、プロセス間通信のための従来の技法を含むがこれに限定されない様々な技法を使用して通信することが可能であり、異なるプロセス対が異なる技法を使用してもよく、または同じプロセス対が異なる時間に異なる技法を使用してもよい。
【０１１９】
したがって、明細書および図面は、限定的な意味ではなく例示的な意味で考慮されるべきである。しかしながら、特許請求の範囲に記載された広い趣旨および範囲から逸脱することなく、追加、削減、削除、ならびに他の修正および変更が行われ得ることは明らかであろう。このように、本発明の特定の実施形態が説明されているが、これらは限定することを意図していない。様々な修正および均等物が添付の特許請求の範囲の範囲内にある。
【図１】
2019533340.tif 000003
【図２】
2019533340.tif 000004
【図３】
2019533340.tif 000005
【図４】
2019533340.tif 000006
【図５】
2019533340.tif 000007
【図６】
2019533340.tif 000008
【国際調査報告】
2019533340.tif 000009
2019533340.tif 000010
2019533340.tif 000011