(57)【特許請求の範囲】
【請求項１】
複数のネットワークインターフェイスポートと、構成データを記憶しているメモリと、少なくとも１つのプロセッサとを備えるネットワークデバイスであって、
複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信する手段を備え、前記複数のコントローラデバイスは少なくとも第２のコントローラデバイスを備え、
前記第１のコントローラデバイスから前記第１のコントローラ可用性メッセージを受信したことに応答して、前記第１のコントローラデバイスのパフォーマンス特性の第１の値を求める手段と、
前記複数のコントローラデバイスのうちの前記第２のコントローラデバイスから第２のコントローラ可用性メッセージを受信する手段と、
前記第２のコントローラデバイスから前記第２のコントローラ可用性メッセージを受信したことに応答して、前記第２のコントローラデバイスのパフォーマンス特性の第２の値を求める手段とを備え、
コントローラデバイス毎の前記パフォーマンス特性は、各コントローラデバイスによる制御下にあるネットワークデバイスの数、および、各コントローラデバイスのレイテンシのうち１つであり、
前記第１の値と前記第２の値との比較に少なくとも基づいて、前記ネットワークデバイスのためのコントローラとして、前記第１のコントローラデバイスおよび前記第２のコントローラデバイスの一方を選択する手段と、
前記複数のコントローラデバイスの各々に、前記ネットワークデバイスのための前記コントローラデバイスの選択を報告する手段と、を備える、ネットワークデバイス。
【請求項２】
前記選択する手段は、前記複数のコントローラデバイスのうちのいずれかからその他のコントローラ可用性メッセージを受信する前に前記第１のコントローラ可用性メッセージを受信したことに基づいて、前記ネットワークデバイスのための前記コントローラとして、前記第１のコントローラデバイスを選択する、請求項１に記載のネットワークデバイス。
【請求項３】
前記パフォーマンス特性は、各コントローラデバイスによる制御下のネットワークデバイスの数であり、
他のネットワークのカウントが最も低いコントローラを、その制御下で選択する手段をさらに備える、請求項１または２に記載のネットワークデバイス。
【請求項４】
前記パフォーマンス特性は、コントローラデバイス毎のレイテンシであり、
前記選択する手段は、レイテンシが最も低いコントローラを選択する、請求項１または２に記載のネットワークデバイス。
【請求項５】
前記選択する手段は、前記コントローラデバイスを選択する前にランダムな長さの時間だけ待機する、請求項１から４のいずれか１項に記載のネットワークデバイス。
【請求項６】
前記ネットワークデバイスは、前記第２のコントローラデバイスによって制御される少なくとも第２のネットワークデバイスを備える複数のネットワークデバイス内にある、請求項１から５のいずれか１項に記載のネットワークデバイス。
【請求項７】
前記選択する手段は、前記ネットワークデバイスのためのバックアップコントローラとして、前記第１のコントローラデバイスおよび前記第２のコントローラデバイスの他方を選択する、請求項１から６のいずれか１項に記載のネットワークデバイス。
【請求項８】
前記報告する手段は、前記第１のコントローラデバイスに、かつ前記第２のコントローラデバイスに、前記ネットワークデバイスのための前記バックアップコントローラの選択を報告する、請求項７に記載のネットワークデバイス。
【請求項９】
複数のネットワークインターフェイスポートと、構成データを記憶しているメモリと、少なくとも１つのコンピューティングプロセッサとを備えるネットワークデバイスによって、複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信するステップを備え、前記複数のコントローラデバイスは少なくとも第２のコントローラデバイスを備え、
前記第１のコントローラデバイスから前記第１のコントローラ可用性メッセージを受信したことに応答して、前記第１のコントローラデバイスのパフォーマンス特性の第１の値を求めるステップと、
前記複数のコントローラデバイスのうちの前記第２のコントローラデバイスから第２のコントローラ可用性メッセージを受信するステップと、
前記第２のコントローラデバイスから前記第２のコントローラ可用性メッセージを受信したことに応答して、前記第２のコントローラデバイスのパフォーマンス特性の第２の値を求めるステップとを備え、
コントローラデバイス毎の前記パフォーマンス特性は、各コントローラデバイスによる制御下にあるネットワークデバイスの数、および、各コントローラデバイスのレイテンシのうち１つであり、
前記第１の値と前記第２の値との比較に少なくとも基づいて、前記ネットワークデバイスのためのコントローラとして、前記第１のコントローラデバイスまたは前記第２のコントローラデバイスのいずれか一方を前記ネットワークデバイスによって選択するステップと、
前記複数のコントローラデバイスの各々に、前記ネットワークデバイスのための前記コントローラデバイスの選択を、前記ネットワークデバイスによって報告するステップとを備える、方法。
【請求項１０】
前記方法は、前記複数のコントローラデバイスのうちのいずれかからその他のコントローラ可用性メッセージを受信する前に前記第１のコントローラ可用性メッセージを受信したことに基づいて、前記ネットワークデバイスによって、前記ネットワークデバイスのための前記コントローラとして、前記第１のコントローラデバイスを選択するステップを備える、請求項９に記載の方法。
【請求項１１】
前記パフォーマンス特性は、各コントローラデバイスによる制御下のネットワークデバイスの数であり、
他のネットワークのカウントが最も低いコントローラを、その制御下で選択するステップを備える、請求項９または１０に記載の方法。
【請求項１２】
前記パフォーマンス特性は、コントローラデバイス毎のレイテンシであり、
レイテンシが最も低いコントローラを選択するステップとを備える、請求項９または１０に記載の方法。
【請求項１３】
前記ネットワークデバイスがコントローラデバイスを必要としていることを、前記ネットワークデバイスによって判断するステップと、
前記コントローラデバイスを選択する前に、前記判断するステップの後にランダムな長さの時間だけ、前記ネットワークデバイスによって待機するステップとを備える、請求項９から１２のいずれか１項に記載の方法。
【請求項１４】
前記ネットワークデバイスは、前記第２のコントローラデバイスによって制御される少なくとも第２のネットワークデバイスを備える複数のネットワークデバイスを備えるネットワーク内にある、請求項９から１３のいずれか１項に記載の方法。
【請求項１５】
前記ネットワークデバイスのためのコントローラとして選択されなかった前記第１のコントローラデバイスおよび前記第２のコントローラデバイスの他方を、前記ネットワークデバイスのためのバックアップコントローラとして、前記ネットワークデバイスによって選択するステップを備える、請求項９から１４のいずれか１項に記載の方法。
【請求項１６】
前記第１のコントローラデバイスに、かつ前記第２のコントローラデバイスに、前記ネットワークデバイスのための前記バックアップコントローラの選択を報告するステップを備える、請求項１５に記載の方法。
【請求項１７】
１つ以上のプロセッサを備えるコンピューティングデバイスに方法を実行させるためのプログラムであって、前記方法は、
複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信するステップを備え、前記複数のコントローラデバイスは少なくとも第２のコントローラデバイスを備え、
前記第１のコントローラデバイスから前記第１のコントローラ可用性メッセージを受信したことに応答して、前記第１のコントローラデバイスのパフォーマンス特性の第１の値を求めるステップと、
前記複数のコントローラデバイスのうちの前記第２のコントローラデバイスから第２のコントローラ可用性メッセージを受信するステップと、
前記第２のコントローラデバイスから前記第２のコントローラ可用性メッセージを受信したことに応答して、前記第２のコントローラデバイスのパフォーマンス特性の第２の値を求めるステップとを備え、
コントローラデバイス毎の前記パフォーマンス特性は、各コントローラデバイスによる制御下にあるネットワークデバイスの数、および、各コントローラデバイスのレイテンシのうち１つであり、
前記第１の値と前記第２の値との比較に少なくとも基づいて、前記ネットワークデバイスのためのコントローラとして、前記第１のコントローラデバイスおよび前記第２のコントローラデバイスの一方を選択するステップと、
前記複数のコントローラデバイスの各々に、前記ネットワークデバイスのための前記コントローラデバイスの選択を報告するステップと、を備える、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本願は、「ソフトウェア定義ネットワークにおけるマルチマスタ選択（Multi-Master Selection in a Software Defined Network）」と題された、２０１４年１月６日に出願された米国特許出願番号第１４／１４８，４２３号の利益および優先権を主張し、当該出願はその全体があらゆる目的のために引用により本明細書に援用される。
【背景技術】
【０００２】
背景
ソフトウェア定義ネットワーク（「ＳＤＮ」）は、ネットワークトラフィックをルーティングするためのテーブルの更新などの構成情報のために別個のコントローラに依拠する少なくとも１つのネットワークデバイスを含むデータネットワーク内の１組のネットワークデバイスである。典型的に、ＳＤＮは１つのコントローラのみを有する。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
一局面では、開示は、複数のネットワークインターフェイスポートと、構成データを記憶しているメモリと、少なくとも１つのプロセッサとを有するネットワークデバイスに関し、少なくとも１つのプロセッサは、少なくとも第２のコントローラデバイスを含む複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信し、第１のコントローラデバイスから受信した第１のコントローラ可用性メッセージに少なくとも基づいて、ネットワークデバイスのためのコントローラとして、第１のコントローラデバイスおよび第２のコントローラデバイスの一方を選択し、選択されたコントローラデバイスに、コントローラデバイスの選択を報告するように構成される。
【０００４】
いくつかの実現例では、少なくとも１つのプロセッサは、第１のコントローラデバイスのパフォーマンス特性の第１の値、および第２のコントローラデバイスのパフォーマンス特性の第２の値を求め、第１の値と第２の値との比較に基づいて、ネットワークデバイスのためのマスタコントローラとして、第１および第２のコントローラデバイスの一方を選択するように構成される。いくつかの実現例では、パフォーマンス特性は、各コントローラデバイスによる制御下のネットワークデバイスの数である。いくつかの実現例では、パフォーマンス特性は、コントローラデバイス毎の平均レイテンシである。
【０００５】
いくつかの実現例では、ネットワークデバイスは複数のコントローラデバイスの各々に選択を報告する。いくつかの実現例では、ネットワークデバイスは、ネットワークデバイスのためのバックアップコントローラとして、第２のコントローラデバイスを選択する。
【０００６】
一局面では、開示は方法に関する。当該方法は、ネットワークデバイスによって、少なくとも第２のコントローラデバイスを含む複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信するステップと、第１のコントローラデバイスから受信した第１のコントローラ可用性メッセージに少なくとも基づいて、ネットワークデバイスのためのコントローラとして、第１のコントローラデバイスおよび第２のコントローラデバイスの一方を選択するステップと、選択されたコントローラデバイスにコントローラデバイスの選択を報告するステップとを含む。いくつかの実現例では、選択は、コントローラデバイスの１つ以上のパフォーマンス特性の比較に基づいている。パフォーマンス特性は、各コントローラデバイスによる制御下のネットワークデバイスの数、および／またはコントローラデバイス毎の平均レイテンシを含んでもよい。
【０００７】
一局面では、開示は、非一時的なプロセッサ実行可能命令を記憶している有形のコンピュータ読取可能記憶媒体に関し、命令は、記憶媒体および１つ以上のプロセッサを含むコンピューティングデバイスによって実行されると１つ以上のプロセッサに動作を実行させ、動作は、少なくとも第２のコントローラデバイスを含む複数のコントローラデバイスのうちの第１のコントローラデバイスから第１のコントローラ可用性メッセージを受信し、第１のコントローラデバイスから受信した第１のコントローラ可用性メッセージに少なくとも基づいて、ネットワークデバイスのためのコントローラとして、第１のコントローラデバイスおよび第２のコントローラデバイスの一方を選択し、選択されたコントローラデバイスにコントローラデバイスの選択を報告する。いくつかの実現例では、選択は、コントローラデバイスの１つ以上のパフォーマンス特性の比較に基づいている。パフォーマンス特性は、各コントローラデバイスによる制御下のネットワークデバイスの数、および／またはコントローラデバイス毎の平均レイテンシを含んでもよい。
【０００８】
本開示の上記のおよび関連の目的、特徴、および利点は、以下の図に関連して考慮されると、以下の詳細な説明を参照してより完全に理解されるであろう。
【０００９】
さまざまな図面における同様の参照番号および名称は同様の要素を示す。
【図面の簡単な説明】
【００１０】
【図１】例示的なソフトウェア定義ネットワークのブロック図である。
【図２】制御プレーンリンクによって分離された例示的なソフトウェア定義ネットワークコントローラおよびネットワークデバイスのブロック図である。
【図３】ネットワークデバイスがコントローラを選択する例示的な方法についてのフローチャートの図である。
【図４】ネットワークデバイスが第１の使用可能なコントローラを選択する例示的な方法についてのフローチャートの図である。
【図５】ネットワークデバイスがパフォーマンス特性に基づいてコントローラを選択する例示的な方法についてのフローチャートの図である。
【図６】ネットワークデバイスがレイテンシをパフォーマンス特性として測定する例示的な方法についてのフローチャートの図である。
【図７】説明的な実現例に従うコンピューティングシステムのブロック図である。
【発明を実施するための形態】
【００１１】
詳細な説明
本開示の局面および実現例は概して、ソフトウェア定義ネットワーク（「ＳＤＮ」）におけるネットワークデバイスによるコントローラの選択に関する。ＳＤＮの１つの特性は、ネットワークデバイスがそれぞれの別個のコントローラによって制御されることである。たとえば、ルーティングデバイスはマスタコントローラからルーティング構成ルールを受信し得る。典型的に、ＳＤＮデバイスは一度に１つのマスタコントローラしか有することができない。本明細書に記載されるのは、少なくとも１つのネットワークデバイスが複数のコントローラからマスタコントローラを選択するＳＤＮである。ネットワークデバイスは、（たとえばネットワークデバイスが初期化されたときに、またはそのコントローラが故障したときに）自身がマスタコントローラを選択すべきであることを検出し、マスタコントローラとしてコントローラを選択し、選択されたコントローラに当該選択を通知し得る。当該選択は、本明細書に記載されるように、１つ以上の検討事項に基づいていてもよい。
【００１２】
図１は、例示的なソフトウェア定義ネットワーク（「ＳＤＮ」）のブロック図である。一般に、ＳＤＮは、データネットワーク内のネットワークデバイスのいくつかまたはすべてが別個のコントローラによって制御されるデータネットワークである。広範な概観として、制御プレーン１１２を介して複数のネットワークデバイス１３０にリンクされる複数のＳＤＮコントローラ１２０(a-n)（全体的にコントローラ１２０と称される）が存在する例示的なＳＤＮ１１０が図示されている。ネットワークデバイス１３０は、データプレーン１１６を介して互いに（および／または他のデータネットワーク内のデバイスに）リンクされる。
【００１３】
各ネットワークデバイス１３０は、他のデバイスを互いにリンクすることによってデータネットワークに参加する。ネットワークデバイスはデータ交換を容易にし、典型的に、たとえば物理層、データリンク層、およびネットワーク層プロトコルなどの下位ＯＳＩ層を実現する。ネットワークデバイスの例にはハブ、ブリッジ、スイッチ、およびルータがあるが、これらに限定されない。ＳＤＮ内のネットワークデバイス１３０は、別個のコントローラ１２０による制御を受ける。たとえば、ＳＤＮ内のルータは、別個のコントローラが、当該ルータによって用いられるルーティングテーブルを維持することを可能にする。典型的に、各ネットワークデバイス１３０は一度に１つのコントローラ１２０によって制御される。いくつかの実現例では、ネットワークデバイス１３０は二次コントローラから付加的な構成命令を受信し、そのような実現例では、これらの付加的な構成命令はデフォルトまたはフォールバック構成である。いくつかの実現例では、ネットワークデバイス１３０は、デフォルトまたはフォールバック構成をオーバーライドする一次またはマスタコントローラ１２０からの一次構成命令を受信する。いくつかの実現例では、故障が起こった場合またはマスタコントローラによる制御を終了する決定がなされた場合、ネットワークデバイス１３０は一次構成命令をクリアし、デフォルトまたはフォールバック構成を採用してもよい。
【００１４】
コントローラ１２０はＳＤＮ１１０内のネットワークデバイス１３０を維持する。コントローラは、制御プレーン１１２によってネットワークデバイスにリンクされるコンピューティングシステムであってもよい。いくつかの実現例では、コントローラは仮想マシンとして実現される。他の実現例では、コントローラは、特殊用途コンピューティングシステムとして、またはコンピュータアクセス可能メモリに記憶されて１つ以上のコンピューティングプロセッサによって実行される１組のコンピュータ実行可能命令セットとして実現される。いくつかの実現例では、各コントローラ１２０は、他のコントローラ１２０と、たとえば同期情報などの情報を交換する。いくつかの実現例では、各コントローラ１２０は周期的なステータスまたは可用性メッセージをネットワークデバイス１３０に送信する。
【００１５】
データプレーン１１６は、ネットワークデバイス１３０を互いにリンクしてネットワークにする。データプレーン１１６は図１では、ネットワークデバイス１３０を互いに直接接続する１組の個々のリンクとして示されている。いくつかの実現例では、ネットワークデバイス１３０は、スイッチ式ファブリックを含むデータプレーンによってリンクされる。データプレーン１１６は、ネットワークを横切るデータパケットを伝送する。
【００１６】
制御プレーン１１２は、各ネットワークデバイス１３０をコントローラ１２０にリンクする。制御プレーン１１２は図１では、ネットワークデバイス１３０をＳＤＮコントローラ１２０に直接接続する１組の個々のリンクとして示されている。いくつかの実現例では、ネットワークデバイス１３０は、スイッチ式ファブリックを含む制御プレーンによってコントローラ１２０にリンクされる。いくつかの実現例では、制御プレーン１１２およびデータプレーン１１６はオーバーラップし、リンクを共有するか、または同一の物理リンクである。いくつかの実現例では、制御プレーンは無線である。制御プレーン１１２は、構成データおよび制御情報をＳＤＮコントローラ１２０とネットワークデバイス１３０との間で伝送する。
【００１７】
図２は、制御プレーンリンク１１２によって分離された例示的なソフトウェア定義ネットワーク（「ＳＤＮ」）コントローラ２２０およびネットワークデバイス２３０のブロック図である。広範な概観として、ＳＤＮコントローラ２２０は、制御モジュール２４２と、構成およびルーティングデータを記憶しているメモリ２２６とを含む。ネットワークデバイス２３０は、制御モジュール２４４と、構成およびルーティングデータを記憶しているメモリ２３６とを含む。ネットワークデバイス２３０は、メモリ２３６内の構成およびルーティングデータを用いてネットワークインターフェイス２３８(a-n)（全体的にネットワークインターフェイスまたはネットワークインターフェイスポート２３８と称される）におけるデータトラフィックを管理するフォワーディングエンジン２３４を含む。ＳＤＮコントローラ２２０およびネットワークデバイス２３０は、図１に示されるＳＤＮコントローラ１２０およびネットワークデバイス１３０として用いるのに適している。
【００１８】
図２を参照して、より詳細には、ＳＤＮコントローラ２２０は、制御モジュール２４２と、構成およびルーティングデータを記憶しているメモリ２２６とを含む。制御モジュール２４２は、メモリ２２６に記憶されている構成およびルーティングデータを用いてネットワークデバイス２３０を構成する。いくつかの実現例では、制御モジュール２４２は特殊用途回路（たとえばＡＳＩＣ）として実現される。いくつかの実現例では、制御モジュール２４２は、コンピュータアクセス可能メモリに記憶されて１つ以上のコンピューティングプロセッサによって実行される１組のコンピュータ実行可能命令セットとして実現される。いくつかの実現例では、制御モジュール２４２はステータスまたは可用性メッセージをネットワークデバイス２３０に周期的に送信する。
【００１９】
ネットワークデバイス２３０は、制御モジュール２４４と、構成およびルーティングデータを記憶しているメモリ２３６とを含む。ネットワークデバイス制御モジュール２４４は、（制御プレーン１１２を介して）ＳＤＮコントローラ制御モジュール２４２から構成およびルーティング情報を受信し、メモリ２３６に記憶されている構成およびルーティングデータを更新する。いくつかの実現例では、制御モジュール２４４は特殊用途回路（たとえばＡＳＩＣ）として実現される。いくつかの実現例では、制御モジュール２４４は、コンピュータアクセス可能メモリに記憶されて１つ以上のコンピューティングプロセッサによって実行される１組のコンピュータ実行可能命令セットとして実現される。
【００２０】
ネットワークデバイス２３０は１組のネットワークインターフェイスポート２３８を含む。各ネットワークインターフェイスポート２３８はデータプレーン１１６に接続されてもよい。いくつかの実現例では、当該接続は双方向データリンクである。いくつかの実現例では、当該接続は一方向データリンクであり、各リンクがイングレスまたはエグレスのいずれか一方である。ネットワークインターフェイスポート２３８の１つ以上を介してネットワークデバイス２３０に接続されるデバイスは、データプレーン１１６を介して、ネットワークデバイス２３０とデータパケットを交換する。たとえば、データパケットは第１のインターフェイス（たとえばネットワークインターフェイス２３８(a)）を介してネットワークデバイス２３０に到着してもよく、これによってネットワークデバイス２３０は受信したデータパケットを処理し、それを第２のインターフェイス（たとえばネットワークインターフェイス２３８(b)）を介して適切な次のホップに転送する。フォワーディングエンジン２３４は、受信した各データパケットを転送するのにどのネットワークインターフェイス２３８を用いるべきかを判断する。
【００２１】
フォワーディングエンジン２３４はメモリ２３６内の構成およびルーティングデータを用いて、ネットワークインターフェイスポート２３８におけるデータトラフィックを管理する。メモリ２３６内の構成およびルーティングデータは、制御モジュール２４４を介してＳＤＮコントローラ２２０によって制御される。
【００２２】
いくつかの実現例では、ネットワークデバイス２３０は複数のＳＤＮコントローラ２２０にリンクされる。そのような実現例では、ネットワークデバイス２３０は、複数のＳＤＮコントローラ２２０のうちのどれが自身に構成およびルーティング情報を送信可能であるかを判断する。すなわち、ネットワークデバイス２３０は、ネットワークデバイス２３０によって選択されたＳＤＮコントローラ２２０による制御を受ける。ネットワークデバイス制御モジュール２４４は、ネットワークデバイス２３０のためのＳＤＮコントローラ２２０を選択する。いくつかの実現例では、ネットワークデバイス制御モジュール２４４はＳＤＮコントローラを選択すべきであると判断し、選択ルーチンを開始する。ネットワークデバイス制御モジュール２４４は次に、選択されたＳＤＮコントローラに、ネットワークデバイス２３０が選択されたＳＤＮコントローラによる制御を受けることになることを通知する。
【００２３】
ＳＤＮコントローラメモリ２２６およびネットワークデバイスメモリ２３６の各々は、コンピュータ読取可能データを記憶するのに適した任意のデバイスであってもよい。当該メモリは、図７に示されて以下に記載されるメモリ７７０と同様であってもよい。例には、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＳＤＲＡＭ、およびフラッシュメモリデバイスなどの半導体メモリデバイスがあるが、これらに限定されない。ＳＤＮコントローラ２２０は任意の数のメモリデバイス２２６を有してもよい。ネットワークデバイス２３０は任意の数のメモリデバイス２３６を有してもよい。
【００２４】
図３〜図６は、ネットワークデバイスのためのマスタコントローラを選択する際に用いられる方法を示すフローチャートである。各方法において、ネットワークデバイスは、ネットワークデバイスのためのマスタコントローラとしてＳＤＮコントローラを選択する。一般に、ネットワークデバイスがマスタコントローラを選択し得る理由は数多くある。これらの中には、例として、ネットワークデバイスがたとえば初期化もしくは再始動後の初期化段階にあり得るため、既存のマスタコントローラを有し得ない；たとえばコントローラがネットワークデバイスを明示的に拒否し得るなど、ネットワークデバイスが新たなマスタコントローラを選択するよう命じる制御メッセージをネットワークデバイスが受信し得る；ネットワークデバイスがマスタコントローラを周期的に再選択するように構成され得る；または、たとえばコントローラが故障したかコントローラとの通信リンクが故障した可能性があるなど、選択されたマスタコントローラとの通信に故障があり得る、がある。ネットワークデバイスは、コントローラからの周期的なメッセージがあるか否かを監視することによって、または自身のマスタコントローラのステータスを周期的に検査することによって、故障を検出してもよい。いくつかの実現例では、ＳＤＮコントローラ１２０は周期的なメッセージ（たとえば「キープアライブ（keep-alive）」メッセージ）をネットワークデバイス１３０に送信する。当該メッセージはすべてのネットワークデバイスにブロードキャストされてもよいし、またはコントローラが担当するデバイスのみに送信されてもよい。いくつかの実現例では、コントローラ１２０は周期的な可用性メッセージをすべてのネットワークデバイスに送信し、これらの可用性メッセージがキープアライブメッセージとして機能する。いくつかの実現例では、ネットワークデバイスは、たとえばＩＣＭＰエコー要求（「ピング（ping）」）を送信することによって、それぞれのマスタコントローラからの応答を周期的に要求する。
【００２５】
図３は、ネットワークデバイスがコントローラを選択する例示的な方法３００についてのフローチャートである。広範な概観として、方法３００は、ＳＤＮ内のネットワークデバイスが、自身が新たなマスタＳＤＮコントローラを選択すべきであると判断し（ステージ３１０）、コントローラ選択を開始する（ステージ３３０）ことによって始まる。ネットワークデバイスは、ＳＤＮに含まれる複数のコントローラのうちの１つ以上のコントローラから１つ以上のコントローラ可用性メッセージを受信する（ステージ３４０）。ネットワークデバイスは、受信したコントローラ可用性メッセージに基づいて、ネットワークデバイスのためのマスタコントローラとして、複数のＳＤＮコントローラから１つのコントローラを選択する（ステージ３５０）。ネットワークデバイスは次に、選択されたマスタコントローラにマスタコントローラの選択を報告し（ステージ３６０）、選択されたマスタコントローラによる制御を受ける（ステージ３７０）。
【００２６】
より詳細には、方法３００において、ＳＤＮ内のネットワークデバイスはコントローラ選択を開始すべきであると判断する（ステージ３１０）。当該判断は上述のようになされてもよい。いくつかの実現例では、ネットワークデバイスは、自身がマスタコントローラを有していないと検出したことに応答して、コントローラ選択を開始すべきであると判断してもよい。いくつかの実現例では、ネットワークデバイスは、ネットワークデバイスに新たなマスタコントローラを選択するように命令するメッセージの受信またはタイマの満了などのイベントに応答して、コントローラ選択を開始すべきであると判断してもよい。
【００２７】
いくつかの実現例では、ネットワークデバイスは、新たなマスタコントローラを選択すべきであるとの判断（ステージ３１０）とコントローラ選択の開始（ステージ３３０）との間に、ランダムな長さの時間だけ待機してもよい（ステージ３２０）。いくつかのシナリオでは、複数のネットワークデバイスが代替マスタコントローラを同時に選択していてもよい。たとえば、以前のマスタコントローラが故障して、多くのネットワークデバイスがマスタコントローラなしの状態となる場合がある。他の例示的なシナリオには、以前のマスタコントローラへの通信リンクが故障した、または多数の新たなネットワークデバイスが互いにインストールされた状況がある。いくつかの実現例では、複数のネットワークデバイスが同じマスタコントローラを同時に選択して過負荷をかけるのを回避するために、各ネットワークデバイスは、マスタコントローラを選択すべきであるとの判断（ステージ３１０）の後、かつ選択処理に進む前に、ランダムな長さの時間だけ待機する（ステージ３２０）。いくつかの実現例では、この待機期間はコントローラ選択の開始（ステージ３３０）の一部として実現されてもよい。すなわち、開始はランダムな遅延段階を含んでもよい。
【００２８】
方法３００において、ステージ３１０における判断に応答して、ネットワークデバイスはコントローラ選択を開始する（ステージ３３０）。いくつかの実現例では、ネットワークデバイスは、マスタコントローラを選択するための情報を収集して処理することを含む選択ルーチンを開始する。いくつかの実現例では、ネットワークデバイスは情報を定期的に収集し、自身がマスタコントローラを選択する必要があるという判断に応答してマスタコントローラを選択することができる。
【００２９】
いくつかの実現例では、ネットワークデバイスはマスタコントローラおよびバックアップコントローラの両方を有する。いくつかのそのような実現例では、ネットワークデバイスが新たなマスタコントローラを選択すべきであると判断すると、ネットワークデバイスは、新たなマスタコントローラがネットワークデバイスによって選択されるまで、バックアップコントローラから受信した構成命令を用いる。いくつかの実現例では、新たなマスタコントローラを選択する代わりに、ネットワークデバイスが新たなマスタコントローラに切換えることが適切であると判断すると、バックアップコントローラはマスタコントローラの役割を果たすことができ、ネットワークデバイスは新たなバックアップコントローラの選択を開始する。
【００３０】
ネットワークデバイスは、ＳＤＮに含まれる複数のコントローラのうちの１つ以上のコントローラから１つ以上のコントローラ可用性メッセージを受信する（ステージ３４０）。いくつかの実現例では、ＳＤＮコントローラ１２０は可用性メッセージを周期的に送信する。いくつかのそのような実現例では、メッセージは一定の間隔で送信される。いくつかの実現例では、周期的なメッセージは不規則な間隔で、たとえば、コントローラが同時に可用性を継続してブロードキャストしないようにランダムな間隔にランダムな時間の長さを加えて送信される。いくつかの実現例では、ＳＤＮコントローラ１２０は、たとえばコントローラを求めているネットワークデバイス１３０からの要求などの要求に応答して可用性メッセージを送信する。
【００３１】
いくつかの実現例では、可用性メッセージはＳＤＮ全体にわたってブロードキャストされる。いくつかの実現例では、ＳＤＮコントローラ１２０は、メッセージを、たとえばネットワークデバイスのアドレスなどの特定のネットワークアドレスに送信する。たとえば、ＳＤＮコントローラは、コントローラが制御すると予測され得るネットワークデバイスのアドレスのリスト、またはアドレス範囲を維持してもよい。いくつかの実現例では、ＳＤＮ制御プレーン１１２はデータプレーン１１６とは物理的に異なり、制御プレーン１１２上のブロードキャストは効果的に、コントローラ１２０によって制御され得るネットワークデバイス１３０をターゲットにする。
【００３２】
いくつかの実現例では、可用性メッセージは、メッセージによって識別されるコントローラが使用可能であることを受信者に知らせる単純な識別子である。いくつかの実現例では、可用性メッセージは、たとえば、コントローラによって制御されるネットワークデバイスの数、容量識別子、機械識別子、地理的識別子、タイムスタンプ、タイムアクティブ、Lamportタイムスタンプ、シーケンス番号、バージョン番号、またはステータス情報を含む、１つ以上の情報を含む。
【００３３】
方法３００を続けて、詳細には、ネットワークデバイスは、受信したコントローラ可用性メッセージに基づいて、ネットワークデバイスのためのマスタコントローラとして、複数のコントローラから１つのＳＤＮコントローラを選択する（ステージ３５０）。ネットワークデバイス１３０は、ステージ２４０で受信した１つ以上の可用性メッセージを収集して処理する。ネットワークデバイス１３０は、１つ以上のメッセージ内に示される、またはそこから推論される情報を用いて、ネットワークデバイス１３０のためのマスタコントローラとして用いるべきコントローラ１２０を選択する。いくつかの実現例では、図４を参照して以下に記載されるように、ネットワークデバイス１３０は、ステージ３３０におけるコントローラ選択の開始の後にそこから可用性メッセージを受信する第１のＳＤＮコントローラ１２０を選択する。いくつかの実現例では、ネットワークデバイス１３０は、最も所望の性質を有するコントローラ１２０を選択する。たとえば、図５を参照して以下に記載されるように、ネットワークデバイスは使用可能なＳＤＮコントローラの１つ以上の特性（または特性を表わす値）同士を比較し、当該比較に基づいて選択を行なってもよい。いくつかのそのような実現例では、ネットワークデバイス１２０は、負荷がより低い、容量がより大きい、レイテンシがより短い、より近接している、またはそれらの何らかの所望の組合せを有するコントローラ１２０を選択する。たとえば、図６を参照して以下に記載されるように、ネットワークデバイス１３０はコントローラ通信時間におけるレイテンシを測定し、レイテンシ測定値を用いて、ネットワークデバイス１３０のためのマスタコントローラとしてコントローラ１２０を選択してもよい。
【００３４】
上述のように、いくつかの実現例では、ネットワークデバイス１３０はさらに、二次（またはバックアップ）コントローラとして用いるべき第２のコントローラ１２０を選択する。いくつかの実現例では、二次コントローラは、マスタコントローラが完全な制御を有するがネットワークデバイスがコントローラ変更の準備ができているように、ネットワークデバイス１３０のためのデフォルトまたはフォールバック構成詳細を管理する。たとえば、ネットワークデバイス１３０は、選択された二次コントローラから受信したデフォルト構成データを維持してもよい。ネットワークデバイス１３０は、特定の構成データがない場合はデフォルト構成データを用いてもよい。ネットワークデバイス１３０がマスタコントローラから特定の構成データを受信すると、特定の構成データはデフォルト構成データより優先される。したがって、マスタコントローラはネットワークデバイス１３０の制御を有する。ネットワークデバイス／マスタコントローラ関係に故障が起こるか関係が終了した場合、ネットワークデバイスはマスタコントローラから受信した構成データをクリアし、二次コントローラによって設定されたデフォルト構成を採用することができる。いくつかの実現例では、ネットワークデバイスは、上述の故障または終了の後、かつマスタコントローラから受信した特定の構成データをクリアする前に、ある長さの時間だけ待機する。いくつかの実現例では、ネットワークデバイスは二次コントローラをマスタコントローラとして自動的に選択し、ステージ３５０でのみ、新たな二次コントローラを選択する。
【００３５】
ネットワークデバイスは次に、選択されたマスタコントローラにマスタコントローラの選択を報告する（ステージ３６０）。ネットワークデバイス１３０は、選択されたコントローラ１２０に制御メッセージの送信を開始するように通知し、選択されたＳＤＮコントローラ１２０から受信した制御メッセージを受ける。いくつかの実現例では、ネットワークデバイス１２０は選択メッセージをＳＤＮ内のすべてのコントローラに送信し、当該コントローラに、マスタコントローラとして選択されたコントローラを通知する。いくつかの実現例では、ネットワークデバイスは二次コントローラをバックアップまたはフォールバックコントローラとして選択する。いくつかの実現例では、ネットワークデバイスがマスタコントローラおよび二次コントローラを選択すると、ネットワークデバイスはメッセージを各コントローラに送信して当該コントローラに選択を通知する。選択されたコントローラ１２０が選択されることを拒否する（たとえば選択されたコントローラが過負荷である、または他の理由で選択を受入れることができない）場合、ネットワークデバイス１３０は方法３００を繰返して新たなＳＤＮコントローラ１３０を選択してもよい。いくつかのそのような実現例では、ネットワークデバイスは選択を拒否したコントローラを不適格としてもよいし、またはそうでなければ、選択を拒否したコントローラを再び選択する可能性を低下させてもよい。たとえば、ネットワークデバイス１３０は、固定期間（たとえば最後の３０秒）内に選択を拒否したコントローラ１２０が後で選択肢として復元されることによって、ネットワークデバイス１３０がＳＤＮコントローラ１２０が不足している可能性を低下させることができるように、当該コントローラ１２０を選択することを回避してもよい。
【００３６】
ネットワークデバイス１３０は次に、選択されたマスタコントローラデバイスによる制御を受ける（ステージ３７０）。ネットワークデバイス１３０は、選択されたマスタコントローラから制御メッセージを受信してもよい。ネットワークデバイス１３０は、選択されたマスタコントローラから構成および／またはルーティング命令を受信してもよい。ネットワークデバイス１３０は、選択されたマスタコントローラ１２０から受信したメッセージの優先順位を付け、ＳＤＮ内の他のコントローラ１２０からの命令を拒否することができる。いくつかの実現例では、上述のように、ネットワークデバイス１３０はさらに二次コントローラ１２０をバックアップまたはフォールバックコントローラとして選択することができる。そのような実現例では、ネットワークデバイスはさらに、選択された二次コントローラから制御メッセージを受信して処理してもよい。たとえば、二次コントローラは、上述のように、ネットワークデバイス１３０のためのデフォルト構成を管理してもよい。
【００３７】
図４は、ネットワークデバイスが第１の使用可能なコントローラを選択する方法４００についてのフローチャートである。広範な概観として、方法４００は、ＳＤＮ内のネットワークデバイスがマスタコントローラの選択を開始する（ステージ４３０）ことによって始まる。ネットワークデバイスは、ＳＤＮに含まれる複数のコントローラデバイスのうちの少なくとも１つのＳＤＮコントローラからコントローラ可用性メッセージを受信する（ステージ４４０）。ネットワークデバイスは、１つのＳＤＮコントローラを、ＳＤＮ内の複数のコントローラのうちのいずれかからその他のコントローラ可用性メッセージを受信する前に当該１つのＳＤＮコントローラについてのコントローラ可用性メッセージを受信したことに基づいて、ネットワークデバイスのためのマスタコントローラとして選択する（ステージ４５０）。
【００３８】
より詳細には、方法４００において、ネットワークデバイスはコントローラ選択を開始する（ステージ４３０）。上述のように、図３を参照して、ネットワークデバイス１３０は新たなマスタコントローラ１２０を選択すべきであると判断し、コントローラ選択を開始する。いくつかの実現例では、ネットワークデバイス１３０は、新たなマスタコントローラ１２０を選択すべきであるとの判断とコントローラ選択の開始との間に、ランダムな期間だけ待機する。いくつかの実現例では、ステージ４３０におけるコントローラ選択の開始は、コントローラ可用性メッセージを「リッスン」し始めることを含む（すなわち、いくつかの実現例では、ネットワークデバイス１３０は、いったんネットワークデバイス１３０が新たなマスタコントローラ１２０を選択すべきであると判断すると、コントローラ可用性メッセージを定期的に受信および無視してもよく、いくつかの実現例では短時間のランダムな遅延の後、ネットワークデバイス１３０は選択を行なうために受信したコントローラ可用性メッセージを処理し始める）。
【００３９】
ネットワークデバイス１３０は、ＳＤＮに含まれる複数のコントローラのうちの少なくとも１つのコントローラ１２０からコントローラ可用性メッセージを受信する（ステージ４４０）。いくつかの実現例では、各ＳＤＮコントローラ１２０は可用性メッセージを周期的に送信する。ネットワークデバイス１３０は、新たなマスタコントローラ１２０を選択しつつこれらのメッセージを受信する（ステージ４３０）。ネットワークデバイスは複数の可用性メッセージを受信してもよい。いくつかの実現例では、ネットワークデバイスは、可用性メッセージを受信したときによって可用性メッセージを順序付ける。いくつかの実現例では、ネットワークデバイスは、たとえばコントローラタイムスタンプ、ネットワークタイムスタンプ、またはLamportタイムスタンプなどのメッセージ内の情報をシーケンス化することによって可用性メッセージを順序付ける。いくつかの実現例では、ネットワークデバイスは、最も最近に受信した可用性メッセージのみからの情報についてのバッファを維持し、各メッセージはいずれかの以前に受信した情報に置き換わる。
【００４０】
ネットワークデバイス１３０は、１つのＳＤＮコントローラ１２０を、ＳＤＮ内の複数のコントローラ１２０のうちのいずれかからその他のコントローラ可用性メッセージを受信する前に当該コントローラ可用性メッセージを受信したことに基づいて、ネットワークデバイス１３０のためのマスタコントローラとして選択する（ステージ４５０）。すなわち、ネットワークデバイス１３０は、ステージ４３０におけるコントローラ選択の開始の後に、そこから可用性メッセージを受信する第１のＳＤＮコントローラ１２０を選択する。いくつかの実現例では、ネットワークデバイス１３０は、（たとえばステージ３２０を参照して上述したように）ランダムな長さの時間だけ待機した後に、そこから可用性メッセージを受信する第１のＳＤＮコントローラ１２０を選択する。いくつかの実現例では、ネットワークデバイス１３０は、ネットワークデバイス１３０がある長さの時間の後に付加的なコントローラ可用性メッセージをまったく受信していない場合、最初に受信したコントローラ可用性メッセージを送信したマスタコントローラ１２０を選択する。
【００４１】
図５は、ネットワークデバイスがパフォーマンス特性に基づいてコントローラを選択する方法５００についてのフローチャートである。広範な概観として、方法５００は、ＳＤＮ内のネットワークデバイスがマスタコントローラの選択を開始する（ステージ５１０）ことによって始まる。ネットワークデバイスは、ＳＤＮに含まれる複数のコントローラのうちの２つ以上のコントローラからコントローラ可用性メッセージを受信する（ステージ５２０）。ネットワークデバイスは、そこからコントローラ可用性メッセージを受信した２つ以上のＳＤＮコントローラの各々について、コントローラのパフォーマンス特性のそれぞれの値を求める（ステージ５３０）。ネットワークデバイスは、ＳＤＮコントローラについてのそれぞれの値同士を比較する（ステージ５４０）。ネットワークデバイスは、当該比較に基づいて、ネットワークデバイスのためのマスタコントローラとして、複数のコントローラから１つのコントローラを選択する（ステージ５５０）。
【００４２】
より詳細には、方法５００において、ネットワークデバイスはコントローラ選択を開始する（ステージ５１０）。上述のように、図３を参照して、ネットワークデバイス１３０は新たなマスタコントローラ１２０を選択すべきであると判断し、コントローラ選択を開始する。いくつかの実現例では、ネットワークデバイス１３０は、新たなマスタコントローラ１２０を選択すべきであるとの判断とコントローラ選択の開始との間に、ランダムな期間だけ待機する。いくつかの実現例では、ステージ５１０におけるコントローラ選択の開始は、コントローラ可用性メッセージを「リッスン」し始めることを含む。
【００４３】
ネットワークデバイス１３０は、ＳＤＮに含まれる複数のコントローラのうちの２つ以上のコントローラ１２０からコントローラ可用性メッセージを受信する（ステージ５２０）。いくつかの実現例では、ネットワークデバイスは可用性メッセージが到着するたびに当該メッセージを処理し、当該メッセージを送信しているコントローラについての情報を識別する。いくつかの実現例では、ネットワークデバイスは複数の可用性メッセージについてのバッファを維持し、到着する可用性メッセージが処理可能となるまでそれらのメッセージをバッファに入れる。
【００４４】
ネットワークデバイスは、そこからコントローラ可用性メッセージを受信した２つ以上のＳＤＮコントローラの各々について、ＳＤＮコントローラのパフォーマンス特性のそれぞれの値を求める（ステージ５３０）。ネットワークデバイス１３０は（ステージ５２０において）コントローラ可用性メッセージを受信し、それらを処理して送信側のＳＤＮコントローラ１２０についての特性情報を求める。たとえば、ネットワークデバイス１３０は、コントローラ可用性メッセージから、送信側のＳＤＮコントローラ１２０の識別情報、送信側のＳＤＮコントローラ１２０の現在の負荷レベル、送信側のＳＤＮコントローラ１２０の容量レベル、および／または可用性メッセージが送信されてから受信されたまでの通信トランジット時間を求めてもよい。いくつかの実現例では、ネットワークデバイスは、ネットワークデバイスがマスタコントローラを選択中である否かに係わらず、すべてのコントローラ可用性メッセージを処理する。ネットワークデバイスがコントローラ可用性メッセージを受信して処理すると、ネットワークデバイスは、自身がマスタコントローラを選択するために用いることになる情報を有し得る。
【００４５】
パフォーマンス特性は、マスタコントローラとして、二次コントローラとして、またはその両方として、それぞれのコントローラによって制御されるネットワークデバイスの数のカウントであってもよい。パフォーマンス特性は、たとえば、それぞれのコントローラがあとどれだけの数のネットワークデバイスを制御できるかなどの、それぞれのコントローラにおける容量のインジケータ（指標）であってもよい。パフォーマンス特性は、ネットワークデバイスとそれぞれのコントローラとの間の通信についてのレイテンシの測定値であってもよい。レイテンシは、たとえば、図６に示されて以下に記載される方法を用いて測定されてもよい。いくつかの実現例では、レイテンシは、要求を送信し、当該要求に対する応答を受信するまでの時間の長さを測定することによって測定される。いくつかの実現例では、レイテンシは、（たとえばＮＴＰネットワークタイムプロトコルによって同期されるクロックを用いて）可用性メッセージ内の送信されたタイムスタンプをネットワークデバイスにおいて現在の時間と比較することによって測定される。パフォーマンス特性は、たとえば制御プレーンを介したホップの数などの、ＳＤＮコントローラまでの距離のインジケータであってもよい。
【００４６】
ネットワークデバイスは次に、ＳＤＮコントローラについてのそれぞれの値同士を比較し（ステージ５４０）、当該比較に基づいて、ネットワークデバイスのためのマスタコントローラとして、複数のＳＤＮコントローラから１つのコントローラを選択する（ステージ５５０）。ネットワークデバイス１３０は、独立してまたは組合せて好ましい特性値に基づいてマスタコントローラ１２０を選択してもよい。たとえば、ネットワークデバイスは、ネットワークデバイスのカウントが最も低いコントローラを、その制御下で選択してもよいし、またはレイテンシが最も低いコントローラを選択してもよい。いくつかの実現例では、（ステージ５４０において）複数の特性が比較において用いられる。たとえば、ネットワークデバイスは、レイテンシに対するコントローラ容量の比率を求め、最良の比率を有するコントローラを選択してもよい。これによって、容量が小さいがレイテンシも小さいコントローラの選択、または容量が大きいがレイテンシが最低ではないコントローラの選択がもたらされ得る。マスタコントローラを選択した後、ネットワークデバイスは（図３のステージ３６０と同様に）メッセージをマスタコントローラに送信し、（図３のステージ３７０と同様に）選択されたマスタコントローラによる制御を受ける。
【００４７】
図６は、ネットワークデバイスがレイテンシをパフォーマンス特性として測定する方法についてのフローチャートである。広範な概観として、方法６００において、ＳＤＮ１１０内のネットワークデバイス１３０はＳＤＮ内のコントローラ１２０に要求を送信する（ステージ６１０）。ネットワークデバイス１３０は、ＳＤＮコントローラ１２０の各々について、自身がそれぞれのコントローラから応答を受信するまでの時間の長さを測定する（ステージ６２０）。ネットワークデバイスは、測定した時間の長さに基づいて、（コントローラ毎に）レイテンシ測定値の移動平均を更新する（ステージ６３０）。ネットワーク１３０は、ネットワークデバイスがコントローラ選択を開始する（たとえば図３のステージ３３０または図５のステージ５１０）までステージ６１０〜６３０のサイクルを繰返す。ネットワークデバイスがマスタコントローラの選択を開始している場合（ステージ６４０）、ネットワークデバイスはＳＤＮコントローラ毎の平均レイテンシをＳＤＮ内の１つ以上の他のコントローラの平均レイテンシ測定値と比較する（ステージ６５０）。ネットワークデバイスは次に、当該比較に基づいて、ネットワークデバイス１３０のためのマスタコントローラとして、ＳＤＮコントローラ１２０を選択する（ステージ６６０）。
【００４８】
より詳細には、方法６００において、ＳＤＮ内のネットワークデバイスがＳＤＮ内のコントローラに要求を送信する（ステージ６１０）。たとえば、いくつかの実現例では、ネットワークデバイス１３０はＩＣＭＰエコー要求（「ピング」）または他の要求メッセージを送信してＳＤＮコントローラ１２０からの応答を誘発する。いくつかの実現例では、ネットワークデバイス１３０は要求を周期的に、すなわち予め定められた間隔で送信する。当該間隔は、ＳＤＮコントローラ１２０によって制御される構成であってもよい。いくつかの実現例では、ネットワークデバイス１３０はイベントに応答して要求を送信する。たとえば、ネットワークデバイス１３０は、コントローラ１２０からの可用性メッセージをネットワークデバイス１３０が受信してから予め定められた長さの時間が経過した後に、ＳＤＮコントローラ１２０に要求を送信してもよい。
【００４９】
ＳＤＮコントローラ毎に、ネットワークデバイスは、自身がＳＤＮコントローラから応答を受信するまでの時間の長さを測定する（ステージ６２０）。ステージ６１０においてコントローラに送信される各要求はそれぞれのコントローラからの応答を誘発し、ネットワークデバイス１３０は、特定の要求がネットワークデバイスによって送信されたときから、誘発された応答がネットワークデバイスによって受信されるまでのタイムスパンを測定する。このタイムスパンは、トランジット中の要求メッセージが費やした時間、要求を処理するコントローラ１２０が費やした時間、およびトランジット中の要求が費やした時間を含む。したがって、測定値は、特定のコントローラ１２０における双方向のネットワーク輻輳および処理遅延を含む。いくつかの実現例では、ネットワークデバイス１３０が構成可能な長さの時間内にＳＤＮコントローラ１２０から応答を受信しない場合、ネットワークデバイス１３０はレイテンシが高いと仮定し、そのコントローラについての測定レイテンシのためのプレースホルダ値を用いる。
【００５０】
ネットワークデバイスは次に、それぞれのコントローラからの応答について測定された時間の長さに基づいて、ＳＤＮコントローラ毎にレイテンシ測定値の移動平均を更新する（ステージ６３０）。いくつかの実現例では、ネットワークデバイスは、平均レイテンシ（Ｌavg）を、ネットワークデバイスがメモリ内に（たとえば円形バッファ内に）維持している最後のｎ個のレイテンシ測定値の平均として計算し、すなわちＬavg＝ｓｕｍ（Ｌmeasurements）／ｎである。いくつかの実現例では、ネットワークデバイスは、平均レイテンシ（Ｌavg）を、重み（たとえばゼロと１との間の値α）で乗算されたステージ６２０において測定された時間の長さ（Ｌnew）に第２の重み（たとえば１−α）で乗算された以前の平均（Ｌprev_avg）を加えたものとして計算し、すなわちＬavg＝αＬnew＋（１−α）Ｌprev_avgである。重み（α）は、最も最近の測定値に重きを置くまたは重きを置かないように選択されてもよい。
【００５１】
上述のように、たとえば図３を参照して、ネットワークデバイスはマスタコントローラの選択を開始する。ネットワークデバイスがコントローラ選択を開始していない場合（ステージ６４０）、ネットワークデバイスは固定のまたはランダムな期間だけ待機してからステージ６１０〜６３０を繰返して、ＳＤＮ１１０内の異なるコントローラについてのレイテンシの移動平均を更新してもよい。ネットワークデバイスがコントローラ選択を開始している場合（ステージ６４０）、ネットワークデバイスは続行して、新たなマスタコントローラを選択する際にレイテンシ測定値を用いる。
【００５２】
ネットワークデバイスは、コントローラ毎の平均レイテンシを、ＳＤＮ内の１つ以上の他のコントローラの平均レイテンシ測定値と比較する（ステージ６５０）。すなわち、ネットワークデバイス１３０は、ＳＤＮ１１０内のコントローラ１２０毎の平均レイテンシ測定値を維持しており、維持している平均レイテンシ測定値同士を互いに比較する。ネットワークデバイス１３０は次に、当該比較に基づいて、ネットワークデバイス１３０のためのマスタコントローラとして、ＳＤＮコントローラ１２０を選択する（ステージ６６０）。いくつかの実現例では、ネットワークデバイスは、ＳＤＮ内の他のコントローラの測定された平均レイテンシと比較して、平均レイテンシが最も低いコントローラ（「最低レイテンシコントローラ」）を選択する。最低レイテンシコントローラは、制御プレーン内における輻輳がより少ない、および／またはより大きい制御容量を有し得る。
【００５３】
マスタコントローラを選択した後、ネットワークデバイスは（図３のステージ３６０と同様に）メッセージをマスタコントローラに送信し、（図３のステージ３７０と同様に）選択されたマスタコントローラによる制御を受ける。
【００５４】
図７は、説明的な実現例に従う、本明細書に記載されるコンピュータ化されたコンポーネントを実現する際に用いるコンピューティングシステムのブロック図である。広範な概観として、コンピューティングシステムは、命令に従って行為を行なうための少なくとも１つのプロセッサ７５０と、命令およびデータを記憶するための１つ以上のメモリデバイス７７０または７７５とを含む。図示される例示的なコンピューティングシステム７１０は、ネットワークデバイス７１２(a-n)に接続しているネットワークインターフェイスポート７２２(a-n)を有する少なくとも１つのネットワークインターフェイスコントローラ７２０とバス７１５を介して通信している１つ以上のプロセッサ７５０と、メモリ７７０と、たとえばＩ／Ｏインターフェイスなどのその他のデバイス７８０とを含む。一般に、プロセッサ７５０はメモリから受信した命令を実行することになる。図示されるプロセッサ７５０はキャッシュメモリ７７５を組込んでいるか、またはキャッシュメモリ７７５に直接接続される。
【００５５】
より詳細には、プロセッサ７５０は、たとえばメモリ７７０またはキャッシュ７７５からフェッチされた命令などの命令を処理する任意の論理回路であってもよい。多くの実施形態において、プロセッサ７５０はマイクロプロセッサユニットまたは特殊用途プロセッサである。コンピューティングデバイス７１０は、本明細書に記載されるような動作が可能な任意のプロセッサまたは１組のプロセッサに基づいていてもよい。プロセッサ７５０はシングルコアまたはマルチコアプロセッサであってもよい。プロセッサ７５０は複数のプロセッサであってもよい。
【００５６】
メモリ７７０は、コンピュータ読取可能データを記憶するのに適した任意のデバイスであってもよい。メモリ７７０は、固定記憶装置を有するデバイスまたはリムーバブル記憶媒体を読取るためのデバイスであってもよい。例には、あらゆる形態の不揮発性メモリ、媒体およびメモリデバイス、半導体メモリデバイス（たとえばＥＰＲＯＭ、ＥＥＰＲＯＭ、ＳＤＲＡＭ、およびフラッシュメモリデバイス）、磁気ディスク、光磁気ディスク、ならびに光ディスク（たとえばＣＤ  ＲＯＭ、ＤＶＤ−ＲＯＭ、およびブルーレイ（登録商標）ディスク）がある。コンピューティングシステム７１０は、任意の数のメモリデバイス７７０を有してもよい。
【００５７】
キャッシュメモリ７７５は一般に、高速読取時間用にプロセッサ７５０に近接して配置されるコンピュータメモリの形態である。いくつかの実現例では、キャッシュメモリ７７５はプロセッサ７５０の一部であるか、またはプロセッサ７５０と同じチップ上にある。いくつかの実現例では、たとえばＬ２およびＬ３キャッシュ層などの、キャッシュ７７５の複数のレベルがある。
【００５８】
ネットワークインターフェイスコントローラ７２０は、ネットワークインターフェイス７２２(a-n)（ネットワークインターフェイスポートとも称される）を介してデータ交換を管理する。ネットワークインターフェイスコントローラ７２０は、ネットワーク通信用のＯＳＩモデルの物理およびデータリンク層を処理する。いくつかの実現例では、ネットワークインターフェイスコントローラのタスクのいくつかはプロセッサ７５０によって処理される。いくつかの実現例では、ネットワークインターフェイスコントローラ７２０はプロセッサ７５０の一部である。いくつかの実現例では、コンピューティングシステム７１０は複数のネットワークインターフェイスコントローラ７２０を有する。ネットワークインターフェイス７２２(a-n)は物理ネットワークリンクのための接続点である。いくつかの実現例では、ネットワークインターフェイスコントローラ７２０は無線ネットワーク接続をサポートし、インターフェイスポート７２２は無線受信機／送信機である。一般に、コンピューティングデバイス７１０は、ネットワークインターフェイス７２２(a-n)への物理または無線リンクを介して他のコンピューティングデバイス７２１(a-n)とデータを交換する。いくつかの実現例では、ネットワークインターフェイスコントローラ７２０はイーサネット（登録商標）などのネットワークプロトコルを実現する。
【００５９】
他のコンピューティングデバイス７１２(a-n)は、ネットワークインターフェイスポート７２２を介してコンピューティングデバイス７１０に接続される。他のコンピューティングデバイス７１２(a-n)は、ピアコンピューティングデバイス、ネットワークデバイス、またはネットワーク機能を有するその他のコンピューティングデバイスであってもよい。たとえば、第１のコンピューティングデバイス７１２(a)は、コンピューティングデバイス７１０をインターネットなどのデータネットワークに接続する、ハブ、ブリッジ、スイッチ、またはルータなどのネットワークデバイスであってもよい。
【００６０】
他のデバイス７８０はＩ／Ｏインターフェイス、外部シリアルデバイスポート、および任意の付加的なコプロセッサを含んでもよい。たとえば、コンピューティングシステム７１０は、入力装置（たとえばキーボード、マイク、マウス、もしくは他のポインティングデバイス）、出力装置（たとえばビデオディスプレイ、スピーカ、もしくはプリンタ）、または付加的なメモリデバイス（たとえばポータブルフラッシュドライブもしくは外部メディアドライブ）を接続するためのインターフェイス（たとえばユニバーサルシリアルバス（ＵＳＢ）インターフェイス）を含んでもよい。いくつかの実現例では、コンピューティングデバイス７１０はコプロセッサなどの付加的なデバイス７８０を含み、たとえば、数値計算コプロセッサは、プロセッサ７５０が高精度のまたは複雑な計算を行なうのを助け得る。
【００６１】
本明細書に記載される主題および動作の実現例は、デジタル電子回路において、または本明細書に開示される構造およびそれらの構造的均等物を含む、有形の媒体、ファームウェア、もしくはハードウェア上に具体化されるコンピュータソフトウェアにおいて、またはそれらの１つ以上の組合わせにおいて実現可能である。本明細書に記載される主題の実現例は、有形媒体上に具体化される１つ以上のコンピュータプログラム、すなわち、データ処理装置によって実行される、またはデータ処理装置の動作を制御するための１つ以上のコンピュータ記憶媒体上に符号化される、コンピュータプログラム命令の１つ以上のモジュールとして実現可能である。コンピュータ記憶媒体は、コンピュータ読取可能な記憶装置、コンピュータ読取可能な記憶基板、ランダムもしくはシリアルアクセスメモリアレイもしくは装置、またはそれらの１つ以上の組合わせであってもよいし、またはそれに含まれていてもよい。コンピュータ記憶媒体は、さらに、１つ以上の別個のコンポーネントまたは媒体（たとえば複数のＣＤ、ディスク、もしくは他の記憶装置）であってもよいし、またはそれに含まれていてもよい。コンピュータ記憶媒体は、有形であり、かつ非一時的であってもよい。
【００６２】
本明細書に記載される動作は、１つ以上のコンピュータ読取可能な記憶装置上に記憶される、または他のソースから受信されるデータに対してデータ処理装置によって実行される動作として実現可能である。
【００６３】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られる）は、コンパイルされる言語またはインタープリタされる言語、宣言型言語または手続き型言語を含む任意の形態のプログラミング言語で記述されてもよく、コンピュータプログラムは、スタンドアローンプログラムとして、またはコンピューティング環境で用いるのに適したモジュール、コンポーネント、サブルーチン、オブジェクト、または他のユニットとして、を含む任意の形態で展開されてもよい。コンピュータプログラムは、ファイルシステム内のファイルに対応してもよいが、対応する必要はない。プログラムは、他のプログラムもしくはデータ（たとえばマークアップ言語文書に記憶される１つ以上のスクリプト）を保持するファイルの一部に、対象となるプログラムに専用の単一のファイルに、または複数の協調ファイル（たとえば１つ以上のモジュール、サブプログラム、もしくはコードの一部を記憶するファイル）に記憶されてもよい。コンピュータプログラムは、１箇所に位置するか、または複数の箇所に分散されて通信ネットワークによって相互に接続される、１つのコンピュータ上または複数のコンピュータ上で実行されるように展開されてもよい。通信ネットワークの例には、ローカルエリアネットワーク（「ＬＡＮ」）およびワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（たとえばインターネット）、ならびにピアツーピアネットワーク（たとえばアドホックピアツーピアネットワーク）がある。
【００６４】
本明細書に記載される処理および論理フローは、１つ以上のコンピュータプログラムを実行して、入力データに作用して出力を生成することによって行為を行う１つ以上のプログラミング可能なプロセッサによって実行されてもよい。処理および論理フローはさらに、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）またはＡＳＩＣ（特定用途向け集積回路）などの特殊用途論理回路によって実行されてもよく、装置はさらに当該回路として実現されてもよい。
【００６５】
本明細書は多くの具体的な実現例の詳細を含んでいるが、これらは任意の発明の範囲に対する、または請求項に記載され得るものの限定と解釈されるべきではなく、むしろ特定の発明の特定の実現例に特有の特徴の記載と解釈されるべきである。別個の実現例の文脈で本明細書に記載される一定の特徴は、さらに、単一の実現例において組合わせて実現されてもよい。逆に、単一の実現例の文脈で記載されるさまざまな特徴は、さらに、複数の実現例において別個に、または任意の適切な下位の組合わせで実現されてもよい。さらに、特徴は上記で一定の組合わせにおいて作用するとして、最初にそのように請求項に記載されているかもしれないが、請求項に記載の組合わせからの１つ以上の特徴は、場合によっては当該組合わせから削除されてもよく、請求項に記載の組合わせは、下位の組合わせまたは下位の組合わせの変形に向けられてもよい。
【００６６】
同様に、動作は特定の順序で図面に示されているが、これは、所望の結果を達成するために、そのような動作が示される特定の順序でもしくはシーケンシャルな実行されること、またはすべての図示される動作が実行されることを要求していると理解すべきでない。一定の状況においては、マルチタスクおよび並列処理が有利であり得る。さらに、上記の実現例におけるさまざまなシステムコンポーネントの分離は、すべての実現例においてそのような分離を要求していると理解すべきでなく、記載されたプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に互いに統合されてもよいし、または複数のソフトウェア製品にパッケージ化されてもよいと理解すべきである。
【００６７】
「または」の言及は包括的であると解釈され得るため、「または」を用いて記載されるいずれの用語も、記載される用語の１つ、１つよりも多い、またはすべて、のいずれかを示し得る。「第１の」、「第２の」、「第３の」等のラベルは必ずしも順序付けを示すことを意味しておらず、類似または同様の項目または要素同士を区別するために一般に用いられているに過ぎない。
【００６８】
したがって、主題の特定の実現例が記載された。他の実現例は以下の請求項の範囲内にある。場合によっては、請求項に記載される行為は異なる順序で行なわれてもよく、依然として所望の結果を達成することができる。加えて、添付の図面に示される処理は、所望の結果を達成するために、必ずしも示される特定の順序、またはシーケンシャルな順序を必要としない。一定の実現例では、マルチタスクおよび並列処理が利用されてもよい。
【図１】
0006306741.tif 000002
【図２】
0006306741.tif 000003
【図３】
0006306741.tif 000004
【図４】
0006306741.tif 000005
【図５】
0006306741.tif 000006
【図６】
0006306741.tif 000007
【図７】
0006306741.tif 000008