(57)【特許請求の範囲】
【請求項１】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う複数のスイッチと、
前記複数のスイッチの各々に対して、前記フローエントリの設定を行うコントローラと
を含み、
前記各スイッチは、送信元ホストからＳＹＮパケットを受信した場合、前記コントローラに経路計算を要求し、前記コントローラによる前記経路計算の結果、自身が通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行い、前記コントローラによる前記経路計算の結果、自身が前記通信経路上の先頭スイッチではない場合、先頭スイッチと前記送信先ホストとの間で行われる代理ＴＣＰ接続のためのＳＹＮパケットを転送する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記コントローラは、前記通信経路上の先頭スイッチに対して、先頭スイッチである旨を示す値が指定されたフローエントリを設定し、
前記各スイッチは、前記フローエントリを参照し、前記フローエントリに、前記通信経路上の先頭スイッチである旨を示す値が指定されている場合、自身が前記通信経路上の先頭スイッチであると判断する
ネットワークシステム。
【請求項３】
請求項１又は２に記載のネットワークシステムであって、
前記各スイッチは、前記送信元ホストからＳＹＮパケットを受信した場合、前記送信元ホストとの代理ＴＣＰ接続を試行し、前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に成功した場合、前記コントローラに該ＳＹＮパケットを転送し、該ＳＹＮパケットの経路計算を要求し、前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、該ＳＹＮパケットを廃棄する
ネットワークシステム。
【請求項４】
請求項１又は２に記載のネットワークシステムであって、
前記各スイッチは、前記送信元ホストからＳＹＮパケットを受信した場合、前記コントローラに該ＳＹＮパケットを転送し、前記送信元ホストとの代理ＴＣＰ接続を試行し、前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に成功した場合、前記コントローラに該ＳＹＮパケットの経路計算を要求し、前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、前記コントローラに該ＳＹＮパケットの廃棄を要求する
ネットワークシステム。
【請求項５】
請求項１乃至４のいずれか一項に記載のネットワークシステムであって、
前記各スイッチは、前記送信元ホストと前記送信先ホストとの間が疑似的に直接ＴＣＰ接続されるように、前記送信元ホストと前記送信先ホストとの間の通信パケットの受信時に、該通信パケットのＴＣＰヘッダの確認応答番号とシーケンス番号とを変更する
ネットワークシステム。
【請求項６】
請求項１乃至５のいずれか一項に記載のネットワークシステムであって、
前記複数のスイッチの中で前記通信経路上にある先頭スイッチは、前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、前記送信元ホストからのパケットの受信回数をカウントし、前記受信回数が予め設定した閾値に達した場合、前記送信元ホストとの代理ＴＣＰ接続を一定時間拒否する
ネットワークシステム。
【請求項７】
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う手段と、
送信元ホストからＳＹＮパケットを受信した場合、前記フローエントリの設定を行うコントローラに経路計算を要求する手段と、
前記コントローラによる前記経路計算の結果、自身が通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行う手段と、
前記コントローラによる前記経路計算の結果、自身が前記通信経路上の先頭スイッチではない場合、先頭スイッチと前記送信先ホストとの間で行われる代理ＴＣＰ接続のためのＳＹＮパケットを転送する手段と
を具備する
スイッチ。
【請求項８】
請求項７に記載のスイッチであって、
前記フローエントリを参照し、前記フローエントリに、前記通信経路上の先頭スイッチである旨を示す値が指定されている場合、自身が前記通信経路上の先頭スイッチであると判断する手段
を更に具備する
スイッチ。
【請求項９】
請求項７又は８に記載のスイッチであって、
前記送信元ホストからＳＹＮパケットを受信した場合、前記送信元ホストとの代理ＴＣＰ接続を試行する手段と、
前記送信元ホストとの代理ＴＣＰ接続に成功した場合、前記コントローラに該ＳＹＮパケットを転送し、該ＳＹＮパケットの経路計算を要求する手段と、
前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、該ＳＹＮパケットを廃棄する手段と
を更に具備する
スイッチ。
【請求項１０】
請求項７又は８に記載のスイッチであって、
前記送信元ホストからＳＹＮパケットを受信した場合、前記コントローラに該ＳＹＮパケットを転送する手段と、
前記送信元ホストとの代理ＴＣＰ接続を試行する手段と、
前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に成功した場合、前記コントローラに該ＳＹＮパケットの経路計算を要求する手段と、
前記試行の結果、前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、前記コントローラに該ＳＹＮパケットの廃棄を要求する手段と
を更に具備する
スイッチ。
【請求項１１】
請求項７乃至１０のいずれか一項に記載のスイッチであって、
前記送信元ホストと前記送信先ホストとの間が疑似的に直接ＴＣＰ接続されるように、前記送信元ホストと前記送信先ホストとの間の通信パケットの受信時に、該通信パケットのＴＣＰヘッダの確認応答番号とシーケンス番号とを変更する手段
を更に具備する
スイッチ。
【請求項１２】
請求項７乃至１１のいずれか一項に記載のスイッチであって、
自身が前記通信経路上の先頭スイッチであり、かつ前記送信元ホストとの代理ＴＣＰ接続に失敗した場合、前記送信元ホストからのパケットの受信回数をカウントする手段と、
自身が前記通信経路上の先頭スイッチであり、かつ前記受信回数が予め設定した閾値に達した場合、前記送信元ホストとの代理ＴＣＰ接続を一定時間拒否する手段と
を更に具備する
スイッチ。
【請求項１３】
ネットワークシステムにおいて実施される通信遅延短縮方法であって、
複数のスイッチの各々が、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うことと、
前記複数のスイッチのうち、送信元ホストからＳＹＮパケットを受信したスイッチが、前記フローエントリの設定を行うコントローラに経路計算を要求することと、
前記コントローラによる前記経路計算の結果、前記複数のスイッチのうち、通信経路上の先頭スイッチが、送信先ホストとの代理ＴＣＰ接続を行うことと、
前記コントローラによる前記経路計算の結果、前記複数のスイッチのうち、前記通信経路上の先頭スイッチ以外のスイッチが、先頭スイッチと前記送信先ホストとの間で行われる代理ＴＣＰ接続のためのＳＹＮパケットを転送することと
を含む
通信遅延短縮方法。
【請求項１４】
スイッチとして使用される計算機に実行させるためのプログラムであって、
前記プログラムは、
パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うステップと、
送信元ホストからＳＹＮパケットを受信した場合、前記フローエントリの設定を行うコントローラに経路計算を要求するステップと、
前記コントローラによる前記経路計算の結果、前記スイッチが通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行うステップと、
前記スイッチが前記通信経路上の先頭スイッチではない場合、先頭スイッチと前記送信先ホストとの間で行われる代理ＴＣＰ接続のためのＳＹＮパケットを転送するステップと
を有する
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークシステムに関し、特にネットワークシステムにおける通信遅延短縮方法に関する。
【背景技術】
【０００２】
従来のネットワーク機器はブラックボックスであり、外部から負荷分散や片寄等柔軟性に富んだ制御ができない。このため、ネットワークの規模が大きくなると、システムとしての挙動の把握と改善が困難になり、設計や構成変更には多大なコストを伴うことが問題であった。
【０００３】
こうした課題を解決するための技術として、ネットワーク機器のパケット転送機能と経路制御機能を分離する手法が考えられている。例えば、パケット転送機能をネットワーク機器が担当し、経路制御機能をネットワーク機器の外部に分離した制御装置が担当することで、制御が容易になり柔軟性に富んだネットワークを構築することが可能になる。
【０００４】
［ＣＤ分離型ネットワークの説明］
機能を分離したネットワークの１つとして、コントロールプレーン側の制御装置からデータプレーン側のノード装置を制御するＣＤ（Ｃ：コントロールプレーン／Ｄ：データプレーン）分離型ネットワークが提案されている。
【０００５】
ＣＤ分離型ネットワークの一例として、コントローラからスイッチを制御してネットワークの経路制御を行うオープンフロー（ＯｐｅｎＦｌｏｗ）技術を利用したオープンフローネットワークが挙げられる。オープンフロー技術の詳細については、非特許文献１に記載されている。なお、オープンフローネットワークは一例に過ぎない。
【０００６】
［オープンフローネットワークの説明］
オープンフローネットワークでは、制御装置に相当するオープンフローコントローラ（ＯＦＣ：ＯｐｅｎＦｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）が、ノード装置に相当するオープンフロースイッチ（ＯＦＳ：ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ）の経路制御に関するフローテーブルを操作することにより、オープンフロースイッチ（ＯＦＳ）の挙動を制御する。
【０００７】
以下、記載の簡略化のため、オープンフローコントローラ（ＯＦＣ）を「コントローラ（ＯＦＣ）」と表記し、オープンフロースイッチ（ＯＦＳ）を「スイッチ（ＯＦＳ）」と表記する。
【０００８】
コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）の間は、専用線やＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）等により保護された通信路である「セキュアチャンネル」セキュアチャンネル（Ｓｅｃｕｒｅ  Ｃｈａｎｎｅｌ）により接続されている。コントローラ（ＯＦＣ）とスイッチ（ＯＦＳ）とは、セキュアチャンネルを介して、オープンフロー規約（ＯｐｅｎＦｌｏｗ  Ｐｒｏｔｏｃｏｌ）に準拠したオープンフローメッセージ（ＯｐｅｎＦｌｏｗ  Ｍｅｓｓａｇｅ）を送受信する。
【０００９】
オープンフローネットワークにおけるスイッチ（ＯＦＳ）とは、オープンフローネットワークを形成し、コントローラ（ＯＦＣ）の制御下にあるエッジスイッチ及びコアスイッチのことである。オープンフローネットワークにおける入力側エッジスイッチ（Ｉｎｇｒｅｓｓ）でのパケット（ｐａｃｋｅｔ）の受信（流入）から出力側エッジスイッチ（Ｅｇｒｅｓｓ）での送信（流出）までのパケットの一連の流れをフロー（Ｆｌｏｗ）と呼ぶ。
【００１０】
パケットは、フレーム（ｆｒａｍｅ）と読み替えても良い。パケットとフレームの違いは、プロトコルが扱うデータの単位（ＰＤＵ：Ｐｒｏｔｏｃｏｌ  Ｄａｔａ  Ｕｎｉｔ）の違いに過ぎない。パケットは、「ＴＣＰ／ＩＰ」（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）のＰＤＵである。一方、フレームは、「Ｅｔｈｅｒｎｅｔ（登録商標）」のＰＤＵである。
【００１１】
フローテーブルとは、フローとして扱うパケットを特定するための判別条件（ルール）と、パケットがルールに適合（マッチ）した回数を示す統計情報と、パケットに対して行うべき処理内容（アクション）の組を定義したフローエントリ（Ｆｌｏｗ  ｅｎｔｒｙ）の集合である。
【００１２】
フローエントリのルールは、パケットのヘッダ領域（フィールド）に含まれる各プロトコル階層の情報のいずれか又は全てを用いた様々な組み合わせにより定義され、区別可能である。各プロトコル階層の情報の例として、送信先アドレス（Ｄｅｓｔｉｎａｔｉｏｎ  Ａｄｄｒｅｓｓ）、送信元アドレス（Ｓｏｕｒｃｅ  Ａｄｄｒｅｓｓ）、送信先ポート（Ｄｅｓｔｉｎａｔｉｏｎ  Ｐｏｒｔ）、送信元ポート（Ｓｏｕｒｃｅ  Ｐｏｒｔ）等が考えられる。なお、上記のアドレスには、ＭＡＣアドレス（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ａｄｄｒｅｓｓ）やＩＰアドレス（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  Ａｄｄｒｅｓｓ）を含むものとする。また、上記に加えて、入口ポート（Ｉｎｇｒｅｓｓ  Ｐｏｒｔ）の情報も、フローエントリのルールとして使用可能である。また、フローエントリのルールとして、フローとして扱うパケットのヘッダ領域の値の一部（又は全部）を、正規表現やワイルドカード「＊」等で表現したものを設定することもできる。
【００１３】
フローエントリのアクションは、「パケットを特定のポートに出力／転送する」、「パケットを破棄／廃棄する（削除する）」、「パケットのヘッダを書き換える」といった動作を示す。例えば、スイッチ（ＯＦＳ）は、フローエントリのアクションに出力ポートの識別情報（出力ポート番号等）が示されていれば、これに該当するポートにパケットを出力し、出力ポートの識別情報が示されていなければ、パケットを破棄する。或いは、スイッチ（ＯＦＳ）は、フローエントリのアクションにヘッダ情報が示されていれば、当該ヘッダ情報に基づいてパケットのヘッダを書き換える。
【００１４】
スイッチ（ＯＦＳ）は、フローエントリのルールに適合するパケット群（パケット系列）に対して、フローエントリのアクションを実行する。具体的には、スイッチ（ＯＦＳ）は、パケットを受信すると、フローテーブルから、受信パケットのヘッダ情報に適合するルールを持つフローエントリを検索する。検索の結果、受信パケットのヘッダ情報に適合するルールを持つフローエントリが見つかった場合、当該フローエントリの統計情報を更新すると共に、受信パケットに対して、当該フローエントリのアクションとして指定された動作を実施する。一方、検索の結果、受信パケットのヘッダ情報に適合するルールを持つフローエントリが見つからなかった場合、当該受信パケットを最初のパケット（ｆｉｒｓｔ  ｐａｃｋｅｔ）と判断し、制御チャネルを介して、オープンフローネットワークにおけるコントローラ（ＯＦＣ）に対して、受信パケット（又はそのコピー）を転送し、受信パケットの送信元・送信先（宛先）等に基づいたパケットの経路計算を要求し、応答としてフローエントリの設定用メッセージを受信し、フローテーブルを更新する。
【００１５】
なお、フローテーブルには、低い優先度で、全てのパケットのヘッダ情報に適合するルールを持つデフォルトエントリが登録されている。受信パケットに適合するフローエントリが他に見つからなかった場合、受信パケットは、このデフォルトエントリに適合する。デフォルトエントリのアクションは、「コントローラ（ＯＦＣ）への当該受信パケットの問い合わせ情報の送信」である。
【００１６】
［オープンフローネットワークのセキュリティ対応］
近年、ネットワーク機器の増加に伴うネットワーク管理コストの増加やネットワーク構成変更の柔軟性が低いことが問題視されており、この問題を解決する技術としてオープンフロー技術が生み出された。
【００１７】
オープンフロー技術により、パケットの経路を計算・設定する処理をコントローラ（ＯＦＣ）に集中させることで、既存のネットワークよりも管理や構成変更のコストを削減したオープンフローネットワークを構成することができる。
【００１８】
しかし、このオープンフローネットワークにおいては、現状では「ＳＹＮ  Ｆｌｏｏｄ」攻撃と呼ばれるＤｏＳ攻撃（Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ  ａｔｔａｃｋ）への対応が考慮されていない。
【００１９】
Ｄｏｓ攻撃の一般的な攻撃の１つである「ＳＹＮ  Ｆｌｏｏｄ」攻撃は、攻撃者がＴＣＰ接続の手順を中途半端な状態で中止することでサーバのリソースを枯渇させる攻撃である。クライアントとサーバとの間でＴＣＰ接続を確立するには、クライアントがサーバに「ＳＹＮパケット」を送信し、サーバがクライアントに「ＡＣＫパケット」を返信し、最後にクライアントがＡＣＫパケットを送り返すという手順を踏む。最後のＡＣＫパケットが届くまでサーバ側は「応答待ち」状態のまま待機することになり、その接続のために用意されたメモリ領域等のリソースを開放できなくなる。悪意のある攻撃者が大量のＳＹＮパケットを送信し、故意にＡＣＫパケットを送らずに放置すると、そのうちサーバ側の「応答待ち」の接続数が限界を超え、新たに接続を受け付けられない状態になる。
【００２０】
既存のネットワークをオープンフローネットワークに置換する場合、「ＳＹＮ  Ｆｌｏｏｄ」攻撃への対応を行う必要があるが、既存のネットワークにおける既存の防御手法をそのままオープンフローネットワークに適用するのは困難である。その理由について、以下に詳細に説明する。
【００２１】
［既存の防御手法］
まず、「ＳＹＮ  Ｆｌｏｏｄ」攻撃に対する既存の防御手法について説明する。
【００２２】
防御手法としては、大きく分けて２種類の手法がある。１つは攻撃対象とされるサーバ側の防御手法である。もう１つは攻撃パケットを転送するネットワーク機器側の防御手法である。
【００２３】
（１）サーバ側の防御手法
サーバ側の防御手法には、「ＳＹＮ  ｃｏｏｋｉｅｓ」や「ＳＹＮ  ｃａｃｈｅ」等が従来技術として存在する。
【００２４】
（２）ネットワーク機器側の防御手法
ネットワーク機器側の防御手法には、パケットの内容によって、受信したパケットの転送先を決定するルータ（Ｒｏｕｔｅｒ）やロードバランサ（Ｌｏａｄ  Ｂａｌａｎｃｅｒ）等のネットワーク機器が、攻撃対象のサーバの代わりに、パケットの送信元ホストとのＴＣＰ接続（代理ＴＣＰ接続）を行い、不正な接続やパケットを検知して防御するという手法が従来技術として存在する。
【００２５】
但し、これらの防御手法をオープンフローネットワークに適用しようとした場合、サーバ側の防御手法及びネットワーク機器側の防御手法のいずれにおいても、以下のように新たな課題が発生する。
【００２６】
（１）サーバ側の防御手法を用いた場合
オープンフローネットワークにおいては、ネットワーク機器に相当するスイッチ（ＯＦＳ）自身が管理しているパケットの転送先を決めるための経路情報であるフローエントリに合致しないパケットを受信すると、コントローラ（ＯＦＣ）に経路計算と設定を要求するために、パケットをコントローラ（ＯＦＣ）へ転送する。そのため、パケットの転送処理を行うスイッチ（ＯＦＳ）が大量の攻撃パケットを受信した場合、コントローラ（ＯＦＣ）に大量の攻撃パケットを転送するため、コントローラ（ＯＦＣ）の負荷が高くなり、適切にパケットを処理できなくなる可能性がある。
【００２７】
（２）ネットワーク機器側の防御手法を用いた場合
オープンフローネットワークにおいても、既存の防御手法と同様に、パケットの送信先ホスト（サーバ）の代理として、ネットワーク機器に相当するスイッチ（ＯＦＳ）がパケットの送信元ホストとの代理ＴＣＰ接続を行い、更に、送信先ホストとも代理ＴＣＰ接続を行う必要がある。しかし、通信経路上に複数のスイッチ（ＯＦＳ）がある場合、各スイッチ（ＯＦＳ）は、受信したパケットが、送信元ホスト及び送信先ホストの各々と既に代理ＴＣＰ接続が行われた上で転送されたパケットであるかどうかを判断できない。従って、各スイッチ（ＯＦＳ）は、個別に送信元ホスト及び送信先ホストの各々と代理ＴＣＰ接続を行わなければならない。そのため、「各スイッチ（ＯＦＳ）の代理ＴＣＰ接続が全て確立するまでの待機時間によって通信遅延が増大する」という課題が発生してしまう。
【００２８】
但し、ネットワーク機器側の防御手法を使用する場合、スイッチ（ＯＦＳ）自体が不正な接続やパケットを検知して防御することが可能であるため、サーバ側の防御手法の課題である「コントローラ（ＯＦＣ）に攻撃パケットが転送される」という課題は発生しない。
【先行技術文献】
【非特許文献】
【００２９】
【非特許文献１】“ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ，  Ｖｅｒｓｉｏｎ  １．１．０  Ｉｍｐｌｅｍｅｎｔｅｄ”，［ｏｎｌｉｎｅ］，Ｆｅｂｒｕａｒｙ  ２８，  ２０１１，インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／ｄｏｃｕｍｅｎｔｓ／ｏｐｅｎｆｌｏｗ−ｓｐｅｃ−ｖ１．１．０．ｐｄｆ）
【発明の概要】
【発明が解決しようとする課題】
【００３０】
オープンフローネットワークのように、パケット転送の機能と、経路制御の機能と、を分離したネットワーク機器によって構成されるネットワークにおいて、制御機能を担当するコントローラ（ＯＦＣ）のセキュリティを考慮した際、特に「ＳＹＮ  Ｆｌｏｏｄ」攻撃対策を考慮すると、パケット転送機能を担当するスイッチ（ＯＦＳ）における代理ＴＣＰ接続による防御手法を採用することが考えられる。
【００３１】
しかし、サーバの代わりに、スイッチが送信元ホストとの代理ＴＣＰ接続を行うという既存のネットワークにおける防御手法を、そのままオープンフローネットワークに適用するのは困難である。例えば、パケットの通信経路上に複数のスイッチ（ＯＦＳ）が存在する場合、スイッチ（ＯＦＳ）は、受信したＳＹＮパケットが、送信元ホストや送信先ホストと既に代理ＴＣＰ接続が行われた上で転送されたパケットかどうかを判断できない。そのため、各スイッチ（ＯＦＳ）は、それぞれ個別に送信元ホストや送信先ホストと代理ＴＣＰ接続しなければならず、全てのスイッチ（ＯＦＳ）の代理ＴＣＰ接続の確立が完了するまで待機すると、通信遅延が増大するという課題があった。
【課題を解決するための手段】
【００３２】
本発明に係るネットワークシステムは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを、複数のスイッチと、複数のスイッチの各々に設定するコントローラとを含む。該各スイッチは、送信元ホストからＳＹＮパケットを受信した場合、該コントローラに経路計算を要求し、該経路計算の結果として得られた通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行い、該通信経路上の先頭スイッチではない場合、先頭スイッチと該送信先ホストとの代理ＴＣＰ接続のためのＳＹＮパケットを転送する。
【００３３】
本発明に係るスイッチは、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う機能部と、送信元ホストからＳＹＮパケットを受信した場合、フローエントリの設定を行うコントローラに経路計算を要求する機能部と、該経路計算の結果として得られた通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行う機能部と、該通信経路上の先頭スイッチではない場合、先頭スイッチと該送信先ホストとの代理ＴＣＰ接続のためのＳＹＮパケットを転送する機能部とを備える。
【００３４】
本発明に係る通信遅延短縮方法は、ネットワークシステムにおいて実施される通信遅延短縮方法である。この通信遅延短縮方法では、複数のスイッチの各々が、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行う。また、該複数のスイッチのうち、送信元ホストからＳＹＮパケットを受信したスイッチが、フローエントリの設定を行うコントローラに経路計算を要求する。また、該複数のスイッチのうち、該経路計算の結果として得られた通信経路上の先頭スイッチが、送信先ホストとの代理ＴＣＰ接続を行う。また、該複数のスイッチのうち、該通信経路上の先頭スイッチ以外のスイッチが、先頭スイッチと該送信先ホストとの代理ＴＣＰ接続のためのＳＹＮパケットを転送する。
【００３５】
本発明に係るプログラムは、（１）パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリに従って、受信したパケットの処理を行うステップと、（２）送信元ホストからＳＹＮパケットを受信した場合、フローエントリの設定を行うコントローラに経路計算を要求するステップと、（３）該経路計算の結果として得られた通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行うステップと、（４）該通信経路上の先頭スイッチではない場合、先頭スイッチと該送信先ホストとの代理ＴＣＰ接続のためのＳＹＮパケットを転送するステップとを、スイッチとして使用される計算機に実行させるためのプログラムである。なお、本発明に係るプログラムは、記憶装置や記憶媒体に格納することが可能である。
【発明の効果】
【００３６】
オープンフローネットワーク等のＣＤ分離型ネットワークにおいて、スイッチによる代理ＴＣＰ接続時の通信遅延を短縮する。
【図面の簡単な説明】
【００３７】
【図１】本発明に係るオープンフローネットワークシステムの構成例を示す図である。
【図２】本発明に係るフローエントリの仕様について説明するための図である。
【図３】コントローラ（ＯＦＣ）の構成例を示す図である。
【図４】スイッチ（ＯＦＳ）の構成例を示す図である。
【図５】「ＳＹＮ  Ｆｌｏｏｄ」攻撃を受けた場合における処理の概要について説明するための図である。
【図６】正常なＴＣＰ通信を行う場合における処理の概要について説明するための図である。
【図７】パケットのＴＣＰヘッダのフィールドを示す図である。
【図８Ａ】パケット受信時の処理の流れを示すフローチャートの前半である。
【図８Ｂ】パケット受信時の処理の流れを示すフローチャートの後半である。
【図９】スイッチ（ＯＦＳ）のＳＹＮパケット以外のパケット受信時の処理の流れを示すフローチャートである。
【図１０】ＳＹＮパケットの受信の直後に、コントローラ（ＯＦＣ）にＳＹＮパケットを転送する場合における処理の概要について説明するための図である。
【発明を実施するための形態】
【００３８】
本発明は、ＣＤ分離型ネットワークを対象としている。ここでは、ＣＤ分離型ネットワークの１つであるオープンフローネットワークを例に説明する。但し、実際には、オープンフローネットワークに限定されない。
【００３９】
本発明では、既存のネットワーク機器側の防御手法をオープンフローネットワークに適用する場合に、各スイッチ（ＯＦＳ）の代理ＴＣＰ接続が全て確立するまでの待機時間によって通信遅延が増大するという課題を、代理ＴＣＰ接続数を削減することで解決する。
【００４０】
オープンフローネットワークにおいて、スイッチ（ＯＦＳ）がホストとの代理ＴＣＰ接続を行う場合、（１）「パケットの送信元ホスト」と「最も送信元ホストに近いスイッチ（ＯＦＳ）」との間、及び、（２）「最も送信元ホストに近いスイッチ（ＯＦＳ）」と「送信先サーバ」との間、の２箇所で行えば良い。
【００４１】
しかし、各スイッチ（ＯＦＳ）は、受信したパケットが、送信元ホストと既に代理ＴＣＰ接続が行われた上で転送されたパケットなのかどうかを判断できないため、スイッチ（ＯＦＳ）毎に、隣接するスイッチ（ＯＦＳ）との代理ＴＣＰ接続を行う必要があった。
【００４２】
本発明では、パケットの送信元ホストからパケットの送信先サーバへの通信経路上において、以下のような処理を行う。
【００４３】
スイッチ（ＯＦＳ）は、通信経路上のスイッチ（ＯＦＳ）のうち、最も送信元ホストに近いスイッチ（ＯＦＳ）である場合、最も送信元ホストに近いスイッチ（ＯＦＳ）であるかどうかを示す情報である「通信経路先頭識別子」をコントローラ（ＯＦＣ）から受け取る。ここでは、通信経路先頭識別子の値は、先頭スイッチ（ＯＦＳ）である旨を示す値であるものとする。先頭スイッチ（ＯＦＳ）は、通信経路上で、最も送信元ホストに近いスイッチ（ＯＦＳ）である。
【００４４】
スイッチ（ＯＦＳ）は、通信経路先頭識別子を受け取った場合、当該通信経路先頭識別子を、当該スイッチ（ＯＦＳ）で管理している経路情報に追加する。ここでは、スイッチ（ＯＦＳ）は、通信経路先頭識別子を受け取った場合、当該通信経路先頭識別子に基づいて、経路情報における通信経路先頭識別子の値を、先頭スイッチ（ＯＦＳ）である旨を示す値に更新する。
【００４５】
スイッチ（ＯＦＳ）は、通信経路先頭識別子の値が先頭のスイッチ（ＯＦＳ）を示す値である場合にのみ、ホストとの代理ＴＣＰ接続を行う。すなわち、先頭スイッチ（ＯＦＳ）はホストとの代理ＴＣＰ接続を行うが、先頭スイッチ（ＯＦＳ）以外のスイッチ（ＯＦＳ）はホストとの代理ＴＣＰ接続を行わない。
【００４６】
これにより、これまで行われていた不要な代理ＴＣＰ接続を排除し、通信遅延の要因となっていた代理ＴＣＰ接続が確立するまでの時間を削減することができる。
【００４７】
オープンフローネットワークにおいて、「ＳＹＮ  Ｆｌｏｏｄ」攻撃を防ぐためにネットワーク機器側の防御手法を用いた場合に発生する通信遅延という課題を、代理ＴＣＰ接続数を削減することで解決する手法について、以下に詳細に説明する。
【００４８】
＜第１実施形態＞
以下に、本発明の第１実施形態について添付図面を参照して説明する。
【００４９】
［システム構成］
図１を参照して、本発明に係るオープンフローネットワークシステムの構成例について説明する。
【００５０】
本発明に係るオープンフローネットワークシステムは、コントローラ（ＯＦＣ）１０と、スイッチ（ＯＦＳ）２０と、ホスト３０を含む。
【００５１】
コントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０、及びホスト３０は、それぞれ複数でも良い。例えば、複数のスイッチ（ＯＦＳ）２０の各々は、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、・・・、のように表記する。図１では、コントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−２、ホスト３０−１、及びホスト３０−２を例示している。
【００５２】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０を管理する。
【００５３】
スイッチ（ＯＦＳ）２０は、ネットワークを構成する。
【００５４】
ホスト３０は、スイッチ（ＯＦＳ）２０に接続され、スイッチ（ＯＦＳ）２０を介してネットワーク通信を行う。なお、ホスト３０は、クライアントやサーバに限らず、オープンフローに未対応のネットワーク機器等でも良い。
【００５５】
コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０の間は、専用線やＳＳＬ（ＳｅｃｕｒｅＳｏｃｋｅｔＬａｙｅｒ）等により保護された通信路である「セキュアチャンネル」で接続されている。コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０は、セキュアチャンネルを経由し、オープンフロープロトコルに則った通信を行う。
【００５６】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に到着するパケットをスイッチ（ＯＦＳ）２０がどのように処理するかについて、各パケットに対応する経路情報であるフローエントリを操作することにより制御する。
【００５７】
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０に、多数のフローエントリを登録することになる。フローエントリの集合は、「フローテーブル」と呼ばれる表形式で管理されている。
【００５８】
各スイッチ（ＯＦＳ）２０は、フローテーブルを少なくとも１つ保持している。コントローラ（ＯＦＣ）１０は、配下の各スイッチ（ＯＦＳ）２０のフローテーブルと同じ内容のフローテーブルを全て保持している。すなわち、コントローラ（ＯＦＣ）１０は、各スイッチ（ＯＦＳ）２０のフローテーブルのマスターテーブルを保持している。
【００５９】
なお、「フローテーブルを保持している」とは、そのフローテーブルを管理していることを意味する。そのフローテーブルをネットワーク経由等で管理可能であれば、実際には、そのフローテーブルが自身の内部に存在していなくても良い。すなわち、フローテーブルの保管場所は、そのフローテーブルを管理する装置の内部に限らず、外部でも良い。例えば、コントローラ（ＯＦＣ）１０とスイッチ（ＯＦＳ）２０が、ネットワーク上にある同一のフローテーブルを共有することも考えられる。
【００６０】
［フローエントリの仕様］
図２を参照して、本発明に係るフローエントリの仕様について説明する。
【００６１】
スイッチ（ＯＦＳ）２０は、各パケットに対応する経路情報として、図２に示すように、フローエントリ２００を保持している。
【００６２】
フローエントリ２００は、フローヘッダ２０１と、アクション２０２と、フローカウンタ２０３と、通信経路先頭識別子２０４を含む。
【００６３】
フローヘッダ２０１は、フローエントリのルールを指定するための領域（フィールド）である。フローヘッダ２０１には、フローエントリのルールとして、ＯＳＩ参照モデルのＬ１（レイヤ１：物理層）からＬ４（レイヤ４：トランスポート層）までの情報（属性値）を任意に組み合わせて指定することができる。なお、フローヘッダ２０１には、ブロードキャストアドレスやマルチキャストアドレスを指定することができる。また、「＊」や「？」といったワイルドカードを使用することもできる。
【００６４】
アクション２０２は、フローエントリのアクションを指定するための領域である。アクション２０２には、「特定のポートに出力する」、「廃棄する」、「ヘッダを書き換える」といった動作を指定することができる。
【００６５】
フローカウンタ２０３は、受信したパケットの情報が当該フローエントリのルールにマッチした回数を記録するための領域である。ここでは、フローカウンタ２０３には、受信したパケットの情報がフローエントリ２００のフローヘッダ２０１に合致した回数を記録する。
【００６６】
通信経路先頭識別子２０４は、最も送信元ホストに近いスイッチ（ＯＦＳ）であるかどうかを示す情報を指定するための領域である。すなわち、先頭スイッチ（ＯＦＳ）である旨を示す値を記録するための領域である。スイッチ（ＯＦＳ）２０は、通信経路先頭識別子２０４に指定された値を参照して、自身が、受信したパケットの通信経路上の先頭スイッチ（ＯＦＳ）であるかどうかを確認する。なお、通信経路先頭識別子２０４は、本発明においてフローエントリに新たに追加された領域である。
【００６７】
［コントローラ（ＯＦＣ）の構成］
図３を参照して、コントローラ（ＯＦＣ）１０の構成例について説明する。
【００６８】
コントローラ（ＯＦＣ）１０は、ネットワーク管理部１１と、経路計算部１２と、パケット送受信部１３を備える。
【００６９】
ネットワーク管理部１１は、スイッチ（ＯＦＳ）２０により構成されるネットワークのトポロジー情報（Ｎｅｔｗｏｒｋ  ｔｏｐｏｌｏｇｙ）を収集・管理する。また、ネットワーク管理部１１は、スイッチ（ＯＦＳ）２０に設定されたフローエントリ２００の集合を保持・管理する。
【００７０】
経路計算部１２は、トポロジー情報を基に、スイッチ（ＯＦＳ）２０から受信したパケットの通信経路を計算する。
【００７１】
パケット送受信部１３は、パケットの送受信を行う。また、パケット送受信部１３は、計算の結果として得られた通信経路を基に、フローエントリ２００を作成し、フローエントリ２００をスイッチ（ＯＦＳ）２０に設定するためのオープンフローメッセージを作成する。或いは、スイッチ（ＯＦＳ）２０から、フローエントリ２００の変更等に関するオープンフローメッセージを受信し、ネットワーク管理部１１に、保持・管理されているフローエントリ２００の変更等を要求する。なお、パケット送受信部１３は、セキュアチャンネルを介して、スイッチ（ＯＦＳ）２０とオープンフローメッセージの送受信を行う。
【００７２】
［スイッチ（ＯＦＳ）の構成］
図４を参照して、スイッチ（ＯＦＳ）２０の構成例について説明する。
【００７３】
スイッチ（ＯＦＳ）２０は、フローテーブル２１と、フローテーブル管理部２２と、パケット受信部２３と、パケット送信部２４と、パケット廃棄部２５と、通信経路先頭解析部２６と、代理ＴＣＰ接続部２７を備える。
【００７４】
フローテーブル２１は、フローエントリ２００の集合である。例えば、フローテーブル２１は、経路情報を蓄積するためのデータベースである。
【００７５】
フローテーブル管理部２２は、フローテーブル２１に含まれるフローエントリ２００を管理（追加／更新／削除）する。
【００７６】
パケット受信部２３は、コントローラ（ＯＦＣ）１０、隣接するスイッチ（ＯＦＳ）２０、ホスト３０等からパケットを受信する。なお、パケット受信部２３は、セキュアチャンネルを介して、コントローラ（ＯＦＣ）１０から、オープンフローメッセージを受信する。オープンフローメッセージを受信した際、当該オープンフローメッセージを解析し、当該オープンフローメッセージの種類・内容に応じた処理を行う。例えば、フローテーブル２１にフローエントリ２００を設定するためのオープンフローメッセージであれば、フローテーブル管理部２２に、フローテーブル２１へのフローエントリ２００の設定を要求する。また、パケット受信部２３は、ＬＡＮ等のネットワークを介して、隣接するスイッチ（ＯＦＳ）２０やホスト３０等からパケットを受信する。パケットを受信した際、受信したパケットにマッチするフローエントリ２００が設定されているか確認し、受信したパケットにマッチするフローエントリ２００が設定されている場合、当該フローエントリ２００のアクション２０２に従って、当該パケットを処理する。例えば、受信したパケットにマッチしたフローエントリ２００のアクション２０２に指定された動作が「パケットの送信／転送」である場合、又は、受信したパケットにマッチするフローエントリ２００が設定されていない場合、パケット送信部２４に、当該パケットの送信／転送を要求する。また、フローエントリ２００のアクション２０２に指定された動作が「パケットの廃棄」である場合、パケット廃棄部２５に、当該パケットの廃棄を要求する。
【００７７】
パケット送信部２４は、コントローラ（ＯＦＣ）１０、隣接するスイッチ（ＯＦＳ）２０、ホスト３０等にパケットを送信／転送する。なお、パケット送信部２４は、受信したパケットにマッチするフローエントリ２００が設定されていない場合、セキュアチャンネルを介して、コントローラ（ＯＦＣ）１０に、パケットを転送し、当該パケットの経路計算と設定を要求する。例えば、パケット送信部２４は、当該パケットの経路計算と設定を要求するためのオープンフローメッセージを作成し、当該オープンフローメッセージのデータ領域に当該パケットを格納し、当該オープンフローメッセージをコントローラ（ＯＦＣ）１０に送信する。また、パケット送信部２４は、受信したパケットにマッチしたフローエントリ２００のアクション２０２に指定された動作が「パケットの送信／転送」である場合、ＬＡＮ等のネットワークを介して、隣接するスイッチ（ＯＦＳ）２０やホスト３０等にパケットを送信／転送する。このとき、パケット送信部２４は、送信先／転送先に応じた出力ポートにパケットを転送し、当該出力ポートからパケットを送出する。また、受信したパケットにマッチしたフローエントリ２００のアクション２０２に指定された動作が「コントローラ（ＯＦＣ）へのパケットの送信／転送」である場合、セキュアチャンネルを介して、コントローラ（ＯＦＣ）１０にパケットを送信／転送しても良い。実際には、パケット送信部２４は、パケット受信部２３と連携／一体化していても良い。
【００７８】
パケット廃棄部２５は、パケットを廃棄する。なお、パケット廃棄部２５は、パケット受信部２３からのパケットの廃棄の要求を受けた場合、或いは、何らかの事情でパケットが不要となった場合に、当該パケットを廃棄する。また、パケット廃棄部２５は、パケットを廃棄する際、即座／即時に廃棄するのではなく、パケット受信時／廃棄要求時から一定時間が経過した場合や、所定の条件を満たした場合に、パケットを廃棄するようにすることもできる。実際には、パケット廃棄部２５は、パケット受信部２３と連携／一体化していても良い。
【００７９】
通信経路先頭解析部２６は、スイッチ（ＯＦＳ）２０がパケットの通信経路上の先頭スイッチ（ＯＦＳ）かどうかを解析する。具体的には、通信経路先頭解析部２６は、フローエントリ２００の通信経路先頭識別子２０４の値を解析し、フローエントリ２００の通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値であるか確認する。なお、通信経路先頭解析部２６は、本発明においてスイッチ（ＯＦＳ）２０に新たに追加された構成要素である。実際には、通信経路先頭解析部２６は、パケット受信部２３と連携／一体化していても良い。
【００８０】
代理ＴＣＰ接続部２７は、フローエントリ２００の通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値である場合、ホスト３０との代理ＴＣＰ接続を行う。すなわち、スイッチ（ＯＦＳ）２０は、パケットの通信経路上の先頭スイッチ（ＯＦＳ）である場合、通信経路上にある複数のスイッチ（ＯＦＳ）の代表として、ホスト３０との代理ＴＣＰ接続を行う。このとき、代理ＴＣＰ接続部２７は、ホスト３０との代理ＴＣＰ接続を行うためのＳＹＮパケットやＡＣＫパケットを作成し、ホスト３０に送信／転送する。また、パケットの送信元ホストとの代理ＴＣＰ接続に失敗した場合、パケット廃棄部２５に、送信元ホストからのパケットの廃棄を要求する。なお、代理ＴＣＰ接続部２７は、本発明においてスイッチ（ＯＦＳ）２０に新たに追加された構成要素である。実際には、代理ＴＣＰ接続部２７は、パケット受信部２３、パケット送信部２４、及びパケット廃棄部２５と連携／一体化していても良い。
【００８１】
なお、パケット送信部２４、パケット廃棄部２５、通信経路先頭解析部２６、及び代理ＴＣＰ接続部２７を一体化（統合）したものを、「パケット処理部」と呼ぶ。
【００８２】
［処理の概要］
本発明を適用した場合の処理の概要を、以下の場合に分けて説明する。
【００８３】
オープンフローネットワークにおいて、「ＳＹＮ  Ｆｌｏｏｄ」攻撃を受ける場合を「不正接続」とする。
【００８４】
オープンフローネットワークにおいて、正常なＴＣＰ通信を行う場合を「正常接続」とする。
【００８５】
［不正接続］
図５を参照して、オープンフローネットワークにおいて、「ＳＹＮ  Ｆｌｏｏｄ」攻撃を受けた場合における処理の概要について順に説明する。
【００８６】
（１）ＳＹＮパケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１からＳＹＮパケットを受信する。
【００８７】
（２）代理ＴＣＰ接続の試行
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続を試みる。例えば、スイッチ（ＯＦＳ）２０−１は、ホスト３０−１にＡＣＫパケットを送信し、ホスト３０−１がＡＣＫパケットを送り返してくるのを待つ。ホスト３０−１からの「ＳＹＮ  Ｆｌｏｏｄ」攻撃である場合、ホスト３０−１がＡＣＫパケットを送り返してこないため、ホスト３０−１との代理ＴＣＰ接続は必ず失敗する。
【００８８】
（３）「ＳＹＮ  Ｆｌｏｏｄ」攻撃の判定
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が失敗した場合、ホスト３０−１から受け取ったパケットが「ＳＹＮ  Ｆｌｏｏｄ」攻撃としてのＳＹＮパケットである可能性が高いと判断し、コントローラ（ＯＦＣ）１０にパケットを転送することなく、受信したＳＹＮパケットを廃棄し、処理を終了する。
【００８９】
これにより、スイッチ（ＯＦＳ）２０−１は、「ＳＹＮ  Ｆｌｏｏｄ」攻撃を防御することができる。
【００９０】
［正常接続］
図６を参照して、オープンフローネットワークにおいて、正常なＴＣＰ通信を行う場合における処理の概要について順に説明する。
【００９１】
（１）ＳＹＮパケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１からＳＹＮパケットを受信する。
【００９２】
（２）送信元との代理ＴＣＰ接続の試行
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続を試みる。正常なＴＣＰ通信の場合、ホスト３０−１との代理ＴＣＰ接続は成功する。これにより、スイッチ（ＯＦＳ）２０−１とホスト３０−１との間の通信経路が確立する。
【００９３】
（３）経路計算と設定の要求
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が成功した場合、コントローラ（ＯＦＣ）１０に、パケットを転送し、ホスト３０−１から受信したパケットの経路計算と設定を要求する。ここでは、パケットの送信元はホスト３０−１であり、パケットの送信先はホスト３０−２であるものとする。例えば、ホスト３０−１は、クライアントであり、ホスト３０−２は、サーバであるものとする。
【００９４】
（４）経路計算
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基にフローエントリ２００を作成する。ここでは、通信経路上で最も送信元のホスト３０−１に近いスイッチ（ＯＦＳ）は、要求元のスイッチ（ＯＦＳ）２０−１である。
【００９５】
なお、コントローラ（ＯＦＣ）１０は、通信経路上で最も送信先のホスト３０−２に近いスイッチ（ＯＦＳ）から順にフローエントリを設定する。その理由は、通信経路上で最も送信元のホスト３０−１に近いスイッチ（ＯＦＳ）から順にフローエントリを設定すると、通信経路上の全てのスイッチ（ＯＦＳ）へのフローエントリの設定が完了する前に、パケットの転送等が開始されてしまうからである。
【００９６】
（５）先頭スイッチ以外の設定
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−２に設定されるフローエントリ２００の通信経路先頭識別子２０４に、先頭スイッチ（ＯＦＳ）ではない旨を示す値を指定し、スイッチ（ＯＦＳ）２０−２にフローエントリ２００を設定する。
【００９７】
（６）先頭スイッチの設定
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１に設定されるフローエントリ２００の通信経路先頭識別子２０４に、先頭スイッチ（ＯＦＳ）である旨を示す値を指定し、スイッチ（ＯＦＳ）２０−１にフローエントリ２００を設定する。
【００９８】
（７）送信先との代理ＴＣＰ接続の試行
スイッチ（ＯＦＳ）２０−１は、設定されたフローエントリ２００の通信経路先頭識別子２０４を解析し、フローエントリ２００の通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値であるため、ホスト３０−２との代理ＴＣＰ接続を行う。
【００９９】
ここでは、スイッチ（ＯＦＳ）２０−１は、自身のフローエントリ２００のアクション２０２に従って、この代理ＴＣＰ接続のＳＹＮパケットをスイッチ（ＯＦＳ）２０−２に送信する。
【０１００】
また、スイッチ（ＯＦＳ）２０−２は、この代理ＴＣＰ接続のＳＹＮパケットを受信した際、設定されたフローエントリ２００の通信経路先頭識別子２０４の値を解析し、通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値ではないため、代理ＴＣＰ接続を行わず、自身のフローエントリ２００のアクション２０２に従って、受信したＳＹＮパケットをホスト３０−２に転送する。
【０１０１】
通常、スイッチ（ＯＦＳ）２０−１は正常なＴＣＰ通信を行うため、スイッチ（ＯＦＳ）２０−１とホスト３０−２との代理ＴＣＰ接続は成功する。例えば、ホスト３０−２は、この代理ＴＣＰ接続のＳＹＮパケットを受信した際、スイッチ（ＯＦＳ）２０−１にＡＣＫパケットを送信し、スイッチ（ＯＦＳ）２０−１がＡＣＫパケットを送り返してくるのを待つ。スイッチ（ＯＦＳ）２０−１は、ホスト３０−２にＡＣＫパケットを送り返す。これにより、スイッチ（ＯＦＳ）２０−１とホスト３０−２との間の通信経路が確立する。
【０１０２】
スイッチ（ＯＦＳ）２０−１とホスト３０−２との間の通信経路が確立した時点では、スイッチ（ＯＦＳ）２０−１は、ホスト３０−１及びホスト３０−２とそれぞれ個別にＴＣＰ接続をしているに過ぎない。このとき、スイッチ（ＯＦＳ）２０−１とホスト３０−１との間での代理ＴＣＰ接続におけるパケットのフィールド値は、スイッチ（ＯＦＳ）２０−１とホスト３０−２との間での代理ＴＣＰ接続におけるパケットのフィールド値と異なっている。異なっているフィールド値は、図７に示すＴＣＰヘッダの「確認応答番号」と「シーケンス番号」である。
【０１０３】
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１とホスト３０−２が直接ＴＣＰ接続しているように見せる（擬装する）ために、ホスト３０−１とホスト３０−２との間の通信パケットの受信時に、通信パケットのフィールド値を変更（変換）する必要がある。この変更（変換）処理は、代理ＴＣＰ接続において必要な処理である。
【０１０４】
（８）変換用フローエントリの設定
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１とホスト３０−２との間の通信パケットのフィールド値を変更（変換）するためのフローエントリ２００の設定を行う。例えば、スイッチ（ＯＦＳ）２０−１は、コントローラ（ＯＦＣ）１０により設定されたフローエントリ２００を変更し、このフローエントリ２００のアクション２０２に、ホスト３０−１とホスト３０−２との間の通信パケットのフィールド値を変更（変換）する動作を追加指定し、フローエントリ２００の変更をコントローラ（ＯＦＣ）１０に通知する。或いは、スイッチ（ＯＦＳ）２０−１は、通信パケットのフィールド値を変更（変換）する動作を指定した新規のフローエントリ２００を自身に設定し、この新規のフローエントリ２００をコントローラ（ＯＦＣ）１０に通知する。この新規のフローエントリ２００については、既存のフローエントリ２００よりも優先度を高く設定すると好適である。
【０１０５】
（９）通信パケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１から通信パケットを受信する。
【０１０６】
（１０）通信パケットのフィールド値の変換
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１とホスト３０−２との間の通信パケットの受信時に、自身のフローエントリ２００のアクション２０２に従って、通信パケットのフィールド値を変更（変換）する。ここでは、スイッチ（ＯＦＳ）２０−１は、通信パケットのフィールド値のうち、ＴＣＰヘッダの「確認応答番号」と「シーケンス番号」を変更（変換）する。これにより、ホスト３０−１とホスト３０−２との間の通信経路が確立する。ホスト３０−１とホスト３０−２は、スイッチ（ＯＦＳ）２０−１が代理でＴＣＰ接続していることを意識することなく、相互に通信することができる。
【０１０７】
（１１）通信パケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−２に通信パケットを転送する。
【０１０８】
ここでは、ホスト３０−１からホスト３０−２に通信パケットを送信する場合について説明しているが、ホスト３０−２からホスト３０−１に通信パケットを送信する場合についても同様の変換処理を行う。この場合、（９）通信パケットの受信から（１１）通信パケットの受信までの各処理において、「ホスト３０−１」と「ホスト３０−２」とを相互に読み替える。
【０１０９】
上記のように、本発明では、正常なＴＣＰ通信を行う場合、経路上の先頭スイッチ（ＯＦＳ）が代表して代理ＴＣＰ接続をすることで、不要な代理ＴＣＰ接続数を削減することができる。
【０１１０】
また、本発明では、オープンフローネットワークにおいて、パケットの通信経路上に複数のスイッチ（ＯＦＳ）２０が存在する場合においても、「ＳＹＮ  Ｆｌｏｏｄ」攻撃を防御しながら通信遅延を短縮することが可能となる。
【０１１１】
［正常接続終了時］
更に、正常なＴＣＰ通信が終了した場合における処理について説明する。
【０１１２】
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１又はホスト３０−２の少なくとも一方との代理ＴＣＰ接続が終了（切断）した場合、代理ＴＣＰ接続に関するフローエントリ２００をフローテーブル２１から削除する。
【０１１３】
このとき、スイッチ（ＯＦＳ）２０−１は、当該フローエントリ２００を削除するための削除用オープンフローメッセージを作成する。
【０１１４】
例えば、スイッチ（ＯＦＳ）２０−１は、削除用オープンフローメッセージをコントローラ（ＯＦＣ）１０に通知する。コントローラ（ＯＦＣ）１０は、削除用オープンフローメッセージに応じて、通信経路上の各スイッチ（ＯＦＳ）２０から当該フローエントリ２００を削除する。なお、コントローラ（ＯＦＣ）１０は、通信経路上の各スイッチ（ＯＦＳ）２０に、削除用オープンフローメッセージを転送しても良い。
【０１１５】
或いは、スイッチ（ＯＦＳ）２０−１は、当該フローエントリ２００のアクション２０２に従って、通信経路上の各スイッチ（ＯＦＳ）２０に削除用オープンフローメッセージを送信する。送信と同時に／送信後、当該フローエントリ２００を削除し、当該フローエントリ２００の削除をコントローラ（ＯＦＣ）１０に通知する。
【０１１６】
通信経路上の各スイッチ（ＯＦＳ）２０は、削除用オープンフローメッセージを受信した際に、自身のフローエントリ２００のアクション２０２に従って、隣接するスイッチ（ＯＦＳ）２０に削除用オープンフローメッセージを転送するようにしても良い。転送と同時に／転送後、自身のフローエントリ２００を削除し、自身のフローエントリ２００の削除をコントローラ（ＯＦＣ）１０に通知する。隣接するスイッチ（ＯＦＳ）２０が存在しない場合、削除用オープンフローメッセージを廃棄する。
【０１１７】
［パケット受信時の処理］
図８Ａ、図８Ｂを参照して、スイッチ（ＯＦＳ）２０−１がＳＹＮパケットを受信した場合における処理の流れについて説明する。
【０１１８】
ここでは、ホスト３０−１からホスト３０−２にパケットを送信する事例について説明する。例えば、ホスト３０−１は、ホスト３０−２との代理ＴＣＰ接続を行う場合、ホスト３０−２宛にＳＹＮパケットを送信する。また、ホスト３０−１は、ホスト３０−２との間で通信経路が確立した場合、ホスト３０−２宛に通常パケットを送信する。
【０１１９】
（１）ステップＳ１０１
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１からパケットを受信する。
【０１２０】
（２）ステップＳ１０２
スイッチ（ＯＦＳ）２０−１は、自身が管理するフローテーブル２１中に、受信したパケットと合致するフローエントリ２００が存在するか確認する。例えば、スイッチ（ＯＦＳ）２０−１は、受信したパケットのヘッダの情報が、自身が管理するフローテーブル２１中のフローエントリ２００のフローヘッダ２０１の情報に合致するか確認する。
【０１２１】
（３）ステップＳ１０３
スイッチ（ＯＦＳ）２０−１は、自身が管理するフローテーブル２１中に、受信したパケットと合致するフローエントリ２００が存在しない場合（ステップＳ１０２でＮｏ）、受信したパケットがＳＹＮパケットであるか確認する。
【０１２２】
（４）ステップＳ１０４
スイッチ（ＯＦＳ）２０−１は、受信したパケットがＳＹＮパケットである場合（ステップＳ１０３でＹｅｓ）、このＳＹＮパケットの送信元であるホスト３０−１との代理ＴＣＰ接続を試みる。
【０１２３】
（５）ステップＳ１０５
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が成功したか確認する。ホスト３０−１からの「ＳＹＮ  Ｆｌｏｏｄ」攻撃である場合（ステップＳ１０５でＮｏ）、スイッチ（ＯＦＳ）２０−１とホスト３０−１との代理ＴＣＰ接続は必ず失敗する。スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が失敗した場合、ホスト３０−１から受け取ったパケットが「ＳＹＮ  Ｆｌｏｏｄ」攻撃としてのＳＹＮパケットである可能性が高いと判断し、自身を管理するコントローラ（ＯＦＣ）１０にパケットを転送することなく、受信したパケットを廃棄し、処理を終了する。
【０１２４】
（６）ステップＳ１０６
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が成功した場合（ステップＳ１０５でＹｅｓ）、コントローラ（ＯＦＣ）１０に、受信したパケットを転送し、受信したパケットの経路計算と設定を要求する。
（７）ステップＳ１０７
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基に、通信経路上の各スイッチ（ＯＦＳ）２０にフローエントリ２００を設定する。各スイッチ（ＯＦＳ）２０は、コントローラ（ＯＦＣ）１０から設定されたフローエントリ２００をフローテーブル２１に登録する。
【０１２５】
（８）ステップＳ１０８
スイッチ（ＯＦＳ）２０−１は、自身が先頭スイッチ（ＯＦＳ）であるか確認する。ここでは、スイッチ（ＯＦＳ）２０−１は、コントローラ（ＯＦＣ）１０から設定されたフローエントリ２００の通信経路先頭識別子２０４を解析し、フローエントリ２００の通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値であるか確認する。
【０１２６】
（９）ステップＳ１０９
スイッチ（ＯＦＳ）２０−１は、自身が先頭スイッチ（ＯＦＳ）である場合（ステップＳ１０８でＹｅｓ）、ホスト３０−２との代理ＴＣＰ接続を試みる。例えば、スイッチ（ＯＦＳ）２０−１は、自身のフローエントリ２００のアクション２０２に従って、ホスト３０−２との代理ＴＣＰ接続のためのＳＹＮパケットを、ホスト３０−２に送信する。
【０１２７】
（１０）ステップＳ１１０
スイッチ（ＯＦＳ）２０−１は、ホスト３０−２との代理ＴＣＰ接続が成功したか確認する。通常、スイッチ（ＯＦＳ）２０−１は正常なＴＣＰ通信を行うため、スイッチ（ＯＦＳ）２０−１とホスト３０−２との代理ＴＣＰ接続は成功する。仮に、何らかの事情で、スイッチ（ＯＦＳ）２０−１とホスト３０−２との代理ＴＣＰ接続が失敗した場合（ステップＳ１１０でＮｏ）、処理を終了する。或いは、一定時間経過後／定期的に、ホスト３０−２との代理ＴＣＰ接続を再試行し、一定回数の代理ＴＣＰ接続の再試行が失敗した場合、処理を終了するようにしても良い。このとき、スイッチ（ＯＦＳ）２０−１は、ホスト３０−２との代理ＴＣＰ接続が失敗した旨を、コントローラ（ＯＦＣ）１０及びホスト３０−１に通知するようにしても良い。
【０１２８】
（１１）ステップＳ１１１
スイッチ（ＯＦＳ）２０−１は、ホスト３０−２との代理ＴＣＰ接続が成功した場合（ステップＳ１１０でＹｅｓ）、ホスト３０−１とホスト３０−２との間の通信パケットのフィールド値を変更（変換）するため、フローエントリ２００を更新し、フローエントリ２００のアクション２０２に、ホスト３０−１とホスト３０−２との間の通信パケットのフィールド値を変更（変換）する動作を指定する。実際には、新規のフローエントリ２００を設定しても良い。その後、処理を終了する。例えば、ホスト３０−１からの通信パケット等の到着を待つ（ステップＳ１０１に戻る）。
【０１２９】
（１２）ステップＳ１１２
なお、スイッチ（ＯＦＳ）２０−１は、受信したパケットと合致するフローエントリ２００が存在せず、受信したパケットがＳＹＮパケットではない場合（ステップＳ１０３でＮｏ）、当該パケットを「ファーストパケット」（Ｆｉｒｓｔ  ｐａｃｋｅｔ）と判断し、通常のオープンフローネットワークと同様に処理する。すなわち、スイッチ（ＯＦＳ）２０−１は、コントローラ（ＯＦＣ）１０に、受信したパケットを転送し、受信したパケットの経路計算と設定を要求する。
【０１３０】
（１３）ステップＳ１１３
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基に、通信経路上の各スイッチ（ＯＦＳ）２０に、ファーストパケット用のフローエントリ２００を設定する。このフローエントリ２００の仕様は、通信経路先頭識別子２０４を含まない通常のフローエントリの仕様でも十分である。各スイッチ（ＯＦＳ）２０は、コントローラ（ＯＦＣ）１０から設定されたフローエントリ２００をフローテーブル２１に登録する。
【０１３１】
（１４）ステップＳ１１４
スイッチ（ＯＦＳ）２０−１は、受信したパケットと合致するフローエントリ２００が存在する場合（ステップＳ１０２でＹｅｓ）、或いは、自身が先頭スイッチ（ＯＦＳ）ではない場合（ステップＳ１０８でＮｏ）、又は、コントローラ（ＯＦＣ）１０からファーストパケット用のフローエントリ２００を設定された場合（ステップＳ１１３の後）、自身のフローエントリ２００のアクション２０２に従って、受信したパケットを処理する。なお、スイッチ（ＯＦＳ）２０−１以外のスイッチ（ＯＦＳ）２０も、スイッチ（ＯＦＳ）２０−１と同様に、自身のフローエントリ２００のアクション２０２に従って、受信したパケットを処理する。
【０１３２】
これにより、オープンフローネットワークにおいて、「ＳＹＮ  Ｆｌｏｏｄ」攻撃が行われた場合、攻撃を回避しながら代理ＴＣＰ接続による通信時間の遅延を小さくすることができる。
【０１３３】
＜第２実施形態＞
以下に、本発明の第２実施形態について説明する。
【０１３４】
本発明は、図９に示すように、コントローラ（ＯＦＣ）１０やスイッチ（ＯＦＳ）２０がネットワーク上に複数ある場合でも成立する。更に、本発明は、ネットワーク上にある複数のスイッチ（ＯＦＳ）間がどのように接続されていても成立する。
【０１３５】
［システム構成］
図９を参照して、本実施形態に係るオープンフローネットワークシステムの構成例について説明する。
【０１３６】
本実施形態に係るオープンフローネットワークシステムは、コントローラ（ＯＦＣ）１０（１０−ｉ、ｉ＝１〜Ｘ：Ｘは任意）と、スイッチ（ＯＦＳ）２０（２０−ｊ、ｊ＝１〜Ｙ：Ｙは任意）と、ホスト３０（３０−ｋ、ｋ＝１〜Ｚ：Ｚは任意）を含む。
【０１３７】
コントローラ（ＯＦＣ）１０（１０−ｉ、ｉ＝１〜Ｘ）、スイッチ（ＯＦＳ）２０（２０−ｊ、ｊ＝１〜Ｙ）、及びホスト３０（３０−ｋ、ｋ＝１〜Ｚ）は、それぞれ第１実施形態において説明したコントローラ（ＯＦＣ）１０、スイッチ（ＯＦＳ）２０、及びホスト３０に相当する。
【０１３８】
例えば、図９に示すようなオープンフローネットワークシステムにおいて、ホスト３０−１からホスト３０−Ｚに通信パケットを送信する場合、スイッチ（ＯＦＳ）２０−１、スイッチ（ＯＦＳ）２０−４、スイッチ（ＯＦＳ）２０−８、・・・、スイッチ（ＯＦＳ）２０−Ｙ、及びスイッチ（ＯＦＳ）２０−（Ｙ−１）が通信経路上のスイッチ（ＯＦＳ）となる。
【０１３９】
このとき、スイッチ（ＯＦＳ）２０−１は、先頭スイッチ（ＯＦＳ）となる。また、スイッチ（ＯＦＳ）２０−４、スイッチ（ＯＦＳ）２０−８、・・・、スイッチ（ＯＦＳ）２０−Ｙ、及びスイッチ（ＯＦＳ）２０−（Ｙ−１）の各々は、先頭スイッチ（ＯＦＳ）以外のスイッチ（ＯＦＳ）となる。
【０１４０】
なお、スイッチ（ＯＦＳ）２０−１がパケットを転送するコントローラ（ＯＦＣ）１０は、コントローラ（ＯＦＣ）１０−１、コントローラ（ＯＦＣ）１０−２、・・・、コントローラ（ＯＦＣ）１０−Ｘのいずれかである。
【０１４１】
＜第３実施形態＞
以下に、本発明の第３実施形態について説明する。
【０１４２】
本発明は、図５に示す「不正接続」や図６に示す「正常接続」の「（１）ＳＹＮパケットの受信」の直後に、コントローラ（ＯＦＣ）にＳＹＮパケットを転送する場合でも成立する。
【０１４３】
［システム構成］
本実施形態に係るオープンフローネットワークシステムの構成例については、図１に示す構成例（第１実施形態）と同様であるものとする。
【０１４４】
［処理の概要］
図１０を参照して、本実施形態における処理の概要を、以下に説明する。
【０１４５】
（１）ＳＹＮパケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１からＳＹＮパケットを受信する。
【０１４６】
（２）ＳＹＮパケットの転送
スイッチ（ＯＦＳ）２０−１は、受信したＳＹＮパケットをコントローラ（ＯＦＣ）１０に転送する。コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からＳＹＮパケットを受信した場合、経路計算をせずにスイッチ（ＯＦＳ）２０−１からの要求を待つ。
【０１４７】
（３）代理ＴＣＰ接続の試行
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続を試みる。
【０１４８】
（４）失敗時の廃棄要求
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が失敗する場合、コントローラ（ＯＦＣ）１０に、先に転送したパケット（ＳＹＮパケット）の廃棄を要求し、処理を終了する。コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からの当該要求に応じて、ＳＹＮパケットを廃棄し、処理を終了する。
【０１４９】
（５）成功時の計算要求
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１との代理ＴＣＰ接続が成功する場合、コントローラ（ＯＦＣ）１０に、先に転送したパケット（ＳＹＮパケット）の経路計算と設定を要求する。
【０１５０】
以降は、図６に示す「正常接続」の「（４）経路計算」から「（１１）通信パケットの受信」までの処理と同様である。
【０１５１】
（６）経路計算
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１からの要求に応じて、経路計算を行い、計算の結果として得られた通信経路を基にフローエントリ２００を作成する。ここでは、通信経路上で最も送信元のホスト３０−１に近いスイッチ（ＯＦＳ）は、要求元のスイッチ（ＯＦＳ）２０−１である。
【０１５２】
（７）先頭スイッチ以外の設定
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−２に設定されるフローエントリ２００の通信経路先頭識別子２０４に、先頭スイッチ（ＯＦＳ）ではない旨を示す値を指定し、スイッチ（ＯＦＳ）２０−２にフローエントリ２００を設定する。
【０１５３】
（８）先頭スイッチの設定
コントローラ（ＯＦＣ）１０は、スイッチ（ＯＦＳ）２０−１に設定されるフローエントリ２００の通信経路先頭識別子２０４に、先頭スイッチ（ＯＦＳ）である旨を示す値を指定し、スイッチ（ＯＦＳ）２０−１にフローエントリ２００を設定する。
【０１５４】
（９）送信先との代理ＴＣＰ接続の試行
スイッチ（ＯＦＳ）２０−１は、設定されたフローエントリ２００の通信経路先頭識別子２０４を解析し、フローエントリ２００の通信経路先頭識別子２０４の値が、先頭スイッチ（ＯＦＳ）である旨を示す値であるため、ホスト３０−２との代理ＴＣＰ接続を行う。
【０１５５】
（１０）変換用フローエントリの設定
スイッチ（ＯＦＳ）２０−１は、スイッチ（ＯＦＳ）２０−１とホスト３０−２との間の通信経路が確立した場合、ホスト３０−１とホスト３０−２との間の通信パケットのフィールド値を変更（変換）するためのフローエントリ２００の設定を行う。
【０１５６】
（１１）通信パケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１から通信パケットを受信する。
【０１５７】
（１２）通信パケットのフィールド値の変換
スイッチ（ＯＦＳ）２０−１は、ホスト３０−１とホスト３０−２との間の通信パケットの受信時に、自身のフローエントリ２００のアクション２０２に従って、通信パケットのフィールド値を変更（変換）する。
【０１５８】
（１３）通信パケットの受信
スイッチ（ＯＦＳ）２０−１は、ホスト３０−２に通信パケットを転送する。
【０１５９】
＜第４実施形態＞
以下に、本発明の第４実施形態について説明する。
【０１６０】
本発明において、先頭スイッチ（ＯＦＳ）が、パケットの送信元ホストとの代理ＴＣＰ接続に失敗した場合に、送信元ホストからのパケットの受信回数をカウントしておくようにする。受信回数が予め設定した閾値に達すると、送信元ホストからのパケットが「ＳＹＮ  Ｆｌｏｏｄ」攻撃としてのＳＹＮパケットである可能性が高いと判断し、パケットの送信元ホストとの代理ＴＣＰ接続を一定時間拒否するようにする。
【０１６１】
代理ＴＣＰ接続を一定時間拒否することで、先頭スイッチ（ＯＦＳ）が、パケットの送信元ホストとの代理ＴＣＰ接続に失敗した場合、再度ＳＹＮパケットを受信した際に、無条件に代理ＴＣＰ接続を試みてしまうことを防ぐことができる。
【０１６２】
また、パケットの受信回数を判断材料とすることで、「ＳＹＮ  Ｆｌｏｏｄ」攻撃ではないが、何らかの事情で、先頭スイッチ（ＯＦＳ）が、パケットの送信元ホストとの代理ＴＣＰ接続に失敗した場合に、直ちに「ＳＹＮ  Ｆｌｏｏｄ」攻撃と判断してしまうことを防ぐことができる。
【０１６３】
例えば、図４に示すスイッチ（ＯＦＳ）２０のパケット受信部２３が、ホスト３０からのパケットの受信回数をカウントし、受信回数が予め設定した閾値に達すると、ホスト３０からのパケットが「ＳＹＮ  Ｆｌｏｏｄ」攻撃としてのＳＹＮパケットである可能性が高いと判断する。
【０１６４】
この場合、図４に示すスイッチ（ＯＦＳ）２０のパケット受信部２３が、一定時間、ホスト３０からのパケットの受信を拒否するようにする。或いは、図４に示すスイッチ（ＯＦＳ）２０のパケット送信部２４が、一定時間、ホスト３０との代理ＴＣＰ接続の試行（ＡＣＫパケットの送信）を拒否するようにする。或いは、図４に示すスイッチ（ＯＦＳ）２０のパケット廃棄部２５が、一定時間、ホスト３０からのパケットを廃棄するようにする。
【０１６５】
＜各実施形態の関係＞
なお、上記の各実施形態は、組み合わせて実施することも可能である。
【０１６６】
＜ハードウェアの例示＞
以下に、本発明に係るネットワークシステムを実現するための具体的なハードウェアの例について説明する。
【０１６７】
コントローラ（ＯＦＣ）及びホストの例として、ＰＣ（パソコン）、アプライアンス（ａｐｐｌｉａｎｃｅ）、シンクライアントサーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。また、ホストの他の例として、ＩＰ電話機、携帯電話機、スマートフォン、スマートブック、カーナビ（カーナビゲーションシステム）、携帯型ゲーム機、家庭用ゲーム機、携帯型音楽プレーヤー、ハンディターミナル、ガジェット（電子機器）、双方向テレビ、デジタルチューナー、デジタルレコーダー、情報家電（ｉｎｆｏｒｍａｔｉｏｎ  ｈｏｍｅ  ａｐｐｌｉａｎｃｅ）、ＯＡ（Ｏｆｆｉｃｅ  Ａｕｔｏｍａｔｉｏｎ）機器、店頭端末・高機能コピー機、デジタルサイネージ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｇｅ：電子看板）等も考えられる。なお、コントローラ（ＯＦＣ）及びホストは、端末やサーバに限らず、中継機器や周辺機器でも良い。また、コントローラ（ＯＦＣ）及びホストは、計算機等に搭載される拡張ボードや、物理マシン上に構築された仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）でも良い。
【０１６８】
スイッチ（ＯＦＳ）の例として、ネットワークスイッチ（ｎｅｔｗｏｒｋ  ｓｗｉｔｃｈ）、ルータ（ｒｏｕｔｅｒ）、プロキシ（ｐｒｏｘｙ）、ゲートウェイ（ｇａｔｅｗａｙ）、ファイアウォール（ｆｉｒｅｗａｌｌ）、ロードバランサ（ｌｏａｄ  ｂａｌａｎｃｅｒ：負荷分散装置）、帯域制御装置（ｐａｃｋｅｔ  ｓｈａｐｅｒ）、セキュリティ監視制御装置（ＳＣＡＤＡ：Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）、ゲートキーパー（ｇａｔｅｋｅｅｐｅｒ）、基地局（ｂａｓｅ  ｓｔａｔｉｏｎ）、アクセスポイント（ＡＰ：Ａｃｃｅｓｓ  Ｐｏｉｎｔ）、通信衛星（ＣＳ：Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｓａｔｅｌｌｉｔｅ）、或いは、複数の通信ポートを有する計算機等が考えられる。また、物理マシン上に構築された仮想マシン（ＶＭ）により実現される仮想スイッチでも良い。
【０１６９】
コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストは、車両や船舶、航空機等の移動体に搭載されていても良い。
【０１７０】
図示しないが、コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストの各々は、プログラムに基づいて駆動し所定の処理を実行するプロセッサと、当該プログラムや各種データを記憶するメモリと、ネットワークとの通信に用いられるインターフェースによって実現される。
【０１７１】
上記のプロセッサの例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ネットワークプロセッサ（ＮＰ：Ｎｅｔｗｏｒｋ  Ｐｒｏｃｅｓｓｏｒ）、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ（ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ）、或いは、専用の機能を有する半導体集積回路（ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）等が考えられる。
【０１７２】
上記のメモリの例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のリムーバブルディスクや、ＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等の記憶媒体（メディア）等が考えられる。また、バッファ（ｂｕｆｆｅｒ）やレジスタ（ｒｅｇｉｓｔｅｒ）等でも良い。或いは、ＤＡＳ（Ｄｉｒｅｃｔ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＦＣ−ＳＡＮ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）、ＩＰ−ＳＡＮ（ＩＰ  −  Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等を用いたストレージ装置でも良い。
【０１７３】
なお、上記のプロセッサ及び上記のメモリは、一体化していても良い。例えば、近年では、マイコン等の１チップ化が進んでいる。従って、電子機器等に搭載される１チップマイコンが、上記のプロセッサ及び上記のメモリを備えている事例も考えられる。
【０１７４】
上記のインターフェースの例として、ネットワーク通信に対応した基板（マザーボード、Ｉ／Ｏボード）やチップ等の半導体集積回路、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）等のネットワークアダプタや同様の拡張カード、アンテナ等の通信装置、接続口（コネクタ）等の通信ポート等が考えられる。
【０１７５】
また、ネットワークの例として、インターネット、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、無線ＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、バックボーン（Ｂａｃｋｂｏｎｅ）、ケーブルテレビ（ＣＡＴＶ）回線、固定電話網、携帯電話網、ＷｉＭＡＸ（ＩＥＥＥ  ８０２．１６ａ）、３Ｇ（３ｒｄ  Ｇｅｎｅｒａｔｉｏｎ）、専用線（ｌｅａｓｅ  ｌｉｎｅ）、ＩｒＤＡ（Ｉｎｆｒａｒｅｄ  Ｄａｔａ  Ａｓｓｏｃｉａｔｉｏｎ）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、シリアル通信回線、データバス等が考えられる。
【０１７６】
なお、コントローラ（ＯＦＣ）、スイッチ（ＯＦＳ）、及びホストの各々の内部の構成要素は、モジュール（ｍｏｄｕｌｅ）、コンポーネント（ｃｏｍｐｏｎｅｎｔ）、或いは専用デバイス、又はこれらの起動（呼出）プログラムでも良い。
【０１７７】
但し、実際には、これらの例に限定されない。
【０１７８】
＜本発明の特徴＞
以上のように、本発明では、オープンフローネットワーク等のＣＤ分離型ネットワークにおいて、通信経路先頭識別子を導入し、スイッチによる代理ＴＣＰ接続時の通信遅延を短縮する。
【０１７９】
Ｄｏｓ攻撃の一般的な攻撃の１つである「ＳＹＮ  Ｆｌｏｏｄ」攻撃の防御手法の１つに、パケットの内容によって、受信したパケットの転送先を決定するルータ（Ｒｏｕｔｅｒ）やロードバランサ（Ｌｏａｄ  Ｂａｌａｎｃｅｒ）等のネットワーク機器が攻撃対象のサーバの代理でＴＣＰ接続（代理ＴＣＰ接続）を行うことで、攻撃を検知し防御する手法がある。
【０１８０】
しかし、この防御手法を、オープンフローネットワークにおいて、パケットの転送を行うスイッチ（ＯＦＳ）にそのまま適用すると、パケットの通信経路上に複数のスイッチ（ＯＦＳ）がある場合、スイッチ（ＯＦＳ）毎に個別に代理ＴＣＰ接続が必要となり、各々の接続が確立するまでの待機時間により、通信遅延が発生する可能性があった。
【０１８１】
本発明では、スイッチ（ＯＦＳ）が保持する経路情報にパケットの送信元ホストからサーバへの通信経路上の先頭のスイッチ（ＯＦＳ）であることを示す情報を付加することで、通信経路上にスイッチ（ＯＦＳ）の台数に比例して必要であった代理ＴＣＰ接続の回数を通信経路上のスイッチ（ＯＦＳ）の台数に関係なく２回に限定し、「ＳＹＮ  Ｆｌｏｏｄ」攻撃に対する防御と通信遅延時間削減の両立を可能とする。
【０１８２】
本発明は、オープンフローに代表されるような、経路制御の機能を外部の制御装置（コントローラ）に分離したネットワーク機器（スイッチ）で構成されるネットワークシステムに適用することができる。
【０１８３】
経路制御の機能を外部の制御装置（コントローラ）に分離したネットワーク機器（スイッチ）で構成されるネットワークシステムに本発明を適用した場合、パケット転送を行うネットワーク機器（スイッチ）のうち、パケットの通信経路における先頭のネットワーク機器（スイッチ）が、パケットの通信経路上のネットワーク機器（スイッチ）の中で、パケットの送信先に最も近いネットワーク機器（スイッチ）である旨を示す情報（通信経路先頭識別子）を保持する。
【０１８４】
また、経路制御の機能を外部の制御装置（コントローラ）に分離したネットワーク機器（スイッチ）で構成されるネットワークシステムに本発明を適用した場合、経路制御を行う制御装置（コントローラ）が、パケット転送を行うネットワーク機器（スイッチ）のうち、パケットの通信経路における先頭のネットワーク機器（スイッチ）に対して、上記情報（通信経路先頭識別子）を設定する。
【０１８５】
また、経路制御の機能を外部の制御装置（コントローラ）に分離したネットワーク機器（スイッチ）で構成されるネットワークシステムに本発明を適用した場合、上記情報（通信経路先頭識別子）によって、パケットの送信先に最も近いネットワーク機器（スイッチ）のみが送信元・送信先と代理ＴＣＰ接続を行うため、パケット転送を行うネットワーク機器（スイッチ）間でＴＣＰ接続を行う必要がない。
【０１８６】
＜付記＞
上記の実施形態の一部又は全部は、以下の付記のように記載することも可能である。但し、実際には、以下の記載例に限定されない。
【０１８７】
［付記１］
複数のスイッチと、
該複数のスイッチの各々に対して、パケットをフローとして一律に制御するためのルールとアクションとが定義されたフローエントリを設定するコントローラと
を含み、
該各スイッチは、
送信元ホストからＳＹＮパケットを受信する機能部と、
該送信元ホストとの代理ＴＣＰ接続に成功した場合、該コントローラに対して、経路計算及びフローエントリの設定を要求する機能部と、
該経路計算の結果として得られた通信経路上の先頭スイッチである場合、送信先ホストとの代理ＴＣＰ接続を行う機能部と、
該通信経路上の先頭スイッチではない場合、先頭スイッチと該送信先ホストとの代理ＴＣＰ接続のためのＳＹＮパケットを転送する機能部と
を備える
ネットワークシステム。
【０１８８】
［付記２］
付記２に記載のネットワークシステムであって、
該各スイッチは、
該通信経路上の先頭スイッチである場合、該送信先ホストとの代理ＴＣＰ接続が確立した時点で、該送信元ホストと該送信先ホストとの間の通信パケットのＴＣＰヘッダの確認応答番号とシーケンス番号とを変更するための変換用フローエントリを設定し、該変換用フローエントリを該コントローラに通知する機能部と、
該送信元ホストと該送信先ホストとの間の通信パケットの受信時に、該変換用フローエントリに従って、該通信パケットのＴＣＰヘッダの確認応答番号とシーケンス番号とを変更し、該送信元ホストと該送信先ホストとが直接代理ＴＣＰ接続しているように擬装する機能部と
を更に備える
ネットワークシステム。
【０１８９】
＜備考＞
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【０１９０】
１０…  コントローラ（ＯＦＣ）
１１…  ネットワーク管理部
１２…  経路計算部
１３…  パケット処理部
２０…  スイッチ（ＯＦＳ）
２１…  フローテーブル
２２…  フローテーブル管理部
２３…  パケット受信部
２４…  パケット送信部
２５…  パケット廃棄部
２６…  通信経路先頭解析部
２７…  代理ＴＣＰ接続部
３０…  ホスト
２００…  フローエントリ
２０１…  フローヘッダ
２０２…  アクション
２０３…  フローカウンタ
２０４…  通信経路先頭識別子
【図１】
0005966488.tif 000002
【図２】
0005966488.tif 000003
【図３】
0005966488.tif 000004
【図４】
0005966488.tif 000005
【図５】
0005966488.tif 000006
【図６】
0005966488.tif 000007
【図７】
0005966488.tif 000008
【図８Ａ】
0005966488.tif 000009
【図８Ｂ】
0005966488.tif 000010
【図９】
0005966488.tif 000011
【図１０】
0005966488.tif 000012