(57)【特許請求の範囲】
【請求項１】
スイッチに結合されたエンドホストを有するネットワーク内のスイッチを制御するコントローラを使用する方法において、
前記コントローラにおけるスイッチモデリングインターフェイスで、前記ネットワーク内のスイッチのスイッチモデルを維持し、
前記コントローラにおけるスイッチモデリングインターフェイスで、前記スイッチのネットワークの望ましいネットワーク構成を受け取り、及び
前記スイッチモデリングインターフェイスで、前記スイッチモデルに基づいて望ましいネットワーク構成を実施するように前記スイッチのための制御メッセージを発生し、前記スイッチモデリングインターフェイスで受け取られる前記望ましいネットワーク構成は、機能、エンドホストアタッチポイントを識別するグローバルホストテーブル及びグローバルスイッチ間転送テーブルを含み、
前記スイッチモデリングインターフェイスで、前記スイッチの各々のためのスイッチ特有の転送テーブルを生成するように、前記グローバルホストテーブル及び前記グローバルスイッチ間転送テーブルに前記機能を作用させる、
ことを含む方法。
【請求項２】
前記コントローラで、ネットワークイベントを識別し、及び
前記コントローラで、前記ネットワークイベントに基づいて前記望ましいネットワーク構成を生成する、
ことを更に含む、請求項１に記載の方法。
【請求項３】
前記ネットワークイベントは、エンドホストの接続、エンドホストの切断、及び新たなネットワークポリシーより成るグループから選択されたイベントを含む、請求項２に記載の方法。
【請求項４】
前記スイッチモデルは、ネットワーク構成を識別し、前記方法は、
前記スイッチモデリングインターフェイスで、前記望ましいネットワーク構成と前記スイッチモデルにより識別されたネットワーク構成との間の差を識別する、
ことを更に含み、前記スイッチモデルに基づいて前記望ましいネットワーク構成を実施するように前記スイッチのための制御メッセージを発生することは、
前記望ましいネットワーク構成と前記スイッチモデルにより識別された前記ネットワーク構成との間の前記識別された差のみに対する制御信号を発生する、
ことを含む、請求項２に記載の方法。
【請求項５】
前記スイッチモデリングインターフェイスで、前記スイッチに制御メッセージを送出し、及び
前記スイッチモデリングインターフェイスで、前記制御メッセージが前記スイッチにおいて首尾良く実施されたかどうか決定する、
ことを含む、請求項４に記載の方法。
【請求項６】
前記コントローラは、前記スイッチモデリングインターフェイスと通信することにより前記スイッチを制御する複数のアプリケーションモジュールを備え、そして前記ネットワークイベントに基づいて望ましいネットワーク構成を発生することは、
前記複数のアプリケーションモジュールの所与の１つで、望ましいネットワーク構成を発生し、及び
前記所与のアプリケーションモジュールで、前記望ましいネットワーク構成を前記スイッチモデリングインターフェイスに与える、
ことを含む、請求項５に記載の方法。
【請求項７】
前記スイッチモデリングインターフェイスで、前記制御メッセージが前記スイッチにおいて首尾良く実施されたかどうか識別する情報を前記所与のアプリケーションモジュールに与える、ことを更に含む、請求項６に記載の方法。
【請求項８】
前記制御メッセージがスイッチにおいて首尾良く実施されたかどうか決定することは、  同期要求メッセージを前記制御メッセージと共に前記スイッチに与え、及び
前記同期要求メッセージに対応する同期応答メッセージを前記スイッチから受け取るのに応答して前記制御メッセージが前記スイッチにおいて首尾良く実施されたと決定する、ことを含む、請求項５に記載の方法。
【請求項９】
前記制御メッセージがスイッチにおいて首尾良く実施されたかどうか決定することは、前記スイッチからエラーメッセージを受け取るのに応答して、前記制御メッセージが前記スイッチにおいて首尾良く実施されなかったと決定することを含む、請求項８に記載の方法。
【請求項１０】
各スイッチは、ハッシュされたスイッチ状態情報を含むエントリを有するダイジェストテーブルを維持し、該ダイジェストテーブルの各エントリは、そのエントリのハッシュされたスイッチ状態情報から計算されたダイジェスト値を含み、そして前記望ましいネットワーク構成と、前記スイッチモジュールにより識別されるネットワーク構成との間の差を識別することは、
前記コントローラで、前記望ましいネットワーク構成に対する１組の望ましいダイジェストテーブルを計算し、
前記スイッチモデリングインターフェイスで、前記スイッチから前記ダイジェストテーブルを検索し、及び
前記コントローラにより計算された望ましいダイジェストテーブルを前記スイッチからの検索されたダイジェストテーブルと比較する、
ことを含む請求項４に記載の方法。
【請求項１１】
ネットワークにおけるネットワークスイッチ及び当該ネットワークスイッチを制御するコントローラを操作する方法において、
前記コントローラにおけるスイッチモデリングインターフェイスで、前記ネットワークスイッチを含むネットワークのためのネットワーク構成を維持し、
前記スイッチモデリングインターフェイスで、機能、グローバルホストテーブル及び望ましいネットワーク構成のためのグローバルスイッチ間転送テーブルを受け取り、
前記スイッチモデリングインターフェイスで、前記ネットワークスイッチのためにスイッチ特有の転送テーブルを生成するように、前記グローバルホストテーブル及び前記グローバルスイッチ間転送テーブルにおいて前記機能を作用させ、 
前記スイッチ特有の転送テーブルに基づいて、前記ネットワークスイッチで、スイッチ構成データを受信し、
前記ネットワークスイッチで、前記受信されたスイッチ構成データ及び既存のスイッチ構成データに少なくとも部分的に基づいてダイジェスト値を計算する、
ことを含む方法。
【請求項１２】
前記ネットワークスイッチで、複数のバケットを有するダイジェストテーブルを維持し、各バケットは各ダイジェスト値に関連付けられ、
前記ネットワークスイッチで、前記受信されたスイッチ構成データをハッシュし、及び  前記ハッシュされたスイッチ構成データに基づいて前記複数のバケットのうちの選択された１つに前記ハッシュされたスイッチ構成データを指定し、前記選択されたバケットに対して前記計算されたダイジェスト値が記憶される、
ことを更に含む、請求項１１に記載の方法。
【請求項１３】
前記ハッシュされたスイッチ構成データは、複数のビットを含み、そして前記ハッシュされたスイッチ構成データに基づいて前記複数のバケットのうちの選択された１つに前記ハッシュされたスイッチ構成データを指定することは、前記複数のビットのサブセットに基づいて前記バケットを選択することを含み、更に、前記選択されたバケットは、以前にハッシュされたスイッチ構成データを含み、前記ネットワークスイッチで、前記受信されたスイッチ構成データ及び既存のスイッチ構成データに少なくとも部分的に基づいてダイジェスト値を計算することは、前記ハッシュされたスイッチ構成データ及び前記選択されたバケットにおける以前にハッシュされたスイッチ構成データに基づいて論理的ＸＯＲを計算することを含む、請求項１２に記載の方法。
【請求項１４】
前記スイッチ構成データは、前記スイッチのための転送テーブルを含む、請求項１１に記載の方法。
【請求項１５】
前記スイッチは、ネットワーク制御経路を経てコントローラと通信し、前記方法は、前記コントローラからの要求に応答して、前記テーブルのダイジェスト値を前記コントローラへ送信することを含む、請求項１１に記載の方法。
【請求項１６】
スイッチに結合されたエンドホストを有するネットワーク内のスイッチを制御するコントローラを使用する方法において、
前記コントローラで、現在ネットワーク構成を識別する情報を維持する、
ことを含み、前記現在ネットワーク構成を識別する情報は、１組のテーブル、及び該１組のテーブルに対して作用して、前記現在ネットワーク構成の少なくとも一部分を生成する機能を含むものであり、
前記コントローラで、望ましいネットワーク構成を受信し、前記望ましいネットワーク構成は付加的な機能、グローバルホストテーブル及びグローバルスイッチ間転送テーブルを含み、
前記コントローラで、前記スイッチのうちの所与のスイッチのためのスイッチ特有の転送テーブルを生成するために、前記グローバルホストテーブル及び前記グローバルスイッチ間転送テーブルにおいて前記機能を作用させ、
前記コントローラで、前記コントローラに記憶された前記所与のスイッチのための構成状態を検索し、
前記コントローラで、前記所与のスイッチのための前記検索された構成状態及び前記スイッチ特有の転送テーブルに基づいて前記現在ネットワーク構成と前記望ましいネットワーク構成との差を計算する、
方法。
【請求項１７】
前記１組のテーブルは、全てのエンドホストに対するエンドホストアタッチポイントを識別するホストテーブル、及び前記スイッチ間のリンクを識別するスイッチ間転送テーブルを含み、前記方法は、前記コントローラで、前記機能を使用して、前記ホストテーブル及び前記スイッチ間転送テーブルに基づいて前記スイッチの所与の１つに対するスイッチごとの転送テーブルを生成することを更に含む、請求項１６に記載の方法。
【請求項１８】
前記コントローラで、前記現在ネットワーク構成を識別する情報に基づいて望ましいネットワーク構成を実施するために前記スイッチに対する制御メッセージを発生することを更に含む、請求項１６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照：本出願は、２０１４年６月３日に出願された米国特許出願第１４／２９５，１９６号の優先権を主張するもので、前記出願は、参考としてここにそのまま援用される。
【０００２】
本発明は、通信ネットワークに関するもので、より詳細には、コントローラにより制御されるネットワークスイッチを有する通信ネットワークに関する。
【背景技術】
【０００３】
インターネット及びインターネットに接続されたローカルデータネットワークのようなパケットベースのネットワークは、ネットワークスイッチを備えている。ネットワークスイッチは、パケットソースからパケット行先へパケットを転送するのに使用される。パケットは、時々、フレームとも称される。例えば、データは、オープンシステムズインターコネクション（ＯＳＩ）モデルのレイヤ２を経てフレーム（例えば、イーサネット（登録商標）フレーム）として転送され、一方、データは、ＯＳＩモデルのレイヤ３を経てパケット（例えば、インターネットプロトコルパケット）として転送される。
【０００４】
ある売主のスイッチを、別の売主の装置を使用して構成することは、困難であるか又は不可能である。これは、ある売主のスイッチ装置が、別の売主のスイッチ装置とは異なるオペレーティングシステム及び１組の制御手順を使用するためである。異なるタイプのスイッチプラットホームの制御に関連した課題に対処するため、クロスプラットホームプロトコルが開発された。これらのプロトコルは、両立性のないスイッチの集中制御を許す。
【０００５】
クロスプラットホームのコントローラクライアントをネットワーク内のスイッチに含ませることができる。コントローラクライアントは、ネットワーク経路を経て対応するコントローラサーバーと通信することができる。コントローラクライアントは、種々のスイッチハードウェアにおいて実施できるので、両立性のないスイッチ装置を単一のコントローラで制御することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コントローラにとって、スイッチが意図されたコントローラとして首尾良く構成されることを保証することが課題である。コントローラが数千の制御パケットをスイッチに供給するが、コントローラにより供給されるレートで制御パケットを処理するのにスイッチの処理容量が充分でない場合について考える。別の例として、スイッチの構成記憶容量がいっぱいになり、スイッチは、既存の構成データにオーバーライトせずに付加的な構成データを記憶することができない。更に別の例として、新たなスイッチが接続されるか、又は既存のスイッチがネットワークから切断され、コントローラから見たネットワークとネットワークの実際の構成状態との間に不一致を招くことがある。
【課題を解決するための手段】
【０００７】
コントローラは、スイッチに結合されたエンドホストを有するネットワーク内のスイッチを制御する。コントローラは、ネットワーク内のスイッチのスイッチモデルを維持しそしてそのスイッチモデルを使用して、望ましいネットワーク構成を実施するようスイッチのための制御メッセージを発生するスイッチモデリングインターフェイスを備えている。スイッチモデリングインターフェイスは、スイッチの接続又は切断或いは新規ネットワークポリシーのようなネットワークイベントに応答するアプリケーションモジュールから望ましいネットワーク構成を受け取る。望ましいネットワーク構成は、１組のテーブル及び機能を含む。スイッチモデリングインターフェイスは、１組のテーブルにおける機能を働かせて望ましいネットワーク構成を生じさせる。例えば、１組のテーブルは、エンドホストアタッチポイントを識別するホストテーブル、及びスイッチ間転送テーブルを含む。この場合に、スイッチモデリングインターフェイスは、ホストテーブル及びスイッチ間転送テーブルにおける機能を働かせて、各スイッチのためのスイッチ特有転送テーブルを形成する。
【０００８】
スイッチモデリングインターフェイスは、望ましいネットワーク構成（例えば、スイッチ特有転送テーブル）を、スイッチモデルにより表わされた現在ネットワーク構成と比較する。スイッチモデリングインターフェイスは、望ましいネットワーク構成と、スイッチモデルにより識別された現在ネットワーク構成との間の識別された差のみについてスイッチへ制御メッセージを発生する。スイッチモデリングインターフェイスは、制御メッセージがスイッチにより首尾良く受信されて処理されたかどうかを、同期要求メッセージ（例えば、バリア要求メッセージ）を制御メッセージと共に送信しそして同期返答メッセージ（例えば、バリア返答メッセージ）、エラーメッセージ、又は応答に対するスイッチ欠陥（例えば、タイマーの時間切れ）を待機することにより、決定する。スイッチモデリングインターフェイスは、望ましいネットワーク構成を送ったアプリケーションモジュールに成功又は失敗を指示する。
【０００９】
スイッチモデリングインターフェイスは、スイッチと通信することによりスイッチモデルを更新する。ネットワーク制御経路上のトラフィック負荷を減少する上で助けとなるように、スイッチは、ダイジェストテーブルを維持するように構成される。スイッチにより維持されるダイジェストテーブルは、各ダイジェスト値に各々関連した複数のエントリ（例えば、バケット）を含む。スイッチにおいて受け取られるテーブルエントリを（例えば、コントローラから制御メッセージを経て）転送するようなスイッチ構成データは、スイッチによりハッシュされ、そしてハッシュ値に基づいて選択されたテーブルエントリに指定される。スイッチは、各テーブルエントリのダイジェスト値を、そのテーブルエントリに指定されたハッシュ値のＸＯＲとして計算する。スイッチにより維持されるダイジェスト値は、コントローラにより検索され、そして望ましいネットワーク構成についてコントローラにより計算されたダイジェスト値と比較される。コントローラにおけるスイッチモデリングインターフェイスは、その比較に基づき、望ましいネットワーク構成を実施する際にどんなスイッチ構成データを更新しなければならないか決定する。
【００１０】
本発明の更に別の特徴、その性質及び種々の効果は、添付図面及び以下の詳細な説明から明らかとなるであろう。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態によるコントローラ及びパケット転送システムを備えた例示的ネットワークの図である。
【図２】本発明の一実施形態によりネットワーク接続を経て通信するコントローラサーバー及びコントローラクライアントの図である。
【図３】本発明の一実施形態によりパケット処理システムに使用されるタイプの例示的フローテーブルの図である。
【図４】パケット処理システムに使用されるタイプの例示的フローテーブルの図で、本発明の一実施形態によりフローテーブルのフローテーブルエントリに基づき遂行されるパケット転送の３つの例示的タイプを示す図である。
【図５】本発明の一実施形態によるパケット処理システムにおけるパケット処理に含まれる例示的ステップのフローチャートである。
【図６】本発明の一実施形態によりスイッチモデリングインターフェイスを有するコントローラにより制御されるスイッチを有する例示的ネットワークの図である。
【図７】本発明の一実施形態による例示的スイッチモデルの図である。
【図８】本発明の一実施形態によりエンドホストの切断がスイッチモデルにどのように反映されるかを示す例示的スイッチモデルの図である。
【図９】本発明の一実施形態によりスイッチモデルに記憶される例示的なスイッチ状態情報の図である。
【図１０】本発明の一実施形態によりスイッチモデルに記憶され且つスイッチ特有状態情報を発生するのに使用される例示的なグローバルネットワーク状態情報の図である。
【図１１】本発明の一実施形態によりスイッチモデルに記憶され且つスイッチモデリングインターフェイスにより使用されてスイッチ特有の状態情報を発生する例示的機能の図である。
【図１２】本発明の一実施形態によりアプリケーションモジュールによってスイッチモデリングインターフェイスに与えられる望ましいネットワーク構成の例示的ネットワークスナップショットの図である。
【図１３】本発明の一実施形態により、１組のテーブルと、その１組のテーブルに対して作用してスイッチ特有の状態情報を発生する機能とを含む例示的ネットワークスナップショットの図である。
【図１４】本発明の一実施形態により望ましいネットワークスナップショットと現在ネットワーク構成の差からスイッチ制御メッセージを発生するようにスイッチモデリングインターフェイスによって遂行される例示的ステップのフローチャートである。
【図１５】本発明の一実施形態によりスイッチモデリングインターフェイスを使用してネットワークイベントに対する応答においてネットワーク構成を変更する際にコントローラにより遂行される例示的ステップのフローチャートである。
【図１６】本発明の一実施形態により受け取ったスイッチ構成データに基づいてダイジェストテーブルを維持するようにスイッチにより遂行される例示的ステップのフローチャートである。
【図１７】本発明の一実施形態によりスイッチ構成データに基づいてスイッチによって維持される例示的なダイジェストテーブルである。
【図１８】本発明の一実施形態により、スイッチにより維持されるダイジェストテーブルを使用して、望ましいネットワーク構成と現在ネットワーク構成との間の差を識別するようにコントローラにより遂行される例示的ステップのフローチャートである。
【発明を実施するための形態】
【００１２】
インターネットのようなネットワーク、及びインターネットに結合されるローカル及び地域的ネットワークは、パケットベースのスイッチに依存している。ここでは、時々、ネットワークスイッチ、パケット処理システム又はパケット転送システムとも称されるこれらのスイッチは、アドレス情報に基づいてパケットを転送することができる。このように、パケットソースにより送信されるデータパケットは、パケット行先へ配送される。ネットワーク用語において、パケットソース及び行き先は、時々、エンドホストと称される。エンドホストは、例えば、パーソナルコンピュータ、サーバー、及び他のコンピューティング装置、例えば、ワイヤード又はワイヤレステクノロジーを使用してネットワークにアクセスするポータブル電子装置である。
【００１３】
ネットワークスイッチの能力の範囲は、比較的小型のイーサネットスイッチ及びワイヤレスアクセスポイントから、複数ラインカード、冗長電源、及びスーパーバイザー能力を含む大型のラックベースシステムまでである。ネットワークが複数の売主からの装置を含むことは珍しいことではない。異なる売主からのネットワークスイッチは、パケット転送ネットワークを形成するように相互接続できるが、それらのオペレーティングシステムと制御プロトコルとの間に互換性がないために集中形態で管理することは困難である。
【００１４】
これらの潜在的な非互換性は、共通のクロスプラットホーム制御モジュール（ここではコントローラクライアントとも称される）を各ネットワークスイッチに合体することにより克服することができる。コントローラサーバー又は分散型コントローラサーバーのような集中型クロスプラットホームコントローラは、各ネットワークリンクを経てコントローラクライアントの各々と相互作用する。クロスプラットホームコントローラ及びそれに対応するコントローラクライアントを使用することで、潜在的に異種のネットワークスイッチ装置を集中管理することができる。
【００１５】
一例としてここに述べる１つの例示的構成では、図１のコントローラサーバー１８のような１つ以上のコントローラサーバーにより集中制御が与えられる。コントローラサーバー１８は、スタンドアローンコンピュータ、コンピュータのクラスター、複数の位置にわたって分散される１組のコンピュータ、ネットワークスイッチ内で実施されるハードウェア、又は他の適当なコンピューティング装置１２において具現化される。コントローラサーバー１８は、単一コンピュータにおいて単一プロセスとして実行するか、又は冗長性のために多数のホストにわたって分散させることができる。分散構成の使用は、予期せぬネットワーク分割（例えば、２つのキャンパス間のネットワークリンクが中断される状態）に対する弾力性をネットワーク１０に与える上で助けとなる。
【００１６】
分散型のコントローラ構成では、コントローラノードは、コントローラ内プロトコルを使用して情報を交換することができる。例えば、新たなエンドホストが、第１のコントローラノードのみに接続されたネットワークハードウェア（例えば、スイッチ）に接続される場合には、その第１のコントローラノードは、コントローラ内プロトコルを使用して、新たなエンドホストの存在を他のコントローラノードに通知する。要望があれば、スイッチ又は他のネットワークコンポーネントが複数のコントローラノードに接続される。単一のコントローラサーバーを使用して関連スイッチのネットワークを制御する構成を、一例として、ここに時々述べる。
【００１７】
図１のコントローラサーバー１８は、ネットワーク１０のトポロジーに関する情報を収集する。例えば、コントローラサーバー１８は、ネットワークを通してリンクレイヤディスカバリープロトコル（ＬＬＤＰ）プローブパケットを送信し、ネットワーク１０のトポロジーを発見する。コントローラサーバー１８は、ネットワークトポロジーに関する情報及びネットワーク装置の能力に関する情報を使用して、ネットワークに流れるパケットのための適当な経路を決定する。適当な経路が識別されると、コントローラサーバー１８は、それに対応する設定データをネットワーク１０のハードウェアへ送信して、パケットが必要に応じてネットワークに流れるように保証する。そのようなネットワーク構成オペレーションは、システム設定オペレーション中に、又はバックグランドにおいて連続的に、或いは新たに送信されるデータパケット（即ち、既存の経路が確立されていないパケット）の出現に応答して、遂行される。
【００１８】
コントローラサーバー１８は、ネットワーク構成ルール２０を実施するために使用される。ルール２０は、種々のネットワークエンティティにどのサービスが利用できるか特定する。例えば、ルール２０は、ネットワーク１０内のどのユーザ（又はユーザのタイプ）が特定のサーバーにアクセスできるか特定する。別の例として、ルール２０は、ネットワークトラフィックを識別するサービス挿入ポリシー、及び識別されたネットワークトラフィックに対して遂行されるべきサービスを含む。ルール２０は、例えば、コンピューティング装置１２のデータベースに維持される。
【００１９】
コントローラサーバー１８、及び各ネットワークスイッチ１４のコントローラクライアント３０は、ネットワークプロトコルスタックを使用して、ネットワークリンク１６を経て通信する。
【００２０】
各スイッチ（例えば、各パケット転送システム）１４は、入力／出力ポート３４（ネットワークスイッチインターフェイスとも称される）を有する。ケーブルを使用して、装置の断片をポート３４に接続する。例えば、パーソナルコンピュータ、ウェブサーバー及び他のコンピューティング装置のようなエンドホストは、ポート３４にプラグインされる。又、ポート３４は、スイッチ１４の１つを他のスイッチ１４に接続するためにも使用される。
【００２１】
パケット処理回路３２は、ポート３４の１つから別のポート３４へパケットを転送するのに使用されると共に、到来するパケットに対して他の適当なアクションを遂行するのにも使用される。パケット処理回路３２は、専用高速スイッチ回路のような１つ以上の集積回路を使用して実施され、ハードウェアデータ経路として働く。必要に応じて、制御ユニット２４において実行されるパケット処理ソフトウェア２６を使用して、ソフトウェアデータ経路が実施される。
【００２２】
制御ユニット２４は、制御ソフトウェアを記憶しそして実行するために処理及びメモリ回路（例えば、１つ以上のマイクロプロセッサ、メモリチップ及び他の制御回路）を備えている。例えば、制御ユニット２４は、パケット処理ソフトウェア２６のようなソフトウェアを記憶しそして実行し、フローテーブル２８を記憶し、そしてコントローラクライアント３０のオペレーションをサポートするのに使用される。
【００２３】
コントローラクライアント３０及びコントローラサーバー１８は、ＯｐｅｎＦｌｏｗプロトコルのようなネットワークスイッチプロトコルに適合する（例えば、ＯｐｅｎＦｌｏｗスイッチ仕様書バージョン１．０．０、１．３．１、又はＯｐｅｎＦｌｏｗプロトコルの他のバージョンを参照されたい）。又、コントローラクライアント３０の中の１つ以上のクライアントは、他のプロトコルにも適合する（例えば、シンプルネットワークマネージメントプロトコル）。ＯｐｅｎＦｌｏｗプロトコル又は他の適当なプロトコルを使用して、コントローラサーバー１８は、入力／出力ポート３４からの到来パケットをスイッチ１４がどのように処理すべきかを決定するデータをコントローラクライアント３０に与える。
【００２４】
１つの適当な構成では、コントローラサーバー１８からのフローテーブルデータは、フローテーブル２８のようなフローテーブルに記憶される。フローテーブル２８のエントリは、スイッチ１４を構成するのに使用される（例えば、パケット処理回路３２及び／又はパケット処理ソフトウェア２６の機能）。典型的なシナリオでは、フローテーブル２８は、フローテーブルエントリのためのキャッシュストレージとして働き、そしてそれらフローテーブルエントリの対応バージョンは、パケット処理回路３２の回路により維持される設定内に埋め込まれる。しかしながら、これは、単なる例示に過ぎない。フローテーブル２８は、スイッチ１４のフローテーブルエントリに対する排他的ストレージとして働くか、又はパケット処理回路３２内のフローテーブルストレージリソースの利益のために省略される。一般的に、フローテーブルエントリは、適当なデータ構造（例えば、１つ以上のテーブル、リスト、等）を使用して記憶される。明瞭化のために、フローテーブル２８のデータ（コントロールユニット２４のデータベースに維持されているかパケット処理回路３２の構成内に埋め込まれているかに関わらず）は、ここでは、フローテーブルエントリ（例えば、フローテーブル２８の行）を形成するものと称される。
【００２５】
スイッチ１４が到来パケットをどのように処理すべきか決定するデータを記憶するフローテーブル２８の例は、単なる例示に過ぎない。必要に応じて、ネットワークパケットをどのように転送すべきかの判断をパケット転送システム１４が行う上で助けとなるようにフローテーブル２８に代って又はそれに加えてパケット転送判断エンジンが使用されてもよい。一例として、パケット転送判断エンジンは、ネットワークパケットの属性に基づき（例えば、ネットワークプロトコルヘッダに基づき）ネットワークパケットを所定のポートへ転送するようにパケット転送システム１４に指令する。
【００２６】
望ましいスイッチには、コントローラサーバーと通信し且つそれにより制御されるコントローラクライアントが設けられる。例えば、スイッチ１４は、制御ソフトウェアを実行し且つパケット処理回路３２を省略する汎用処理プラットホームを使用して実施される。別の例として、スイッチ１４は、１つ以上の高速スイッチング集積回路（スイッチＩＣ）に結合される制御回路を使用して実施される。更に別の例として、スイッチ１４は、それ自身のパケット処理回路を各々伴う複数のラインカードを有するラックベースのシステムにおいてラインカードとして実施される。コントローラサーバーは、必要に応じて、ラックベースシステムの１つ以上のラインカード、別のラックベースシステム、又はネットワークに結合される他のコンピューティング装置において実施される。
【００２７】
図２に示すように、コントローラサーバー１８及びコントローラクライアント３０は、ネットワークプロトコルスタック５８及びネットワークプロトコルスタック６０のようなネットワークプロトコルスタックを使用してネットワーク経路６６を経て通信する。スタック５８及び６０は、例えば、Ｌｉｎｕｘ（登録商標）  ＴＣＰ／ＩＰスタック、又はＶｘＷｏｒｋｓオペレーティングシステムにおけるＴＣＰ／ＩＰスタックである（一例として）。経路６６は、例えば、スイッチ１４と外部装置との間のネットワーク接続をサポートする経路（例えば、図１のネットワーク経路１６）であるか、又はラックベースシステムにおけるバックボーン経路である。経路６６が経路１６のようなネットワーク経路である構成を一例としてここに時々述べる。
【００２８】
制御プロトコルスタック５６は、ネットワークプロトコルスタック５８と制御ソフトウェア５４との間のインターフェイスとして働く。制御プロトコルスタック６２は、ネットワークプロトコルスタック６０と制御ソフトウェア６４との間のインターフェイスとして働く。オペレーション中に、コントローラサーバー１８がコントローラクライアント３０と通信するとき、制御プロトコルスタック５６は、制御プロトコルメッセージ（例えば、ポートをアクチベートするか又は特定のフローテーブルエントリをフローテーブル２８にインストールするための制御メッセージ）を発生しそしてパースする。図２に示す形式の構成を使用することにより、コントローラサーバー１８とコントローラクライアント３０との間のリンクを経てネットワーク接続が形成される。コントローラサーバー１８及びコントローラクライアント３０は、送信制御プロトコル（ＴＣＰ）又はユーザデータグラムプロトコル（ＵＤＰ）を使用して、インターネットプロトコル（ＩＰ）ネットワーク接続を経て通信することができる。ネットワーク接続を経てコントローラサーバー１８とコントローラクライアント３０との間で通信するときに使用されるコントロールプロトコルは、例えば、ＳＮＭＰ及びＯｐｅｎＦｌｏｗプロトコルスタックバージョン１．０．０を含む（一例として）。
【００２９】
フローテーブル２８は、複数のフィールド（時々、ヘッダフィールドとも称される）を有するフローテーブルエントリ（例えば、テーブルの行）を含む。スイッチ１４によって受信されたパケットのフィールドは、フローテーブルのフィールドと比較される。各フローテーブルエントリは、関連するアクションを有する。パケットのフィールドとフローテーブルエントリのフィールドとの間に一致があるときには、そのフローテーブルエントリのための対応アクションが行われる。
【００３０】
例示的なフローテーブルが図３に示されている。図３に示されたように、テーブル２８は、フローテーブルエントリ（行）６８を有する。各フローテーブルエントリは、ヘッダ７０、アクション７２及び統計値７４に関連している。ヘッダ７０は、各々、複数のヘッダフィールド７６を含む。各フローテーブルエントリのアクションは、パケットのフィールドとそのフローテーブルエントリのヘッダの対応フィールドとの間に一致が検出されたときにアクションスイッチ１４がパケットに対して何を遂行すべきか指示する。スイッチ１４は、スイッチ１４の性能に関する情報を得ることが望まれるときにコントローラサーバー１８により質問されるフローテーブル２８の統計値部分に統計データ（カウンタ値）を維持する。
【００３１】
ヘッダ７０のヘッダフィールド（及び各到来パケットの対応フィールド）は、次のフィールド、即ち入口ポート（即ち、パケットが受け取られるところのスイッチ１４の物理的ポートのアイデンティティ）、イーサネットソースアドレス、イーサネット行先アドレス、イーサネットタイプ、バーチャルローカルエリアネットワーク（ＶＬＡＮ）識別（ＶＬＡＮタグとも称される）、ＶＬＡＮプライオリティ、ＩＰソースアドレス、ＩＰ行先アドレス、ＩＰプロトコル、ＩＰ  ＴｏＳ（サービスのタイプ）ビット、トランスポートソースポート／インターネットコントロールメッセージプロトコル（ＩＣＭＰ）タイプ（ソースＴＣＰポートとも称される）、及びトランスポート行先ポート／ＩＣＭＰコード（行先ＴＣＰポートとも称される）を含む。必要に応じて、他のフィールドが使用されてもよい。例えば、ネットワークプロトコルフィールド及びプロトコルポートフィールドが使用されてもよい。
【００３２】
各フローテーブルエントリ（フローエントリ）は、スイッチが一致パケットをどのように取り扱うか指令するゼロ又はそれ以上のアクションに関連している。転送アクションがない場合には、パケットがドロップされるのが好ましい。フローテーブルエントリにおいてパケットフィールドとヘッダフィールドとの間に一致が検出されたときにスイッチ１４により行われるアクションは、次のアクション、即ち転送(forward)（例えば、到来インターフェイスを含まない全てのインターフェイスにパケットを送出するＡＬＬ、パケットをカプセル化してコントローラサーバーへ送信するＣＯＮＴＲＯＬＬＥＲ、スイッチのローカルネットワークスタックにパケットを送信するＬＯＣＡＬ、フローテーブル２８においてアクションを遂行するＴＡＢＬＥ、入力ポートからパケットを送出するＩＮ＿ＰＯＲＴ、例えば、慣習的なレベル２、ＶＬＡＮ、及びレベル３処理を使用してスイッチによりサポートされるデフォールト転送経路でパケットを処理するＮＯＲＭＡＬ、及び到来インターフェイスを含まない最小転送ツリーに沿ってパケットを殺到させるＦＬＯＯＤ）を含む。スイッチ１４により行われる付加的なアクションは、ポートにアタッチされたキューを通してパケットを転送するエンキューアクション、及びドロップアクション（例えば、特定のアクションを伴わずにフローテーブルエントリに一致するパケットをドロップする）を含む。変更フィールドアクションも、スイッチ１４によりサポートされる。行われる変更フィールドアクションは、例えば、セットＶＬＡＮ  ＩＤ、セットＶＬＡＮプライオリティ、ストリップＶＬＡＮヘッダ、変更ＶＬＡＮタグ、変更イーサネットソースＭＡＣ（メディアアクセスコントロール）アドレス、変更イーサネット行先ＭＡＣアドレス、変更ＩＰｖ４ソースアドレス、変更ＩＰｖ４  ＴｏＳビット、変更トランスポート行先ポートを含む。変更フィールドアクションは、フローテーブルエントリに一致するネットワークパケットの部分をリライトするのに使用される。
【００３３】
図４は、３つのフローテーブルエントリを有する例示的フローテーブルである。エントリは、ワイルドカード（例えば、“＊”記号）を伴うフィールドを含む。特定のフィールドにワイルドカードが存在するときは、全ての到来パケットは、到来パケットにおけるフィールドの特定値に関わりなく、フィールドに関して「一致」を形成すると考えられる。付加的なフィールドは、付加的なパケット情報（例えば、ネットワークパケットのパケットヘッダ情報）と一致する。
【００３４】
図４のテーブルの第１行のエントリは、フローテーブルエントリが作用しているスイッチに、イーサネットスイッチングを遂行するよう指令する。より詳細には、イーサネット行先アドレスに一致する到来パケットは、ポート３へ転送される。
【００３５】
図４のテーブルの第２行のエントリは、インターネットルーティングを遂行するためにスイッチをどのように構成するか示している（即ち、パケットは、その行先ＩＰアドレスに基づいて転送される）。
【００３６】
図４のテーブルの第３行は、ファイアウオールを形成するためにスイッチをどのように構成するか示すエントリを含む。行先ＩＰポート値が８０のパケットが受け取られると、そのパケットは、ドロップされる（即ち、スイッチは、ポート８０トラフィックをブロックするファイアウオールとして働くように構成される。
【００３７】
図４に示すタイプのフローテーブルエントリは、システム設定オペレーション中にコントローラサーバー１８によりスイッチ１４にロードされるか、又はスイッチ１４のようなスイッチからコントローラサーバー１８においてパケットを受け取って処理するのに応答してリアルタイムでコントローラサーバー１８からスイッチ１４に与えられる。多数のスイッチ１４を伴うネットワークでは、ネットワークを通る経路を形成するために適当なフローテーブルエントリが各スイッチに与えられる。
【００３８】
入力／出力ポート３４に受け取られるパケットを処理する際にスイッチ１４により遂行される例示的ステップが図５に示されている。ステップ７８において、スイッチ１４は、そのポートの１つ（例えば、図１の入力／出力ポート３４の１つ）にパケットを受け取る。
【００３９】
ステップ８０において、スイッチ１４は、受け取ったパケットのフィールドを、そのスイッチのフローテーブル２８におけるフローテーブルエントリのフィールドと比較して、一致があるかどうか決定する。フローテーブルエントリの幾つかのフィールドは、完全な値（例えば、完全なアドレス）を含む。他のフィールドは、ワイルドカード（即ち、「ドントケア(don't care)」ワイルドカードキャラクタ“＊”でマークされたフィールド）を含む。更に別のフィールドは、部分的に完全なエントリ（例えば、部分的にワイルドカードが付された部分アドレス）を有する。幾つかのフィールドは、範囲を使用し（例えば、ＴＣＰポート番号を１と４０９６との間の値に制限することにより）、そして実際に、その範囲を使用して、あるタイプの部分的ワイルドカード付けを遂行する。受け取ったパケットとフローテーブルエントリとの間でフィールドごとの比較を行う際に、スイッチ１４は、フローテーブルエントリの各フィールドが、ワイルドカードを伴わない完全な値を含むか、ワイルドカードを伴う部分的な値を含むか、又はワイルドカードキャラクタ（即ち、完全にワイルドカードの付いたフィールド）を含むか否か考慮することができる。
【００４０】
ステップ８０のオペレーション中に、パケットのフィールドとフローテーブルエントリの対応フィールドとの間に一致がないと決定された場合には、スイッチ１４は、リンク１６を経てコントローラサーバー１８へパケットを送信する（ステップ８４）。
【００４１】
ステップ８０のオペレーション中に、パケットとフローテーブルエントリとの間に一致があると決定された場合には、スイッチ１４は、そのフローテーブルエントリに関連したアクションを遂行し、そしてそのフローテーブルエントリの統計値フィールドのカウンタ値を更新する（ステップ８２）。次いで、処理は、線８６で示したように、ステップ７８へループバックして、スイッチ１４により別のパケットが処理される。
【００４２】
図６は、スイッチがコントローラ１８により制御される例示的ネットワーク１００の図である。コントローラ１８は、コントローラサーバーであるか、又は複数のコンピューティング装置にわたって実施される分散型コントローラである。図６に示すように、ネットワーク１００は、スイッチＳＷ１及びＳＷ２を備えている。コントローラ１８は、制御経路６６を経てネットワーク１００のスイッチに結合される。コントローラ１８は、制御経路６６を使用してスイッチを制御する（例えば、図３のフローテーブルエントリ６８のようなフローテーブルエントリを与えることにより）。スイッチは、エンドホスト又は他のスイッチに結合されたスイッチポートを含む。図６の例において、エンドホストＥＨ１及びＥＨ３は、スイッチＳＷ１の各ポートＰ１及びＰ３に結合され、エンドホストＥＨ２及びＥＨ４は、スイッチＳＷ２の各ポートＰ１及びＰ２に結合され、そしてスイッチＳＷ１及びＳＷ２は、スイッチＳＷ１のポートＰ２及びスイッチＳＷ２のポートＰ３を経て結合される。
【００４３】
コントローラ１８は、ネットワーク内のスイッチのオペレーションを制御する１つ以上のアプリケーションモジュール１０２を備えている。例えば、第１のアプリケーションモジュール１０２は、スイッチを、スイッチのエンドホスト又はポートのグループから形成されたバーチャルスイッチへと編成する。このシナリオでは、第１のアプリケーションモジュールは、ネットワークポリシーを施行しそしてバーチャルスイッチレベルで転送する際にネットワークの基礎的なスイッチＳＷ１及びＳＷ２を制御する（例えば、ネットワークポリシーは、基礎的なスイッチではなく、バーチャルスイッチに対して定義される）。別の例として、第２のアプリケーションモジュール１０２は、ネットワークトラフィックを分析してネットワークトラフィックレポートを発生するようなネットワーク監視機能を取り扱う。アプリケーションモジュールは、望ましいネットワーク構成（例えば、全ネットワークの）を生成して、スイッチモデリングインターフェイス１０４に与える。スイッチモデリングインターフェイス１０４は、スイッチモデル１０８を使用して望ましいネットワーク構成を実施し、そしてその実施が成功であるか失敗であるかをアプリケーションモジュールに指示する。
【００４４】
モジュール１０２のようなモジュールは、コントローラ１８において、汎用又は特定用途向けのコンピューティング装置或いは専用ハードウェア上でソフトウェアとして実施される。例えば、モジュール１０２は、共有コンピューティング装置でソフトウェアモジュールとして実施される。別の例として、モジュール１０２は、分散型コントローラ構成の異なるコンピューティング装置において実施される。
【００４５】
アプリケーションモジュール１０２は、アプリケーションモジュールに維持されるか又はコントローラ１８の他のモジュールにより維持されるネットワークトポロジー情報に基づいてスイッチを制御する。しかしながら、ネットワークには、数百、数千又はそれ以上のスイッチがある。アプリケーションモジュール１０２にとって、ネットワークのスイッチに送られる制御メッセージがスイッチにより首尾良く受け取られ又は実行されるように保証することが課題である。更に、複数のアプリケーションモジュール１０２がコントローラ１８において実施され、そして潜在的に互いに衝突する。コントローラ１８から受け取ったフローテーブルエントリをスイッチが実施し損なう場合について考える。この場合に、スイッチの状態は、予想される状態に一致せず、そしてコントローラにより与えられるその後のフローテーブルエントリは、望ましからぬネットワーク構成を生じることがある。
【００４６】
コントローラ１８には、スイッチとの通信及びスイッチ状態の維持を取り扱うスイッチモデリングインターフェイスモジュール１０４が設けられる。スイッチモデリングインターフェイスモジュール１０４は、アプリケーションモジュール１０２がネットワークのスイッチと同期されることを保証する上で助けとなる。スイッチモデリングインターフェイス１０４は、ネットワーク内の各スイッチを表わすモジュール１０８を実施する。例えば、スイッチモデルＭＳＷ１は、スイッチＳＷ１を表わし、一方、スイッチモデルＭＳＷ２は、スイッチＳＷ２を表わす。スイッチモデルＭＳＷ１及びＭＳＷ２は、各スイッチＳＷ１及びＳＷ２の現在状態に関する情報を維持する。例えば、スイッチモデルＭＳＷ１は、スイッチＳＷ１で実施される転送ルール又はポリシーを識別する情報を維持し、一方、スイッチモデルＭＳＷ２は、スイッチＳＷ２の状態を識別する。
【００４７】
スイッチモデル１０８は、制御モジュール１０６により制御される。制御モジュール１０６は、スイッチモデル１０８を制御し、そしてネットワークのスイッチに制御メッセージを発生して、アプリケーションモジュール１０２からのネットワーク制御要求を満足させる。スイッチモデル１０８は、１組のテーブルのようなデータ構造として実施される。図７は、スイッチＳＷ１の例示的スイッチモデル（例えば、図６のスイッチモデルＭＳＷ１）の図である。図７に示すように、スイッチモデル１１２は、対応するスイッチＳＷ１の状態に関する情報を含む。スイッチ状態は、エンドホストアタッチポイント、転送ルール、又はスイッチＭＳＷ１の状態（例えば、現在スイッチ構成）に関する情報を記憶する他のテーブルを含む。
【００４８】
図６の例示的ネットワークを参照すれば、スイッチＳＷ１のスイッチモデル１１２は、エンドホストを識別する情報、及びどのスイッチポートがエンドホストに結合されるかの情報を含む。エンドホストＥＨ１は、スイッチＳＷ１のポートＰ１にアタッチされるものとして識別され、一方、エンドホストＥＨ３は、スイッチＳＷ１のポートＰ３に接続されるものとして識別される。スイッチＳＷ１に直接アタッチされないエンドホストは、それらエンドホストがスイッチＳＷ１から届くところのポートによって識別される。例えば、エンドホストＥＨ２及びＥＨ４は、スイッチＳＷ１のポートＰ２に結合されるものとして識別される。というのは、スイッチＳＷ１のポートＰ２から転送されるパケットは、ポートＰ２を通してエンドホストＥＨ２及びＥＨ４に到達するからである。スイッチモデル１１２は、スイッチＳＷ１によりネットワークトラフィックをどのように転送すべきか支配する転送ルールを含む。例えば、転送ルールは、各エンドホストに対してスイッチＳＷ１がネットワークパケットをどのように転送すべきか定義するエントリを含むテーブルとして記憶される。転送ルールは、スイッチごとの転送ルールとしてスイッチモデルに記憶されるか、又はグローバルルールで働く１つ以上の機能を経てスイッチ特有のルールへ変換されるグローバルネットワーク規模のルール（例えば、テーブル）として記憶される。
【００４９】
スイッチモデル１１２は、対応するスイッチ（例えば、スイッチＳＷ１）の状態に関する情報を含む。例えば、スイッチモデル１１２は、リンクアグリゲーショングループを定義するエントリを有するリンクアグリゲーショングループ（ＬＡＧ）テーブルを含む。各リンクアグリゲーショングループには、論理ポートとして働くスイッチのポートのグループが指定される（例えば、スイッチの複数の物理的ポートが、ネットワークトラフィックを転送及び受信するところのリンクアグリゲーショングループを形成する）。
【００５０】
スイッチモデリングインターフェイス１０４は、ネットワークの状態を監視するためにスイッチと通信する。例えば、制御モジュール１０６は、制御メッセージをスイッチへと送信し及び／又はスイッチから状態メッセージを受信して、ネットワークの状態を監視する。制御モジュール１０６は、スイッチからの更新された状態情報に応答してスイッチモジュールを更新する。図８は、エンドホストＥＨ１がスイッチＳＷ１から切断されたことを識別する状態更新に応答して、図７のスイッチモデル１１２がどのように更新されるか示す図である。例えば、スイッチＳＷ１は、制御経路６６を経て制御モジュール１０４へポートダウンメッセージを送信する。このシナリオでは、ポートダウンメッセージは、スイッチＳＷ１のポートＰ１が切断されたことを識別し、そしてスイッチＳＷ１での電気的センサデータに応答して、又はコントローラ１８からスイッチＳＷ１へ送られる制御メッセージに応答して、直ちに送信される。
【００５１】
図８に示すように、変更されたスイッチモデル１１４は、エンドホストＥＨ１の状態情報を含まない。換言すれば、制御モジュール１０４は、アタッチポイント情報、転送ルール又は他のテーブルからエンドホストＥＨ１を除去する。
【００５２】
スイッチに送られるエントリを含む例示的転送テーブルが図９に示されている。図９の例において、転送テーブル１２２及び１２４は、イーサネットメディアアクセスコントロールのアドレスに対して作用するＯＳＩレイヤ−２（Ｌ２）転送テーブルである。転送テーブル１２２及び１２４は、スイッチＳＷ１及びＳＷ２のためのフローテーブルとして、又はフローテーブルのサブセット（例えば、一部分）として働く。例えば、制御モジュール１０６は、スイッチＳＷ１及びＳＷ２にフローテーブルエントリを与えて、転送テーブル１２２及び１２４をポピュレートする。転送テーブル１２２は、ネットワークパケットをどのように転送するか決定するためにスイッチＳＷ１により記憶されそして使用される。同様に、スイッチＳＷ２は、ネットワークパケットを転送するために転送テーブル１２４を記憶しそして0使用する。
【００５３】
スイッチＳＷ１のためのＬ２転送テーブル１２２の各エントリは、イーサネットアドレスと、識別されたイーサネットアドレスに向けられるネットワークトラフィックを転送すべきスイッチＳＷ１のポートとにより、エンドホストを識別する。第１のＬ２転送テーブルエントリは、イーサネットアドレスＭＡＣＥＨ１（即ち、エンドホストＥＨ１）に向けられるネットワークパケットをスイッチＳＷ１のポートＰ１へ転送するようにスイッチＳＷ１に指令する。というのは、エンドホストＥＨ１がスイッチＳＷ１のポートＰ１に接続されているからである。同様に、Ｌ２転送テーブルエントリは、エンドホストＥＨ３に向けられるネットワークパケットをポートＰ３（即ち、エンドホストＥＨ３がアタッチされるポート）から送信すべきであることを識別する。スイッチＳＷ１に直接アタッチされないエンドホストＥＨ２及びＥＨ４のようなエンドホストに対して、ネットワーク経路に沿ってエンドホスト（例えば、ポートＰ２）にネットワークパケットを転送するようにスイッチＳＷ１に指令するＬ２転送テーブルエントリが設けられる。同様に、スイッチＳＷ２のＬ２転送テーブル１２４は、イーサネットアドレスＭＡＣＥＨ１、ＭＡＣＥＨ２、ＭＡＣＥＨ３及びＭＡＣＥＨ４に向けられるネットワークパケットをスイッチＳＷ２のポートＰ３、Ｐ１、Ｐ３及びＰ２に各々転送すべきことを識別するエントリを含む。
【００５４】
転送テーブル１２２及び１２４のコピーが、スイッチモデリングインターフェイス（例えば、図７のスイッチモデル１１２の転送ルールの一部分）により記憶される。制御モジュール１０６は、アプリケーションモジュール１０２とネットワークのスイッチとの間をインターフェイスする上で助けとなるようローカルコピーを維持する。例えば、制御モジュール１０６は、ローカルコピーを使用して、スイッチに送られる制御メッセージの作用を模擬する。又、制御モジュール１０６は、スイッチへ制御メッセージを送る一部分として、スイッチと更に通信して、スイッチにおけるポスト制御メッセージ状態がスイッチモデル１０８における模擬状態に一致することを検証する。
【００５５】
スイッチモデリングインターフェイス１０４にとって、ネットワークの全てのスイッチに状態のローカルコピーを維持することが課題である。ネットワークが、複数の転送テーブル（例えば、Ｌ２転送テーブル、ＩＰ転送テーブル、等）を各々有する数百のスイッチを備えるシナリオについて考える。このシナリオでは、各スイッチは、そのスイッチの現在状態を定義する数百ないし数千のテーブルエントリ（例えば、転送テーブルエントリ、アドレス分析テーブルエントリ、リンクアグリゲーショングループテーブルエントリ、等）を含む。コントローラにおける利用可能なメモリのような限定リソースのために、スイッチモデリングインターフェイスが各スイッチの各テーブルエントリを記憶することは困難であるか又は不可能である。
【００５６】
コントローラにおけるスイッチモデリングインターフェイスは、グローバルデータ構造としての１つ以上のスイッチ状態、及びグローバルデータに作用してスイッチ特有の状態情報を発生するスイッチごとの機能を記憶するように構成される。図１０は、図９のスイッチ特有の転送テーブルにおけるスイッチ状態情報を、ホストテーブル１３２及びスイッチ間転送テーブル１３６を含むグローバルデータ構造としてどのように記憶するかを例示する図である。
【００５７】
ホストテーブル１３２は、エンドホストに対するアタッチポイントを識別するホストテーブルエントリ１３４を含む。図１０の例では、エンドホストＥＨ１のイーサネットアドレスＭＡＣＥＨ１が、第１のホストテーブルエントリ１３４においてスイッチＳＷ１のポートＰ１にアタッチされるとして定義される。同様に、イーサネットアドレスＭＡＣＥＨ２は、スイッチＳＷ２のポートＰ１にアタッチされるとして識別され、イーサネットアドレスＭＡＣＥＨ３は、スイッチＳＷ１のポートＰ３にアタッチされるとして識別され、そしてイーサネットアドレスＭＡＣＥＨ４は、スイッチＳＷ２のポートＰ２にアタッチされるとして識別される。ホストテーブル１３２は、特定のスイッチに対して特有ではない（例えば、ホストテーブル１３２は、グローバルテーブルである）。
【００５８】
スイッチ間転送テーブル１３６は、ネットワークのスイッチ間のリンクを識別するスイッチ間転送テーブルを含む。第１のエントリ１３８は、スイッチＳＷ２（例えば、行先スイッチ）に転送されるべきスイッチＳＷ１（例えば、ソーススイッチ）からのネットワークパケットをソーススイッチＳＷ１のポートＰ２から転送すべきであることを識別する。第２のエントリ１３８は、行先スイッチＳＷ１へ転送すべきソーススイッチＳＷ２からのネットワークパケットをスイッチＳＷ２のポートＰ３から転送すべきであることを識別する。
【００５９】
スイッチ間転送リンクがトラフィックの方向に基づいて識別される図１０の例は、単なる例示である。必要に応じて、スイッチの各対は、ネットワークリンクにより接続されるスイッチのポートによって識別される。例えば、エントリ１３８は、第１スイッチＳＷ１、第２スイッチＳＷ２を識別し、そして第１スイッチＳＷ１のポートＰ２は、第２スイッチＳＷ２のポートＰ３に接続される。それ故、スイッチ間転送テーブル１３６は、ここでは、スイッチ間リンクテーブル又はスイッチ間接続テーブルとも称される。というのは、テーブル１３６は、ネットワークのスイッチ間の接続を識別するからである。
【００６０】
ホストテーブル１３２及びスイッチ間転送テーブル１３６は、ネットワークのグローバルビューを表わし、それにより、コントローラに記憶されたスイッチ状態情報の冗長性を除去する上で助けとなる。例えば、図９のスイッチ特有のＬ２転送テーブル１２２及び１２４は、各ホストが対応スイッチの観点からどこに接続されるか識別する情報を各テーブルが含むので冗長な情報を含む（即ち、テーブル１２２は、各ホストがスイッチＳＷ１に対してどこに接続されるか識別し、一方、テーブル１２４は、各ホストがスイッチＳＷ２に対してどこに接続されるか識別する）。多数のスイッチ（例えば、数十、数百又はそれ以上）を伴うネットワークでは、図１０のグローバルテーブルは、コントローラにより記憶されるエントリの数を実質的に減少させる（例えば、各エンドホストの位置が一度しか識別されないので）。
【００６１】
コントローラにおけるスイッチモデリングインターフェイスには、スイッチモデルのためのスイッチ特有テーブルを得るために１つ以上のグローバルなテーブルに作用する機能が設けられる。図１１は、入力スイッチ及び入力アドレスを含む入力データを受け取りそして図１０のホストテーブル１３２及びスイッチ間転送テーブル１３６に作用して、図９のテーブル１２２及び１２４のようなスイッチ特有の転送テーブルを生成するＬ２転送テーブル機能（ＦＬ２ＴＡＢＬＥ）１４２を例示する図である。
【００６２】
スイッチの特定エンドホストのためのスイッチ特有の転送テーブルエントリを生成するために、スイッチモデリングインターフェイスは、そのエンドホストのイーサネットアドレスを与え、そしてそのスイッチを機能ＦＬ２ＴＡＢＬＥのための入力アドレス及び入力スイッチとして識別する。機能ＦＬ２ＴＡＢＬＥは、入力アドレス及び入力スイッチを検査するようにスイッチモデリングインターフェイスに指令する。ホストテーブル１３２のエントリが、入力アドレスが入力スイッチにアタッチされると識別する場合は、その入力スイッチの対応ポートがそのエントリから検索され、そしてＦＬ２ＴＡＢＬＥの出力として返送される。入力アドレスのエントリが入力スイッチを識別しない場合には、機能ＦＬ２ＴＡＢＬＥは、入力スイッチ及びホストテーブルエントリにより識別されるスイッチに一致するスイッチ間転送テーブルエントリからポートを返送するようにスイッチモデリングインターフェイスに指令する。
【００６３】
スイッチモデリングインターフェイスがスイッチＳＷ１及びイーサネットアドレスＭＡＣＥＨ１を機能ＦＬ２ＴＡＢＬＥへ入力として与えるシナリオについて考える。このシナリオでは、機能ＦＬ２ＴＡＢＬＥは、入力アドレスＭＡＣＥＨ１においてホストテーブルエントリを検索するようにスイッチモデリングインターフェイスに指令する。検索されたホストテーブルエントリは、スイッチＳＷ１と、入力スイッチに一致するポートＰ１（図１０を参照）とを識別し、それ故、ポートＰ１は、機能ＦＬ２ＴＡＢＬＥの出力として返送される。従って、イーサネットアドレスＭＡＣＥＨ１をスイッチＳＷ１のポートＰ１にアタッチされるものとして識別するテーブル１２２のためのスイッチ特有のＬ２転送テーブルエントリが生成される。
【００６４】
別の例として、スイッチモデリングインターフェイスが、スイッチＳ１及びイーサネットアドレスＭＡＣＥＨ２を機能ＦＬ２ＴＡＢＬＥへ入力として与えることにより、スイッチＳＷ１及びエンドホストＥＨ２のためのＬ２転送テーブルエントリを発生するというシナリオについて考える。このシナリオでは、スイッチモデリングインターフェイスは、機能ＦＬ２ＴＡＢＬＥにより指令されて入力アドレスＭＡＣＥＨ２においてホストテーブルエントリを検索する。検索されたホストテーブルエントリは、イーサネットアドレスＭＡＣＥＨ２がスイッチＳＷ２のポートＰ１にアタッチされ、これは、入力スイッチＳＷ１に一致しないことを識別する。それに応答して、機能ＦＬ２ＴＡＢＬＥは、入力スイッチＳＷ１及び識別されたスイッチＳＷ２に一致するスイッチ間接続テーブルエントリを検索するようにスイッチモデリングインターフェイスに指令する。検索されたエントリ１３８は、スイッチＳＷ１のポートＰ２がスイッチＳＷ２に接続されることを識別する（例えば、図１０のテーブル１３６の第１エントリを参照）。スイッチＳＷ１の識別されたポートＰ２は、機能ＦＬ２ＴＡＢＬＥの出力として返送される。従って、イーサネットアドレスＭＡＣＥＨ２をスイッチＳＷ１のポートＰ２に結合されるものとして識別するテーブル１２２のスイッチ特有のＬ２転送テーブルエントリが発生される。
【００６５】
Ｌ２転送情報のストレージ占有域を減少するのに役立つようにグローバルテーブルを使用する図１０及び１１の例は、単なる例示に過ぎない。コントローラ１８は、アドレス分析プロトコルテーブル、リンクアグリゲーショングループテーブル、又はネットワークの個々のスイッチに維持された他の情報のような望ましいスイッチ特有の情報に対するグローバルデータ構造で構成される。コントローラ１８は、入力及びグローバルデータ構造に作用してスイッチ特有の情報を再構成する多数の機能で構成される。
【００６６】
図６のアプリケーションモジュール１０２のようなアプリケーションモジュールは、スイッチモデリングインターフェイスにネットワークスナップショットを与えることによりネットワーク構成に対する望ましい変更を指示する。スイッチモデリングインターフェイスは、スイッチモデルを使用して正しさを保証するよう役立ちながら望ましい変更を実施するためにスイッチと通信する。図１２は、アプリケーションモジュールによりスイッチモデリングインターフェイスに与えられる例示的ネットワークスナップショット１５２である。ネットワークスナップショット１５２は、１組の望ましいスイッチ状態を含む。図１２の例において、ネットワークスナップショット１５２は、ネットワークのスイッチＳＷ１及びＳＷ２のためのレイヤ２転送テーブルＬ２ＴＡＢＬＥＳＷ１及びＬ２ＴＡＢＬＥＳＷ２（例えば、図９のテーブル１２２及び１２４）を含む。この例は、単なる例示に過ぎない。スナップショット１５２は、ネットワーク内のスイッチの望ましい状態を識別する望ましいスイッチ特有の情報を含む。換言すれば、スナップショット１５２は、実施されるべき望ましいネットワーク構成を定義する。
【００６７】
アプリケーションモジュールは、コントローラに要求されるストレージの量を減少する上で役立つように、スイッチ特有の状態情報に加えて又はそれに代って、グローバルデータ構造を与えるように構成される。図１３に示すように、ネットワークスナップショット１６２は、ホストテーブル及びスイッチ間転送テーブル（例えば、図１０のホストテーブル１３２及びスイッチ間転送テーブル１３６）を含む。ネットワークスナップショット１６２は、グローバルデータ構造からスイッチ特有の状態情報を発生する機能ＦＬ２ＴＡＢＬＥ（例えば、図１１のＦＬ２ＴＡＢＬＥ１４２）を含む。
【００６８】
ネットワークスナップショットは、スイッチ特有状態情報（例えば、図１２のスナップショット１５２）のみ、グローバル状態情報のみ、又はスイッチ特有及びグローバル状態情報の組合せを含む。ネットワークスナップショットに含まれる情報は、ネットワークの望ましい状態を識別し、これは、スイッチモデリングインターフェイスにより処理されて、ネットワークの望ましい状態を実施するためのスイッチ制御メッセージを発生する。図１４は、ネットワークスナップショットに基づいてネットワークの構成に対する望ましい変更を実施する際にスイッチモデリングインターフェイスにより遂行される例示的ステップのフローチャート２００である。
【００６９】
ステップ２０２の間に、スイッチモデリングインターフェイスは、ネットワークの構成に対してなされるべき望ましい変更（例えば、望ましいネットワーク構成）を指示する新たなスナップショットを受け取る。例えば、図１２のスナップショット１５２又は図１３のスナップショット１６２が受け取られる。
【００７０】
ステップ２０４の間に、スイッチモデリングインターフェイスは、ネットワーク内の各スイッチに対してステップ２０６のオペレーションを遂行する（例えば、スイッチモデリングインターフェイスは、スイッチを選択し、選択されたスイッチに対してステップ２０６のオペレーションを遂行し、付加的なスイッチを選択し、等々）。
【００７１】
ステップ２０６の間に、スイッチモデリングインターフェイスは、受け取ったスナップショットにおける各テーブル（例えば、スイッチ特有又はグローバル構造）に対してステップ２０８−２２４のオペレーションを遂行する。
【００７２】
ステップ２０８の間に、スイッチモデリングインターフェイスは、選択されたスイッチ（例えば、処理のためにステップ２０４の間に選択されたスイッチ）の状態が既知であるかどうか決定する。例えば、スイッチモデリングインターフェイスは、各スイッチモデル１０８の情報が最後に更新されたときを識別する情報を記憶する。この情報は、各テーブルに又はスイッチモデルのテーブルエントリにタイムスタンプとして記憶される。このシナリオでは、スイッチモデリングインターフェイスは、選択されたスイッチに関連したタイムスタンプを現在のシステム時間と比較する。その時間差がスレッシュホールドを越える場合には、スイッチモデリングインターフェイスは、選択されたスイッチの現在状態を更新すべきであることを決定する。
【００７３】
選択されたスイッチの状態がスイッチモデルから既知であると決定するのに応答して、ステップ２１０の間に現在スイッチ状態が検索され（例えば、対応するスイッチモデル１０８から）、その後、ステップ２１４のオペレーションが遂行される。選択されたスイッチの状態が既知でない（例えば、対応するスイッチモデル１０８が最新の情報を記憶していない）と決定するのに応答して、スイッチモデリングインターフェイスは、選択されたスイッチと通信して、ステップ２１４へ進む前に対応スイッチモデルを更新するためにその現在スイッチ状態を検索する。例えば、スイッチモデリングインターフェイスは、要求されたスイッチ状態情報（例えば、Ｌ２転送テーブル、ＡＲＰテーブル、等）に応答するようにスイッチに指令する制御メッセージを送信する。スイッチから受け取られるスイッチ状態情報は、スイッチモデル１０８を更新するのに使用される。
【００７４】
ステップ２１４の間に、スイッチモデリングインターフェイスは、現在スイッチ状態と、受け取られたネットワークスナップショットに定義された新たなスイッチ状態との間の差（Δ）を計算する。ネットワークスナップショット及び／又はスイッチモデルが、グローバルデータ構造に作用する機能を使用して定義されるシナリオでは、スイッチモデリングインターフェイスは、機能及びグローバルデータ構造を使用して、選択されたスイッチに対するスイッチ特有の状態情報を計算する。スイッチモデル及び受け取られたスナップショットからのスイッチ特有の状態情報が直接比較される。或いは又、グローバル構造が直接比較されてもよく、そしてグローバル構造で識別された差を使用して、対応するスイッチ特有の状態情報の差を識別してもよい。
【００７５】
ステップ２１６の間に、スイッチモデリングインターフェイスは、現在スイッチ状態と新たなスイッチ状態との間の計算された差を使用して、望ましい新たなスイッチ状態を実施するスイッチ制御メッセージを発生する。例えば、スイッチモデリングインターフェイスは、スイッチにおける１つ以上の現在Ｌ２転送テーブルエントリを、望ましい新たなスイッチ状態からのＬ２転送テーブルエントリと交換するように選択されたスイッチに指令するＯｐｅｎＦｌｏｗ制御メッセージを発生する。
【００７６】
ステップ２１８の間に、スイッチモデリングインターフェイスは、その発生されたスイッチ制御メッセージを同期要求メッセージと共にスイッチに与える。同期要求メッセージは、制御メッセージの首尾良い処理に応答して同期応答メッセージを与えるようにスイッチに指令する。換言すれば、スイッチ制御メッセージのスイッチ状態変更がスイッチにより首尾良く実施される場合に、スイッチは、ステップ２２０の間にコントローラのスイッチモデリングインターフェイスに受け取られる同期応答メッセージに応答しなければならない。スイッチ制御メッセージがスイッチにおいて首尾良く処理されない場合には、スイッチは、エラーメッセージを与えるか、又は同期要求に応答できない。スイッチから受け取られるエラーメッセージは、スイッチに生じたエラーのタイプを識別する。例えば、エラーメッセージは、スイッチにおけるテーブルがいっぱいで且つスイッチ制御メッセージで与えられる新たなエントリを記憶できないことを識別する。別の例として、エラーメッセージは、スイッチが制御メッセージ（例えば、サポートされないオペレーションエラー）で特定されたオペレーションを遂行できないことを識別する。必要に応じて、制御モジュールは、ステップ２１８の間にスイッチ制御メッセージが送信されたときにイネーブルされるタイマーを維持する。タイマーは、スイッチが応答（例えば、同期応答又はエラーメッセージ）を与えると予想される期間を表わす値で構成される。このシナリオでは、制御モジュールは、タイマーの時間切れに応答してエラーを識別する。
【００７７】
スイッチ制御メッセージが発生時に送出される図１４の例は、単なる例示に過ぎない。必要に応じて、ステップ２１６の間に発生されたスイッチ制御メッセージを累積してグループで送出することができる。このシナリオでは、スイッチ制御メッセージの各グループに対して同期要求が送出され、そして同期応答メッセージが全対応グループに対する首尾良い応答を確認する。
【００７８】
図１５は、ネットワーク内のスイッチを制御する際にスイッチモデリングインターフェイスを有するコントローラにより遂行される（例えば、図６のコントローラ１８により遂行される）例示的ステップのフローチャート３００である。
【００７９】
ステップ３０２に間に、コントローラは、ネットワークイベントを識別する。ネットワークイベントは、スイッチから又はネットワークアドミニストレータのようなユーザから受け取られた情報に基づいて識別され又は検出される。例えば、エンドホストの接続又は切断は、スイッチから制御経路を経て受け取られたメッセージから識別される。別の例として、ユーザは、望ましい新たなネットワーク構成（例えば、新たな転送テーブル値、リンクアグリゲーショングループ指定、等）を識別する新たなネットワークポリシーを与える。
【００８０】
ステップ３０４の間に、コントローラのアプリケーションモジュールは、ネットワークイベントに基づいて新たなネットワークスナップショットを発生する（例えば、図６のアプリケーションモジュール１０２）。例えば、ネットワークイベントに応答して望ましいネットワーク構成を指示する図１２のスナップショット１５２又は図１３のスナップショット１６２のようなネットワークスナップショットが発生される。エンドホストの切断に応答して、アプリケーションモジュールは、ネットワーク構成からエンドホストを除去するネットワークスナップショットを発生する。エンドホストの接続に応答して、アプリケーションモジュールは、ネットワーク構成にエンドホストを追加するネットワークスナップショットを発生する（例えば、転送テーブルエントリが既存のネットワーク転送ルールを満足することを保証しながら転送テーブルにエンドホストを追加する）。新たなネットワークポリシーに応答して、アプリケーションモジュールは、既存のネットワーク構成にネットワークポリシーを適用するネットワークスナップショットを発生する（例えば、転送テーブルエントリのような既存のテーブルエントリを置き換え又は変更する）。
【００８１】
ステップ３０６の間に、アプリケーションモジュールは、新たなネットワークスナップショットをスイッチモデリングインターフェイスへ送信する。その後のステップ３０８の間に、スイッチモデリングインターフェイスは、現在ネットワークスナップショットと新たなスナップショットとの間の差（Δ）を計算する。現在ネットワークスナップショットは、コントローラに記憶されるか、又はスイッチとの通信により発生される。ステップ３１０の間に、スイッチモデリングインターフェイスは、ネットワーク内の各ステーションに対して、新たなネットワークスナップショットを実施するため新たなスナップショットをスイッチの現在状態と調和させる。例えば、スイッチモデリングインターフェイスは、ステップ３０８及び３１０を遂行する際に、図１４のフローチャート２００のステップを遂行する。ステップ３１２の間に、スイッチモデリングインターフェイスは、新たなネットワークスナップショットを実施する際にアプリケーションモジュールに成功又は失敗を通知する。
【００８２】
スイッチモデリングインターフェイスにとって、現在スイッチ状態と、望ましい新たなネットワークスナップショットとの間の差Δを決定することが課題である。例えば、スイッチの状態は、数百ないし数千のテーブルエントリを含む。制御経路を経てコントローラへこれらのテーブルエントリを転送しそして差Δを計算するには時間がかかる。ネットワーク内のスイッチには、現在スイッチ状態と望ましいネットワークスナップショットとの間の差を決定する上で助けとなるようにコントローラにより使用されるハッシュ能力が設けられる。
【００８３】
図１６は、コントローラにおけるスイッチモデリングインターフェイスの性能を改善する上で助けとなるようにテーブルエントリからダイジェスト識別子を発生する際にスイッチにより遂行される例示的ステップのフローチャート４００である。フローチャート４００のステップは、例えば、図１のスイッチ１４の制御ユニット２４における回路によって遂行される。
【００８４】
ステップ４０２の間に、スイッチは、転送テーブルエントリ、リンクアグリゲーショングループテーブルエントリ、アドレス分析プロトコルテーブルエントリ、又はスイッチの構成を少なくとも部分的に定義する他のテーブルエントリのようなテーブルエントリを受け取るか、さもなければ、処理する。例えば、テーブルエントリは、フローテーブルエントリであるか、又はコントローラにより与えられるフローテーブルエントリの一部分である。
【００８５】
ステップ４０４の間に、スイッチは、テーブルエントリのためのハッシュ値を計算する。ハッシュは、望ましいハッシュアルゴリズムを使用して計算される。例えば、スイッチは、テーブルエントリのバイナリデータに対してセキュアハッシュアルゴリズム（ＳＨＡ）を使用してハッシュ値を発生する。
【００８６】
スイッチは、ハッシュ値に基づいてテーブルエントリを編成するためのバケット（例えば、ゼロ又はそれ以上のテーブルエントリのグループ）を維持する。ステップ４０６の間に、スイッチは、ハッシュ値の一部分に基づいてバケットにテーブルエントリを指定する。例えば、ハッシュ値のビットの最初の２つ、３つ、４つ、又は選択されたＮ個を使用して、どのバケットにテーブルエントリを指定するか決定する。
【００８７】
ステップ４０８の間に、スイッチは、指定のバケットに対するダイジェスト値（例えば、ダイジェスト識別子）を計算する。ダイジェスト値は、指定のバケットにおける全てのエントリにわたってビットごとの論理ＸＯＲを計算することにより計算される。スイッチは、指定のバケットに対するダイジェスト値を記憶し、そしてコントローラからの要求に応答して、バケットのダイジェスト値を与える。
【００８８】
図１７は、バケット４１４を含む例示的ダイジェストテーブル４１２の図である。ダイジェストテーブル４１２は、スイッチにより（例えば、スイッチのストレージに）維持される。バケット４１４には、計算されたハッシュ値に基づいてテーブルエントリが指定される（例えば、図１６のフローチャート４００のオペレーション中に）。図１７の例では、ハッシュテーブルエントリに対するハッシュ値の最初の２ビットに基づいてバケット４１４にハッシュテーブルエントリが指定される。各バケットに関連したハッシュ値ビットの数は、バケットの数に対応する。
【００８９】
各バケット４１４は、ゼロ又はそれ以上のハッシュテーブルエントリと、それらハッシュテーブルエントリのビットごとのＸＯＲから計算されたダイジェスト値とを含む（例えば、全てのハッシュテーブルエントリにわたる各ビット位置のＸＯＲ値は、各ハッシュテーブルエントリと同じ合計数のビットを有するダイジェスト値を発生するように計算される）。バケット０は、００のバイナリ値に対応し、そして“００”でスタートするハッシュテーブルエントリＨ１及びＨ２が指定される。同様に、バケット１（バイナリ０１）には、“０１”で始まるエントリが指定され、バケット２（バイナリ１０）には、“１０”で始まるエントリＨ３が指定され、そしてバケット３（バイナリ１１）には、“１１”で始まるエントリＨ４が指定される。
【００９０】
バケット０のダイジェストは、ハッシュ値Ｈ１及びＨ２のＸＯＲである。一例として、ハッシュ値Ｈ１及びＨ２は、図９のテーブル１２２の最初の２つのＬ２転送テーブルエントリのハッシュ値である。バケット１のダイジェスト（バイナリ値０１）は、バケット１に指定されるテーブルエントリがないので、ゼロである。バケットＨ３及びＨ４は、それらバケットＨ３及びＨ４の各々に１つのテーブルエントリしか指定されないので、各ハッシュ値Ｈ３及びＨ４に等しいダイジェストを有する。
【００９１】
ＸＯＲが各バケット４１４のハッシュテーブルエントリから計算される図１７の例は、単なる例示に過ぎない。必要に応じて、別のハッシュ関数のような論理的関数が各バケット４１４のエントリに対して計算されて、そのバケットのためのダイジェスト値が発生される。論理的ＸＯＲ関数が望ましい。というのは、ハッシュテーブルエントリの１ビットの変化で異なるダイジェスト値が形成されるからである。更に、ダイジェスト値は、追加又は除去されるべきハッシュ値と共に現在ダイジェスト値のＸＯＲを計算することによりハッシュテーブルエントリの追加又は除去に応答して更新される（例えば、バケットの全てのハッシュテーブルエントリからダイジェスト値を再計算する必要はない）。
【００９２】
スイッチにより維持されるネットワーク状態（例えば、転送テーブルのようなテーブル）のダイジェスト値は、望ましいネットワーク構成のネットワークスナップショットが既存のネットワーク構成と異なるかどうか決定するのに使用される。図１８は、スイッチで計算されたダイジェスト値を使用して望ましいネットワークスナップショットと既存のネットワーク構成との間の差を識別するためにコントローラにおいてスイッチモデリングインターフェイスにより遂行される例示的ステップのフローチャート５００である。フローチャート５００のステップは、例えば、図１４のステップ２１２及び２１４の間に或いは図１５のステップ３０８の間に遂行される。
【００９３】
ステップ５０２の間に、スイッチモデリングインターフェイスの制御モジュールは、望ましいネットワークスナップショット（例えば、ネットワークのスイッチに対して望ましいネットワーク構成を指示するアプリケーションモジュールから受け取られるネットワークスナップショット）に対する１つ以上のダイジェストテーブルを計算する。制御モジュールは、スイッチがそれ自身のダイジェストテーブルをどのように計算するのかと同様に各スイッチのダイジェストテーブルを計算する。例えば、制御モジュールは、スイッチに関連したネットワークスナップショットのテーブルエントリを使用してスイッチごとに図１６のステップ４０４−４０８を遂行する（例えば、ネットワーク内のスイッチごとに個別のダイジェストテーブルが計算される）。
【００９４】
ステップ５０４の間に、制御モジュールは、スイッチを選択し、そしてその選択されたスイッチにより維持されるダイジェストテーブル（例えば、図１６のフローチャート４００のステップを遂行する際にスイッチにより維持されるダイジェストテーブル）を要求する。
【００９５】
ステップ５０６の間に、制御モジュールは、コントローラにより計算されたダイジェスト値をスイッチから検索されたダイジェスト値と比較して、ダイジェスト値の差を識別する。スイッチから検索されたダイジェスト値と一致しないところの選択されたスイッチの計算されたダイジェストテーブルのバケットは、更新を要求するものとして識別される。逆に、検索されたダイジェスト値と一致するところの選択されたスイッチの計算されたダイジェストテーブルのバケットは、更新を要求しないものとして識別される。
【００９６】
ステップ５０８の間に、制御モジュールは、選択されたスイッチと通信して、選択されたバケットのみのテーブルエントリ（例えば、選択されたバケットに指定されるハッシュ値を計算するのに使用されたテーブルエントリ）を検索する。制御モジュールは、検索されたテーブルエントリをネットワークスナップショットの望ましいテーブルエントリと比較し、そしてネットワークスナップショットの望ましいネットワーク構成を実施する矯正的テーブルエントリを選択されたスイッチに与える。
【００９７】
図１８に示すダイジェスト値を使用して、望ましいネットワーク構成を実施するのにどんな変更を行う必要があるか決定することは、コントローラとネットワーク内のスイッチとの間の制御経路上のトラフィックの量を減少するのに役立つ。というのは、非一致ダイジェスト値を有するバケットのテーブルエントリしか転送されないからである。非一致ダイジェスト値に関連したテーブルエントリだけを転送することで、コントローラにおけるストレージリソース（例えば、メモリ）をより効率的に使用することができる。というのは、いかなる所与の時間にもコントローラに全スイッチ状態を記憶する必要がないからである。
【００９８】
一実施形態によれば、スイッチに結合されたエンドホストを有するネットワーク内のスイッチを制御するコントローラを使用する方法において、コントローラにおけるスイッチモデリングインターフェイスで、ネットワーク内のスイッチのスイッチモデルを維持し；コントローラにおけるスイッチモデリングインターフェイスで、スイッチのネットワークの望ましいネットワーク構成を受け取り；及びスイッチモデリングインターフェイスで、スイッチモデルに基づいて望ましいネットワーク構成を実施するようにスイッチのための制御メッセージを発生する；ことを含む方法が提供される。
【００９９】
別の実施形態によれば、スイッチモデリングインターフェイスで受け取られる望ましいネットワーク構成は、１組のテーブル及び機能を含み、前記方法は、スイッチモデリングインターフェイスで、１組のテーブルに機能を作用させて、望ましいネットワーク構成を識別することを含む。
【０１００】
別の実施形態によれば、前記１組のテーブルは、エンドホストアタッチポイントを識別するホストテーブル、及びスイッチ間転送テーブルを含み、そして１組のテーブルに機能を作用させて望ましいネットワーク構成を識別することは、前記ホストテーブル及びスイッチ間転送テーブルに機能を作用させてスイッチのための転送テーブルを生成することを含む。
【０１０１】
別の実施形態によれば、前記方法は、コントローラで、ネットワークイベントを識別し、及びコントローラで、そのネットワークイベントに基づいて望ましいネットワーク構成を生成することを含む。
【０１０２】
別の実施形態によれば、ネットワークイベントは、エンドホストの接続、エンドホストの切断、及び新たなネットワークポリシーより成るグループから選択されたイベントを含む。
【０１０３】
別の実施形態によれば、スイッチモデルは、ネットワーク構成を識別し、前記方法は、スイッチモデリングインターフェイスで、望ましいネットワーク構成とスイッチモデルにより識別されたネットワーク構成との間の差を識別することを含み、スイッチモデルに基づいて望ましいネットワーク構成を実施するようにスイッチのための制御メッセージを発生することは、望ましいネットワーク構成とスイッチモデルにより識別されたネットワーク構成との間の識別された差のみに対する制御信号を発生することを含む。
【０１０４】
別の実施形態によれば、前記方法は、スイッチモデリングインターフェイスで、スイッチに制御メッセージを送出し；及びスイッチモデリングインターフェイスで、その制御メッセージがスイッチにおいて首尾良く実施されたかどうか決定する；ことを含む。
【０１０５】
別の実施形態によれば、コントローラは、スイッチモデリングインターフェイスと通信することによりスイッチを制御する複数のアプリケーションモジュールを備え、そしてネットワークイベントに基づいて望ましいネットワーク構成を発生することは、複数のアプリケーションモジュールの所与の１つで、望ましいネットワーク構成を発生し、及びその所与のアプリケーションモジュールで、望ましいネットワーク構成をスイッチモデリングインターフェイスに与えることを含む。
【０１０６】
別の実施形態によれば、前記方法は、スイッチモデリングインターフェイスで、制御メッセージがスイッチにおいて首尾良く実施されたかどうか識別する情報を所与のアプリケーションモジュールに与えることを含む。
【０１０７】
別の実施形態によれば、制御メッセージがスイッチにおいて首尾良く実施されたかどうか決定することは、同期要求メッセージを制御メッセージと共にスイッチに与え、そしてその同期要求メッセージに対応する同期応答メッセージをスイッチから受け取るのに応答して、制御メッセージがスイッチにおいて首尾良く実施されたと決定することを含む。
【０１０８】
別の実施形態によれば、制御メッセージがスイッチにおいて首尾良く実施されたかどうか決定することは、スイッチからエラーメッセージを受け取るのに応答して、制御メッセージがスイッチにおいて首尾良く実施されなかったと決定することを含む。
【０１０９】
別の実施形態によれば、各スイッチは、ハッシュされたスイッチ状態情報を含むエントリを有するダイジェストテーブルを維持し、ダイジェストテーブルの各エントリは、そのエントリのハッシュされたスイッチ状態情報から計算されたダイジェスト値を含み、そして望ましいネットワーク構成と、スイッチモジュールにより識別されるネットワーク構成との間の差を識別することは、コントローラで、望ましいネットワーク構成に対する１組の望ましいダイジェストテーブルを計算し、スイッチモデリングインターフェイスで、スイッチからダイジェストテーブルを検索し、そしてコントローラにより計算された望ましいダイジェストテーブルをスイッチからの検索されたダイジェストテーブルと比較することを含む。
【０１１０】
一実施形態によれば、ネットワークスイッチを操作する方法において、ネットワークスイッチで、スイッチ構成データを受信し；及びネットワークスイッチで、その受信されたスイッチ構成データ及びネットワークスイッチにおける既存のスイッチ構成データに少なくとも一部分基づいてダイジェスト値を計算する；ことを含む方法が提供される。
【０１１１】
別の実施形態によれば、前記方法は、ネットワークスイッチで、複数のバケットを有するダイジェスト値を維持し、各バケットは各ダイジェスト値に関連し；ネットワークスイッチで、受信されたスイッチ構成データをハッシュし；及びそのハッシュされたスイッチ構成データに基づいて複数のバケットのうちの選択された１つにそのハッシュされたスイッチ構成データを指定し、その選択されたバケットに対して計算されたダイジェスト値が記憶される；ことを含む。
【０１１２】
別の実施形態によれば、ハッシュされたスイッチ構成データは、複数のビットを含み、そしてハッシュされたスイッチ構成データに基づいて複数のバケットのうちの選択された１つにそのハッシュされたスイッチ構成データを指定することは、その複数のビットのサブセットに基づいてバケットを選択することを含む。
【０１１３】
別の実施形態によれば、選択されたバケットは、以前にハッシュされたスイッチ構成データを含み、そして受信されたスイッチ構成データ及びネットワークスイッチにおける既存のスイッチ構成データに少なくとも一部分基づいてダイジェスト値を計算することは、ハッシュされたスイッチ構成データ及び選択されたバケットにおける以前にハッシュされたスイッチ構成データに基づいて論理的ＸＯＲを計算することを含む。
【０１１４】
別の実施形態によれば、前記スイッチ構成データは、スイッチのための転送テーブルを含む。
【０１１５】
別の実施形態によれば、スイッチは、ネットワーク制御経路を経てコントローラと通信し、前記方法は、コントローラからの要求に応答して、テーブルのダイジェスト値をコントローラへ送信することを含む。
【０１１６】
別の実施形態によれば、スイッチに結合されたエンドホストを有するネットワーク内のスイッチを制御するコントローラを使用する方法において、コントローラで、現在ネットワーク構成を識別する情報を維持することを含み、その現在ネットワーク構成を識別する情報は、１組のテーブル、及びその１組のテーブルに対して作用して、現在ネットワーク構成の少なくとも一部分を生成する機能を含むものである方法が提供される。
【０１１７】
別の実施形態によれば、１組のテーブルは、全てのエンドホストに対するエンドホストアタッチポイントを識別するホストテーブル、及びスイッチ間のリンクを識別するスイッチ間転送テーブルを含み、前記方法は、コントローラで、前記機能を使用して、ホストテーブル及びスイッチ間転送テーブルに基づいて前記スイッチの所与の１つに対するスイッチごとの転送テーブルを生成することを含む。
【０１１８】
別の実施形態によれば、前記方法は、コントローラで、現在ネットワーク構成を識別する情報に基づいて望ましいネットワーク構成を実施するためにスイッチに対する制御メッセージを発生することを含む。
【０１１９】
以上は、本発明の原理の単なる例示であり、本発明の精神及び範囲から逸脱せずに種々の変更が当業者に明らかであろう。
【符号の説明】
【０１２０】
１０：ネットワーク
１２：コンピューティング装置
１４：ネットワークスイッチ（パケット転送システム）
１８：コントローラサーバー
２０：ネットワーク構成ルール
２４：制御回路
２６：パケット処理ソフトウェア
２８：フローテーブル
３０：コントローラクライアント
３２：パケット処理回路
３４：入力／出力ポート
５４：制御ソフトウェア
５６：制御プロトコルスタック
５８：ネットワークプロトコルスタック
６０：ネットワークプロトコルスタック
６２：制御プロトコルスタック
６４：制御ソフトウェア
１０２：アプリケーションモジュール
１０４：スイッチモデリングインターフェイス
１０６：制御モジュール
１０８：スイッチモデル
１１２：スイッチモデル
１１４：変更されたスイッチモデル
１２２、１２４：転送テーブル
１３２：ホストテーブル
１３４：ホストテーブルエントリ
１３６、１３８：スイッチ間転送テーブル
１５２、１６２：ネットワークスナップショット
【図１】
0006518697.tif 000002
【図２】
0006518697.tif 000003
【図３】
0006518697.tif 000004
【図４】
0006518697.tif 000005
【図５】
0006518697.tif 000006
【図６】
0006518697.tif 000007
【図７】
0006518697.tif 000008
【図８】
0006518697.tif 000009
【図９】
0006518697.tif 000010
【図１０】
0006518697.tif 000011
【図１１】
0006518697.tif 000012
【図１２】
0006518697.tif 000013
【図１３】
0006518697.tif 000014
【図１４】
0006518697.tif 000015
【図１５】
0006518697.tif 000016
【図１６】
0006518697.tif 000017
【図１７】
0006518697.tif 000018
【図１８】
0006518697.tif 000019