(57)【特許請求の範囲】
【請求項１】
ネットワーク機器と、
前記ネットワーク機器を制御するコントローラと
を含み、
前記ネットワーク機器は、
未知のパケットを受信すると、前記パケットから投機パケットを作成し、投機転送先のネットワーク機器を選択して、前記投機転送先に前記投機パケットを送信する手段と、
前記パケットの到着を前記コントローラに通知する手段と、
前記コントローラから前記パケットに関する経路情報が設定された場合、前記経路情報を確認し、前記投機転送先が正しいか確認する手段と、
前記投機転送先が間違っている場合、前記経路情報に従い、正しい転送先に前記パケットを送信する手段と、
前記投機転送先が間違っている場合、前記投機転送先に、前記投機パケットを削除するための投機キャンセルパケットを送信する手段と、
パケットを受信すると、受信したパケットの種別を確認する手段と、
受信したパケットが投機パケットである場合、当該パケットをパケットバッファに保存する手段と、
受信したパケットが投機キャンセルパケットである場合、前記パケットバッファに保存したパケットを削除する手段と
を具備する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記ネットワーク機器は、
受信したパケットが投機パケットである場合、次の投機転送先を選択する手段と、
当該パケットがネットワーク機器で構成されたネットワークの外に出て行かないか確認する手段と、
当該パケットが前記ネットワークの外に出て行かない場合、次の投機転送先に当該パケットを投機転送する手段と
を更に具備する
ネットワークシステム。
【請求項３】
請求項１又は２に記載のネットワークシステムであって、
前記ネットワーク機器は、
受信したパケットが投機パケットである場合、前記経路情報を確認し、当該パケットの投機転送元が正しいか確認する手段と、
前記投機転送元が間違っている場合、二重フラグを立てる手段と、
受信したパケットが通常のパケットである場合、前記二重フラグが立っているか確認する手段と、
前記二重フラグが立っていない場合、前記経路情報に従い、受信したパケットを正しい転送先に送信する手段と、
前記二重フラグが立っている場合、受信したパケットを廃棄し、前記二重フラグを落とす手段と
を更に具備する
ネットワークシステム。
【請求項４】
請求項１乃至３のいずれか一項に記載のネットワークシステムで使用されるネットワーク機器。
【請求項５】
コントローラにより制御されるネットワーク機器のパケット投機転送方法であって、
未知のパケットを受信すると、前記パケットから投機パケットを作成し、投機転送先のネットワーク機器を選択して、前記投機転送先に前記投機パケットを送信することと、
前記パケットの到着を前記コントローラに通知することと、
前記コントローラから前記パケットに関する経路情報が設定された場合、前記経路情報を確認し、前記投機転送先が正しいか確認することと、
前記投機転送先が間違っている場合、前記経路情報に従い、正しい転送先に前記パケットを送信することと、
前記投機転送先が間違っている場合、前記投機転送先に、前記投機パケットを削除するための投機キャンセルパケットを送信することと、
パケットを受信すると、受信したパケットの種別を確認することと、
受信したパケットが投機パケットである場合、当該パケットをパケットバッファに保存することと、
受信したパケットが投機キャンセルパケットである場合、前記パケットバッファに保存したパケットを削除することと
を含む
パケット投機転送方法。
【請求項６】
請求項５に記載のパケット投機転送方法であって、
受信したパケットが投機パケットである場合、次の投機転送先を選択することと、
当該パケットがネットワーク機器で構成されたネットワークの外に出て行かないか確認することと、
当該パケットが前記ネットワークの外に出て行かない場合、次の投機転送先に当該パケットを投機転送することと
を更に含む
パケット投機転送方法。
【請求項７】
請求項５又は６に記載のパケット投機転送方法であって、
受信したパケットが投機パケットである場合、前記経路情報を確認し、当該パケットの投機転送元が正しいか確認することと、
前記投機転送元が間違っている場合、二重フラグを立てることと、
受信したパケットが通常のパケットである場合、前記二重フラグが立っているか確認することと、
前記二重フラグが立っていない場合、前記経路情報に従い、受信したパケットを正しい転送先に送信することと、
前記二重フラグが立っている場合、受信したパケットを廃棄し、前記二重フラグを落とすことと
を更に含む
パケット投機転送方法。
【請求項８】
請求項５乃至７のいずれか一項に記載のパケット投機転送方法を、ネットワーク機器に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、特に外部コントローラがネットワーク機器を制御するネットワークシステムに関する。
【背景技術】
【０００２】
従来のネットワーク（ＮＷ：Ｎｅｔｗｏｒｋ）機器はブラックボックスであり、外部から負荷分散や片寄せ等の柔軟性に富んだ制御ができない。このため、ネットワークの規模が大きくなると、システムとしての挙動の把握と改善が困難になり、設計や構成変更において、多大な遅延を伴うことが問題となっていた。
【０００３】
こうした問題を解決するための手法として、ネットワーク（ＮＷ）機器のパケット（ｐａｃｋｅｔ）転送と経路制御の機能を分離する手法が考えられている。例えば、ネットワーク（ＮＷ）機器がパケット転送を担当し、ネットワーク（ＮＷ）機器の外部に置かれたコントローラが経路制御を担当することで、外部からの制御が容易になり、柔軟性に富んだネットワークを構築することが可能になる。
【０００４】
上記手法の具体的な例として、オープンフロー（ＯｐｅｎＦｌｏｗ）について説明する。但し、オープンフローは一例に過ぎない。オープンフローについては、オープンフローコンソーシアム（非特許文献１参照）で検討が進んでいる。
【０００５】
図１に、オープンフロー０．９．０の基本的な構成例を示す。図１では、ネットワーク（ＮＷ）機器の例としてスイッチを示す。図２に、パケット転送と経路制御を分離したネットワーク（ＮＷ）機器の規格であるオープンフローの場合における従来のパケット処理の流れを示す。図３に、従来のパケット照合処理の流れを示す。
【０００６】
オープンフローは、オープンフロープロトコルをサポートしたネットワーク（ＮＷ）機器と、外部に置かれたコントローラで構成される。ネットワーク（ＮＷ）機器とコントローラは、セキュアチャンネル（Ｓｅｃｕｒｅ  ｃｈａｎｎｅｌ：安全な経路）で接続されており、オープンフロープロトコルで通信を行う。オープンフローでは、ネットワーク（ＮＷ）機器のパケット転送と経路制御は分離されており、ネットワーク（ＮＷ）機器はパケット転送を行い、コントローラはネットワーク（ＮＷ）機器の経路制御を行う。
【０００７】
オープンフローをサポートするネットワーク（ＮＷ）機器は、内部にフローテーブル（Ｆｌｏｗ  ｔａｂｌｅ）と呼ばれる経路情報を持つ。フローテーブルは、フロー（Ｆｌｏｗ）として定義されたパケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）と、当該パケットが届いたときの処理（Ａｃｔｉｏｎ）との対応関係を管理するテーブルである。ここでは、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）と処理（Ａｃｔｉｏｎ）の組をエントリー（ｅｎｔｒｙ）と呼称する。ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）は、その内容により、パケットの判定基準となる所定の規則（Ｒｕｌｅ）を示す。処理（Ａｃｔｉｏｎ）は、パケットを物理ポートや仮想ポートに転送するフォワード（Ｆｏｒｗａｒｄ）処理や、パケットを廃棄するドロップ（Ｄｒｏｐ）処理等であり、ビットマップ（ｂｉｔｍａｐ）等で表現される。ネットワーク（ＮＷ）機器は、受信したパケット内のヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）と、フローテーブル内のヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）を照合し、照合の結果、合致していれば、対応する処理（Ａｃｔｉｏｎ）を実行する。
【０００８】
図１を参照して、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）の要素となり得る情報について説明する。
【０００９】
図１では、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）の要素となり得る情報として、「Ｉｎｇｒｅｓｓ  Ｐｏｒｔ」と、「Ｅｔｈｅｒ  ｓｒｃ」と、「Ｅｔｈｅｒ  ｄｓｔ」と、「Ｅｔｈｅｒ  ｔｙｐｅ」と、「ＶＬＡＮ  ＩＤ」と、「ＶＬＡＮ  ｐｒｉｏｒｉｔｙ」と、「ＩＰ  ｓｒｃ」と、「ＩＰ  ｄｓｔ」と、「ＩＰ  ｐｒｏｔｏ」と、「ＴＣＰ／ＵＤＰ  ｓｒｃ  ｐｏｒｔ」と、「ＴＣＰ／ＵＤＰ  ｄｓｔ  ｐｏｒｔ」を示している。フローテーブルとパケットとの照合の際には、これらの情報のいずれか又は全てが使用される。すなわち、これらの情報のいずれか又は全てを組み合わせて、フローが定義される。
【００１０】
「Ｉｎｇｒｅｓｓ  Ｐｏｒｔ」は、入力ポートを示す。「Ｅｔｈｅｒ  ｓｒｃ」は、送信元（Ｓｏｕｒｃｅ）のＭＡＣアドレス（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ａｄｄｒｅｓｓ）を示す。「Ｅｔｈｅｒ  ｄｓｔ」は、宛先（Ｄｅｓｔｉｎａｔｉｏｎ）のＭＡＣアドレスを示す。「Ｅｔｈｅｒ  ｔｙｐｅ」は、上位層のプロトコルの種類を示す。「ＶＬＡＮ  ＩＤ」は、仮想ＬＡＮ（Ｖｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）スイッチのポート毎に設定された識別情報を示す。「ＶＬＡＮ  ｐｒｉｏｒｉｔｙ」は、仮想ＬＡＮスイッチの該当ポートの優先度を示す。「ＩＰ  ｓｒｃ」は、送信元のＩＰアドレス（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ａｄｄｒｅｓｓ）を示す。「ＩＰ  ｄｓｔ」は、宛先のＩＰアドレスを示す。「ＩＰ  ｐｒｏｔｏ」は、ＩＰのプロトコル番号を示す。「ＴＣＰ／ＵＤＰ  ｓｒｃ  ｐｏｒｔ」は、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）やＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）における送信元のポート番号を示す。「ＴＣＰ／ＵＤＰ  ｄｓｔ  ｐｏｒｔ」は、ＴＣＰやＵＤＰにおける宛先のポート番号を示す。
【００１１】
コントローラは、ネットワーク（ＮＷ）機器制御手段（図１のスイッチ制御手段）を備え、セキュアチャンネル（Ｓｅｃｕｒｅ  ｃｈａｎｎｅｌ）を介して、ネットワーク（ＮＷ）機器のフローテーブルを更新して、ネットワーク（ＮＷ）機器を制御する。
【００１２】
ネットワーク（ＮＷ）機器は、パケット転送手段（図１のパケット処理手段）を備え、パケットが到着すると、内部に持つフローテーブルとパケットの照合を行い、該当するエントリーが存在する場合は、関連付けられたパケット送信や廃棄等の処理（Ａｃｔｉｏｎ）を実行する。
【００１３】
ここで、図２を参照して、従来のパケット処理の流れについて説明する。
ネットワーク（ＮＷ）機器は、ネットワークからパケットを受信する（図２の「Ｐａｃｋｅｔ  ｉｎ  ｆｒｏｍ  ｎｅｔｗｏｒｋ」）。
【００１４】
ネットワーク（ＮＷ）機器は、ネットワーク上に複数存在し、個々のネットワーク（ＮＷ）機器は、ＩＥＥＥ  ８０２．１Ｄ標準のＳＴＰ（Ｓｐａｎｎｉｎｇ  Ｔｒｅｅ  Ｐｒｏｔｏｃｏｌ）に従い、ループフリーな論理トポロジーを維持する。個々のネットワーク（ＮＷ）機器は、ルートブリッジとなるネットワーク（ＮＷ）機器から木のように枝分かれしている。個々のネットワーク（ＮＷ）機器は、それぞれパケットを受信し、パケットに対する処理を行う（図２の「８０２．１ｄ  ＳＴＰ  Ｐｒｏｃｅｓｓｉｎｇ」）。
【００１５】
ネットワーク（ＮＷ）機器は、内部に持つフローテーブルのエントリーと、受信したパケットの照合を行う（図２の「Ｆｌｏｗ  ｌｏｏｋｕｐ」）。
【００１６】
ここで、図３を参照して、従来のパケット照合処理について詳述する。
まず、ネットワーク（ＮＷ）機器は、フローテーブルのエントリーのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）と照合する際の照合対象となるパケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）に、「Ｉｎｇｒｅｓｓ  Ｐｏｒｔ」と、「Ｅｔｈｅｒ  ｓｒｃ」と、「Ｅｔｈｅｒ  ｄｓｔ」と、「Ｅｔｈｅｒ  ｔｙｐｅ」を指定する（図３の「Ｈｅａｄｅｒ  Ｆｉｅｌｄ＝＜Ｉｎｇｒｅｓｓ  Ｐｏｒｔ，  Ｅｔｈｅｒ  ｓｒｃ，  Ｅｔｈｅｒ  ｄｓｔ，  Ｅｔｈｅｒ  ｔｙｐｅ＞」）。
【００１７】
ネットワーク（ＮＷ）機器は、パケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）の「Ｅｔｈｅｒ  ｔｙｐｅ」の値が「０ｘ８１００」であるか確認する（図３の「Ｅｔｈｅｒ  ｔｙｐｅ  ＝  ０ｘ８１００？」）。
【００１８】
ネットワーク（ＮＷ）機器は、「Ｅｔｈｅｒ  ｔｙｐｅ」の値が「０ｘ８１００」である場合、「ＶＬＡＮ  ＩＤ」を、新たな照合対象として、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）に追加する。すなわち、ネットワーク（ＮＷ）機器は、「Ｅｔｈｅｒ  ｔｙｐｅ」についても照合対象とする。このとき、ネットワーク（ＮＷ）機器は、カプセル化された「Ｅｔｈｅｒ  ｔｙｐｅ」の値を、「Ｅｔｈｅｒ  ｔｙｐｅ」の値として使用する（図３の「Ａｄｄ  ＜ＶＬＡＮ  ＩＤ＞  ｔｏ  Ｈｅａｄｅｒ  Ｆｉｅｌｄ，  Ｕｓｅ  ｅｎｃａｐｓｕｌａｔｅｄ  Ｅｔｈｅｒ  ｔｙｐｅ  ａｓ  Ｅｔｈｅｒ  ｔｙｐｅ」）。
【００１９】
ネットワーク（ＮＷ）機器は、パケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）の「Ｅｔｈｅｒ  ｔｙｐｅ」の値が「０ｘ８００」であるか確認する（図３の「Ｅｔｈｅｒ  ｔｙｐｅ  ＝  ０ｘ８００？」）。
【００２０】
ネットワーク（ＮＷ）機器は、「Ｅｔｈｅｒ  ｔｙｐｅ」の値が「０ｘ８００」である場合、「ＩＰ  ｓｒｃ」と、「ＩＰ  ｄｓｔ」と、「ＩＰ  ｐｒｏｔｏ」を、新たな照合対象として、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）に追加する。すなわち、ネットワーク（ＮＷ）機器は、「ＩＰ  ｓｒｃ」と、「ＩＰ  ｄｓｔ」と、「ＩＰ  ｐｒｏｔｏ」についても照合対象とする（図３の「Ａｄｄ  ＜ＩＰ  ｓｒｃ，  ＩＰ  ｄｓｔ，  ＩＰ  ｐｒｏｔｏ＞  ｔｏ  Ｈｅａｄｅｒ  Ｆｉｅｌｄ」）。
【００２１】
ネットワーク（ＮＷ）機器は、パケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）の「ＩＰ  ｐｒｏｔｏ」の値が「６」又は「１７」であるか確認する（図３の「ＩＰ  ｐｒｏｔｏ  ＝  ６  ｏｒ  １７？」）。
【００２２】
ネットワーク（ＮＷ）機器は、「ＩＰ  ｐｒｏｔｏ」の値が「６」又は「１７」である場合、「ＴＣＰ／ＵＤＰ  ｓｒｃ  ｐｏｒｔ」と、「ＴＣＰ／ＵＤＰ  ｄｓｔ  ｐｏｒｔ」を、新たな照合対象として、ヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）に追加する。すなわち、ネットワーク（ＮＷ）機器は、「ＴＣＰ／ＵＤＰ  ｓｒｃ  ｐｏｒｔ」と、「ＴＣＰ／ＵＤＰ  ｄｓｔ  ｐｏｒｔ」についても照合対象とする（図３の「Ａｄｄ  ＜ＴＣＰ／ＵＤＰ  ｓｒｃ  ｐｏｒｔ，  ＴＣＰ／ＵＤＰ  ｄｓｔ  ｐｏｒｔ＞  ｔｏ  Ｈｅａｄｅｒ  Ｆｉｅｌｄ」）。
【００２３】
ネットワーク（ＮＷ）機器は、フローテーブルのエントリーのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）と、パケットのヘッダ領域情報（Ｈｅａｄｅｒ  Ｆｉｅｌｄ）を照合する（図３の「Ｐａｃｋｅｔ  Ｌｏｏｋｕｐ  Ｏｖｅｒ  Ｈｅａｄｅｒ  Ｆｉｅｌｄ」）。
【００２４】
ネットワーク（ＮＷ）機器は、受信したパケットに対し、フローテーブル内に該当するエントリーが存在する場合は、このエントリーに関連付けられたパケット送信や廃棄等の処理（Ａｃｔｉｏｎ）を実行する（図２の「Ａｐｐｌｙ  ａｃｔｉｏｎｓ」）。
【００２５】
また、ネットワーク（ＮＷ）機器は、受信したパケットに対し、フローテーブル内に該当するエントリーが存在しない場合、このパケットを内部に保留し、セキュアチャンネル（Ｓｅｃｕｒｅ  ｃｈａｎｎｅｌ）を介して、コントローラに未知のパケットが到着したことを通知する（図２の「Ｓｅｎｄ  ｔｏ  ｓｅｃｕｒｅ  ｃｈａｎｎｅｌ」）。ここでは、該当するエントリーが存在しない場合の未知のパケットを１ｓｔパケット（Ｆｉｒｓｔ  ｐａｃｋｅｔ）と呼称する。
【００２６】
コントローラは、１ｓｔパケット到着の通知を受けると、宛先までの経路を計算し、ネットワーク（ＮＷ）機器のフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。宛先までの経路については、どのネットワーク（ＮＷ）機器がどのネットワーク（ＮＷ）機器につながっているかを表すトポロジ情報（Ｎｅｔｗｏｒｋ  Ｔｏｐｏｌｏｇｙ）から計算する。
【００２７】
ネットワーク（ＮＷ）機器は、フローテーブルが更新されると、滞留していた１ｓｔパケットとそれ以降の同種のパケットを、追加された処理（Ａｃｔｉｏｎ）に従って処理する。
【００２８】
以下、図４を参照して、従来のネットワークシステムにおける処理の流れを具体的に説明する。ここでは、ネットワーク（ＮＷ）機器として、ネットワーク（ＮＷ）機器Ａ、ネットワーク（ＮＷ）機器Ｂ、ネットワーク（ＮＷ）機器Ｃの３つを示す。
【００２９】
（１）１ｓｔパケット送信
ノードは、自身が接続されたネットワーク（ＮＷ）機器Ａに対して、１ｓｔパケットを送信する。
【００３０】
（２）１ｓｔパケット受信通知
ネットワーク（ＮＷ）機器Ａは、１ｓｔパケットを受信すると、１ｓｔパケットを受信した旨を、自身のコントローラに通知する。
【００３１】
（３）経路計算
コントローラは、ネットワーク（ＮＷ）機器Ａから通知を受け取ると、トポロジ情報を基に、経路を計算する。
【００３２】
（４）ネットワーク（ＮＷ）機器Ｃ更新
コントローラは、計算した経路に基づいて、最終段にあるネットワーク（ＮＷ）機器Ｃのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。
【００３３】
（５）ネットワーク（ＮＷ）機器Ｂ更新
コントローラは、計算した経路に基づいて、ネットワーク（ＮＷ）機器Ｃの前段にあるネットワーク（ＮＷ）機器Ｂのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。
【００３４】
（６）ネットワーク（ＮＷ）機器Ａ更新
コントローラは、計算した経路上で、通知元のネットワーク（ＮＷ）機器Ａの後段の全てのネットワーク（ＮＷ）機器のフローテーブルの更新が完了すると、計算した経路に基づいて、通知元のネットワーク（ＮＷ）機器Ａのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。すなわち、コントローラは、計算した経路上において、最終段から順に手前に向かってネットワーク（ＮＷ）機器のフローテーブルを更新してゆき、最後に、通知元のネットワーク（ＮＷ）機器のフローテーブルを更新する。
【００３５】
（７）パケット送信
ネットワーク（ＮＷ）機器Ａは、追加されたフローテーブルのエントリーに従い、１ｓｔパケットを次のネットワーク（ＮＷ）機器Ｂに送信する。
【００３６】
（８）パケット送信
ネットワーク（ＮＷ）機器Ｂは、追加されたフローテーブルのエントリーに従い、１ｓｔパケットを次のネットワーク（ＮＷ）機器Ｃに送信する。
【００３７】
（９）パケット送信
ネットワーク（ＮＷ）機器Ｃは、追加されたフローテーブルのエントリーに従い、受信したパケットを、配下のノードに送信する。
【００３８】
従って、図４に示すような、通常のオープンフローでは、パケット転送と経路制御を分離したネットワーク（ＮＷ）機器に１ｓｔパケットが到着すると、ネットワーク（ＮＷ）機器からコントローラへの通知と、コントローラからネットワーク（ＮＷ）機器へのフローテーブル更新が発生するため、従来のネットワーク（ＮＷ）機器に比べて通信の遅延が発生することになる。
【００３９】
更に、データセンタのような大規模ネットワークを考えると、この遅延は顕著である。大規模なネットワークでは、性能や信頼性の面から、複数のコントローラが分担してネットワーク内の全てのネットワーク（ＮＷ）機器を管理することになる。経路計算のためのトポロジ情報は、全てのコントローラが共有している。あるパケットの経路が異なるコントローラによって制御されるネットワーク（ＮＷ）機器群をまたがるような場合、コントローラ間で経路内のネットワーク（ＮＷ）機器のフローテーブル更新指示と同期待ち合わせが発生し、それが完了するまでパケットの転送は遅延する。
【００４０】
以上から、既存のネットワークをパケット転送と経路制御を分離したネットワーク（ＮＷ）機器で再構成する場合、システム性能が劣化する可能性が大きく、最悪の場合、従来守れていたシステムの性能指標を守れなくなってしまう可能性がある。
【００４１】
そこで、パケットの転送遅延を解決するために、投機的にパケットを転送する手段が考えられるが、投機的にパケットを転送して失敗したときに投機的に転送したパケットの取り消し方法が存在しておらず、投機的に転送を行うことができない。
【００４２】
関連する技術として、特許文献１（特開２００３−０１８２４０号公報）に通信監視システムが開示されている。この関連技術では、エラー情報を確認するために保持するテーブルを持ち、このテーブルを用いて通信順序のエラーを判定する。
【００４３】
また、特許文献２（特開２００４−１２９０５４号公報）に経路制御装置及び経路制御情報生成方法が開示されている。この関連技術では、経路制御装置において、経路制御処理と転送制御処理とが分離されて、経路制御処理が経路制御装置にて実行され、転送制御処理が各転送装置にて実行される。
【００４４】
また、特許文献３（特開２００４−１４７０２１号公報）に経路制御システム、経路制御装置、及び経路制御方法が開示されている。この関連技術では、制御系と転送系とは、経路制御システムの物理的な構成要素としての制御サーバとルータとにより明確に分離されている。
【００４５】
また、特許文献４（特開２００７−２５７４７９号公報）に通信装置、方法及びプログラムが開示されている。この関連技術では、送信側ＮＩＣは、データ転送要求を受けた際に、転送先に受信許可の有無かを問合せることなく、転送データからパケットを作成して投機的に送信する。受信領域が受信不許可であれば、転送先から再送要求を受信した際に、パケットを再送する。受信側ＮＩＣは、パケット受信時に転送領域管理情報を参照して転送不許可を判別した場合に、受信パケットを破棄し、その後に転送許可を判別した場合に、再送要求を送信して転送させる。受信不許可の場合は、これを送信元に通知して転送を中断する。
【先行技術文献】
【特許文献】
【００４６】
【特許文献１】特開２００３−０１８２４０号公報
【特許文献２】特開２００４−１２９０５４号公報
【特許文献３】特開２００４−１４７０２１号公報
【特許文献４】特開２００７−２５７４７９号公報
【非特許文献】
【００４７】
【非特許文献１】Ｔｈｅ  ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｃｏｎｓｏｒｔｉｕｍ  ＜ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／＞
【発明の概要】
【発明が解決しようとする課題】
【００４８】
本発明の目的は、オープンフロー（ＯｐｅｎＦｌｏｗ）に代表されるような、制御機能を外部のコントローラとして分離したネットワーク（ＮＷ）機器で構成されるネットワークにおいて、各ネットワーク（ＮＷ）機器が、経路情報を管理するフローテーブルに経路情報が無いパケットを投機的に転送し、外部ネットワークに送信する直前で保留するネットワークシステムを提供することである。
【課題を解決するための手段】
【００４９】
本発明のネットワークシステムは、ネットワーク機器と、ネットワーク機器を制御するコントローラとを含む。ネットワーク機器は、未知のパケットを受信すると、パケットから投機パケットを作成し、投機転送先のネットワーク機器を選択して、投機転送先に投機パケットを送信する手段と、パケットの到着をコントローラに通知する手段と、コントローラからパケットに関する経路情報が設定された場合、経路情報を確認し、投機転送先が正しいか確認する手段と、投機転送先が間違っている場合、経路情報に従い、正しい転送先にパケットを送信する手段とを具備する。
【００５０】
本発明のパケット投機転送方法は、コントローラにより制御されるネットワーク機器のパケット投機転送方法である。このパケット投機転送方法では、ネットワーク機器は、未知のパケットを受信すると、パケットから投機パケットを作成し、投機転送先のネットワーク機器を選択して、投機転送先に投機パケットを送信する。また、パケットの到着をコントローラに通知する。また、コントローラからパケットに関する経路情報が設定された場合、経路情報を確認し、投機転送先が正しいか確認する。また、投機転送先が間違っている場合、経路情報に従い、正しい転送先にパケットを送信する。
【００５１】
本発明のプログラムは、上記のパケット投機転送方法を、ネットワーク機器に実行させるためのプログラムである。なお、本発明のプログラムは、記憶装置や記憶媒体に格納することが可能である。
【発明の効果】
【００５２】
パケット転送と経路制御の機能が分離されたネットワーク（ＮＷ）機器で構成されるネットワークにおいて、複数のコントローラをまたぐ通信が発生する場合におけるパケット処理の際、コントローラ間で経路内のネットワーク（ＮＷ）機器のフローテーブル更新指示と同期待ち合わせの必要が無くなり、パケット転送の遅延を回避でき、ネットワーク性能が向上する。
【図面の簡単な説明】
【００５３】
【図１】オープンフロー０．９．０の基本的な構成例を示す概念図である。
【図２】従来のパケット処理の流れを説明するための図である。
【図３】従来のパケット照合処理の流れを説明するための図である。
【図４】従来のネットワークシステムにおける処理の流れを説明するための図である。
【図５】本発明のネットワークシステムにおける処理の流れを説明するための図である。
【図６】本発明のネットワークシステムの基本構成を示すブロック図である。
【図７】本発明で定義する投機パケットを運ぶフレームフォーマットを説明するための図である。
【図８】本発明におけるフローテーブルの内容を説明するための図である。
【図９】本発明におけるネットワーク（ＮＷ）機器基本処理を説明するための図である。
【図１０】本発明におけるパケット受信処理を説明するための図である。
【図１１】本発明におけるパケット投機転送処理を説明するための図である。
【図１２】本発明におけるフローテーブル更新処理を説明するための図である。
【図１３Ａ】本発明におけるパケット投機転送取り消し処理を説明するための図である。
【図１３Ｂ】本発明におけるパケット投機転送取り消し処理を説明するための図である。
【図１４】本発明におけるキャンセルパケット送信処理を説明するための図である。
【図１５】本発明におけるパケット転送処理を説明するための図である。
【図１６】本発明におけるキャンセルパケット受信処理を説明するための図である。
【図１７】本発明における二重パケット廃棄処理を説明するための図である。
【図１８】本発明の実施例１を説明するための図である。
【図１９】本発明の実施例２を説明するための図である。
【図２０】本発明の実施例３を説明するための図である。
【図２１】本発明の実施例４を説明するための図である。
【発明を実施するための形態】
【００５４】
＜第１実施形態＞
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図５に示す通り、本発明のネットワークシステムは、コントローラと、ネットワーク（ＮＷ）機器を備える。
【００５５】
コントローラは、自分が制御するネットワーク（ＮＷ）機器から、１ｓｔパケット（Ｆｉｒｓｔ  ｐａｃｋｅｔ）受信の通知を受けて、パケット（ｐａｃｋｅｔ）転送の経路を計算し、計算した経路を基に、通知元のネットワーク（ＮＷ）機器のフローテーブルを更新する。
【００５６】
ネットワーク（ＮＷ）機器は、１ｓｔパケットを受信するとコントローラに通知し、同時に、投機的に１ｓｔパケットを転送する。
【００５７】
以下、図５を参照して、本発明のネットワークシステムにおける処理の流れを具体的に説明する。ここでは、ネットワーク（ＮＷ）機器として、ネットワーク（ＮＷ）機器Ａ、ネットワーク（ＮＷ）機器Ｂ、ネットワーク（ＮＷ）機器Ｃの３つを示す。
【００５８】
なお、図４と図５を対比すると、従来技術と本発明との相違点が明確となる。
【００５９】
（１）１ｓｔパケット送信
ノードは、自身が接続されたネットワーク（ＮＷ）機器Ａに対して、１ｓｔパケットを送信する。
【００６０】
（２）１ｓｔパケット受信通知
ネットワーク（ＮＷ）機器Ａは、１ｓｔパケットを受信すると、１ｓｔパケットを受信した旨を、自身のコントローラに通知する。
【００６１】
（３）投機パケット送信
ネットワーク（ＮＷ）機器Ａは、コントローラに１ｓｔパケットが到着したことを通知すると同時に、投機転送先のネットワーク（ＮＷ）機器Ｂを選び、投機的にパケットの転送を行うために新たに定義する投機パケットを投機転送先のネットワーク（ＮＷ）機器Ｂに送信し、投機的にパケットの転送を行う。
【００６２】
（４）投機パケット送信
ネットワーク（ＮＷ）機器Ｂは、投機パケットを受信した場合、受信した投機パケットをパケットバッファに保留し、同じように次の投機転送先のネットワーク（ＮＷ）機器Ｃを選び、投機パケットを次の投機転送先のネットワーク（ＮＷ）機器Ｃに送信する。但し、投機的に送信する先がネットワーク（ＮＷ）機器で無い場合は、それ以上投機的にパケットの転送を行わないようにする。ここでは、ネットワーク（ＮＷ）機器Ｃは、投機的に送信する先がネットワーク（ＮＷ）機器で無いため、投機パケットを受信した場合、投機的にパケットの転送を行わず、受信した投機パケットをパケットバッファに保留して待つ。
【００６３】
（５）経路計算
コントローラは、ネットワーク（ＮＷ）機器Ａから通知を受け取ると、トポロジ情報を基に、宛先までの経路を計算し、計算した経路上の各ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｃのフローテーブルに新しいエントリーを追加する。
【００６４】
（６）ネットワーク（ＮＷ）機器Ｃ更新
コントローラは、計算した経路に基づいて、最終段にあるネットワーク（ＮＷ）機器Ｃのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。
【００６５】
（７）パケット送信
ネットワーク（ＮＷ）機器Ｃは、追加されたフローテーブルのエントリーに従い、パケットバッファに保留している投機パケットを、配下のノードに送信する。
【００６６】
（８）ネットワーク（ＮＷ）機器Ｂ更新
コントローラは、計算した経路に基づいて、ネットワーク（ＮＷ）機器Ｃの前段にあるネットワーク（ＮＷ）機器Ｂのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。
【００６７】
（９）ネットワーク（ＮＷ）機器Ａ更新
コントローラは、計算した経路上で、通知元のネットワーク（ＮＷ）機器Ａの後段の全てのネットワーク（ＮＷ）機器のフローテーブルの更新が完了すると、計算した経路に基づいて、通知元のネットワーク（ＮＷ）機器Ａのフローテーブルに新しいエントリーを追加し、フローテーブルを更新する。すなわち、コントローラは、計算した経路上において、最終段から順に手前に向かってネットワーク（ＮＷ）機器のフローテーブルを更新してゆき、最後に、通知元のネットワーク（ＮＷ）機器のフローテーブルを更新する。
【００６８】
＜各ネットワーク（ＮＷ）機器の動作の詳細＞
以下、コントローラが計算した経路上の各ネットワーク（ＮＷ）機器の動作の詳細について説明する。
【００６９】
各ネットワーク（ＮＷ）機器は、コントローラによるエントリー追加の処理を受けて投機処理の成否判定を行う。投機処理の成否判定については、投機パケットを解析し、送信元のネットワーク（ＮＷ）機器と、送信先のネットワーク（ＮＷ）機器が正しいかどうかで判定する。
【００７０】
各ネットワーク（ＮＷ）機器は、送信元と送信先が両方とも正しい場合、投機的な転送に成功したと判定する。各ネットワーク（ＮＷ）機器は、投機的な転送に成功したと判定した場合、保留していた投機パケットを削除し、次のパケットを待つ。
【００７１】
各ネットワーク（ＮＷ）機器は、送信元が正しく送信先が間違っていた場合、投機的な転送に失敗したと判定する。各ネットワーク（ＮＷ）機器は、投機的な転送に失敗したと判定した場合、保留していた投機パケットを通常のパケットに変換して、通常のパケットをフローテーブルに従ってネットワーク（ＮＷ）機器に送信する。
【００７２】
また、各ネットワーク（ＮＷ）機器は、間違った送信先に対して転送した投機パケットを取り消すために、新たに定義する投機キャンセルパケットを投機転送先のネットワーク（ＮＷ）機器に送信し、投機的に転送した投機パケットを取り消す。
【００７３】
各ネットワーク（ＮＷ）機器は、送信元が間違っており送信先が正しい場合、投機的な転送に成功したと判定する。各ネットワーク（ＮＷ）機器は、送信先に正しい送信元から送信されてきた通常のパケットを転送しないようにするために、新たに二重フラグという情報を保持する。正しい送信元から通常のパケットが送信されてきたら、そのパケットを廃棄し、二重フラグの情報を削除する。
【００７４】
また、各ネットワーク（ＮＷ）機器は、投機キャンセルパケットの受信を待ち、受信した投機キャンセルパケットを廃棄し、保留していた投機パケットを削除する。
【００７５】
各ネットワーク（ＮＷ）機器は、送信元と送信先が両方とも間違っていた場合、投機的な転送に失敗したと判定する。各ネットワーク（ＮＷ）機器は、投機的な転送に失敗したと判定した場合、保留していた投機パケットを通常のパケットに変換して、通常のパケットをフローテーブルに従ってネットワーク（ＮＷ）機器に送信する。
【００７６】
各ネットワーク（ＮＷ）機器は、間違った送信先に対して投機キャンセルパケットを送信し、投機的に転送した投機パケットを取り消す。送信先に正しい送信元から送信されてきた通常のパケットを転送しないようにするために、新たに二重フラグという情報を保持する。正しい送信元から通常のパケットが送信されてきたら、そのパケットを廃棄し、二重フラグの情報を削除する。
【００７７】
各ネットワーク（ＮＷ）機器は、投機パケットを受信していない場合、ネットワーク（ＮＷ）機器は、次のパケットを待つ。
【００７８】
各ネットワーク（ＮＷ）機器は、投機パケットを受信していたが投機的に送信していない場合、送信元で判定する。
【００７９】
各ネットワーク（ＮＷ）機器は、送信元が正しかった場合、保留していた投機パケットを通常のパケットに変換して、通常のパケットをフローテーブルに従ってネットワーク（ＮＷ）機器に送信する。
【００８０】
各ネットワーク（ＮＷ）機器は、送信元が間違っていた場合、保留していた投機パケットを削除して次のパケットを待つ。
【００８１】
各ネットワーク（ＮＷ）機器は、１ｓｔパケットを受信して、始点として投機パケットを送信した場合、投機送信元は正しいものとして投機転送先の成否判定を行う。
【００８２】
各ネットワーク（ＮＷ）機器は、投機パケットをパケットバッファに保留した後、所定期間内に、フローテーブルに新しいエントリーを追加する処理を受けなかった場合、上記の所定期間の経過後、保留している投機パケットを、投機的な送信に失敗した投機パケットと判定して削除する。
【００８３】
各ネットワーク（ＮＷ）機器は、投機キャンセルパケットを受信した場合、保留していた投機パケットを削除して、投機転送先に投機キャンセルパケットを転送する。
【００８４】
本発明で定義する投機パケットと投機キャンセルパケットによって、フローテーブルにエントリーが無いパケットについても、投機的に転送を行うことができ、投機的な転送に失敗したときも、投機的な転送を取り消すことができる。投機的に転送を行うことできるので、パケット転送の遅延を小さくすることができる。
【００８５】
＜本発明のネットワークシステムの基本構成＞
図６を参照して、本発明のネットワークシステムの基本構成の詳細について説明する。
【００８６】
先に説明した通り、本発明のネットワークシステムは、コントローラ１０と、ネットワーク（ＮＷ）機器２０を備える。
【００８７】
なお、図５に示したコントローラは、コントローラ１０に該当する。また、図５に示したネットワーク（ＮＷ）機器は、ネットワーク（ＮＷ）機器２０に該当する。
【００８８】
コントローラ１０は、ネットワーク（ＮＷ）機器２０と物理的に分離されたサーバマシン、又は当該サーバマシン上で動作する仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）である。コントローラ１０は、複数のネットワーク（ＮＷ）機器を管理することができ、各ネットワーク（ＮＷ）機器と、専用線もしくは通常のネットワークを利用したセキュアチャンネル（Ｓｅｃｕｒｅ  ｃｈａｎｎｅｌ：安全な経路）で接続されており、オープンフロープロトコルで通信を行う。
【００８９】
ネットワーク（ＮＷ）機器２０は、図７に示すような新規プロトコルを用いて、通常のパケットを運ぶフレーム（ｆｒａｍｅ）に投機転送を示す情報を付加した投機パケットを生成し、この投機パケットを次のネットワーク（ＮＷ）機器に投機的に送信する。ネットワーク（ＮＷ）機器２０は、コントローラ１０からのフローテーブルの設定に従って、投機転送の成否を判定し、失敗していたときは投機キャンセルパケットを用いて送信した投機パケットを取り消す。
【００９０】
なお、フレームは、ＯＳＩ参照モデルの第２層（レイヤ２：データリンク層）の通信で使われるＰＤＵ（プロトコル・データ・ユニット）の呼び名であり、パケットは、ＯＳＩ参照モデルの第３層（レイヤ３：ネットワーク層）の通信で使われるＰＤＵの呼び名である。すなわち、フレームとパケットは、形式が異なる同一のデータである。
【００９１】
コントローラ１０は、経路計算処理部１１と、ネットワーク（ＮＷ）機器制御処理部１２を備える。
【００９２】
経路計算処理部１１は、どのネットワーク（ＮＷ）機器がどのネットワーク（ＮＷ）機器につながっているかを表すトポロジ情報から、宛先までの経路について計算する。
【００９３】
ネットワーク（ＮＷ）機器制御処理部１２は、計算された宛先までの経路に基づいて、ネットワーク（ＮＷ）機器のフローテーブルを設定する。
【００９４】
図６で示すように、ネットワーク（ＮＷ）機器２０は、投機転送処理部２１と、ネットワーク（ＮＷ）機器基本処理部２２と、パケット受信処理部２３と、パケット転送処理部２４と、フローテーブル更新処理部２５と、フローテーブル２６と、パケットバッファ２７を備える。
【００９５】
投機転送処理部２１は、投機転送処理に必要な処理をまとめたモジュールである。
【００９６】
投機転送処理部２１は、パケット投機転送処理部２１１と、パケット投機転送取り消し処理部２１２と、キャンセルパケット送信処理部２１３と、キャンセルパケット受信処理部２１４と、二重パケット廃棄処理部２１５を備える。
【００９７】
パケット投機転送処理部２１１は、パケットの投機転送先を決定し、パケットの投機転送を行う。
【００９８】
パケット投機転送取り消し処理部２１２は、パケットの投機転送の成否を判定し、失敗時にキャンセルパケット送信処理で投機キャンセルパケットの転送を行う。
【００９９】
キャンセルパケット送信処理部２１３は、投機キャンセルパケットの転送を行う。
【０１００】
キャンセルパケット受信処理部２１４は、投機キャンセルパケットの受信を行う。
【０１０１】
二重パケット廃棄処理部２１５は、一度送ったパケットが二重に転送されないようにする。
【０１０２】
ネットワーク（ＮＷ）機器基本処理部２２は、ネットワーク（ＮＷ）機器でパケットの受信又はコントローラからの設定を待つ。
【０１０３】
パケット受信処理部２３は、パケットの受信時にパケットの種類を判定し処理内容を決める。
【０１０４】
パケット転送処理部２４は、パケットの送信を行う。
【０１０５】
フローテーブル更新処理部２５は、フローテーブル２６の更新を行う。
【０１０６】
フローテーブル２６は、通常のオープンフローの仕組みにおけるフローテーブルを拡張したものである。なお、フローテーブル２６は、通常のオープンフローの仕組みにおけるフローテーブルと同じく、パケットを転送するための経路情報も管理できる。フローテーブル２６については後に詳述する。
【０１０７】
パケットバッファ２７は、通常のパケット及び投機パケットを保持する。
【０１０８】
＜本発明で定義する投機パケット＞
パケットを投機転送するためと投機を取り消すために新たに以下の投機パケットを定義する。また、それらを管理するための情報をネットワーク（ＮＷ）機器に持たせる。
【０１０９】
本発明では、投機転送を示す情報を埋め込むために新規プロトコルを用意する。新規プロトコルにおいて、投機パケットを運ぶフレームのヘッダ情報は、少なくとも投機転送を示す情報とヘッダ長を情報に持つ。
【０１１０】
図７に示す通り、本発明で定義する投機パケットを運ぶフレームフォーマットは、ＩＥＥＥ  ８０２．３準拠のフレームフォーマットをベース（基礎）としており、プリアンブルと、ＳＦＤ（Ｓｔａｒｔ  Ｆｒａｍｅ  Ｄｅｌｉｍｉｔｅｒ）と、ｄｓｔ（宛先アドレス）と、ｓｒｃ（送信元アドレス）と、ＴＰＩＤ（Ｔａｇ  Ｐｒｏｔｏｃｏｌ  Ｉｄｅｎｔｉｆｉｅｒ）と、ＴＣＩ（Ｔａｇ  Ｃｏｎｔｒｏｌ  Ｉｎｆｏｒｍａｔｉｏｎ）と、Ｌｅｎ／ｔｙｐｅ（長さ／タイプ）と、Ｄａｔａ／ＬＬＣ（Ｄａｔａ／Ｌｏｇｉｃａｌ  Ｌｉｎｋ  Ｃｏｎｔｒｏｌ）と、ＦＣＳ（Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）等の領域（ｆｉｅｌｄ）を含む。
【０１１１】
本発明では、投機転送を示す情報を埋め込むための領域として、Ｄａｔａ／ＬＬＣを使用する。Ｄａｔａ／ＬＬＣは、ヘッダ長と、区別情報と、１ｓｔパケットを含む。パケット更新部２１４は、投機転送を示す情報である投機フラグと、投機転送の取り消しを示す情報である取り消しフラグを、Ｄａｔａ／ＬＬＣ内の区別情報の領域に格納する。
【０１１２】
投機パケットは、図７で示すように、投機的に転送されたことが区別できる情報を、通常のパケットを運ぶフレームに付加したものである。例えば、ネットワーク（ＮＷ）機器は、受信したパケットを解析し、区別情報の領域が存在し、投機フラグが立っており、取り消しフラグが立っていない場合、投機転送における投機パケットであると判定する。
【０１１３】
なお、フラグが立った状態とは、フラグに有効である旨を示す値が代入されている状態を指す。反対に、フラグが立っていない状態（フラグを落とした状態）とは、フラグの値が空、又は、フラグに無効である旨を示す値が代入されている状態を指す。
【０１１４】
本発明では、投機パケットを、コントローラによって送信経路が設定されていない状態で、ネットワーク（ＮＷ）機器から次のネットワーク（ＮＷ）機器に投機送信するためのパケットとして使用する。
【０１１５】
投機キャンセルパケットは、図７で示すように、対応する投機パケットが区別できるようにするために、１ｓｔパケットの情報を持ち、投機キャンセルパケットとして区別できる情報、パケットを運ぶフレームに付加したものである。例えば、ネットワーク（ＮＷ）機器は、受信したパケットを解析し、区別情報の領域が存在し、投機フラグと取り消しフラグが共に立っている場合、投機転送における投機キャンセルパケットであると判定する。
【０１１６】
本発明では、ネットワーク（ＮＷ）機器は、投機パケットを間違ったネットワーク（ＮＷ）機器に転送したときに、その転送先のネットワーク（ＮＷ）機器に投機パケットを取り消すために送るパケットとして、投機キャンセルパケットを使用する。転送先のネットワーク（ＮＷ）機器は、投機キャンセルパケットを受信すると、該当する投機パケットを削除する。
【０１１７】
＜フローテーブルの内容＞
図８のように、フローテーブル２６は、エントリー２６１と、投機転送情報２６２を含む。
【０１１８】
エントリー２６１は、従来のフローテーブルのエントリーと同じである。すなわち、エントリー２６１は、コントローラ１０により計算されたパケット転送経路を示す。
【０１１９】
投機転送情報２６２は、パケットの投機転送を管理し、投機転送の状態を保持する。ここでは、投機転送情報２６２は、エントリー２６１と対応付けられている。すなわち、エントリー毎に、投機転送情報が存在する。
【０１２０】
投機転送情報２６２は、投機中フラグ２６２１と、ＮＷ情報２６２２と、二重フラグ２６２３を含む。
【０１２１】
投機中フラグ２６２１は、エントリー毎に投機転送済みかどうかを示す情報である。
【０１２２】
ＮＷ情報２６２２は、エントリー毎に送信先がネットワーク（ＮＷ）機器で構成されたネットワークであるか、それ以外のネットワークであるかの情報である。
【０１２３】
二重フラグ２６２３は、エントリー毎に二重にパケットを受信する可能性があることを示す情報である。
【０１２４】
＜ネットワーク（ＮＷ）機器の処理＞
ネットワーク（ＮＷ）機器２０は、それぞれ以下のような処理を行う。
【０１２５】
［ネットワーク（ＮＷ）機器基本処理］
図９を参照して、ネットワーク（ＮＷ）機器基本処理について説明する。
【０１２６】
（１）ステップＡ１０１
ネットワーク（ＮＷ）機器基本処理部２２は、パケットが来るのを待つ。ここでは、ネットワーク（ＮＷ）機器基本処理部２２は、パケットを受信したか確認する。
【０１２７】
（２）ステップＡ１０２
ネットワーク（ＮＷ）機器基本処理部２２は、パケットが来た場合、パケット受信処理部２３を呼び出し、後述する図１０のパケット受信処理を実行する。ここでは、ネットワーク（ＮＷ）機器基本処理部２２は、パケットを受信したことを確認した場合、パケットの到着を他の処理部に通知する。パケット受信処理が終わると、一旦ネットワーク（ＮＷ）機器基本処理を終了し、再度ネットワーク（ＮＷ）機器基本処理を最初から実行する。
【０１２８】
（３）ステップＡ１０３
また、ネットワーク（ＮＷ）機器基本処理部２２は、コントローラからの設定が来るのを待つ。
【０１２９】
（４）ステップＡ１０４
ネットワーク（ＮＷ）機器基本処理部２２は、コントローラからの設定が来た場合、フローテーブル更新処理部２５を呼び出し、フローテーブルを更新するための処理を行う。
【０１３０】
（５）ステップＡ１０５
その後に、ネットワーク（ＮＷ）機器基本処理部２２は、パケット投機転送取り消し処理部２１２を呼び出し、パケットの投機転送を取り消すための処理を行う。パケット投機転送取り消し処理が終わると、ネットワーク（ＮＷ）機器基本処理が終了し、再度ネットワーク（ＮＷ）機器基本処理が実行される。
【０１３１】
［パケット受信処理］
図１０を参照して、パケット受信処理について説明する。パケット受信処理部２３は、パケットの種類ごとに処理を振り分ける。
【０１３２】
（１）ステップＡ２０１
まず、パケット受信処理部２３は、パケットが通常のパケットか確認する。
【０１３３】
（２）ステップＡ２０２
パケット受信処理部２３は、パケットが通常のパケットの場合、フローテーブル２６に有効なエントリーが存在するか確認する。
【０１３４】
（３）ステップＡ２０３
パケット受信処理部２３は、有効なエントリーが存在する場合、更に、投機転送情報２６２の二重フラグ２６２３が立っているか確認する。
【０１３５】
（４）ステップＡ２０４
パケット受信処理部２３は、二重フラグ２６２３が立っていた場合には、二重パケット廃棄処理部２１５を呼び出し、後述する図１７の二重パケット廃棄処理を実行する。
【０１３６】
（５）ステップＡ２０５
また、パケット受信処理部２３は、二重フラグ２６２３が立っていない場合には、パケット転送処理部２４を呼び出し、後述する図１５のパケット転送処理を行う。
【０１３７】
（６）ステップＡ２０６
パケット受信処理部２３は、フローテーブル２６に有効なエントリーが存在しない場合には、コントローラ１０に対して、パケットを１ｓｔパケットとして送信する。すなわち、パケット受信処理部２３は、コントローラ１０に、１ｓｔパケット到着を通知する。
【０１３８】
（７）ステップＡ２０７
その後、パケット受信処理部２３は、パケット投機転送処理部２１１を呼び出し、パケットを投機的に転送するための処理を行う。
【０１３９】
（８）ステップＡ２０８
また、パケット受信処理部２３は、パケットが通常のパケットでない場合、パケットが投機パケットか確認する。パケット受信処理部２３は、投機パケットの場合にも、パケット投機転送処理部２１１を呼び出し、パケットを投機的に転送するための処理を行う。
【０１４０】
（９）ステップＡ２０９
パケット受信処理部２３は、パケットが通常のパケットや投機パケットではなく、投機キャンセルパケットの場合、キャンセルパケット受信処理部２１４を呼び出し、投機キャンセルパケットの受信処理を行う。
【０１４１】
［パケット投機転送処理］
図１１を参照して、パケット投機転送処理について説明する。パケット投機転送処理部２１１は、投機パケットを送信する。
【０１４２】
（１）ステップＡ３０１
パケット投機転送処理部２１１は、パケットの投機転送先を選択する。
【０１４３】
（２）ステップＡ３０２
パケット投機転送処理部２１１は、パケットの投機転送先が決まったか確認する。
【０１４４】
（３）ステップＡ３０３
パケット投機転送処理部２１１は、パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）の外に出て行かないか確認する。
【０１４５】
（４）ステップＡ３０４
パケット投機転送処理部２１１は、パケットの投機転送先が決まり、パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行かない場合には、パケットを投機パケットに変換する。
【０１４６】
（５）ステップＡ３０５
パケット投機転送処理部２１１は、投機パケットを送信する。
【０１４７】
（６）ステップＡ３０６
その後、パケット投機転送処理部２１１は、投機転送情報２６２に投機中フラグ２６２１を立てて、投機中である旨の情報を保存する。また、パケット投機転送処理部２１１は、送信した投機パケットをパケットバッファ２７に保存する。
【０１４８】
（７）ステップＡ３０７
また、パケット投機転送処理部２１１は、パケットの投機転送先が決まらなかったり、パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行く場合は、パケットバッファ２７にパケットを保存する。
【０１４９】
［フローテーブル更新処理］
図１２を参照して、フローテーブル更新処理について説明する。フローテーブル更新処理部２５は、フローテーブル２６の投機転送情報２６２からエントリーの更新を行う。
【０１５０】
（１）ステップＡ４０１
フローテーブル更新処理部２５は、投機転送情報２６２に投機中フラグが立っているエントリーの更新を行うか確認する。ここでは、フローテーブル更新処理部２５は、投機中フラグが立っているエントリーの中に対応するものがあるか確認する。
【０１５１】
（２）ステップＡ４０２
フローテーブル更新処理部２５は、投機中フラグが立っているエントリーの中に対応するものがある場合、対応するエントリーに新しいエントリーを保存し、エントリーを更新する。
【０１５２】
（３）ステップＡ４０３
フローテーブル更新処理部２５は、投機中フラグが立っているエントリーの中に対応するものがない場合、空のエントリーがあるか確認する。
【０１５３】
（４）ステップＡ４０４
フローテーブル更新処理部２５は、空のエントリーがある場合、空のエントリーに新しいエントリーを保存する。
【０１５４】
（５）ステップＡ４０５
フローテーブル更新処理部２５は、空のエントリーが無い場合、「ｔａｂｌｅ  ｆｕｌｌエラー」と判断する。
【０１５５】
［パケット投機転送取り消し処理］
図１３Ａ及び図１３Ｂを参照して、パケット投機転送取り消し処理について説明する。パケット投機転送取り消し処理部２１２は、投機転送を行っていた場合は、投機転送が正しかったか判定する。投機転送を行っていなかった場合は投機転送されたパケットを受信したか確認する。
【０１５６】
（１）ステップＡ５０１
パケット投機転送取り消し処理部２１２は、投機転送を行ったか確認する。
【０１５７】
（２）ステップＡ５０２
パケット投機転送取り消し処理部２１２は、投機転送を行った場合、パケットバッファ２７から、投機パケットを読み出す。以降、パケット投機転送取り消し処理部２１２は、投機転送とコントローラからの設定が合っているか確認する。
【０１５８】
（３）ステップＡ５０３
まず、パケット投機転送取り消し処理部２１２は、投機転送先が正しいか確認する。なお、パケット投機転送取り消し処理部２１２は、当該ネットワーク（ＮＷ）機器が、最初に１ｓｔパケットを受信して、投機パケットを送信したネットワーク（ＮＷ）機器であれば、投機送信元は正しいものとして投機転送先の成否判定を行う。
【０１５９】
（４）ステップＡ５０４
パケット投機転送取り消し処理部２１２は、投機転送先が正しい場合、投機転送元が正しいか確認する。
【０１６０】
（５）ステップＡ５０５
パケット投機転送取り消し処理部２１２は、投機送信先が正しく、投機転送元が間違っていた場合、正しい送信元から通常のパケットが再送されてくるので、投機転送情報２６２の二重フラグ２６２３を立てる。
【０１６１】
（６）ステップＡ５０６
パケット投機転送取り消し処理部２１２は、投機送信先と投機送信元の両方が正しい場合、投機パケットをパケットバッファ２７から削除する。
【０１６２】
（７）ステップＡ５０７
また、パケット投機転送取り消し処理部２１２は、投機送信先が間違っていた場合、投機転送元が正しいか確認する。
【０１６３】
（８）ステップＡ５０８
パケット投機転送取り消し処理部２１２は、投機送信先と投機転送元の両方が間違っていた場合、正しい送信元から通常のパケットが再送されてくるので、投機転送情報の二重フラグ２６２３を立てる。
【０１６４】
（９）ステップＡ５０９
パケット投機転送取り消し処理部２１２は、パケット転送処理部２４を呼び出して、正しい送信先にパケットを送信する。
【０１６５】
（１０）ステップＡ５１０
その後、パケット投機転送取り消し処理部２１２は、キャンセルパケット送信処理部２１３を呼び出し、キャンセルパケットの送信処理を行う。
【０１６６】
（１１）ステップＡ５１１
その後、パケット投機転送取り消し処理部２１２は、投機転送情報２６２の投機中の情報を削除する。ここでは、パケット投機転送取り消し処理部２１２は、投機中フラグ２６２１を空に変更する。
【０１６７】
（１２）ステップＡ５１２
パケット投機転送取り消し処理部２１２は、投機転送を行っていなかった場合、投機パケットを受信したか確認する。なお、投機パケットを受信していない場合、何もしない。
【０１６８】
（１３）ステップ５１３
パケット投機転送取り消し処理部２１２は、投機パケットを受信していた場合、そのパケットをパケットバッファ２７から読み出す。
【０１６９】
（１４）ステップＡ５１４
パケット投機転送取り消し処理部２１２は、パケットバッファ２７から読み出したパケットについて、投機送信元が正しいか確認する。
【０１７０】
（１５）ステップＡ５１５
パケット投機転送取り消し処理部２１２は、投機送信元が正しい場合、パケット転送処理部２４を呼び出し、パケットを転送するための処理を行う。
【０１７１】
（１６）ステップＡ５１６
パケット投機転送取り消し処理部２１２は、投機送信元が間違っている場合、そのパケットをパケットバッファ２７から削除する。
【０１７２】
［パケット投機転送取り消し処理の変更例］
なお、上記の図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理において、ステップＡ５０４、Ａ５０５の処理と、ステップＡ５０７、Ａ５０８の処理は同じである。ここで、ステップＡ５０４、Ａ５０５の処理と、ステップＡ５０７、Ａ５０８の処理を共通化するため、ステップＡ５０３と、ステップＡ５０４（ステップＡ５０７）とを入れ替えても良い。
【０１７３】
例えば、ステップＡ５０２の処理の直後、ステップＡ５０４（ステップＡ５０７）の処理を行い、投機送信元が正しいか確認する。投機送信元が正しければ、そのままステップＡ５０３の処理に移行する。投機送信元が間違っていれば、ステップＡ５０５（ステップＡ５０８）で二重フラグを立ててから、ステップＡ５０３の処理に移行する。
【０１７４】
その後、ステップＡ５０３の処理を行い、投機送信先が正しいか確認する。投機送信先が正しければ、ステップＡ５０６の処理を行う。投機送信先が間違っていれば、ステップＡ５０９〜ステップＡ５１１の処理を行う。
【０１７５】
他の処理は、上記と同様である。
【０１７６】
［キャンセルパケット送信処理］
図１４を参照して、キャンセルパケット送信処理について説明する。
【０１７７】
（１）ステップＡ６０１
キャンセルパケット送信処理部２１３は、投機パケットを転送した投機転送先のネットワーク（ＮＷ）機器に、投機キャンセルパケットを送信する。
【０１７８】
［パケット転送処理］
図１５を参照して、パケット転送処理について説明する。
【０１７９】
（１）ステップＡ７０１
パケット転送処理部２４は、フローテーブル２６のエントリーの内容に従って、通常のパケットを送信する。
【０１８０】
［キャンセルパケット受信処理］
図１６を参照して、キャンセルパケット受信処理について説明する。キャンセルパケット受信処理部２１４は、受信した投機キャンセルパケットを処理する。
【０１８１】
（１）ステップＡ８０１
キャンセルパケット受信処理部２１４は、投機転送を行っていたかを確認する。
【０１８２】
（２）ステップＡ８０２
キャンセルパケット受信処理部２１４は、投機転送を行っていた場合、投機パケットをパケットバッファ２４から読み出す。
【０１８３】
（３）ステップＡ８０３
キャンセルパケット受信処理部２１４は、投機キャンセルパケットを投機送信先に転送する必要があるか確認するために、投機転送情報２６２に二重フラグ２６２３が立っているか確認する。
【０１８４】
なお、投機キャンセルパケットを受信するのは、投機送信元が間違っていたときであり、投機キャンセルパケットを送信しなければならないのは、投機送信元が間違っていたときである。従って、投機送信元と投機転送先の両方が間違っていたとき、投機キャンセルパケットを転送する必要がある。
【０１８５】
但し、コントローラ１０からの設定が来ていた場合は、パケット投機転送取り消し処理部２１２による処理が実行される。図１３ＡのステップＡ５１０で投機キャンセルパケットを送信済みである場合は、ステップＡ５０８で二重フラグ２６２３が設定されている。よって、二重フラグ２６２３が立っていた場合は、投機キャンセルパケットを転送する必要が無い。
【０１８６】
（４）ステップＡ８０４
キャンセルパケット受信処理部２１４は、二重フラグ２６２３が立っていなかった場合、投機転送先のネットワーク（ＮＷ）機器に投機キャンセルパケットを送信するために、キャンセルパケット送信処理部２１３を呼び出し、投機キャンセルパケットの送信処理を行う。
【０１８７】
（５）ステップＡ８０５
キャンセルパケット受信処理部２１４は、投機転送情報２６２の投機中の情報を削除する。ここでは、キャンセルパケット受信処理部２１４は、投機中フラグ２６２１を空に変更する。
【０１８８】
（６）ステップＡ８０６
キャンセルパケット受信処理部２１４は、投機パケットをパケットバッファ２７から削除する。
【０１８９】
（７）ステップＡ８０７
また、キャンセルパケット受信処理部２１４は、投機転送を行っていなかった場合、投機転送する前の投機パケットがパケットバッファ２７に保存されているため、この投機パケットをパケットバッファ２７から削除する。
【０１９０】
［二重パケット廃棄処理］
図１７を参照して、二重パケット廃棄処理について説明する。二重パケット廃棄処理部２１５は、二重パケットを処理する。
【０１９１】
（１）ステップＡ９０１
二重パケット廃棄処理部２１５は、受信したパケットを廃棄する。
【０１９２】
（２）ステップＡ９０２
二重パケット廃棄処理部２１５は、投機転送情報２６２から二重フラグ２６２３を落とす。なお、二重フラグ２６２３を落とすとは、二重フラグ２６２３のフラグが立っていない状態にすることである。
【０１９３】
＜実施例＞
以下に、本発明の実施例について説明する。
なお、以降の説明において、コントローラは、図６のコントローラ１０に相当する。また、ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆは、図６のネットワーク（ＮＷ）機器２０に相当する。
【０１９４】
［実施例１］
図１８に示すように、転送元ホスト（Ｈｏｓｔ）から、転送先ホストにデータを転送する時に、転送元ホストから、点線矢印に沿ってネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの順に投機転送された場合の投機的転送について説明する。
【０１９５】
（１）転送元ホスト  →  ネットワーク（ＮＷ）機器Ａ
転送元ホストは、ネットワーク（ＮＷ）機器Ａにパケットを転送する。ネットワーク（ＮＷ）機器Ａは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ａは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理において、パケットの種類を判別する。
【０１９６】
（２）ネットワーク（ＮＷ）機器Ａ  →  コントローラ
ネットワーク（ＮＷ）機器Ａは、パケットが通常のパケットで、エントリーが無いため、ステップＡ２０１、ステップＡ２０２からステップＡ２０６を実行して、コントローラにパケットを送信する。
【０１９７】
（３）ネットワーク（ＮＷ）機器Ａ  →  ネットワーク（ＮＷ）機器Ｂ
その後、ネットワーク（ＮＷ）機器Ａは、ステップＡ２０７でパケット投機転送処理部２１１を呼び出し、図１１のパケット投機転送処理において、ステップＡ３０１の投機先の選択処理で投機転送先を選ぶ。投機転送先にネットワーク（ＮＷ）機器Ｂを選んだとする。ステップＡ３０２、ステップＡ３０３、ステップＡ３０４、ステップＡ３０５と進む。投機転送先ネットワーク（ＮＷ）機器Ｂに投機転送を行う。また、ステップＡ３０６で投機パケットをパケットバッファ２７に保存し、フローテーブル２６の投機転送情報２６２に投機中フラグを立てる。
【０１９８】
（４）ネットワーク（ＮＷ）機器Ｂ  →  ネットワーク（ＮＷ）機器Ｃ
ネットワーク（ＮＷ）機器Ｂも、ネットワーク（ＮＷ）機器Ａと同じように、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｂは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理において、パケットの種類を判別する。受信したパケットは投機パケットなので、ステップＡ２０１、ステップＡ２０８、ステップＡ２０７と進む。ステップＡ２０７のパケット投機転送処理部２１１を呼び出し、図１１のパケット投機転送処理において、ステップＡ３０１の投機先の選択処理で投機転送先を選ぶ。投機転送先にネットワーク（ＮＷ）機器Ｄを選んだとする。ステップＡ３０２、ステップＡ３０３、ステップＡ３０４、ステップＡ３０５と進む。投機転送先ネットワーク（ＮＷ）機器Ｄに投機転送を行う。また、ステップＡ３０６で投機パケットをパケットバッファ２７に保存し、フローテーブル２６の投機転送情報２６２に投機中フラグを立てる。
【０１９９】
（５）ネットワーク（ＮＷ）機器Ｄ  →  ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｄも、ネットワーク（ＮＷ）機器Ｂと同様の処理を行う。ネットワーク（ＮＷ）機器Ｄは、ネットワーク（ＮＷ）機器Ｆに投機パケットを転送する。
【０２００】
（６）ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｆも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｆは、パケットを受信すると、図９のステップＡ１０２のパケット受信処理部２３を呼び出し、図１０のパケット受信処理において、パケットの種類を判別する。受信したパケットが投機パケットなので、ステップＡ２０１、ステップＡ２０８、ステップＡ２０７と進む。ステップＡ２０７でパケット投機転送処理部２１１を呼び出し、図１１のパケット投機転送処理において、ステップＡ３０１の投機先の選択処理で投機転送先を選ぶ。ネットワーク（ＮＷ）機器Ｆは、投機転送先に送信先ホストを選んだとする。ステップＡ３０２、ステップＡ３０３と進む。ステップＡ３０３でネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行かないか確認を行う。投機パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行くので、ステップＡ３０７で投機パケットはパケットバッファ２７に保存する。
【０２０１】
以上のように、投機的送信が行われる。
【０２０２】
［実施例２］
図１９にあるように、転送元ホストから、転送先ホストにデータを転送する時に、投機的にネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの順に投機転送を行い、投機転送が成功したときの場合について説明する。
【０２０３】
転送元ホストがネットワーク（ＮＷ）機器Ａにパケットを転送し、ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの順に投機転送を行うのは、前述の実施例１と同じである。
【０２０４】
なお、ネットワーク（ＮＷ）機器Ｆは、前述の実施例１に記載した通り、投機パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行くので、投機パケットをパケットバッファ２７に保存しており、投機転送を行っていない。
【０２０５】
（１）コントローラ  →  ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆ
コントローラは、１ｓｔパケットの宛先までの経路を計算し、コントローラのネットワーク（ＮＷ）機器制御部１２でネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの制御を行う。
【０２０６】
（２）ネットワーク（ＮＷ）機器Ａ
ネットワーク（ＮＷ）機器Ａは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ａは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ａは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機パケットの成否を判定する。投機送信先が正しかったので、投機転送は成功と判定し、パケットバッファ２７に保留していた投機パケットを削除する。
【０２０７】
（３）ネットワーク（ＮＷ）機器Ｂ
ネットワーク（ＮＷ）機器Ｂも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｂは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ｂは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機パケットの成否を判定する。投機送信先が正しかったので、投機転送は成功と判定し、パケットバッファ２７に保留していた投機パケットを削除する。
【０２０８】
（４）ネットワーク（ＮＷ）機器Ｄ
ネットワーク（ＮＷ）機器Ｄも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｄは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ｄは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機パケットの成否を判定する。投機送信先が正しかったので、投機転送は成功と判定し、パケットバッファ２７に保留していた投機パケットを削除する。
【０２０９】
（５）ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｆも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｆは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ｆは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理では、投機転送処理を行っておらず、投機パケットを受信しているので、ステップＡ５１４で投機パケットの投機転送元が正しいか判定し、正しいので、ステップＡ５１５でパケット転送処理を呼び出し、図１５のパケット転送処理を行い、送信先ホストにパケットを転送する。
【０２１０】
［実施例３］
図２０にあるように、転送元ホストから、転送先ホストにデータを転送する時に、投機的にネットワーク（ＮＷ）機器Ａ、Ｃ、Ｅ、Ｆの順に投機転送し、投機転送が失敗したときの状況を例に説明する。
【０２１１】
ここでは、先に、転送元ホストがネットワーク（ＮＷ）機器Ａにパケットを転送し、ネットワーク（ＮＷ）機器Ａ、Ｃ、Ｅ、Ｆの順に投機転送を行ったものとする。
【０２１２】
なお、ネットワーク（ＮＷ）機器Ｆは、前述の実施例１に記載した通り、投機パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行くので、投機パケットをパケットバッファ２７に保存しており、投機転送を行っていない。
【０２１３】
（１）コントローラ  →  ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆ
コントローラは、１ｓｔパケットの宛先までの経路を計算し、コントローラのネットワーク（ＮＷ）機器制御部１２でネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの制御を行う。
【０２１４】
（２）ネットワーク（ＮＷ）機器Ａ
ネットワーク（ＮＷ）機器Ａは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ａは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ａは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で投機パケットの成否を判定する。投機送信先が異なっていたので、投機転送は失敗と判定し、ステップＡ５０９でパケット転送処理部２４を呼び出し、ネットワーク（ＮＷ）機器Ｂに通常のパケットを送信する。
【０２１５】
（３）ネットワーク（ＮＷ）機器Ａ  →  ネットワーク（ＮＷ）機器Ｃ
その後、ネットワーク（ＮＷ）機器Ａは、ステップＡ５１０でキャンセルパケット送信処理部２１３を呼び出し、図１４のキャンセルパケット送信処理を実行し、投機キャンセルパケットをネットワーク（ＮＷ）機器Ｃに転送し、投機中フラグ２６２１を落とす。
【０２１６】
（４）ネットワーク（ＮＷ）機器Ｂ
ネットワーク（ＮＷ）機器Ｂも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｂは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機転送処理を行っておらず、投機パケットを受信していないので、ステップＡ５０１からステップＡ５１３と処理して終了する。その後、ネットワーク（ＮＷ）機器Ｂは、ネットワーク（ＮＷ）機器Ａからの通常のパケットを受信して、フローテーブル２６に従って転送する。
【０２１７】
（５）ネットワーク（ＮＷ）機器Ｄ
ネットワーク（ＮＷ）機器Ｄも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｄは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機転送処理を行っておらず、投機パケットを受信していないので、ステップＡ５０１からステップＡ５１３と処理して終了する。その後、ネットワーク（ＮＷ）機器Ｄは、ネットワーク（ＮＷ）機器Bからの通常のパケットを受信して、フローテーブル２６に従って転送する。
【０２１８】
（６）ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｆも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｆは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機転送処理を行っておらず、投機パケットを受信しているので、ステップＡ５１４で投機パケットの投機転送元が正しいか判定し、間違っているので、ステップＡ５１６で投機パケットを削除する。
【０２１９】
（７）ネットワーク（ＮＷ）機器Ｆ  →  転送先ホスト
その後、ネットワーク（ＮＷ）機器Ｆは、ネットワーク（ＮＷ）機器Ｄからの通常のパケットを受信して、パケット転送処理で転送先ホストに通常のパケットを送信する。
【０２２０】
（８）ネットワーク（ＮＷ）機器Ｃ
ネットワーク（ＮＷ）機器Ｃも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｃは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ａからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行する。ネットワーク（ＮＷ）機器Ｃは、ステップＡ８０３で二重フラグ２６２３は立っていないので、ステップＡ８０４でキャンセルパケット送信処理部２１３を呼び出し、投機キャンセルパケットをネットワーク（ＮＷ）機器Ｅに転送する。その後、パケットバッファ２７に保留していた投機パケットを削除する。
【０２２１】
（９）ネットワーク（ＮＷ）機器Ｅ
ネットワーク（ＮＷ）機器Ｅも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｅは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ａからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行する。ネットワーク（ＮＷ）機器Ｅは、ステップＡ８０３で二重フラグ２６２３は立っていないので、ステップＡ８０４でキャンセルパケット送信処理部２１３を呼び出し、投機キャンセルパケットをネットワーク（ＮＷ）機器Fに転送する。その後、パケットバッファ２７に保留していた投機パケットを削除する。
【０２２２】
（１０）ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｆは、図９のように、処理を待っている。パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ｅからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行し、パケットバッファ２７に保留していた投機パケットを削除する。
【０２２３】
［実施例４］
図２１にあるように、転送元ホストから、転送先ホストにデータを転送する時に、投機的にネットワーク（ＮＷ）機器Ａ、Ｂ、Ｃ、Ｅ、Ｄ、Ｆの順に投機転送し、投機転送の途中が失敗したときの状況を例に説明する。
【０２２４】
ここでは、先に、転送元ホストがネットワーク（ＮＷ）機器Ａにパケットを転送し、ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｃ、Ｅ、Ｄ、Ｆの順に投機転送したものとする。
【０２２５】
なお、ネットワーク（ＮＷ）機器Ｆは、前述の実施例１に記載した通り、投機パケットがネットワーク（ＮＷ）機器で構成されたネットワーク（ＮＷ）から出て行くので、投機パケットをパケットバッファ２７に保存しており、投機転送を行っていない。
【０２２６】
（１）コントローラ  →  ネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆ
コントローラは、１ｓｔパケットの宛先までの経路を計算し、コントローラのネットワーク（ＮＷ）機器制御部１２でネットワーク（ＮＷ）機器Ａ、Ｂ、Ｄ、Ｆの制御を行う。
【０２２７】
（２）ネットワーク（ＮＷ）機器Ａ
ネットワーク（ＮＷ）機器Ａは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ａは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ａは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で、投機パケットの成否を判定する。投機送信先が正しかったので、投機転送は成功と判定し、パケットバッファ２７に保留していた投機パケットを削除する。
【０２２８】
（３）ネットワーク（ＮＷ）機器Ｂ
ネットワーク（ＮＷ）機器Ｂは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｂは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ｂは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理で投機パケットの成否を判定する。投機送信先が異なっていたので、投機転送は失敗と判定し、ステップＡ５０９でパケット転送処理部２４を呼び出し、ネットワーク（ＮＷ）機器Ｄに通常のパケットを送信する。その後、ネットワーク（ＮＷ）機器Ｂは、ステップＡ５１０でキャンセルパケット送信処理部２１３を呼び出し、図１４のキャンセルパケット送信処理を実行し、投機キャンセルパケットをネットワーク（ＮＷ）機器Ｃに転送し、投機中フラグ２６２１を落とす。
【０２２９】
（４）ネットワーク（ＮＷ）機器Ｃ
ネットワーク（ＮＷ）機器Ｃも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｃは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ａからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行する。ネットワーク（ＮＷ）機器Ｃは、ステップＡ８０３で二重フラグ２６２３は立っていないので、ステップＡ８０４でキャンセルパケット送信処理部２１３を呼び出し、投機キャンセルパケットをネットワーク（ＮＷ）機器Ｅに転送する。その後、パケットバッファ２７に保留していた投機パケットを削除する。
【０２３０】
（５）ネットワーク（ＮＷ）機器Ｅ
ネットワーク（ＮＷ）機器Ｅも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｅは、パケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ａからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行する。ネットワーク（ＮＷ）機器Ｅは、ステップＡ８０３で二重フラグ２６２３は立っていないので、ステップＡ８０４でキャンセルパケット送信処理部２１３を呼び出し、投機キャンセルパケットをネットワーク（ＮＷ）機器Ｄに転送する。その後、パケットバッファ２７に保留していた投機パケットを削除する。
【０２３１】
（６）ネットワーク（ＮＷ）機器Ｄ（Ｅ  →  Ｄの場合）
ネットワーク（ＮＷ）機器Ｄは、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｄは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理において、投機転送先が正しく、投機転送元が間違っているので、ステップＡ５０１、ステップＡ５０２、ステップＡ５０３、ステップＡ５０４の処理を実行し、ステップＡ５０５で投機転送情報２６２に二重フラグ２６２３を立てる処理を行う。その後に、ネットワーク（ＮＷ）機器Ｄは、ネットワーク（ＮＷ）機器Ｅからのパケットを受信すると、図９のステップＡ１０２でパケット受信処理部２３を呼び出し、図１０のパケット受信処理でネットワーク（ＮＷ）機器Ｅからの投機キャンセルパケットを受信したと判定し、図１６のキャンセルパケット受信処理を実行する。ネットワーク（ＮＷ）機器Ｄは、ステップＡ８０３で二重フラグ２６２３が立っているので、ステップＡ８０５で投機中フラグ２６２１を空に変更し、ステップＡ８０６でパケットバッファ２７に保留していた投機パケットを削除する。
【０２３２】
（７）ネットワーク（ＮＷ）機器Ｄ（Ｂ  →  Ｄの場合）
その後、ネットワーク（ＮＷ）機器Ｄは、ネットワーク（ＮＷ）機器Ｂからの通常のパケットを受信して、図１０のステップＡ２０３で二重フラグ２６２３のチェックを行い、ステップＡ２０４の二重パケット廃棄処理部２１５を呼び出し、図１７の二重パケット廃棄処理のステップＡ１０１で受信したパケットを削除し、ステップＡ１０２で二重フラグ２６２３を落とす。
【０２３３】
（８）ネットワーク（ＮＷ）機器Ｆ
ネットワーク（ＮＷ）機器Ｆも、図９のように、処理を待っている。ネットワーク（ＮＷ）機器Ｆは、コントローラから制御が行われると、図９のステップＡ１０４でフローテーブル更新処理部２５を呼び出し、フローテーブル２６を設定する。その後に、ネットワーク（ＮＷ）機器Ｆは、ステップＡ１０５でパケット投機転送取り消し処理部２１２を呼び出し、図１３Ａ及び図１３Ｂのパケット投機転送取り消し処理では、投機転送処理を行っておらず、投機パケットを受信しているので、ステップＡ５１４で投機パケットの投機転送元が正しいか判定し、正しいので、ステップＡ５１５でパケット転送処理を呼び出し、図１５のパケット転送処理を行い、送信先ホストにパケットを転送する。
【０２３４】
＜本実施形態による効果＞
上記のように、投機転送に失敗した場合に、パケット投機転送取り消し処理を行うことで、ネットワークの外に転送する前に、投機パケットを取り消すことができるようになる。
【０２３５】
また、投機キャンセルパケットを受信すると、投機転送によるネットワーク（ＮＷ）機器内部の変更を元に戻す。投機転送がネットワークの内外に影響を与えないので、パケット転送を投機的に行うことができる。
【０２３６】
これにより、パケット転送と経路制御の機能が分離されたネットワーク機器で構成されるネットワークにおいて、パケット転送を投機的に行うことができ、転送遅延を少なくできる。
【０２３７】
また、パケット転送と経路制御の機能が分離されたネットワーク（ＮＷ）機器で構成されるネットワークにおいて、複数のコントローラをまたぐ通信が発生する場合における１ｓｔパケット処理の際、コントローラ間で経路内のネットワーク（ＮＷ）機器のフローテーブル更新指示と同期待ち合わせの必要が無くなり、パケット転送の遅延を回避でき、ネットワーク性能が向上する。
【０２３８】
＜第２実施形態＞
次に、本発明の第２実施形態について詳細に説明する。
本実施形態では、投機キャンセルパケットに１ｓｔパケット自体の情報を持たせる代わりに、１ｓｔパケット毎に一意の値を用いる。この値により、該当する１ｓｔパケットを含む投機パケットを特定し、投機パケットと投機キャンセルパケットを対応付ける。
【０２３９】
例えば、送信元のネットワーク（ＮＷ）機器は、１ｓｔパケット毎に一意の値を投機キャンセルパケットに付加し、この投機キャンセルパケットを送信する。送信先のネットワーク（ＮＷ）機器は、投機キャンセルパケットを受信すると、この値をキーとして、該当する１ｓｔパケットを含む投機パケットを特定し、その投機パケットを削除する。このとき、送信先のネットワーク（ＮＷ）機器は、この値をキーとして、投機パケットと投機キャンセルパケットを照合するようにしても良い。
【０２４０】
なお、１ｓｔパケット毎に一意の値の例として、以下のような値が考えられる。
（１）パケットのデータを基にハッシュ関数によって計算した値。例えば、ｍｄ５、ｓｈａ１等のハッシュ関数、又はこれらを組み合わせたもの。
（２）１ｓｔパケット毎のシーケンシャルな番号。例えば、パケットの到着順に与えられた番号。
（３）確率的にネットワークシステム内において一意の値と見なせるだけの大きさを持つランダムな値。例えば、ＵＵＩＤ（Ｕｎｉｖｅｒｓａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ：汎用一意識別子）。
【０２４１】
このように、投機キャンセルパケットに対応する投機パケットを判別するために、１ｓｔパケットを使用する代わりに１ｓｔパケット毎に一意の値を用いることで、投機キャンセルパケットのサイズを小さくし、投機キャンセルパケットに対応する投機パケットの判別に要する時間を短くすることができる。
【０２４２】
＜第３実施形態＞
次に、本発明の第３実施形態について詳細に説明する。
本実施形態では、図８の投機転送情報２６２をフローテーブル２６から分離する。すなわち、投機転送情報２６２を、フローテーブル２６とは別の情報として保持する。このとき、投機転送情報２６２は、エントリー２６１に対応付けるための情報を有すると好適である。なお、投機転送情報２６２自体が、エントリー２６１の内容を含んでいても良い。
【０２４３】
上記の各実施形態では、エントリー２６１と投機転送情報２６２が対応付けられてフローテーブル２６に設定されるため、投機転送情報２６２を変更する場合、フローテーブル２６を更新する必要がある。また、エントリー毎に投機転送情報を設定する必要がある。
【０２４４】
本実施形態では、投機転送情報２６２が、フローテーブル２６とは別の独立した情報として保持されているため、投機転送情報２６２の変更が容易である。また、複数のエントリー２６１が、１つの投機転送情報２６２を共有することもできる。また、既存のオープンフロー対応のネットワーク（ＮＷ）機器に対して、既存のフローテーブルを残したまま、本発明を適用することができる。
【０２４５】
なお、上記の各実施形態は、組み合わせて実施することも可能である。
【０２４６】
＜本発明の特徴＞
本発明は、オープンフロー（ＯｐｅｎＦｌｏｗ）に代表されるような、制御機能を外部のコントローラとして分離したネットワーク（ＮＷ）機器で構成されるネットワークを対象とする。
【０２４７】
本発明では、各ネットワーク（ＮＷ）機器が、経路情報を管理するフローテーブルに経路情報が無いパケットを投機的に転送し、外部ネットワークに送信する直前で保留する。
【０２４８】
本発明では、投機的な転送の成否をコントローラからのフローテーブルの設定によって判定する。
【０２４９】
本発明では、投機的な転送に失敗したと判定した場合に投機キャンセルパケットを送ることによって、投機的に転送したパケットを取り消す。
【０２５０】
本発明では、投機的に転送したパケットを経由した全てのネットワーク（ＮＷ）機器で保持しておき、投機的な転送に失敗したと判定した場合に、転送先を間違えたネットワーク（ＮＷ）機器からパケットを送り直す（再送する）。
【０２５１】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【０２５２】
１０…  コントローラ
１１…  経路計算部
１２…  ネットワーク（ＮＷ）機器制御部
２０…  ネットワーク（ＮＷ）機器
２１…  投機転送処理部
２１１…  パケット投機送信処理部
２１２…  パケット投機送信取り消し処理部
２１３…  キャンセルパケット送信処理部
２１４…  キャンセルパケット受信処理部
２１５…  二重パケット廃棄処理部
２２…  ネットワーク（ＮＷ）機器基本処理部
２３…  パケット受信処理部
２４…  パケット転送処理部
２５…  フローテーブル更新処理部
２６…  フローテーブル
２６１…  エントリー
２６２…  投機転送情報
２６２１…  投機中フラグ
２６２２…  ＮＷ情報
２６２３…  二重フラグ
２７…  パケットバッファ
【図１】
0005521614.tif 000002
【図２】
0005521614.tif 000003
【図３】
0005521614.tif 000004
【図４】
0005521614.tif 000005
【図５】
0005521614.tif 000006
【図６】
0005521614.tif 000007
【図７】
0005521614.tif 000008
【図８】
0005521614.tif 000009
【図９】
0005521614.tif 000010
【図１０】
0005521614.tif 000011
【図１１】
0005521614.tif 000012
【図１２】
0005521614.tif 000013
【図１３Ａ】
0005521614.tif 000014
【図１３Ｂ】
0005521614.tif 000015
【図１４】
0005521614.tif 000016
【図１５】
0005521614.tif 000017
【図１６】
0005521614.tif 000018
【図１７】
0005521614.tif 000019
【図１８】
0005521614.tif 000020
【図１９】
0005521614.tif 000021
【図２０】
0005521614.tif 000022
【図２１】
0005521614.tif 000023