(57)【特許請求の範囲】
【請求項１】
複数のノードに対してフローの制御を行うコントローラと、
前記コントローラによって設定されたフロー情報にしたがって受信パケットに対する処理を行う複数のノードと、
を備え、
前記コントローラからフローの制御を受ける前記複数のノードからなるネットワークの一のノードで、前記ネットワーク外部から宛先に向けて送信されたパケットを受けると、前記コントローラの制御のもと、前記コントローラが計算した経路上のノードが、前記パケットを転送して前記宛先に向けて送信し、
前記コントローラは、前記複数のノードのうち、迂回を指示されたノードを、前記ネットワークのトポロジー情報から除き、
前記ネットワークのトポロジー情報に基づき、前記迂回を指示されたノードを通らずに、前記宛先にパケットを転送するための新経路を計算し、
前記新経路を形成するノードに対して、フロー情報を生成し、
前記コントローラからフローの制御を受ける前記複数のノードのうち前記新経路上のノードに対して、前記フロー情報を設定する、ことを特徴とするネットワークシステム。
【請求項２】
前記コントローラは、迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求め、有効経路情報を記憶する有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関するフロー情報を生成し、
前記フロー情報を、前記新経路を形成する前記各ノードにそれぞれ設定し、
前記迂回すべきノードを用いた旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１記載のネットワークシステム。
【請求項３】
前記コントローラは、迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求め、有効経路情報を記憶する有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関する前記フロー情報を生成し、前記フロー情報を前記新経路を形成する各ノードにそれぞれ設定し、
前記新経路と、前記迂回すべきノードを用いた前記旧経路が分岐する先頭のノードでパケットを、新旧両経路に送るように設定したのち、前記旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１記載のネットワークシステム。
【請求項４】
前記コントローラは、前記旧経路を削除する際、前記旧経路の先頭のノードから、順にフローを削除し、前記先頭のノードからフローを削除した段階で、前記先頭のノードにおけるパケットのレプリカ設定を解除する、ことを特徴とする請求項３記載のネットワークシステム。
【請求項５】
前記コントローラは、迂回すべきノードが指定されると、前記迂回すべきノードの少なくとも２つの隣接ノードを始点と終点とするトンネル経路を設定し、
前記トンネル経路の各ノードに関するフロー情報を生成して設定し、
前記トンネル経路の始点のノードでは、前記トンネル始点のノードに入力され、前記迂回すべきノードを経由する経路へ転送される予定のパケットを、前記トンネル内に転送されるように前記パケットのヘッダーの送信先をトンネルのアドレスに書き換え、
前記パケットはトンネル内を転送され、
前記トンネル終点では、前記パケットのヘッダーの送信先を元の送信先に復元して転送させる、ことを特徴とする請求項１記載のネットワークシステム。
【請求項６】
前記コントローラは、迂回用に作成した前記トンネル経路のフローを、迂回解除後、迂回用のトンネルを使用する経路構成情報が存在せず、前記迂回用のトンネルを使用する経路構成情報が削除されたあと、削除する、ことを特徴とする請求項５記載のネットワークシステム。
【請求項７】
前記コントローラは、経路の始点から終点までの各点のノードの各々について、ノードの識別情報とノードに設定されるフロー情報を、経路構成情報として含み、
前記経路構成情報を管理する経路管理テーブルとして、
経路の各々について、
前記経路を形成するノードの情報と、
前記コントローラが前記経路を作成する契機となったパケットのヘッダー情報と、
対応する経路の経路構成情報を指示するポインタ情報と、
を含む、ことを特徴とする請求項１乃至５のいずれか１項に記載のネットワークシステム。
【請求項８】
前記フロー情報は、
前記ノードに入力されたパケットのヘッダーと照合するルールと、
前記ルールにヒットしたパケットに対する前記ノードでの転送を含む動作を規定するアクションと、
を少なくとも含み、
前記ノードに入力したパケットのヘッダーがフロー情報のルールとマッチしない場合、前記ノードは、前記パケットを前記コントローラに転送し、
前記コントローラは、前記パケットのフローを決定し、前記フロー上の前記ノードに対応するフロー情報を設定し、
前記コントローラは、前記パケットを、前記パケット送信元のノードに返送するか、又は、前記コントローラが接続するノードのうち、前記パケットが転送される経路上にあり、且つ、前記パケット送信元のノードよりも、前記パケットの送信先ノードにより近いノードに送信する、ことを特徴とする請求項１乃至７のいずれか１項に記載のネットワークシステム。
【請求項９】
前記コントローラは、経路情報として経路の始点、終点の２つの端点、前記経路上のノード群を、キャッシュの一エントリとして格納する経路キャッシュと、
経路を算出する経路算出部と、を備え、
前記経路算出部は、経路計算時、始点、終点を指定して両端が一致する経路を、前記経路キャッシュから検索し、
一致したものがある場合、前記検索された経路を算出経路とし、
一致したものがない場合、経路を算出し、算出した経路情報を、前記経路キャッシュに格納する、ことを特徴とする請求項１乃至８のいずれか１項に記載のネットワークシステム。
【請求項１０】
複数のノードに対してフローの制御を行うコントローラと、
前記コントローラによって設定されたフロー情報にしたがって受信パケットに対する処理を行う複数のノードと、を備えたシステムのネットワーク制御方法であって、
前記コントローラからフローの制御を受ける前記複数のノードからなるネットワークの一のノードで、前記ネットワーク外部から宛先に向けて送信されたパケットを受けると、前記コントローラの制御のもと、前記コントローラが計算した経路上のノードが前記パケットを転送して前記宛先に向けて送信し、
前記コントローラは、前記複数のノードのうち、迂回を指示されたノードを、前記ネットワークのトポロジー情報から除き、
前記ネットワークのトポロジー情報に基づき、前記迂回を指示されたノードを通らずに、前記宛先にパケットを転送するための新経路を計算し、
前記新経路を形成するノードに対して、フロー情報を生成し、
前記コントローラからフローの制御を受ける前記複数のノードのうち前記新経路上のノードに対して、前記フロー情報を設定する、ことを特徴とするネットワーク制御方法。
【請求項１１】
前記コントローラは、迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求め、有効経路情報を記憶する有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関するフロー情報を生成し、
前記フロー情報を、前記経路を形成する前記各ノードにそれぞれ設定し、
前記迂回すべきノードを用いた前記旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１０記載のネットワーク制御方法。
【請求項１２】
前記コントローラは、迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求め有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関する前記フロー情報を生成し、前記フロー情報を前記新経路を形成する前記各ノードにそれぞれ設定し、
前記新経路と、前記迂回すべきノードを用いた前記旧経路が分岐する先頭のノードでパケットを、新旧両経路に送るように設定したのち、前記旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１０記載のネットワーク制御方法。
【請求項１３】
前記コントローラは、前記旧経路を削除する際、前記旧経路の先頭のノードから、順にフローを削除し、前記先頭のノードからフローを削除した段階で、前記先頭のノードにおけるパケットのレプリカ設定を解除する、ことを特徴とする請求項１２記載のネットワーク制御方法。
【請求項１４】
前記コントローラは、迂回すべきノードが指定されると、前記迂回すべきノードの少なくとも２つの隣接ノードを始点と終点とするトンネル経路を設定し、
前記トンネル経路の各ノードに関するフロー情報を生成して設定し、
前記トンネル経路の始点のノードでは、前記トンネル始点のノードに入力され、前記迂回すべきノードを経由する経路へ転送される予定のパケットを、前記トンネル内に転送されるように前記パケットのヘッダーの送信先をトンネルのアドレスに書き換え、
前記パケットはトンネル内を転送され、
前記トンネル終点では、前記パケットのヘッダーの送信先を元の送信先に復元して転送させる、ことを特徴とする請求項１０記載のネットワーク制御方法。
【請求項１５】
前記コントローラは、迂回用に作成した前記トンネル経路のフローを、迂回解除後、迂回用のトンネルを使用する経路構成情報が存在せず、迂回用トンネルを使用する経路構成情報が削除されたあと、削除する、ことを特徴とする請求項１４記載のネットワーク制御方法。
【請求項１６】
前記コントローラは、経路の始点から終点までの各点のノードの各々について、ノードの識別情報とノードに設定されるフロー情報を、経路構成情報として含み、
経路構成情報を管理する経路管理テーブルとして、
経路の各々について、前記経路を形成するノードの情報と、前記コントローラが経路を作成する契機となったパケットのヘッダー情報と、対応する経路の経路構成情報を指示するポインタ情報を含む、ことを特徴とする請求項１０乃至１５のいずれか１項に記載のネットワーク制御方法。
【請求項１７】
前記フロー情報は、前記ノードに入力されたパケットのヘッダーと照合するルールと、前記ルールにヒットしたパケットに対する前記ノードでの転送を含む動作を規定するアクションと、を少なくとも含み、
前記ノードに入力したパケットのヘッダーがフロー情報のルールとマッチしない場合、前記ノードは、前記パケットを前記コントローラに転送し、
前記コントローラは、前記パケットのフローを決定し、前記フロー上の前記ノードに対応するフロー情報を設定し、前記コントローラは、前記パケットを、前記パケット送信元のノードに返送するか、又は、前記コントローラが接続するノードのうち、前記パケットが転送される経路上にあり、前記パケット送信元のノードよりも、前記パケットの送信先ノードにより近いノードに送信する、ことを特徴とする請求項１０乃至１６のいずれか１項に記載のネットワーク制御方法。
【請求項１８】
前記コントローラは、経路情報として経路の始点、終点の２つの端点、前記経路上のノード群をキャッシュの一エントリとして格納する経路キャッシュを有し、
前記コントローラにおいて、経路を算出する経路算出部で経路計算時、始点、終点を指定して両端が一致する経路を前記経路キャッシュから検索し、
一致したものがある場合、前記検索された経路を算出経路とし、
一致したものがない場合、経路を算出し、算出した経路情報を前記経路キャッシュに格納する、ことを特徴とする請求項１０乃至１７のいずれか１項に記載のネットワーク制御方法。
【請求項１９】
設定されたフロー情報にしたがって受信パケットに対する処理を行う複数のノードに対して前記フロー情報を設定しフローの制御を行うコントローラであって、
前記コントローラからフローの制御を受ける前記複数のノードからなるネットワークの一のノードで、前記ネットワーク外部から宛先に向けて送信されたパケットを受けると、前記コントローラの制御のもと、前記コントローラが計算した経路上のノードが、前記パケットを転送して前記宛先に向けて送信し、
前記複数のノードのうち、迂回を指示されたノードを、前記ネットワークのトポロジー情報から除き、
前記ネットワークのトポロジー情報に基づき、前記迂回を指示されたノードを通らずに、前記宛先にパケットを転送するための新経路を計算して有効経路記憶部に記憶し、
前記新経路を形成するノードに対して、前記ノードでのフローに対する動作を規定した前記フロー情報を生成し、
前記コントローラからフローの制御を受ける前記複数のノードのうち前記新経路上のノードに前記フロー情報を設定する、ことを特徴とするコントローラ。
【請求項２０】
迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない経路を求めて前記有効経路記憶部に記憶し、
前記経路を形成する各ノードに関するフロー情報を生成し、前記フロー情報を、前記経路を形成する前記各ノードにそれぞれ設定し、
前記迂回すべきノードを用いた前記旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１９記載のコントローラ。
【請求項２１】
迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求めて前記有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関するフロー情報を生成し、前記フロー情報を、前記新経路を形成する前記各ノードにそれぞれ設定し、
前記新経路と、前記迂回すべきノードを用いた前記旧経路が分岐する先頭のノードでパケットを、新旧両経路に送るように設定したのち、前記旧経路を前記有効経路記憶部から削除する、ことを特徴とする請求項１９記載のコントローラ。
【請求項２２】
前記旧経路を削除する際、前記旧経路の先頭のノードから、順にフローを削除し、前記先頭のノードからフローを削除した段階で、前記先頭のノードにおけるパケットのレプリカ設定を解除する、ことを特徴とする請求項２１記載のコントローラ。
【請求項２３】
迂回すべきノードが指定されると、前記迂回すべきノードの少なくとも２つの隣接ノードを始点と終点とするトンネル経路を設定して前記有効経路記憶部に記憶し、
前記トンネル経路の各ノードに関するフロー情報を生成して設定し、
トンネル経路の始点のノードでは、前記トンネル始点のノードに入力され、前記迂回すべきノードを経由する経路へ転送される予定のパケットを、前記トンネル内に転送されるように前記パケットのヘッダーの送信先をトンネルのアドレスに書き換え、
前記パケットはトンネル内を転送され、
前記トンネル終点では、前記パケットのヘッダーの送信先を元の送信先に復元して転送させる、ことを特徴とする請求項１９記載のコントローラ。
【請求項２４】
迂回用に作成した前記トンネル経路を、迂回解除後、前記トンネルを使用する経路構成情報が存在せず、前記トンネルを使用する経路構成情報が前記有効経路記憶部から全て削除されたあと、削除する、ことを特徴とする請求項２３記載のコントローラ。
【請求項２５】
前記有効経路記憶部が、経路の始点から終点までの各点のノードの各々について、ノードの識別情報とノードに設定されるフロー情報を、経路構成情報として含み、
経路構成情報を管理する経路管理テーブルとして、
経路の各々について、
前記経路を形成するノードの情報と、
前記コントローラが経路を作成する契機となったパケットのヘッダー情報と、
対応する経路の経路構成情報を指示するポインタ情報と、
を含む、ことを特徴とする請求項１９乃至２４のいずれか１項に記載のコントローラ。
【請求項２６】
前記フロー情報は、前記ノードに入力されたパケットのヘッダーと照合するルールと、前記ルールにヒットしたパケットに対する前記ノードでの転送を含む動作を規定するアクションと、を少なくとも含み、
前記ノードに入力したパケットのヘッダーがフロー情報のルールとマッチしない場合、前記ノードは、前記パケットを前記コントローラに転送し、前記コントローラは、前記パケットのフローを決定し、前記フロー上の前記ノードに対応するフロー情報を設定し、前記コントローラは、前記パケットを、前記パケット送信元のノードに返送するか、又は、前記コントローラが接続するノードのうち、前記パケットが転送される経路上にあり、前記パケット送信元のノードよりも、前記パケットの送信先ノードにより近いノードに送信する、ことを特徴とする請求項１９乃至２５のいずれか１項に記載のコントローラ。
【請求項２７】
経路情報として経路の始点、終点の２つの端点、前記経路上のノード群をキャッシュの一エントリとして格納する経路キャッシュと、
経路を算出する経路算出部と、
を備え、
前記経路算出部は、経路計算時、始点、終点を指定して両端が一致する経路を前記経路キャッシュから検索し、
一致したものがある場合、前記検索された経路を算出経路とし、
一致したものがない場合、経路を算出し、算出した経路情報を前記経路キャッシュに格納する、ことを特徴とする請求項１９乃至２６のいずれか１項に記載のコントローラ。
【請求項２８】
コントローラによって設定されたフロー情報にしたがって受信パケットに対する処理を行う複数のノードからなるネットワークの一のノードで、前記ネットワーク外部から宛先に向けて送信されたパケットを受けると、前記コントローラの制御のもと、前記コントローラが計算した経路上のノードが、前記パケットを転送して前記宛先に向けて送信する、コントローラを構成するコンピュータに、
前記複数のノードのうち、迂回を指示されたノードを、前記ネットワークのトポロジー情報から除き、
前記ネットワークのトポロジー情報に基づき、前記迂回を指示されたノードを通らない新経路を計算して有効経路記憶部に記憶し、
該新経路を形成するノードのフロー情報を生成し、
前記複数のノードのうち、該新経路上のノードに前記フロー情報を設定する、処理を実行させるプログラム。
【請求項２９】
迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求めて前記有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関するフロー情報を生成し、前記フロー情報を、前記新経路を形成する前記各ノードにそれぞれ設定し、
前記迂回すべきノードを用いた前記旧経路を前記有効経路記憶部から削除する処理を前記コンピュータに実行させる請求項２８記載のプログラム。
【請求項３０】
迂回すべきノードが指定されると、
前記トポロジー情報から指定された前記迂回すべきノードを削除し、
前記迂回すべきノードを用いた旧経路のそれぞれに対して、前記迂回すべきノードを通らない新経路を求め、前記有効経路記憶部に記憶し、
前記新経路を形成する各ノードに関するフロー情報を生成し、前記フロー情報を前記新経路を形成する前記各ノードにそれぞれ設定し、
前記新経路と、前記迂回すべきノードを用いた前記旧経路が分岐する先頭のノードでパケットを、新旧両経路に送るように設定したのち、前記旧経路を前記有効経路記憶部から削除する処理を前記コンピュータに実行させる請求項２８記載のプログラム。
【請求項３１】
前記旧経路を削除する際、前記旧経路の先頭のノードから、順にフローを削除し、前記先頭のノードからフローを削除した段階で、前記先頭のノードにおけるパケットのレプリカ設定を解除する、処理を前記コンピュータに実行させる請求項３０記載のプログラム。
【請求項３２】
迂回すべきノードが指定されると、前記迂回すべきノードの少なくとも２つの隣接ノードを始点と終点とするトンネル経路を設定し、前記有効経路記憶部に記憶し、
前記トンネル経路の各ノードに関するフロー情報を生成して設定し、
トンネル経路の始点のノードでは、前記トンネル始点のノードに入力され、前記迂回すべきノードを経由する経路へ転送される予定のパケットを、前記トンネル内に転送されるように前記パケットのヘッダーの送信先をトンネルのアドレスに書き換え、
前記パケットはトンネル内を転送され、
前記トンネル終点では、前記パケットのヘッダーの送信先を元の送信先に復元して転送させる処理を前記コンピュータに実行させる請求項２８記載のプログラム。
【請求項３３】
迂回用に作成した前記トンネル経路を、迂回解除後、前記トンネルを使用する経路構成情報が存在せず、前記トンネルを使用する経路構成情報が前記有効経路記憶部から全て削除されたあと、削除する処理を前記コンピュータに実行させる請求項３２記載のプログラム。
【請求項３４】
前記有効経路記憶部が、経路の始点から終点までの各点のノードの各々について、ノードの識別情報とノードに設定されるフロー情報を、経路構成情報として含み、
前記有効経路記憶部において、経路構成情報を管理する経路管理テーブルとして、
経路の各々について、
前記経路を形成するノードの情報と、
前記コントローラが経路を作成する契機となったパケットのヘッダー情報と、
対応する経路の経路構成情報を指示するポインタ情報と、
を含み、
前記経路を設定する場合、前記経路管理テーブルに、
パケットのヘッダー情報、
ノード情報、
経路構成情報へのポインタ
を登録する処理を前記コンピュータに実行させる請求項２８乃至３３のいずれか１項に記載のプログラム。
【請求項３５】
前記フロー情報は、前記ノードに入力されたパケットのヘッダーと照合するルールと、前記ルールにヒットしたパケットに対する前記ノードでの転送を含む動作を規定するアクションと、を少なくとも含み、
前記ノードに入力したパケットのヘッダーがフロー情報のルールとマッチしない場合、前記ノードは、パケットを前記コントローラに転送し、前記コントローラは、前記パケットのフローを決定し、前記フロー上の前記ノードに対応するフロー情報を設定し、前記コントローラは、前記パケットを、前記パケット送信元のノードに返送するか、又は、前記コントローラが接続するノードのうち、前記パケットが転送される経路上にあり、前記パケット送信元のノードよりも、前記パケットの送信先ノードにより近いノードに送信する処理を前記コンピュータに実行させる請求項２８乃至３４のいずれか１項に記載のプログラム。
【請求項３６】
前記コントローラは、経路情報として経路の始点、終点の２つの端点、前記経路上のノード群をキャッシュの一エントリとして格納する経路キャッシュを備え、
経路計算時、始点、終点を指定して両端が一致する経路を前記経路キャッシュから検索し、
一致したものがある場合、前記検索された経路を算出経路とし、
一致したものがない場合、経路を算出し、算出した経路情報を前記経路キャッシュに格納する処理を、前記コンピュータに実行させる請求項２８乃至３５のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２００９−２３２３０６号（２００９年１０月６日出願）の優先権主張に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。
本発明は、ネットワークシステムとコントローラと方法とプログラムに関する。
【背景技術】
【０００２】
プログラマブル化ネットワークアーキテクチャのさきがけともいわれるＯＦＳ（Ｏｐｅｎ  Ｆｌｏｗ  Ｓｗｉｔｃｈ）は現在、例えば大学キャンパスや企業ネットワーク等において実験・実用化研究が行われている。はじめにＯＦＳを概説しておく。スイッチは、パケットのルックアップとフォアワーディングを行うフローテーブルと、コントローラとの通信用のセキュアチャネルを備えている。コントローラはオープンフロー（Ｏｐｅｎ  Ｆｌｏｗ）プロトコルを用いてセキュアチャネル上でスイッチと通信し、例えばＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）レベルでフローを制御する。一例として、スイッチに最初のパケット（ｆｉｒｓｔ  ｐａｃｋｅｔ）が到着すると、該スイッチは、該パケットのヘッダー情報でフローテーブルを検索する。マッチしない場合（ミスヒット）、スイッチは、当該パケットをコントローラにセキュアチャネルで転送（ｆｏｒｗａｒｄ）する。コントローラは、当該パケットの送信先、送信元情報に基づいて、コントローラが管理するネットワーク・トポロジー情報から、該パケットの経路を決定する。コントローラは、決定した経路に基づいて、経路上の各スイッチに対してそれぞれのフローテーブルを設定する。２番目以降のパケットは、スイッチのフローテーブルにヒットし、コントローラへは転送せず、直接、フローテーブルのエントリで規定される次のスイッチに転送される。以下の概説も含め、ＯＦＳの詳細は、例えば非特許文献１、２等が参照される。【０００３】
スイッチのフローテーブルは、例えば図１９に示すように、パケットヘッダーと照合するルール（Ｒｕｌｅ）と、フローに対する処理を定義したアクション（Ａｃｔｉｏｎ）と、フロー統計情報（Ｓｔａｔｉｓｔｉｃｓ）をフロー毎に有する。パケットヘッダーと照合するルール（Ｒｕｌｅ）には、正確な値（ｅｘａｃｔ）、及びワイルドカード（ｗｉｌｄ  ｃａｒｄ）が用いられる。アクション（Ａｃｔｉｏｎ）は、ルールとマッチしたパケットに適用するアクションである。フロー統計情報は、アクティビティカウンタともいい、アクティブエントリ数、パケットルックアップ数、パケットマッチ数、フロー単位に、受信パケット数、受信バイト数、フローがアクティブな期間、ポート単位で受信パケット、送信パケット、受信バイト、送信バイト、受信ドロップ、送信ドロップ、受信エラー、送信エラー、受信フレームアラインメントエラー、受信オーバーランエラー、受信ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）エラー、コリジョン数を含む。スイッチに入力されたパケットはフローテーブルのルールとのマッチ（照合）が行われ、ルールにマッチするエントリが見つかった場合、マッチしたエントリのアクションが当該パケットに対して施される。マッチするエントリが見つからなかった場合、該パケットはセキュアチャネルを介してコントローラに転送され、コントローラは、パケット経路を決定したフローエントリをスイッチへ送信する。スイッチでは、該スイッチのフローエントリに対して、フローエントリの追加、変更、削除を行う。【０００４】
パケットのヘッダーの所定のフィールドがスイッチのフローテーブルのルールとの照合（マッチ）に用いられる。マッチ対象の情報は、入力ポート（Ｉｎｇｒｅｓｓ  ｐｏｒｔ）、ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）、ＤＡ（ＭＡＣディスティネーションアドレス）、ＭＡＣ  ＳＡ（ＭＡＣソースアドレス）、Ｅｈｅｒｎｅｔタイプ（ＴＰＩＤ）、ＶＬＡＮ  ＩＤ（Ｖｉｒｔｕａｌ  ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）  ＩＤ）、ＶＬＡＮ  ＴＹＰＥ（優先度）、ＩＰ  ＳＡ（ＩＰソースアドレス）、ＩＰ  ＤＡ（ＩＰディスティネーションアドレス）、ＩＰプロトコル、Ｓｏｕｒｃｅ  Ｐｏｒｔ（ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）ソースポート、あるいは、ＩＣＭＰ（Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ  Ｔｙｐｅ）、Ｄｅｓｔｉｎａｔｉｏｎ  ｐｏｒｔ（ＴＣＰ／ＵＤＰディスティネーションポート、あるいは、ＩＣＭＰ  Ｃｏｄｅ）を含む（図２５参照）。【０００５】
図２６に、アクション名とアクションの内容を例示する。ＯＵＴＰＵＴは、指定ポート（インタフェース）に出力する。ＳＥＴ＿ＶＬＡＮ＿ＶＩＤからＳＥＴ＿ＴＰ＿ＤＳＴは、パケット・ヘッダーのフィールドを修正するアクションである。また、スイッチは、物理ポートと以下の仮想ポートへパケットを転送（Ｆｏｒｗａｒｄ）する。図２７に仮想ポートを例示する。ＩＮ＿ＰＯＲＴはパケットを入力ポートに出力する。ＮＯＲＭＡＬはスイッチがサポートする既存の転送パスを用いて処理する。ＦＬＯＯＤはパケットが入来したポートを除く通信可能状態（Ｆｏｒｗａｒｄｉｎｇ状態）の全てのポートに転送する。ＡＬＬはパケットが入来したポートを除くポートに転送する。ＣＯＮＴＲＯＬＬＥＲはパケットをカプセル化しセキュアチャネルを介してコントローラに送信する。ＬＯＣＡＬはパケットをスイッチ自身のローカルネットワークスタックに送信する。アクションが指定されないフローエントリにマッチしたパケットはドロップ（廃棄）される。なお、本明細書では、フローエントリのルール、アクション、フロー統計情報からなるフロー情報を「フローエンティティ」という。本明細書では、フロー統計情報は発明の主題として扱われないため、フローエンティティとしてフロー統計情報は省略され、単に、ルール、アクションが示される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Nick McKeownその他、"OpenFlow: Enabling Innovation in Campus Networks", March 14, 2008 ＜インターネット  ＵＲＬ：http://www.openflowswitch.org//documents/openflow-wp-latest.pdf＞
【非特許文献２】"OpenFlow Switch Specification" Version 0.9.0. (Wire Protocol 0x98) July 20, 2009 ＜インターネット  ＵＲＬ：  http://www.openflowswitch.org/documents/openflow-spec-v0.9.0.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記非特許文献１及び２の全開示内容はその引用をもって本書に繰込み記載する。
以下の分析は、本発明によってなされたものである。
上記ＯＦＳのようにコントローラにより各ノードを制御して経路を決定するネットワークにおいて、障害発生、保守等のために任意の当該ノードが使用できなくなる場合、該ノードを迂回させた経路を設定可能とするシステムの実現が望まれる。また、当該ネットワーク中で所定のノードを迂回させることで、経路の片寄せ等を行い、低消費電力化の実現が可能となる。本願発明者達は、かかるシステムを実現する発明を今回創案したので、以下に提示する。
【課題を解決するための手段】
【０００８】
本発明によれば、コントローラと、前記コントローラによってフローの制御が行われる複数のノードと、を備え、前記コントローラは、迂回を指示されたノードに対してノードのネットワーク構成を規定するトポロジー情報から前記ノードを除き、
前記ノードを通らない経路を計算し、
前記経路を形成するノードに対して、前記ノードでのフローに対する動作を規定したフロー情報を生成し、
前記経路上のノードに前記フロー情報を設定するネットワークシステムが提供される。【０００９】
本発明によれば、複数のノードに対してフローの制御を行うコントローラが、迂回を指示されたノードに対してノードのネットワーク構成を規定するトポロジー情報から前記ノードを除き、
前記ノードを通らない経路を計算し、
前記経路を形成するノードに対して、前記ノードでのフローに対する動作を規定したフロー情報を生成し、
前記経路上のノードに前記フロー情報を設定するネットワーク制御方法が提供される。【００１０】
本発明によれば、複数のノードに対してフローの制御を行うコントローラであって、迂回を指示されたノードに対してノードのネットワーク構成を規定するトポロジー情報から前記ノードを除き、
前記ノードを通らない経路を計算して有効経路記憶部に記憶し、
前記経路を形成するノードに対して、前記ノードでのフローに対する動作を規定したフロー情報を生成し、
前記経路上のノードに前記フロー情報を設定するコントローラが提供される。【００１１】
本発明によれば、複数のノードに対してフローの制御を行うコントローラに、迂回を指示されたノードに対してノードのネットワーク構成を規定したトポロジー情報から、前記ノードを除き、
前記ノードを通らない経路を計算して有効経路記憶部に記憶し、
該経路を形成するノードのフロー情報を生成し、
該経路上のノードに前記フロー情報を設定する、処理を実行させるプログラムが提供される。また本発明によれば、該プログラムを記録したコンピュータ読み出し可能な記録媒体が提供される。
【発明の効果】
【００１２】
本発明によれば、迂回が指示されたノードを通らない経路を計算し設定することで該ノードを迂回し、該ノードの保守等を行うことができる。また本発明によれば、ノードを迂回させることで、経路の片寄せ等を行い、低消費電力化等を実現可能としている。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態のネットワークシステムの構成の一例を示す図である。
【図２】本発明の一実施形態のコントローラとスイッチの構成例を示す図である。
【図３】本発明の一実施形態のコントローラにおける有効経路情報記憶部の経路管理テーブルと経路構成情報の一例を示す図である。
【図４】本発明の一実施形態のスイッチのフローエンティティテーブルの一例を示す図である。
【図５】本発明の別の実施形態のコントローラとスイッチの構成の一例を示す図である。
【図６】ネットワーク構成の一例を示す図である。
【図７】本発明の一実施形態におけるＦｉｒｓｔ  Ｐａｃｋｅｔ受信時の動作を示す図である。
【図８】本発明の一実施形態のＦｉｒｓｔ  Ｐａｃｋｅｔ受信時の動作を説明する図である。
【図９】図７の経路算出手順を示す図である。
【図１０】本発明の一実施形態の第１の迂回手順を示す図である。
【図１１】図１０のＳ１０６の経路削除の手順を示す図である。
【図１２】図１０のＳ１０６の経路の再設定の手順を示す図である。
【図１３】図１２のＳ１０６Ｂ−ｃの変形例の手順を示す図である。
【図１４】本発明の一実施形態の第２の迂回手順を示す図である。
【図１５】図１４のＳ２０６の新経路算出の手順を示す図である。
【図１６】図１４のＳ２０６の新経路設定の手順を示す図である。
【図１７】図１４のＳ２０６の旧経路削除の手順を示す図である。
【図１８】本発明の一実施形態の迂回（トンネル）設定の手順を示す図である。
【図１９】図１８のＳ３０５のトンネル用フローエンティティの算出の手順を示す図である。
【図２０】図１８のＳ３０５のトンネル用フローエンティティの設定の手順を示す図である。
【図２１】図１８のＳ３０８のトンネルとの接続手順を示す図である。
【図２２】図１８のＳ３０８の始点の旧経路の削除の手順を示す図である。
【図２３】本発明のさらに別の実施形態のコントローラとスイッチの構成を示す図である。
【図２４】ＯＦＳのフローエンティティを説明する図である。
【図２５】パケット・ヘッダーのマッチフィールドを説明する図である。
【図２６】フローエンティティのアクション（Ｆｉｅｌｄ  Ｍｏｄｉｆｙ）を例示する図である。
【図２７】フローエンティティのアクション（仮想ポート）を例示する図である。
【発明を実施するための最良の形態】
【００１４】
本発明の実施形態について説明する。本発明に係るシステムにおいては、コントローラによってフローの制御が行われる複数のノード（図１のスイッチ１０）と、該コントローラと、を備え、該コントローラ（２０）は、迂回を指示されたノードに対してノードのネットワーク構成を規定するトポロジー情報から前記ノードを除き、前記ノードを通らない経路を計算し、前記経路を形成するノードに対して、前記ノードでのフローに対する動作を規定したフロー情報を生成し、前記経路上のノードに前記フロー情報を設定する。なお、以下の実施形態では、コントローラ（２０）によってフローの制御が行われるノードを、スイッチとして説明するが、本発明においてノードはかかる構成に制限されるものでないことは勿論である。【００１５】
＜ネットワークシステム構成＞
図１は、本発明が適用されるネットワークの一例を示す図である。図１において、スイッチ（ＯＦＳ：Ｏｐｅｎ  Ｆｌｏｗ  Ｓｗｉｔｃｈ）１０は、コントローラ（Ｃｏｎｔｒｏｌｌｅｒ）２０から設定されたフロー情報（ルール＋アクションを含む、以下、「フローエンティティ」という）を保持し、到着したパケットに対して該当するルールをスイッチ１０が保持するフローエンティティテーブル（フローテーブル）から検索し、一致した場合、アクションを実行する。スイッチ（ＯＦＳ）１０は、到着したパケットがフローエンティティテーブルのルールのいずれにも一致しない場合、コントローラ２０に通知する（ｆｉｒｓｔ  ｐａｃｋｅｔの通知）。フローには優先度があり優先度が高いものが有効となる。コントローラ２０は、スイッチ（ＯＦＳ）１０から送られてきたパケットに基づき、適切な経路を算出してフローを生成し、スイッチ群にフローを設定する。なお、図１において、スイッチ（ＯＦＳ）１０の接続構成は、一例でしかなく、ＦａｔＴｒｅｅ、ＨｙｐｅｒＣｕｂｅ等、ノード等との経路が複数存在すればよい。なお、図１において、ノード３０は、複数のスイッチ１０に対してフローの制御を行うコントローラ２０からは、フローの制御は受けないノードである。ノード（Ｎｏｄｅ）３０は、サーバ、ロードバランサ、ファイアウォール、ストレージ（ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔａｔｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、クラスタストレージｉｓｉｌｏｎ等分散ストレージのノード等）、２つ以上のネットワークインタフェースを持つ。ただし、ノード３０はコントローラ２０と通信する機能を備えた構成としてもよいことは勿論である。また、図１では簡単のため、１台のコントローラ２０でスイッチ１０を制御する構成として記載されているが、複数のコントローラがそれぞれ配下の１つ又は複数のスイッチを制御する構成としてもよいことは勿論である。【００１６】
本発明の実施形態において、コントローラ２０は、スイッチ１０の接続状態をトポロジー情報として保持する。【００１７】
また、コントローラ２０は、パケットに対して設定した経路の情報を有効経路情報として保持する。すなわち、スイッチ１０に入力したパケットのヘッダー情報がフローエンティティのルールとマッチしないパケット（ｆｉｒｓｔ  ｐａｃｋｅｔ）に対して、コントローラ２０はフローを決定し、該フロー上のスイッチに対して、フローエンティティを送信して設定する。コントローラ２０は、該フローに対応する経路情報を有効経路情報として管理保持する。【００１８】
本発明の実施形態における迂回手順を以下に説明する。図１において、あるスイッチ（ＯＦＳ）１０を迂回する場合、コントローラ２０は、迂回すべきスイッチ（「迂回スイッチ」という）を通過する全ての経路（旧経路）に対して、該迂回スイッチを通過しない新経路を計算し、該新経路上のスイッチに対して、フローエンティティを設定する。以下に迂回手順の概略を説明する。【００１９】
＜迂回１＞
１．  コントローラ２０は、迂回スイッチが指定されると、コントローラ２０が管理保持するトポロジー情報から指定された当該迂回スイッチを削除する。【００２０】
２．  コントローラ２０は、指定された迂回スイッチを用いた全ての経路について、該迂回スイッチを通過しない迂回経路（新経路）を再計算する。コントローラ２０は新経路を形成するスイッチごとのフローを決定し、新経路情報を、有効経路情報として記憶する。【００２１】
３．  コントローラ２０は、決定したフローに対応したフローエンティティを、該当するスイッチに設定する。【００２２】
４．  コントローラ２０は、旧経路（迂回スイッチを通過する経路）を有効経路情報から削除する。【００２３】
５．  コントローラ２０は、迂回準備の完了を通知する。【００２４】
本実施形態では、迂回すべきスイッチの情報を受けたコントローラ２０は、迂回すべきスイッチをトポロジー情報から削除し、迂回経路を計算する時に、当該スイッチを含まないトポロジー情報を使用する。【００２５】
あるいは、パケットロスを起こさないように、新旧の経路を一時的に並存させ、冗長網化してからパケットを複製させるようにしてもよい。この場合の迂回手順は以下のようになる。【００２６】
＜迂回２＞
１．  コントローラ２０は、迂回すべきスイッチの情報を受けると、トポロジー情報から迂回すべきスイッチ（迂回スイッチ）を取り除く。【００２７】
２．  コントローラ２０は、指定された迂回スイッチを用いた全ての経路について、当該スイッチを通過しない迂回経路（新経路）を計算する。各経路を形成するスイッチごとのフローを決定する。【００２８】
３．  コントローラ２０は、計算したフローを該当するスイッチにフローエンティティを設定する。新旧両経路が分岐する先頭のスイッチでパケットを新旧両経路に送るように設定し、新経路情報を有効経路情報として記憶する。【００２９】
４．  コントローラ２０は、旧経路を有効経路情報から削除する。コントローラ２０は、旧経路を削除する。その際、
・旧経路の先頭のスイッチから、順にフローを削除する。
・先頭のスイッチからフローを削除した段階で、前記先頭のスイッチにおけるパケットのレプリカ設定を解除する（フローエンティティのアクションの設定変更）。【００３０】
５．  迂回準備完了を通知する。【００３１】
また、迂回経路として、トンネル（同位又は下位レイヤのデータをカプセル化してプロトコルの終端を行わず、透過的に伝送させる）を利用してもよい。【００３２】
コントローラ２０は、迂回すべきスイッチの隣接スイッチ間でトンネルを作成し、経路の隣接スイッチ以外に設定されたフローはそのまま使用する。そして、隣接スイッチに設定されたフローを、前記トンネルに誘導するフローに変更することで迂回経路を形成する。トンネルによる迂回は概略以下のように行われる。【００３３】
＜トンネル＞
１．  コントローラ２０は、迂回スイッチの隣接スイッチａ、ｂ同士を端点とする経路を算出する。【００３４】
２．  コントローラ２０は、１で作成した隣接スイッチａと隣接スイッチｂを端点とした経路を経由するスイッチ用に入出力ポートにマッチングするフローを作成する。【００３５】
３．  コントローラ２０は、２で作成したフローの該当するスイッチをトンネルとして設定する。このとき、トンネルを構成するスイッチには、好ましくは、他のスイッチよりも優先度を低い値に設定する。隣接スイッチ以外に設定されたフローはそのまま使用する。【００３６】
４．  コントローラ２０は、隣接スイッチａから迂回スイッチを経由し隣接スイッチｂに送るフローについて、１で作成した隣接スイッチａと隣接スイッチｂを端点とした前記経路に誘導するように隣接スイッチａと隣接スイッチｂにフローを設定する。【００３７】
本発明の一実施形態について説明する。図２を参照すると、スイッチ１０は、制御するコントローラ２０との間で通信が可能とされる。コントローラ２０は、１つ又は複数のスイッチ１０を制御する。【００３８】
＜コントローラの構成例＞
コントローラ２０は、スイッチ１０からのパケットを受信するパケット処理部２０１と、スイッチ１０に対してフローエンティティを設定するフローエンティティ設定部２０２と、経路構成情報（経路を作成する契機となったパケットを入力するスイッチ情報、該パケットのヘッダー情報、該経路を構成するスイッチ識別情報とそのフローエンティティ）を記憶する有効経路記憶部２０３と、ノード、スイッチのネットワーク・トポロジーを記憶するトポロジー情報２０４と、経路を算出する経路算出部２０５と、スイッチの状態を変更するスイッチ状態変更部２０６と、を備えている。【００３９】
＜スイッチの構成例＞
スイッチ１０は、パケット処理部１０１と、フローエンティティテーブル（「フローテーブル」ともいう）１０２と、最初のパケットをコントローラ２０に通知するパケット通知部１０３と、コントローラ２０から指示されたフローエンティティの設定を行うフローエンティティ設定部１０４とを備えている。スイッチ１０としては、レイヤ２スイッチや、レイヤ３スイッチ、ルーター等、コントローラによりスイッチング機能を制御できるものであれば適用可能である。【００４０】
フローエンティティテーブル１０２のフローエンティティは、図２４に示したように、ルール、アクションを含む。ルールは、
・インプットインタフェース（ポート）
・ＭＡＣソースアドレス
・ＭＡＣディスティネーションアドレス
・ＶＬＡＮ（Ｖｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）  ＩＤ
・ＴＹＰＥ
・ＩＰソースアドレス
・ＩＰディスティネーションアドレス
・プロトコル（ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）／ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＣＰＭ（Ｉｎｔｅｒｎｅｔ  Ｃｏｎｔｒｏｌ  Ｍｅｓｓａｇｅ  Ｐｒｏｔｏｃｏｌ））、ＩＣＭＰの場合ＩＣＭＰタイプ、ＩＣＭＰコード、ＴＣＰ／ＵＤＰの場合、ソースポート、ディスティネーションポート
を含む。【００４１】
アクションは、
・アクションのタイプ、
・出力（ＯＵＴＰＵＴ）、
・パケット・ヘッダーのフィールドの変換（Ｆｉｅｌｄ  Ｍｏｄｉｆｙ）、
を含む。ヘッダーのフィールドの変換は、図２７に示したものがある。【００４２】
ルールは、全てのフィールドに値を指定しても良いし、個々のフィールド（欄）をワイルドカード（ｗｉｌｄｃａｒｄ）と指定し、当該ｗｉｌｄｃａｒｄが指摘されたフィールドの値を、フローエントリとのマッチング時に、無視するよう指定しても良い（ｗｉｌｄｃａｒｄが指定された欄は常にマッチ）。ＩＰソースアドレスとＩＰディスティネーションアドレスは、ｗｉｌｄｃａｒｄの指定時に、プレフィックス（Ｐｒｅｆｉｘ）長（ＩＰアドレスのネットワークアドレス部の長さ）を指定してもよい。【００４３】
アクションがＯＵＴＰＵＴの場合、出力インタフェース（ポート）を含む（図２６参照）。【００４４】
アクションがヘッダーのフィールドの変換の場合、変更するフィールド、変更する値を含む。【００４５】
アクションが、ＶＬＡＮ  ｔａｇ（イーサネット（登録商標）フレーム中にｔａｇという識別子を挿入）の変更の場合、変更だけでなく付加、削除がある（図２６のＳＥＴ＿ＶＬＡＮ＿ＶＩＤ、ＳＥＴ＿ＶＬＡＮ＿ＶＩＤ＿ＰＣＰ、ＳＴＲＩＰ＿ＶＬＡＮ参照）。
・付加の場合、付加するＶＬＡＮ  ｔａｇの値、
・変更の場合、変更するＶＬＡＮ  ｔａｇの値
が指定される。１つのフローエンティティは１つ又は複数のアクションを含む。なお、フローエンティティにアクションが指定されない場合、該アクションが指定されないフローエントリにマッチしたパケットは、ドロップ（廃棄）するようにしてもよい。【００４６】
＜有効経路記憶部＞
次に、有効経路記憶部２０３で記憶する情報を説明する。図３は、有効経路記憶部２０３に格納されるデータのデータ構造の一例を示す図である。【００４７】
＜経路管理テーブル＞
経路管理テーブルは、経路ごとの経路構成情報を管理するテーブルである。経路管理テーブルには１エントリ毎に、１つの経路が対応し、したがって該１つの経路の経路構成情報が対応する。経路管理テーブルの１つのエントリには、経路を形成し、コントローラ２０が該経路を新たに作成する契機となったパケット（Ｆｉｒｓｔ  Ｐａｃｋｅｔ）が入力されたスイッチの情報（スイッチＩＤ、インタフェース）と、該パケットのヘッダー情報と、当該経路に対応する経路構成情報をさすポインタを有する。パケットのヘッダー情報に関して、ソース及びディスティネーションのＩＰアドレスのみを記録するようにしてもよい。【００４８】
＜経路構成情報＞
経路構成情報は、経路ごとに、経路を構成するスイッチ群（経路の始点から経路の中間点、終点）の各スイッチについて、スイッチの識別情報と該スイッチに設定されるフローエンティティとの組を有する。経路がｎ個のスイッチから構成される場合、スイッチの識別情報と該スイッチに設定されるフローエンティティとの組をｎ組有し、これが、経路管理テーブルの該当するエントリのポインタによってポイントされる。経路構成情報を参照することで、現在有効とされる経路がいかなるスイッチから形成されているかがわかる。フローエンティティはルールとアクションを含む（フロー統計情報を含んでもよい）。経路構成情報はテーブル構成としても良いし、スイッチ情報とフローエンティティの組が、経路上の次のスイッチに対応するスイッチ情報とフローエンティティの組をポイントするポインタを備えた線形リスト（リンクドリスト）として構成しても良い。なお、経路算出部２０５で新たな経路が算出された場合、スイッチ状態変更部２０６によって有効経路記憶部２０３の経路管理テーブルに経路構成情報が登録され、経路削除等、無効化された経路は、スイッチ状態変更部２０６によって有効経路記憶部２０３から削除される。【００４９】
＜フローエンティティテーブル＞
図４は、スイッチ１０に記憶されるフローエンティティテーブル１０２の構成例を示す図である。フローエンティティテーブルは、コントローラ２０から指示されたフローエンティティをスイッチ１０が記憶保持するテーブルである。ｎ本の異なるフローがスイッチ１０を通るとき、スイッチ１０には、各フローに対応したｎ個のフローエンティティを保持する。【００５０】
なお、図４では、フローエンティティ＝｜ルール｜アクション｜
とされ、１つのフローエンティティが１つのアクションを含む構成として例示されているが、本実施形態において、１つのフローエンティティが複数のクションを含む構成、すなわち、
フローエンティティ＝｜ルール｜アクション１｜アクション２｜・・・｜アクションｍ｜
（ただし、ｍは２以上の所定の整数）
としてもよいことは勿論である。【００５１】
＜経路キャッシュ＞
図５は、本発明の別の実施形態の構成を示す図である。図５を参照すると、コントローラ２０は、図２の構成に加え、経路キャッシュ２０７を備えている。コントローラ２０のこれ以外の構成、スイッチ１０は、図２と同一である。経路キャッシュ２０７には、経路情報がキャッシュされる。経路キャッシュ２０７には、
・始点となるスイッチ、ノード、
・終点となるスイッチ、ノード、
・経由するスイッチ群の識別子、
が、キャッシュの１エントリとして格納される。【００５２】
本実施形態において、迂回が指示された時点で、迂回スイッチを用いた経路を経路キャッシュのエントリから削除する構成としてもよい。【００５３】
次に本発明の一実施形態について具体的なネットワークのトポロジーを例に説明する。【００５４】
＜ネットワーク・トポロジーの一例＞
図６は、ネットワーク・トポロジーの一例を示す図である。図６において、スイッチ１〜８は、コントローラ（図示せず）により集中制御されている。Ａ、Ｂ、Ｃ、Ｄは、スイッチ、サーバ、ストレージ、ロードバランサ、ファイアウォール、ルーター等、コントローラからパケットを転送するための制御を受けないノードである。図６のネットワーク構成のトポロジー情報の一例を以下の表１に示す。特に制限されないが、トポロジー情報のデータ構造として、表１の例では、端点（スイッチ）と、該端点の接続先とがテーブル形式で格納される。【００５５】
【表１】
0005621781.tif 000002
【００５６】
各スイッチには、４つのインタフェース（ポート）が存在するものとし、各インタフェースに該当の装置が接続されている。スイッチの識別情報として、例えばスイッチを示す値と各スイッチに一意に割りつけられた識別子を用いる。【００５７】
表１から、スイッチ１は、インタフェース１、２、３でそれぞれノードＡ、スイッチ３、４と接続する。スイッチ２は、インタフェース１、２、３でそれぞれノードＢ、スイッチ３、４と接続する。スイッチ３、４はいずれも、インタフェース１、２、３、４でそれぞれスイッチ１、２、５、６と接続する。スイッチ５、６はいずれも、インタフェース１、２、３、４でそれぞれスイッチ３、４、７、８と接続する。スイッチ７は、インタフェース１、２、３でそれぞれスイッチ５、６、ノードＣと接続する。スイッチ８は、インタフェース１、２、３でそれぞれスイッチ５、６、ノードＤと接続する。ノードの識別情報は、例えばＭＡＣアドレスおよび、ＩＰアドレスのいずれかあるいは両方を用いる。一つのノードに複数のＭＡＣアドレス、ＩＰアドレスがあってもよい。【００５８】
＜パケット到着時の動作＞
実施形態におけるスイッチの迂回の前提として、スイッチにパケットが到着した時の動作を以下に説明する。【００５９】
スイッチ１に、ノードＡからノードＤ宛のパケットが到着したものとする。そのパケット・ヘッダーの情報として、
・ＭＡＣソースアドレスは、ノードＡのＭＡＣアドレス、
・ＭＡＣディスティネーションアドレスは、ノードＤのＭＡＣアドレス、
・ＩＰソースアドレスは、ノードＡのＩＰアドレス、
・ＩＰディスティネーションアドレスは、ノードノードＤのＩＰアドレスが設定されている。【００６０】
なお、このパケット・ヘッダーにおいて、ＶＬＡＮ  ｔａｇは使用される場合もあり、使用されない場合もあるが、ここでは説明を省略する。プロトコルは、ＴＣＰ、ＵＤＰのいずれかが設定されている。ポート番号は任意の値が設定されているが、ここでは説明を省略する。【００６１】
まず、図６において、第１パケット（Ｆｉｒｓｔ  Ｐａｃｋｅｔ）がスイッチ１のインタフェース１にノードＡからパケットが到着した場合の動作について図７の流れ図を参照して説明する。【００６２】
１．  スイッチ１のインタフェース１にノードＡからパケットが到着する（Ｓ１）。【００６３】
２．  スイッチ１のパケット処理部１０１は、Ｓ１で到着したパケットにルールが一致するフローエンティティがあるかをフローエンティティテーブル１０２内で検索する（Ｓ２）。なお、フローエンティティテーブル１０２は例えばＣＡＭ（Ｃｏｎｔｅｎｔ  Ａｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）として構成される。
３．  検索の結果、一致するものがあった場合（Ｓ３のＹｅｓ）、Ｓ４へ移行し、一致するものがなかった場合（Ｓ３のＮｏ）、Ｓ６へ移行する。【００６４】
４．  スイッチ１のパケット処理部１０１は、一致したフローエンティティに指定されたアクションを実行する（Ｓ４）。【００６５】
５．  アクション実行後、終了する（Ｓ５）。【００６６】
６．  スイッチ１のパケット処理部１０１はパケット通知部１０３に対して、到着したパケットと、到着したインタフェース（インタフェース１）を指定し、コントローラ２０への通知を指示する（Ｓ６）。【００６７】
７．  スイッチ１のパケット通知部１０３は、Ｓ６で指定されたインタフェース情報とパケットをコントローラ２０に通知する。以下の８．から１６．は、コントローラ２０の処理である。【００６８】
８．  コントローラ２０のパケット処理部２０１は、スイッチ１から、パケットを受信する（Ｓ８）。【００６９】
９．  コントローラ２０のパケット処理部２０１は、パケットを受信したスイッチと、パケットのヘッダーを指定し、経路算出部２０５に経路算出を指示する（Ｓ９）。【００７０】
１０．  コントローラ２０の経路算出部２０５は、パケット・ヘッダーのＭＡＣディスティネーションアドレスあるいはＩＰディスティネーションアドレスに一致する、トポロジー情報２０４中の接続先を持つスイッチを特定する（Ｓ１０）。【００７１】
１１．  コントローラ２０の経路算出部２０５は、トポロジー情報２０４を用いて、Ｓ９で指定されたスイッチ（パケットを受信したスイッチ）と、Ｓ１０で特定されたスイッチを端点とした、経路（どのスイッチ群を通過するか）を算出する（Ｓ１１）。【００７２】
１２．  コントローラ２０の経路算出部２０５は、Ｓ１１で算出した経路に基づき、経路の各スイッチに設定するフローエンティティを生成する（Ｓ１２）。【００７３】
１３．  コントローラ２０の経路算出部２０５は、Ｓ１２で生成したスイッチと、設定すべきフローエンティティ群を、コントローラ２０のパケット処理部２０１に通知する（Ｓ１３）。【００７４】
１４．  コントローラ２０のパケット処理部２０１は、Ｓ１３で通知されたスイッチと設定すべきフローエンティティ群を経路構成情報とし、Ｓ９で受信した情報と、経路構成情報とのポインタから、経路管理テーブルのエントリを作成し、コントローラ２０の有効経路記憶部２０３に記憶する（Ｓ１４）。【００７５】
１５．  コントローラ２０のパケット処理部２０１は、Ｓ１３で通知されたスイッチと設定すべきフローエンティティ群を指定し、コントローラ２０のフローエンティティ設定部２０２にフローエンティティの設定を指示する（Ｓ１５）。【００７６】
１６．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ１５で指示されたスイッチ群のそれぞれに設定すべきフローエンティティの設定を指示する（Ｓ１６）。以下の１７．１８．はスイッチ１０の処理である。【００７７】
１７．  スイッチ１０は、コントローラ２０からフローエンティティの設定を指示されると、スイッチ１０のフローエンティティ設定部１０４は、指定されたフローエンティティを、スイッチ１０のフローエンティティテーブル１０２に記録する（Ｓ１７）。【００７８】
１８．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０に対してフローエンティティの設定完了を通知する（Ｓ１８）。以下の１９、２０はコントローラ２０の処理である。【００７９】
１９．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ１６で指示した全てのフローエンティティ設定完了の受信を待ち、全てのフローエンティティ設定完了を受信すると、パケット処理部２０１に、フローエンティティの設定完了を通知する（Ｓ１９）。【００８０】
２０． コントローラ２０のパケット処理部２０１は、フローエンティティ設定部２０２からの完了通知を受け取ると、Ｓ８でパケットを受信したスイッチに対して、インタフェースと受信したパケットを返却する（Ｓ２０）。以下は、スイッチ１０の処理である。【００８１】
２１．  スイッチ１０は、コントローラ２０から返却されたパケットを受信すると、指定されたインタフェースからパケットを受信したものとしてパケット処理部１０１で再度処理を行う（Ｓ２１）。【００８２】
なお、Ｓ１１の算出には、ダイクストラ（Ｄｉｊｋｓｔｒａ）のアルゴリズム（最短経路決定アルゴリズム）等を用いる。【００８３】
また、Ｓ４で複数のフローエンティティにマッチした場合、複数のフローエンティティの全てのアクションを実行する。【００８４】
なお、図７に示した手順では、Ｓ２０においてスイッチにパケット（Ｆｉｒｓｔ  Ｐａｋｃｅｔ）を送信し、作成した経路に従って転送させている（図８（Ａ）参照）。【００８５】
しかしながら、図８（Ｂ）に示すように、コントローラ２０から終端のスイッチ４に送出すべきインタフェースを指定してパケット（Ｆｉｒｓｔ  Ｐａｋｃｅｔ）を送信し、ノードに転送させるようにしてもよい。【００８６】
図６において、経路算出部２０５により算出される経路の例を下記に示す。【００８７】
・ノードＡ→スイッチ１→スイッチ４→スイッチ６→スイッチ８→ノードＤ【００８８】
＜フローエンティティの例＞
図６の経路に対して設定されるフローエンティティの例を以下に示す。なお、本例では、ルールの指定されたフィールド以外はｗｉｌｄｃａｒｄとしたが、全て指定しても良い。フローエンティティ群は、有効経路記憶部２０３の経路構成情報に関連付けて記録される（図３参照）。経路構成情報は、経路を構成する複数のスイッチの各々に対して、スイッチの識別子情報と、ルール、アクションを含むフローエンティティとの組が一つのエントリを構成する。前述したように、有効経路記憶部２０３には、経路を構成するスイッチの識別情報と該スイッチのフローエンティティの組は、テーブル構造、リスト構造で格納されるが、以下では、便宜上、リスト構造の表記を用いてフローエンティティを表す。
（フローエンティティｍ  スイッチｎ  ルール（ｘ）、アクション（ｙ））
は、ｍ番目のフローエンティティにおいて、スイッチ識別情報がスイッチｎ、ルールがｘ、アクションがｙのエントリを表し、フローエンティティ要素のリンクトリスト（（フローエンティティ１）（フローエンティティ２）・・・（フローエンティティｎ））が、１つの経路の構成情報に対応している。スイッチｎは図３のスイッチ識別情報に対応し、ルール（ｘ）とアクション（ｙ）が図３のルールとアクションを含むフローエンティティに対応し、フローエンティティｍは図３の経路構成情報中のｍ番目のフローエンティティであることを表している。また、以下の表記では、１つのフローエンティティは、１つのアクション（ｙ）を含む構成として例示されており、１つのスイッチにおいて、ルールが共通でアクションが異なるフローエンティティを、複数のフローエンティティとして並置しているが、これは、あくまで説明の容易化のためであり、１つのフローエンティティが１つのルール（ｘ）と複数のアクションｙ１、ｙ２・・・を含む構成としてもよいことは勿論である。【００８９】
（（フローエンティティ１  
スイッチ１  
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース３））
（フローエンティティ２  
スイッチ４
ルール（ディスティネーションＩＰアドレスＤ＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース４））
（フローエンティティ３  
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース４））
（フローエンティティ４  
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース３）））【００９０】
前記例は片道の設定であるが、往復の設定を行ってもよい。往復の場合の例を下記に示す。この場合、下記フローエンティティ群を有効経路記憶部２０３の経路構成情報として記録する。【００９１】
（（フローエンティティ１  
スイッチ１  
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース３））
（フローエンティティ２  
スイッチ４
ルール  （ディスティネーションＩＰアドレスＤ＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース４））
（フローエンティティ３  
スイッチ６
ルール  （ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース４））
（フローエンティティ４  
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース３））
（フローエンティティ５  
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース２））
（フローエンティティ６  
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース２））
（フローエンティティ７  
スイッチ４  
ルール（ディスティネーションＩＰアドレス＝ＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース１））
（フローエンティティ８  
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース１）））【００９２】
＜経路のキャッシング＞
図４に示した経路キャッシュ２０７を用いる例について説明する。図５の経路算出部２０５において、経路をキャッシングする場合について説明する。図７のＳ１１は、図９に示すようになる。【００９３】
１．  経路算出部２０５は、経路キャッシュ２０７から、始点・終点の両端点が一致する経路を検索する（Ｓ１１−１）。【００９４】
２．  経路算出部２０５は、検索の結果、一致するものがなかった場合（Ｓ１１−２のＮｏ）、指定された端点から経路を算出する（Ｓ１１−３）。【００９５】
３．  経路算出部２０５は、算出した経路と、計算に使用した端点をセットにして経路キャッシュ２０７に登録する（Ｓ１１−４）。【００９６】
４．  経路算出部２０５は、Ｓ１１−３で算出した経路を算出経路とする（Ｓ１１−５）。【００９７】
５．  終了する。【００９８】
６．  経路算出部２０５は、Ｓ１１−１の検索の結果、一致するものがあった場合（Ｓ１１−２のＹｅｓ）、検索した経路を算出経路とする（Ｓ１１−６）。【００９９】
＜迂回手順１＞
次に、本実施形態における迂回について説明する。管理者が、スイッチを指定してコントローラ２０に指示を行う。本実施例では、図６のスイッチ４を迂回する例に即して説明する。図１０は、本実施形態における迂回手順を示す流れ図である。図２、図６、図１０を参照して、迂回手順を説明する。【０１００】
１．  管理者はスイッチ（スイッチ４）を指定しコントローラ２０に迂回を指示する（Ｓ１０１）。【０１０１】
２．  コントローラ２０のスイッチ状態変更部２０６は管理者からのスイッチを指定され迂回の指示を受け取る（Ｓ１０２）。【０１０２】
３．  トポロジー情報から、Ｓ１０１で指定されたスイッチを削除する（Ｓ１０３）。【０１０３】
４．  コントローラ２０のスイッチ状態変更部２０６は、有効経路記憶部２０３から、指定されたスイッチ（スイッチ４）が使用された経路構成情報を検索する（Ｓ１０４）。スイッチ状態変更部２０６は、有効経路記憶部２０３の経路管理テーブル（図３参照）を検索し、スイッチ４が使用された経路構成情報があるか否かをチェックする。スイッチ４が使用された経路構成情報が複数ある場合には、スイッチ状態変更部２０６は該当する経路構成情報を抽出する。【０１０４】
５．  Ｓ１０４の検索の結果、一致するものがあった場合、Ｓ１０６へ移行する。【０１０５】
６．  Ｓ１０４の検索の結果、一致するものがなかった場合、終了する。【０１０６】
７．  Ｓ１０４で検索した各経路構成情報に関して、経路の削除と、経路の再設定を行う（Ｓ１０６）。【０１０７】
８．  スイッチ状態変更部２０６は、管理者に迂回完了を通知する（Ｓ１０７）。【０１０８】
＜経路削除手順＞
図１０のステップＳ１０６の経路の削除の手順について図１１を参照して説明する。【０１０９】
ａ．コントローラ２０のスイッチ状態変更部２０６は、図１０のＳ１０４で検索された経路構成情報に記録されたスイッチ群とフローエンティティ群を指定し、コントローラ２０のフローエンティティ設定部２０２にフローエンティティの削除を指示する（Ｓ１０６Ａ−ａ）。【０１１０】
ｂ．コントローラ２０のフローエンティティ設定部２０２は、Ｓ１０６Ａ−ａで指示されたスイッチ群に対してそれぞれ削除すべきフローエンティティの削除を指示する（Ｓ１０６Ａ−ｂ）。以下のｃ、ｄはスイッチ１０の処理である。【０１１１】
ｃ．スイッチ１０は、コントローラ２０のフローエンティティ設定部２０２からフローエンティティの削除が指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブルから削除する（Ｓ１０６Ａ−ｃ）。【０１１２】
ｄ．スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの削除完了を通知する（Ｓ１０６Ａ−ｄ）。以下のｅ、ｆはコントローラ２０の処理である。【０１１３】
ｅ．コントローラ２０のフローエンティティ設定部２０２は、Ｓ１０６Ａ−ｂで指示した全てのフローエンティティ削除完了の受信を待ち、スイッチ状態変更部２０６に対して、フローエンティティの削除完了を通知する（Ｓ１０６Ａ−ｅ）。【０１１４】
ｆ．コントローラ２０のスイッチ状態変更部２０６は、有効経路記録部２０３から、経路構成情報（図１０のＳ１０４で検索された経路構成情報）を削除する（Ｓ１０６Ａ−ｆ）。より詳細には、スイッチ状態変更部２０６は、有効経路記憶部２０３の経路管理テーブル（図３参照）から、迂回スイッチを含む経路構成情報（スイッチ識別情報とフローエンティティの集合）、及び、該経路構成情報をポイントする経路管理テーブルのエントリを削除する。【０１１５】
＜経路再設定手順＞
図１０のステップＳ１０６の経路の再設定の手順について図１２を参照して説明する。【０１１６】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、有効経路記憶部２０３において、経路構成情報をポイントする経路管理テーブル（図３参照）のエントリのスイッチ情報（経路を構成するスイッチ群）に含まれるスイッチと、当該経路構成情報をポイントする経路管理テーブルのエントリのパケット・ヘッダーを指定し、経路算出部２０５に対して、経路の算出を指示する（Ｓ１０６Ｂ−ａ）。【０１１７】
ｂ．  コントローラ２０の経路算出部２０５は、トポロジー情報２０４において、指定されたパケット・ヘッダーの宛先アドレス（ＭＡＣディスティネーションアドレスあるいはＩＰディスティネーションアドレス）に一致する、接続先を持つスイッチを特定する（Ｓ１０６Ｂ−ｂ）。【０１１８】
ｃ．  コントローラ２０の経路算出部２０５は、トポロジー情報を用いて、Ｓ１０６Ｂ−ａで指定されたスイッチと、Ｓ１０６Ｂ−ｂで特定したスイッチ（宛先アドレスに一致する接続先を持つスイッチ）を端点とした、経路を算出する（Ｓ１０６Ｂ−ｃ）。【０１１９】
ｄ．  コントローラ２０の経路算出部２０５は、Ｓ１０６Ｂ−ｃで算出した経路に基づき、経路の各スイッチに設定するフローエンティティを生成する（Ｓ１０６Ｂ−ｄ）。【０１２０】
ｅ．  コントローラ２０の経路算出部２０５は、Ｓ１０６Ｂ−ｄで生成したスイッチと設定すべきフローエンティティ群をコントローラ２０のスイッチ状態変更部２０６に通知する（Ｓ１０６Ｂ−ｅ）。【０１２１】
ｆ．  コントローラ２０のスイッチ状態変更部２０６は、Ｓ１０６Ｂ−ｅで通知されたスイッチと設定すべきフローエンティティ群を指定し、コントローラ２０のフローエンティティ設定部２０２に、フローエンティティの設定を指示する（Ｓ１０６Ｂ−ｆ）。【０１２２】
ｇ．  コントローラ２０のフローエンティティ設定部は、Ｓ１０６Ｂ−ｆで指示されたスイッチに対して、それぞれ設定すべきフローエンティティの設定を指示する（Ｓ１０６Ｂ−ｇ）。以下のｈ、ｉはスイッチ１０の処理である。【０１２３】
ｈ．  スイッチ１０は、コントローラ２０からフローエンティティの設定を指示されると、スイッチ１０のフローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブル１０２に記録する（Ｓ１０６Ｂ−ｈ）。【０１２４】
ｉ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの設定完了を通知する（Ｓ１０６Ｂ−ｉ）。以下はコントローラ２０の処理である。【０１２５】
ｊ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ１０６Ｂ−ｆで指示した全てのフローエンティティ設定完了の受信を待ち、スイッチ状態変更部２０６にフローエンティティの設定完了を通知する（Ｓ１０６Ｂ−ｊ）。【０１２６】
ｋ．  スイッチ状態変更部２０６は、Ｓ１０６Ｂ−ｄで生成したフローエンティティを有効経路記録部２０３に新たな経路構成情報として登録する（Ｓ１０６Ｂ−ｋ）。【０１２７】
ｌ．  スイッチ状態変更部２０６は、Ｓ１０６Ｂ−ｋで登録した経路構成情報を、有効経路記録部２０３において該当経路構成情報をポイントしていた経路管理テーブル（図３参照）のエントリの経路構成情報へのポインタが指すように変更する（Ｓ１０６Ｂ−ｌ）。【０１２８】
表２に、上記手順で設定された迂回設定後のトポロジー情報を示す。【０１２９】
【表２】
0005621781.tif 000003
【０１３０】
表２から、表１のスイッチ４のエントリが削除されていることがわかる。また、スイッチ１は、インタフェース１、２でそれぞれノードＡ、スイッチ３と接続する。スイッチ２は、インタフェース１、２でそれぞれノードＢ、スイッチ３と接続する。スイッチ３は、インタフェース１、２、３、４でそれぞれスイッチ１、２、５、６と接続する。スイッチ５、６はいずれも、インタフェース１、３、４でそれぞれスイッチ３、７、８と接続する。スイッチ７は、インタフェース１、２、３でそれぞれスイッチ５、６、ノードＣと接続する。スイッチ８は、インタフェース１、２、３でそれぞれスイッチ５、６、ノードＤと接続する。【０１３１】
図６において、例えばスイッチ４（迂回すべきスイッチ）を通る経路：
・ノードＡ→スイッチ１→スイッチ４→スイッチ６→スイッチ８→ノードＤ
に対して、経路：
・ノードＡ→スイッチ１→スイッチ３→スイッチ６→スイッチ８→ノードＤ
が迂回経路として設定される。【０１３２】
経路が経路キャッシュ２０７（図５参照）にキャッシングされている場合、図１０のＳ１０３の後書き処理を実行する。【０１３３】
・経路算出部２０５に対してスイッチを指定し、キャッシュの無効化を指示する。【０１３４】
・経路算出部２０５は、経路キャッシュ２０７を検索し、指定されたスイッチが経路上にあるエントリを無効化する。【０１３５】
そして、図１２のＳ１０６Ｂ−ｃの処理を、図１３のように変更する。【０１３６】
＜経路キャッシュを用いた場合の経路算出＞
経路算出部２０５は、経路キャッシュ２０７から、始点・終点の両端点が一致する経路を検索する（Ｓ１０６Ｂ−ｃ１）。【０１３７】
検索の結果、一致するものがあった場合（Ｓ１０６Ｂ−ｃ２のＹＥＳ）、Ｓ１０６Ｂ−ｃ３へ、一致するものがなかった場合、Ｓ１０６Ｂ−ｃ６へ分岐する。【０１３８】
指定された端点から経路を算出する（Ｓ１０６Ｂ−ｃ３）。【０１３９】
Ｓ１０６Ｂ−ｃ３で算出した経路と、計算に使用した端点をセットにして経路キャッシュ２０７に登録する（Ｓ１０６Ｂ−ｃ４）。Ｓ１０６Ｂ−ｃ３で算出した経路を算出経路とし（Ｓ１０６Ｂ−ｃ５）、終了する。【０１４０】
Ｓ１０６Ｂ−ｃ２で検索した経路を、経路算出経路とし（Ｓ１０６Ｂ−ｃ６）、終了する。【０１４１】
＜迂回手順２＞
次に、本発明の別の実施の形態を説明する。本実施形態においては、迂回スイッチに対してバイキャストを行う。新経路を作成後、旧経路を削除する場合。複数のＯＵＴＰＵＴアクションを指定することで、パケットが複製され、送信される（バイキャスト、あるいは、それ以上のキャスティング）。図１４は、本実施形態の迂回手順を説明する流れ図である。【０１４２】
１．  管理者はスイッチ（スイッチ４）を指定しコントローラに迂回を指示する（Ｓ２０１）。【０１４３】
２．  コントローラ２０のスイッチ状態変更部２０６は管理者からのスイッチが指定され迂回の指示を受け取る（Ｓ２０２）。【０１４４】
３．  コントローラ２０のスイッチ状態変更部２０６は、トポロジー情報２０４から、Ｓ２０１で指定されたスイッチのエントリを削除する（Ｓ２０３）。【０１４５】
４．  コントローラ２０のスイッチ状態変更部２０６は、有効経路記憶部２０３から、指定されたスイッチが使用された経路構成情報を検索する（Ｓ２０４）。【０１４６】
５．  コントローラ２０のスイッチ状態変更部２０６は、検索結果により一致するものがなかった場合（Ｓ２０５のＮＯ）、終了し、一致するものがあった場合（Ｓ２０５のＹＥＳ）、Ｓ２０６へ分岐する。【０１４７】
６．  Ｓ２０４で検索した各経路構成情報に関して
Ａ．新経路の算出、
Ｂ．新経路の設定、
Ｃ．旧経路の削除、
を実行する（Ｓ２０６）。【０１４８】
７．  コントローラ２０のスイッチ状態変更部２０６は、管理者に迂回完了を通知する（Ｓ２０７）。【０１４９】
＜新経路算出手順＞
図１４のＳ２０６の処理Ａ（新経路の算出）について図１５を参照して説明する。【０１５０】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、経路構成情報をポイントする経路管理テーブル（図３参照）のエントリのスイッチ情報に含まれるスイッチと、経路構成情報をポイントする経路管理テーブルのエントリのパケット・ヘッダーを指定し、経路算出部２０５に対して、経路算出を指示する（Ｓ２０６Ａ−ａ）。【０１５１】
ｂ．  コントローラ２０の経路算出部２０５は、トポロジー情報２０４において、パケット・ヘッダーの宛先アドレス（ＭＡＣディスティネーションアドレスあるいはＩＰディスティネーションアドレス）に一致する、接続先を持つスイッチを特定する（Ｓ２０６Ａ−ｂ）。【０１５２】
ｃ．  コントローラ２０の経路算出部２０５は、トポロジー情報２０４を用いて、Ｓ２０６Ａ−ａで指定されたスイッチと、Ｓ２０６Ａ−ｂで特定したスイッチを端点とした、経路を算出する（Ｓ２０６Ａ−ｃ）。【０１５３】
ｄ．  コントローラ２０の経路算出部２０５は、Ｓ２０６Ａ−ｃで算出した経路に基づき、経路の各スイッチに設定するフローエンティティを生成する（Ｓ２０６Ａ−ｄ）【０１５４】
ｅ．  コントローラ２０の経路算出部２０５は、Ｓ２０６Ａ−ｄで生成したスイッチと設定すべきフローエンティティ群をコントローラ２０のスイッチ状態変更部２０６に通知する（Ｓ２０６Ａ−ｅ）【０１５５】
＜新経路設定手順＞
次に図１４のＳ２０６の処理Ｂ（新経路の設定）について図１６を参照して説明する。【０１５６】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、Ｓ２０６Ａ−ｅで通知されたスイッチと設定すべきフローエンティティ群を指定し、コントローラ２０のフローエンティティ設定部２０２に、フローエンティティの設定を指示する（Ｓ２０６Ｂ−ａ）。【０１５７】
ｂ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ２０６Ｂ−ａで指示されたスイッチ群に、それぞれ設定すべきフローエンティティの設定を指示する（Ｓ２０６Ｂ−ｂ）。以下のｃ、ｄはスイッチ１０の処理である。【０１５８】
ｃ．  スイッチ１０は、コントローラ２０からフローエンティティの設定を指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブル１０２に記録する（Ｓ２０６Ｂ−ｃ）。【０１５９】
ｄ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの設定完了を通知する（Ｓ２０６Ｂ−ｄ）。以下のｅは、コントローラ２０の処理である。【０１６０】
ｅ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ２０６Ｂ−ａで指示した全てのフローエンティティ設定完了の受信を待ち、スイッチ状態変更部２０６にフローエンティティの設定完了を通知する（Ｓ２０６Ｂ−ｅ）。【０１６１】
＜旧経路削除手順＞
次に図１４のＳ２０６の処理Ｃ（旧経路の削除）について図１７を参照して説明する。【０１６２】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、Ｓ２０４で検索された経路構成情報に記録されたスイッチとフローエンティティ群（図３参照）を指定し、コントローラ２０のフローエンティティ設定部２０２にフローエンティティの削除を指示する（Ｓ２０６Ｃ−ａ）。【０１６３】
ｂ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ２０６Ｃ−ａで指示されたスイッチ群に、それぞれ削除すべきフローエンティティを指定し削除を指示する（Ｓ２０６Ｃ−ｂ）。以下のｃ、ｄはスイッチ１０の処理である。【０１６４】
ｃ．  スイッチ１０は、コントローラ２０からフローエンティティの削除を指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブル１０２から削除する（Ｓ２０６Ｃ−ｃ）【０１６５】
ｄ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの削除完了を通知する（Ｓ２０６Ｃ−ｄ）。以下のｅ、ｆは、コントローラ２０の処理である。【０１６６】
ｅ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ２０６Ｃ−ｂで指示した全てのフローエンティティ削除完了の受信を待ち、スイッチ状態変更部２０６にフローエンティティの削除完了を通知する（Ｓ２０６Ｃ−ｅ）【０１６７】
ｆ．  コントローラ２０のスイッチ状態変更部２０６は、有効経路記録部２０３から該当経路構成情報を削除する（Ｓ２０６Ｃ−ｆ）。より詳細には、スイッチ状態変更部２０６は、有効経路記憶部２０３の経路管理テーブル（図３参照）から、迂回スイッチを含む経路構成情報（スイッチ識別情報とフローエンティティの集合）、及び、該経路構成情報をポイントする経路管理テーブルのエントリを削除する。【０１６８】
＜有効経路記録部の更新＞
次に、コントローラ２０における有効経路記録部２０３の更新について説明する。【０１６９】
コントローラ２０のスイッチ状態変更部２０６は、Ｓ２０６の処理Ａ（新経路の算出）で生成したフローエンティティを、有効経路記録部２０３に新たな経路構成情報として登録する。【０１７０】
スイッチ状態変更部２０６は、有効経路記録部２０３に登録した経路構成情報を、有効経路記録部２０３の該当経路構成情報をポイントしていた経路管理テーブルのエントリの経路構成情報へのポインタが指すように変更する。【０１７１】
Ｓ２０６の処理Ｂ（新経路の設定）で、新経路を設定し、Ｓ２０６の処理Ｃ（旧経路の削除）で旧経路を削除している。Ｓ２０６の処理Ｃ（旧経路の削除）の前では、新経路と削除前の旧経路の両経路が有効であるため、スイッチにより複数のＯＵＴＰＵＴ（スイッチの複数のインタフェースにＯＵＴＰＵＴ）が存在する状態となり、これら両経路にパケットが重複して送信される。【０１７２】
図１０等を参照して説明した迂回手順（第１の迂回手順）では、旧経路を先に削除していたため、パケットがなくなる可能性があったが、図１４等を参照して説明した迂回手順（第２の迂回手順）のようにすることで、パケットを失うことを回避することができる。【０１７３】
第２の迂回手順において、新経路、旧経路でスイッチによっては同一のフローエンティティが生成されることが考えられる。図１４のＳ２０６Ｂで、旧経路と一致するものは設定せず、図１４のＳ２０６Ｃで、新経路と一致するものは削除しないことで、対処することが可能である。【０１７４】
次に、本発明の別の実施形態として迂回（トンネル）を説明する。迂回は、管理者がスイッチを指定してコントローラに指示を行う。以下では、図５のスイッチ４を迂回する例を示す。ＭＡＣディスティネーションアドレスを用いてトンネル仕様か否かを制御する。【０１７５】
・トンネル通過用のＭＡＣアドレス群から、トンネルごとに一意となるように割り当てを行う【０１７６】
・トンネル通過用のＭＡＣアドレス群としては、ローカルアドレスを使用する。ＭＡＣアドレスの先頭オクテットの０ｘ０２ビットがＯＮであればローカルアドレスである。【０１７７】
＜トンネル設定手順＞
まず、トンネルの設定手順について図１８を参照して説明する。【０１７８】
１．  管理者はスイッチ（スイッチ４）を指定しコントローラに迂回を指示する（Ｓ３０１）【０１７９】
２．  コントローラ２０のスイッチ状態変更部２０６は管理者からのスイッチを指定され迂回の指示を受け取る（Ｓ３０２）。【０１８０】
３．  コントローラ２０のスイッチ状態変更部２０６は、トポロジー情報２０４から、Ｓ３０１で指定されたスイッチに隣接するスイッチを検索する（Ｓ３０３）。【０１８１】
４．  トポロジー情報２０４から、Ｓ３０１で指定されたスイッチのエントリを削除する（Ｓ３０４）。【０１８２】
５．  Ｓ３０３で選択したスイッチ群の全組み合わせについて以下の処理を行う（Ｓ３０５）。
Ａ．トンネル用フローエンティティの算出。
Ｂ．トンネル用フローエンティティの設定。【０１８３】
６．  コントローラ２０のスイッチ状態変更部２０６は有効経路記憶部２０３から指定されたスイッチ４が使用された経路構成情報を検索する（Ｓ３０６）。【０１８４】
７．  Ｓ３０６の検索結果、一致するものがなかった場合（Ｓ３０７のＮＯ）、終了する。【０１８５】
８．  ６で検索した各経路構成情報に関して下記を実行する（Ｓ３０８）。
Ａ．トンネルとの接続。
Ｂ．始点の旧経路の削除。【０１８６】
９．  スイッチ状態変更部２０６は、管理者に迂回完了を通知する（Ｓ３０９）。【０１８７】
＜トンネル用フローエンティティの算出手順＞
次に、Ｓ３０５のトンネル用フローエンティティの算出手順について図１９を参照して説明する。【０１８８】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、使用するトンネルを通過するための識別用のＭＡＣアドレスを決定する（Ｓ３０５Ａ−ａ）。【０１８９】
ｂ．  コントローラ２０のスイッチ状態変更部２０６は、選択したスイッチペアと、Ｓ３０５Ａ−ａで決定したＭＡＣアドレスを指定し、コントローラ２０の経路算出部２０５にトンネルを算出させる（Ｓ３０５Ａ−ｂ）。【０１９０】
ｃ．  コントローラ２０の経路算出部２０５は、トポロジー情報を用いて、対象となるスイッチペアを端点とした、経路を算出する（Ｓ３０５Ａ−ｃ）。【０１９１】
ｄ．  コントローラ２０の経路算出部２０５は、Ｓ３０５Ａ−ｃで算出した経路と、Ｓ３０５Ａ−ａで決定したＭＡＣアドレスと、に基づき、経路の各スイッチに設定するトンネル用フローエンティティを生成する（Ｓ３０５Ａ−ｄ）。【０１９２】
ｅ．  コントローラ２０の経路算出部２０５は、Ｓ３０５Ａ−ｄで生成したスイッチと設定すべきフローエンティティ群をコントローラ２０のスイッチ状態変更部２０６に通知する（Ｓ３０５Ａ−ｅ）。【０１９３】
ｆ．  コントローラ２０のスイッチ状態変更部２０６は、トンネルの始点となるスイッチ及び終点となるスイッチと、始点となるスイッチ用のアクションを記憶する（Ｓ３０５Ａ−ｆ）。【０１９４】
＜トンネル用フローエンティティの設定手順＞
次に、Ｓ３０５のトンネル用フローエンティティの設定手順について図２０を参照しして説明する。【０１９５】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、Ｓ３０５Ａ−ｅで通知されたスイッチのうち始点となるスイッチ以外のスイッチに関して設定すべきフローエンティティ群を指定し、コントローラ２０のフローエンティティ設定部２０２にフローエンティティの設定を指示する（Ｓ３０５Ｂ−ａ）。【０１９６】
ｂ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ３０５Ｂ−ａで指示されたスイッチ群に、それぞれ設定すべきフローエンティティの設定を指示する（Ｓ３０５Ｂ−ｂ）。以下のｃ、ｄはスイッチ１０の処理である。【０１９７】
ｃ．  スイッチ１０が、コントローラ２０からフローエンティティの設定を指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブル１０２に記録する（Ｓ３０５Ｂ−ｃ）。【０１９８】
ｄ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの設定完了を通知する（Ｓ３０５Ｂ−ｄ）。以下のｅはコントローラ２０の処理である。【０１９９】
ｅ．  コントローラ２０のフローエンティティ設定部２０２は、Ｓ３０５Ｂ−ａで指示した全てのフローエンティティ設定完了の受信を待ち、スイッチ状態変更部２０６にフローエンティティの設定完了を通知する（Ｓ３０５Ｂ−ｅ）。【０２００】
＜トンネルとの接続手順＞
次に、図１８のＳ３０８のトンネルとの接続手順について図２１を参照して説明する。【０２０１】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、経路構成情報から、図１８のＳ３０３で選択した隣接するスイッチ群で使用されているペアを検索する（Ｓ３０８Ａ−ａ）。【０２０２】
ｂ．  コントローラ２０のスイッチ状態変更部２０６は、経路構成情報の始点となるスイッチ用に記憶していた設定済みのフローエンティティのルールと、始点用のアクションからなるフローエンティティを生成する（Ｓ３０８Ａ−ｂ）。【０２０３】
ｃ．  コントローラ２０のスイッチ状態変更部２０６は、経路構成情報の終点となるスイッチ用に記憶していた設定済みのフローエンティティのルールと、ＭＡＣディスティネーションアドレスを、有効経路記憶部２０３の経路管理テーブル（図３参照）に記憶された、ＭＡＣディスティネーションアドレスに変更するアクションを含むフローエンティティを生成する（Ｓ３０８Ａ−ｃ）。【０２０４】
ｄ．  コントローラ２０のスイッチ状態変更部２０６は、始点となるスイッチに、Ｓ３０８Ａ−ｂで生成したフローエンティティを指定し、コントローラ２０のフローエンティティ設定部２０２に、フローエンティティの設定を指示する（Ｓ３０８Ａ−ｄ）。【０２０５】
ｅ．  コントローラ２０のフローエンティティ設定部２０２は、終点となるスイッチに、Ｓ３０８Ａ−ｃで指示されたスイッチに、設定すべきフローエンティティの設定を指示する（Ｓ３０８Ａ−ｅ）。以下のｆ、ｇはスイッチ１０の処理である。【０２０６】
ｆ．  スイッチ１０は、コントローラ２０から、フローエンティティの設定を指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブル１０２に記録する（Ｓ３０８Ａ−ｆ）。【０２０７】
ｇ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの設定完了を通知する（Ｓ３０８Ａ−ｇ）。以下のｈは、コントローラ２０の処理である。【０２０８】
ｈ．  コントローラ２０のフローエンティティ設定部２０２は、ステップＳ３０８Ａ−ｄ、ｅで指示したフローエンティティの設定の完了を待つ（Ｓ３０８Ａ−ｈ）。【０２０９】
＜始点スイッチから旧経路の削除＞
次に、図１８のＳ３０８の始点の旧経路の削除について図２２を参照して説明する。【０２１０】
ａ．  コントローラ２０のスイッチ状態変更部２０６は、始点となるスイッチから、経路構成情報に記録された始点となるスイッチに設定されたフローエンティティを指定し、コントローラ２０のフローエンティティ設定部２０２に対して当該フローエンティティの削除を指示する（Ｓ３０８Ｂ−ａ）。【０２１１】
ｂ．  コントローラ２０のフローエンティティ設定部は、Ｓ３０８Ｂ−ａで指示されたスイッチに、指定されたフローエンティティの削除を指示する（Ｓ３０８Ｂ−ｂ）。以下のｃ、ｄはスイッチ１０の処理である。【０２１２】
ｃ．  スイッチ１０は、コントローラ２０からフローエンティティの削除を指示されると、フローエンティティ設定部１０４は、指定されたフローエンティティをスイッチのフローエンティティテーブルから削除する（Ｓ３０８Ｂ−ｃ）。【０２１３】
ｄ．  スイッチ１０のフローエンティティ設定部１０４は、コントローラ２０にフローエンティティの削除完了を通知する（Ｓ３０８Ｂ−ｄ）。以下のｅは、コントローラ２０の処理である。【０２１４】
ｅ．  コントローラ２０のフローエンティティ設定部２０２は、スイッチ状態変更部２０６にフローエンティティの削除完了を通知する（Ｓ３０８Ｂ−ｅ）。【０２１５】
本実施形態において、トンネルの始点となるスイッチには、パケットをトンネルに誘導するため、
・フローエンティティのアクションをトンネルの次のスイッチに接続するＯＵＴＰＵＴと、
・パケット・ヘッダーのＭＡＣディスティネーションアドレスをトンネル用ＭＡＣアドレスに変更するアクションに設定し、
・旧フローエンティティは削除する。【０２１６】
またトンネル終点のスイッチには、
・パケット・ヘッダーのＭＡＣディスティネーションアドレスを変更するアクションからなるフローエンティティを追加する。【０２１７】
＜トンネルのフローエンティティ＞
実施例として迂回（トンネル）のフローエンティティの例を説明する。【０２１８】
図５のネットワークでスイッチ４を削除する場合、スイッチ４の隣接スイッチは、スイッチ１、スイッチ２、スイッチ５、スイッチ６からなる。【０２１９】
（１）．トンネルをスイッチ１とスイッチ２間とする。経路は、スイッチ１→スイッチ３→スイッチ２となる。なお、始点のスイッチ１には２つのアクションが設定され、この２つのアクションをフローエンティティ１、２で規定しているが、１つのフローエンティティに複数のアクションを設定してもよいことは勿論である。この経路（トンネル）のフローエンティティは以下のようになる。なお、表記の便宜上、経路を構成するフローエンティティをリスト表現で表記しているが、あくまで表記のためであり、テーブル構成、線形リスト等、経路を構成するフローエンティティ（図３の経路構成情報のフローエンティティ群）のデータ構造は任意である。【０２２０】
（（フローエンティティ１＜始点用＞
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス１））
（フローエンティティ２＜始点用＞
スイッチ１
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス１）
アクション  （ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ４＜終点に追加するもの＞
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））    【０２２１】
トンネルの始点なるスイッチ１のフローエンティティのアクションでは、スイッチ１がインタフェース２に出力するパケット・ヘッダーのＭＡＣディスティネーションアドレスを、トンネル用のＭＡＣアドレス１（ローカルアドレス）に変更する。スイッチ１のフローエンティティのアクションとして、図２６のＳＥＴ＿ＤＬ＿ＤＳＴ（ＭＡＣディスティネーションアドレスを更新）が設定される。なお、ルールの既定のルールは、フローエンティティのルールとして既に設定済みのルールである。【０２２２】
トンネル内のスイッチ３では、フローエンティティのルールとして、入力したパケットのヘッダーのＭＡＣディスティネーションアドレスが、トンネル用ＭＡＣアドレス１と一致した場合、転送（ｆｏｒｗａｒｄ）させる。【０２２３】
トンネル終点のスイッチ２に追加するフローエンティティのアクションにおいて、スイッチ１からスイッチ３のトンネル経由でスイッチ２に入力されたパケットのヘッダーの宛先アドレスを、トンネル用のＭＡＣアドレス１から元のＭＡＣディスティネーションアドレスに戻している。スイッチ２のフローエンティティのアクションには、図２６のＳＥＴ＿ＤＬ＿ＤＳＴ（ＭＡＣディスティネーションアドレスを更新：元のＭＡＣアドレス）が設定される。元のＭＡＣディスティネーションアドレスは、有効経路記憶部２０３の経路管理テーブル（図３参照）のパケット・ヘッダー情報に記憶されたＭＡＣディスティネーションアドレスが用いられる。【０２２４】
（２）．トンネルをスイッチ１、スイッチ５間に設ける場合、経路は、スイッチ１→スイッチ３→スイッチ５となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２２５】
（（フローエンティティ１＜始点用＞
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更、トンネル用ＭＡＣアドレス２））
（フローエンティティ１＜始点用＞
スイッチ１
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス２）
アクション（ＯＵＴＰＵＴ：インタフェース３））
（フローエンティティ４＜終点に追加するもの＞
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２２６】
トンネルの始点となるスイッチ１のフローエンティティのアクションで、スイッチ１がインタフェース２に出力するパケット・ヘッダーの宛先ＭＡＣアドレスをトンネル用のＭＡＣアドレス２（ローカルアドレス）に変更する。スイッチ１のフローエンティティのアクションとして、図２６のＳＥＴ＿ＤＬ＿ＤＳＴ（ＭＡＣディスティネーションアドレスを更新）が設定される。【０２２７】
スイッチ３では、ルールとしてパケット・ヘッダーのＭＡＣディスティネーションアドレスがトンネル用ＭＡＣアドレス２と一致した場合、転送（ｆｏｒｗａｒｄ）させる。【０２２８】
トンネル終点のスイッチ５に追加するフローエンティティのアクションで、スイッチ１、３、５のトンネル経由でスイッチ５に入力されたパケット・ヘッダーの宛先のＭＡＣアドレスを、トンネル用のＭＡＣアドレス２から元のＭＡＣアドレスに戻している。スイッチ５のフローエンティティのアクションには、図２６のＳＥＴ＿ＤＬ＿ＤＳＴ（ＭＡＣディスティネーションアドレスを更新：元のＭＡＣアドレス）が設定される。以下（３）〜（１２）に例示する各トンネルのフローエンティティにおいても、トンネルの始点、中間点、終点のルール、アクションの内容は同様にして解釈されため、説明は省略する。【０２２９】
（３）．スイッチ１−スイッチ６間にトンネルを設ける場合、経路はスイッチ１→スイッチ３→スイッチ６となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２３０】
（（フローエンティティ１（始点用）
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更、トンネル用ＭＡＣアドレス３））
（フローエンティティ１（始点用）
スイッチ１
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス３）
アクション(ＯＵＴＰＵＴ：  インタフェース４））
(フローエンティティ４（終点に追加するもの）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２３１】
（４）．スイッチ２−スイッチ１間にトンネルを設ける場合、経路はスイッチ２→スイッチ３→スイッチ１となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２３２】
（（フローエンティティ１（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス４））
（フローエンティティ２（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス４）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ４（終点に追加するもの）
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２３３】
（５）．スイッチ２−スイッチ５間にトンネルを設ける場合、経路はスイッチ２→スイッチ３→スイッチ５となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２３４】
（（フローエンティティ１（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス５））
（フローエンティティ２（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス５）
アクション（ＯＵＴＰＵＴ：  インタフェース３））
（フローエンティティ４（終点に追加するもの）
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２３５】
（６）．スイッチ２−スイッチ６間にトンネルを設ける場合、経路はスイッチ２→スイッチ３→スイッチ６となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２３６】
（（フローエンティティ１（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス６））
（フローエンティティ２（始点用）
スイッチ２
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス６）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ４（終点に追加するもの）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２３７】
（７）．スイッチ５−スイッチ１間にトンネルを設ける場合、経路はスイッチ５→スイッチ３→スイッチ１となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２３８】
（（フローエンティティ１（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス７））
（フローエンティティ２（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス７）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ４（終点に追加するもの）
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２３９】
（８）．スイッチ５−スイッチ２間にトンネルを設ける場合、経路はスイッチ５→スイッチ３→スイッチ２となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２４０】
（（フローエンティティ１（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス８））
（フローエンティティ２（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス８）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ４（終点に追加するもの）
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２４１】
（９）．スイッチ５−スイッチ６間にトンネルを設ける場合、経路はスイッチ５→スイッチ３→スイッチ６となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２４２】
（（フローエンティティ１（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス９））
（フローエンティティ２（始点用）
スイッチ５
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス９）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ４（終点に追加するもの）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２４３】
（１０）．スイッチ６−スイッチ１間にトンネルを設ける場合、経路はスイッチ６→スイッチ３→スイッチ１となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２４４】
（（フローエンティティ１（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス１０））
（フローエンティティ２（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス１０）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ４（終点に追加するもの）
スイッチ１
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２４５】
（１１）．スイッチ６−スイッチ２間にトンネルを設ける場合、経路はスイッチ６→スイッチ３→スイッチ２となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２４６】
（（フローエンティティ１（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス１１））
（フローエンティティ２（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス１１）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ４（終点に追加するもの）
スイッチ２
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２４７】
（１２）．スイッチ６−スイッチ５間にトンネルを設ける場合、経路はスイッチ６→スイッチ３→スイッチ５となる。この経路（トンネル）のフローエンティティは以下のようになる。【０２４８】
（（フローエンティティ１（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：トンネル用ＭＡＣアドレス１２））
（フローエンティティ２（始点用）
スイッチ６
ルール（既定のルール）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ３
スイッチ３
ルール（ＭＡＣディスティネーションアドレス＝トンネル用ＭＡＣアドレス１２）
アクション（ＯＵＴＰＵＴ：  インタフェース３））
（フローエンティティ４（終点に追加するもの）
スイッチ５
ルール（既定のルール）
アクション（ＭＡＣディスティネーションアドレス変更：経路管理テーブルに記憶されたＭＡＣディスティネーションアドレス）））【０２４９】
＜フローエンティティの変更＞
次に、本実施形態における、フローエンティティの変更の例について説明する。【０２５０】
経路管理テーブル（図３参照）のスイッチ情報とパケット・ヘッダー情報の各フィールドに設定されていた値を下記とする。なお、ネットワークは、図６の構成とする。【０２５１】
・スイッチ情報：  スイッチ１
・パケット・ヘッダー情報
ＭＡＣソースアドレス：  ノードＡのＭＡＣアドレス
ＭＡＣディスティネーションアドレス：  ノードＤのＭＡＣアドレス
プロトコル：  ＴＣＰ
ソースＩＰアドレス：  ノードＡのＩＰアドレス
ディスティネーションＩＰアドレス：  ノードノードＤのＩＰアドレス
ソースポート番号：  設定されていた値
ディスティネーションポート番号：設定されていた値【０２５２】
上記において、「設定されていた値」は、フローエンティティの変更の前の時点で既に設定されていた値を表している。【０２５３】
スイッチ４を迂回する場合のフローエンティティの変更例を示す。なお、スイッチ１−スイッチ６間およびスイッチ６−スイッチ１間のトンネルを使用するものとする。【０２５４】
＜変更前（迂回トンネル設定前）＞
（（フローエンティティ１
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース３））
（フローエンティティ２
スイッチ４
ルール（ディスティネーションＩＰアドレスＤ＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ３
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ４
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース３））
（フローエンティティ５
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース２））
（フローエンティティ６
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：インタフェース２））
（フローエンティティ７
スイッチ４
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ８
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１）））【０２５５】
迂回トンネル設定後のフローエンティティの変更例を示す。【０２５６】
＜変更後の（迂回トンネル設定後）＞
（（フローエンティティ９（追加）
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＭＡＣディスティネーションアドレス変更：  トンネル用ＭＡＣアドレス３））
（フローエンティティ１（変更）
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ２（削除）
スイッチ４
ルール（ディスティネーションＩＰアドレスＤ＝  ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ１０（追加）
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＭＡＣディスティネーションアドレス変更：  ＤのＭＡＣアドレス））
（フローエンティティ３
スイッチ６
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース４））
（フローエンティティ４
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＤのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース３））
（フローエンティティ５
スイッチ８
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース２））
（フローエンティティ１１（追加）
スイッチ６
ルール（ディスティネーションＩＰアドレス＝  ノードＡのＩＰアドレス）
アクション（ＭＡＣディスティネーションアドレス変更：  トンネル用ＭＡＣアドレス１０））
（フローエンティティ６（変更）
スイッチ６
ルール（ディスティネーションＩＰアドレス＝  ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ７（削除）
スイッチ４
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ８
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１））
（フローエンティティ１２（追加）
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＭＡＣディスティネーションアドレス変更：  ＡのＭＡＣアドレス１０）））【０２５７】
フローエンティティ（追加）とは、当該フローエンティティをスイッチ１０のフローエンティティテーブル１０２に追加することをいう。フローエンティティ（削除）は、当該フローエンティティを、スイッチ１０のフローエントリテーブルから削除し、コントローラ２０の有効経路記憶部２０３の経路構成情報から削除することをいう。【０２５８】
なお、１つのフローエンティティが複数のアクションを含む場合、例えば上記スイッチ１に追加されるフローエンティティ１２のアクション（ＭＡＣディスティネーションアドレス変更：  ＡのＭＡＣアドレス１０）だけを、スイッチ１の元のフローエンティティ８のアクション（ＯＵＴＰＵＴ：  インタフェース１）に追加し、
（フローエンティティ８
スイッチ１
ルール（ディスティネーションＩＰアドレス＝ノードＡのＩＰアドレス）
アクション（ＯＵＴＰＵＴ：  インタフェース１））、アクション（ＭＡＣディスティネーションアドレス変更：  ＡのＭＡＣアドレス１０））としてもよい。【０２５９】
＜迂回解除＞
次に、本実施形態において、迂回解除後（迂回スイッチの復旧後）の動作について説明する。迂回解除時には、コントローラ２０は、トポロジー情報２０４に、使用可能となったスイッチ（例えば迂回スイッチとして指定されたスイッチ４）を追加する。迂回解除後の経路の変更は、必須ではない。トポロジー情報へ削除されたスイッチを追加する場合、迂回用に作成したトンネルの経路は、迂回解除後、
・迂回用トンネルを使用する経路構成情報が存在せず、
・迂回用トンネルを使用する経路構成情報が全て削除されたあと、
の２つの条件が成立した際に、有効経路記憶部２０３から削除する。【０２６０】
＜経路構成情報の削除＞
図２３は、本発明の別の実施形態を説明する図である。本実施形態においては、コントローラ２０において、フローエンティティ設定部２０２が有効経路記憶部２０３から経路構成情報を削除する機能を備えている。【０２６１】
フローエンティティは、システムが規定した期間、ルールにマッチするパケットが到着しないと無効となる。有効経路記憶部２０３の経路管理テーブル（図３参照）上の経路構成情報、経路管理テーブル内の関連エントリは、削除される。この場合の手順を以下に示す。【０２６２】
１．スイッチのフローエンティティが無効となった場合、スイッチのフローエンティティ設定部１０４が、フローエンティティテーブル１０２から、該当フローエンティティを削除する。【０２６３】
２．スイッチのフローエンティティ設定部１０４は、コントローラ２０のフローエンティティ設定部２０２に、削除したフローエンティティを指定してフローエンティティが無効となったことを通知する。【０２６４】
３．コントローラ２０のフローエンティティ設定部２０２は、有効経路記憶部２０３から、該当フローエンティティが使用されている経路構成情報を検索する。【０２６５】
４．検索の結果、使用されているものがなかった場合には、終了する。【０２６６】
５．検索の結果、使用されているものがあった場合、コントローラ２０のフローエンティティ設定部２０２は、該当経路構成情報を記憶する。【０２６７】
６．コントローラ２０のフローエンティティ設定部２０２は、有効経路記憶部２０３から、該当経路構成情報と、該当経路構成情報へのポインタを持つ経路管理テーブル（図３参照）上のエントリ（スイッチ情報、パケット・ヘッダー情報、ポインタを一エントリとする）を削除する。【０２６８】
７．コントローラ２０のフローエンティティ設定部２０２は、５．で記憶した経路構成情報を基に、各スイッチ１０に対して、該スイッチに対応するフローエンティティを指定し、フローエンティティの削除を指示する。【０２６９】
上記実施形態によれば、迂回が指示されたスイッチを通らない経路を計算し設定することで当該スイッチを迂回し、該スイッチの保守等を行うことができる。また、スイッチを迂回させることで、経路の片寄せ等を行い、低消費電力化等を実現可能としている。すなわち、夜間等において、低消費電力での運用等を可能としている。また経路キャッシュを備えた場合、経路計算を高速化可能としている。【０２７０】
上記実施形態において、トンネルの優先度を低く設定することで、スイッチに明示されているフローへの影響を回避することができる。【０２７１】
迂回経路の再計算時に、影響を受けるフローの数を少なくするように経路を設定するようにしてもよい。この場合、迂回時に再設定するフローの数を少なくすることができる。迂回経路の再計算時にフローを変更するスイッチの数を少なくするように経路を設定するようにしてもよい。【０２７２】
なお、上記実施形態では、説明の簡単化のため、図６のネットワークにおいて迂回スイッチとして１つのスイッチ（スイッチ４）を指定する例に即して説明したが、複数のスイッチを迂回するケースに対しても、本発明が適用可能であることは勿論である。また、本発明において、ノードは、上記実施例のスイッチ（ＯＦＳ）を含むほか、コントローラによってフローの制御が行われる任意のスイッチ（Ｌ２／Ｌ３スイッチ）、ルーター等を含む。【０２７３】
以上、本発明の好適な実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。上記した実施形態のコントローラ２０は、専用のサーバとして実現することもでき、スイッチ１０としては、上記ＯＦＳ（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）のほか、ＩＰ網におけるルータ、ＭＰＬＳ（Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ）網におけるＭＰＬＳスイッチのようなノードであれば実現できる。その他、コントローラがネットワーク内のノードを集中管理するようなネットワークであれば、本発明を適用することが可能である。【０２７４】
なお、上記非特許文献１、２の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０２７５】
１０  スイッチ（ＯＦＳ）
２０  コントローラ
３０  ノード
１０１  パケット処理部
１０２  フローエンティティテーブル
１０３  パケット通知部
１０４  フローエンティティ設定部
２０１  パケット処理部
２０２  フローエンティティ設定部
２０３  有効経路記憶部
２０４  トポロジー情報
２０５  経路算出部
２０６  スイッチ状態変更部
２０７  経路キャッシュ
【図１】
0005621781.tif 000004
【図２】
0005621781.tif 000005
【図３】
0005621781.tif 000006
【図４】
0005621781.tif 000007
【図５】
0005621781.tif 000008
【図６】
0005621781.tif 000009
【図７】
0005621781.tif 000010
【図８】
0005621781.tif 000011
【図９】
0005621781.tif 000012
【図１０】
0005621781.tif 000013
【図１１】
0005621781.tif 000014
【図１２】
0005621781.tif 000015
【図１３】
0005621781.tif 000016
【図１４】
0005621781.tif 000017
【図１５】
0005621781.tif 000018
【図１６】
0005621781.tif 000019
【図１７】
0005621781.tif 000020
【図１８】
0005621781.tif 000021
【図１９】
0005621781.tif 000022
【図２０】
0005621781.tif 000023
【図２１】
0005621781.tif 000024
【図２２】
0005621781.tif 000025
【図２３】
0005621781.tif 000026
【図２４】
0005621781.tif 000027
【図２５】
0005621781.tif 000028
【図２６】
0005621781.tif 000029
【図２７】
0005621781.tif 000030