【発明が解決しようとする課題】
【0003】
Abhinav Pathak, Y. Angela Wang, Cheng Huang, Albert Greenberg, Y. Charlie Hu, Randy Kern, Jin Li, and Keith W. Ross: “Measuring and evaluating TCP splitting for cloud services”, in Proceedings of the 11th International Conference on Passive and Aactive Measurement (PAM ’10), Arvind Krishnamurthy and Bernhard Plattner (Eds.). Springer-Verlag, Berlin, Heidelberg, 41-50に記載されているように、最新の技術においてこの問題は接続のTCPクライアント(すなわち、TCP接続の開始者)に近いTCPプロキシをデプロイすることにより解決されてきた。クライアントはこのプロキシと新しい接続を確立する。基本的には、このような確立はプロキシに対するクライアントの近接性により短いネットワークディレイを保証する高速動作である。しかしながら、このソリューションにはプロキシがTCP接続の宛先サーバへの常時のかつ事前確立された接続を有するという欠点が伴う。
【0004】
TCP接続の確立に必要な時間の短縮を達成する第2の方法は、接続確立のために送られるTCPセグメントに対し早期応答を提供するTCPプロキシをデプロイすることである。プロキシがクライアントとサーバ間のパス上にある、理想的にはパスディレイ的な真ん中にある場合、接続は有効に加速される。この手法はプロキシにTCP SYN及びTCP SYN ACKセグメントが受信され次第それらに応答することを求める。また、プロキシはTCP SYNを可能な限り早くTCP宛先サーバに転送しなければならない。この方法の詳細は、Giuseppe Siracusano, Roberto Bifulco, Simon Kuenzer, Stefano Salsano, Nicola Blefari Melazzi, Felipe Huici: “On-the-Fly TCP Acceleration with Miniproxy”, in ACM SIGCOMM HotMiddlebox, 2016, and in Sameer Ladiwala, Ramaswamy Ramaswamy, and Tilman Wolf: “Transparent TCP acceleration”, in Comput. Commun. 32, Issue 4, March 2009, 691-702に記載されている。
【0005】
TCP接続を「再確立」する場合、上記方法の代わりに別の種類の最適化を適用することができる。特に、同一のサーバに対し2回目の接続を確立する場合、クライアントは1回目の接続の確立中に生成されたTCPセッションクッキーを含めることができる。そのようなクッキーによりクライアントは完全な3ウェイハンドシェイクを実行しなくてもサーバに対し直接データ送信を実行できるようになる。この方法は通常、(上記の引用文献『TCPファストオープン』に記載される)TCPファストオープンと呼ばれる。
【0006】
以上の観点から、本発明の目的は、容易に実装可能かつ少ない手間で動作可能な手段を採用することによりTCP接続の確立に必要な時間の大幅な短縮が達成されるようにネットワーク内のクライアントとサーバとの間のTCP接続の確立を加速する方法及びシステムを改善及び発展させることである。
【課題を解決するための手段】
【0007】
本発明によれば、上記目的はネットワーク内でクライアントとサーバとの間のTCP接続の確立を加速する方法により達成される。前記方法は、
前記ネットワーク内にパケット生成能力を持つ少なくとも1つのステートフルスイッチをデプロイし、
前記少なくとも1つのステートフルスイッチが
前記クライアントからTCP SYNセグメントを受信し、
前記サーバと連係してシーケンスナンバーを生成し、
前記サーバの代わりに前記TCP SYNセグメントに対し前記シーケンスナンバーを含む対応するSYN ACKセグメントで応答し、
前記クライアントから受信した前記TCP SYNセグメントを前記サーバに転送し、
一旦TCP接続が確立されると前記TCP接続に関連するいかなる状態も前記少なくとも1つのステートフルスイッチにより保持されないように前記クライアントと前記サーバとの間でやりとりされるセグメント群のための単なる転送要素として機能する
ように構成されることを含む。
【0008】
また、上記目的はネットワーク内でクライアントとサーバとの間のTCP接続の確立を加速するシステムにより達成される。前記システムは
パケット生成能力を持ち、入力/アウトプットポート、状態テーブル、有限状態機械(FSM)テーブル、及び前記状態テーブルと前記FSMテーブルとの間に実装されるフィードバックループを含む少なくとも1つのステートフルスイッチと、
前記少なくとも1つのステートフルスイッチの前記状態テーブル及び前記FSMテーブルにルール群を設定するためのコントローラーとを含み、
前記少なくとも1つのステートフルスイッチが
前記クライアントからTCP SYNセグメントを受信し、
前記サーバと連係してシーケンスナンバーを生成し、
前記サーバの代わりに前記TCP SYNセグメントに対し前記シーケンスナンバーを含む対応するSYN ACKセグメントで応答し、
前記クライアントから受信した前記TCP SYNセグメントを前記サーバに転送し、
一旦TCP接続が確立されると前記TCP接続に関連するいかなる状態も前記少なくとも1つのステートフルスイッチにより保持されないように前記クライアントと前記サーバとの間でやりとりされるセグメント群のための単なる転送要素として機能する
ように構成される。
【0009】
本発明によれば、TCP接続の確立に必要な時間の大幅な短縮は、TCPハンドシェイクアクセラレータとして機能するように構成された、スイッチ内パケット生成能力を持つ中間ステートフルスイッチ(例えば、ステートフルSDNスイッチ)を用いることにより達成可能であることが認識された。実施形態によれば、ステートフルスイッチにおいてTCPの3ウェイハンドシェイク加速を扱う状態機械が構成される。具体的に、このようなステートフルスイッチはSYN-ACK TCPセグメントの早期生成を実行するためにTCPサーバと連係する。本発明の実施形態によれば、上記の方法/システムは、スイッチに、TCP SYNセグメントに対し対応するSYN ACKで応答させ、他方、当該SYNはまた最終TCP宛先サーバに転送される。このスイッチは、一方がクライアントとの接続の確立、他方がサーバとの接続の確立である2つの並立したTCP接続の確立を実行する。この文脈において、本発明に従ってこのステートフルスイッチが完全なTCP接続のために状態を内部的に扱っていないことに注目することが重要である。その代わりに、当該ステートフルスイッチは3ウェイハンドシェイクを実行するために必要な最小限の状態を単に保存する。そのため、一旦TCP接続が確立されると、このスイッチは「通常の」スイッチとして機能するように構成される、すなわち、TCPクライアントとTCPサーバ間でやりとりされるセグメントを転送する単なる中間要素になることが可能である。
【0010】
従って、本発明は本格的なTCPプロキシをデプロイするのではなく3ウェイハンドシェイク中に単に状態を維持する中間ノードを用いることによりTCP接続の確立を加速する。具体的に、TCP接続に関する状態は当該スイッチに保存されず又は保存する必要がなく、接続の確立後SDNスイッチはTCP接続に関与しない。また、バッファの必要もTCP接続を閉じる又は開ける必要もない。実施形態によれば、シーケンスナンバー生成手順はTCPサーバからステートフル(例えば、SDN)スイッチに肩代わりされる。
【0011】
本発明の実施形態は、以下のステップを含む、TCP接続をプロキシせずにTCPサーバの代わりにTCP SYN-ACKセグメントを生成する方法に関する。
1)ネットワーク内に1つ又は複数のSDNスイッチをデプロイする。これらのスイッチはステートフル転送とスイッチ内パケット生成をサポートする必要がある。
2)これらのスイッチをSYN-ACKパケットを生成するように構成する。
3)TCPサーバをこのスイッチにより生成されたTCPシーケンスナンバーを用いるように構成する。
【0012】
本発明の実施形態は、高度なSDNソリューションの一部となってSDNスイッチとコントローラーの両方の高度化を提供することが可能である。本発明は一般に、高度TCP加速サービスとして通信事業者のデプロイメントにおいて用いることができる。その意味で、本発明は次世代SDN強化TMSの一部になる可能性がある。
【0013】
一実施形態によれば、クライアントから受信したTCP SYNセグメントに対し対応するSYN ACKセグメントで応答するため、上記ステートフルスイッチは前記クライアントから受信したTCP SYNセグメントを新しいセグメントにコピーし、生成された前記シーケンス(確認)ナンバーを前記新しいセグメントに含め、前記新しいセグメントを前記クライアントに転送する各ステップを実行してもよい。本発明の実施形態によれば、前記スイッチはスイッチ内パケット生成の原則に従ってSYN ACKセグメントを生成してもよい。
【0014】
一実施形態によれば、前記ステートフルスイッチは生成された前記シーケンスナンバーを前記サーバに伝えるように構成されてもよい。例えば、前記シーケンスナンバーを前記TCPサーバに伝えるため、前記ステートフルスイッチは、前記TCP SYNセグメントを前記サーバに転送する前に前記シーケンスナンバーを前記クライアントから受信した前記TCP SYNセグメントに加えられたカスタム追加TCPオプションに含めてもよい。或いは、前記ステートフルスイッチはパケットのヘッダーフィールド内で前記シーケンスナンバーをコード化してもよい。
【0015】
前記サーバが前記ステートフルスイッチにより生成された前記シーケンスナンバーの知識を得られるようにする別の方法が、前記サーバと前記ステートフルスイッチとの連係が前記サーバがシーケンスナンバーを生成するための共通のスキームにおいて前記ステートフルスイッチと合意するメカニズムを含むことであってもよい。換言すれば、前記ステートフルスイッチは前記サーバと共同で前記シーケンスナンバーを生成する。例えば、直接的な実装において、前記サーバと前記ステートフルスイッチは指定された順番に従って採用されるシーケンスナンバーのリストについて事前に合意してもよい。
【0016】
既に述べたように、前記ステートフルスイッチは前記TCPサーバの代わりにシーケンスナンバーの生成を担当し(前記TCPサーバは合意された生成スキームにより又は前記スイッチからの明白な情報により生成されたシーケンスナンバーの知識を有する)。従って、一実施形態によれば、前記サーバは、新たに開始されたTCP接続のために、すなわち、前記サーバのSYN ACKセグメントを生成するために、前記ステートフルスイッチにより生成されたシーケンスナンバーを用いるべきであるとしてもよい。通常、この実施形態は加速を実行する前記TCPサーバとステートフルネットワークスイッチとの合意を必要とする。
【0017】
或いは、前記サーバは前記サーバのSYN ACKセグメントを生成するために任意のシーケンスナンバーの使用を可能にされてもよい。この場合、前記SDNスイッチは、各TCP接続において前記クライアントとサーバにより交換される残りの全セグメントについてシーケンスナンバー間の(すなわち、この任意のシーケンスナンバーと前記サーバの代わりに前記SDNスイッチにより生成されたシーケンスナンバーとの間の)変換を実行するように構成されてもよい。
【0018】
前記SDNスイッチにより生成されたシーケンスナンバーに関して、いくつかの異なる実装を実現してもよい。例えば、一実施形態によれば、前記SDNスイッチは前記クライアントから受信したTCP SYNセグメントからシーケンスナンバーをコピーすることによりシーケンスナンバーを生成してもよい。この実装は、生成された前記シーケンスナンバーは前記サーバに個別に伝達されなくてもよいという利点をもたらす。これは、実際、前記サーバはSYNパケットから直接前記シーケンスナンバーを読み取ることができるからである。
【0019】
代替の実施形態によれば、前記シーケンスナンバーは前記SDNスイッチに格納されたカウンターから引き出されてもよく、又は前記SDNスイッチが実行する任意のアルゴリズムにより生成されてもよい。更に別の実施形態によれば、前記シーケンスナンバーは生成用のパケットテンプレートにより決定されてもよい。当業者には容易に理解されるように、上に列挙したものは網羅的なものではなく、前記SDNスイッチがシーケンスナンバーを生成する更に別の方法が構想されてもよい。ただし、いずれの場合でも、前記スイッチは生成されたシーケンスナンバーを前記サーバに伝える、又は前記サーバとスイッチはそれぞれに適用されるシーケンスナンバー生成メカニズムについて(前記サーバがこの生成メカニズムからシーケンスナンバーを引き出すことができるように)事前に合意している。
【0020】
その接続確立手順が加速された前記TCPサーバは、接続の確立がそのようなプロセスを経ていることを認識していなければならない。実際、TCPクライアントから受信したSYNについて、当該SYNがパス内のSDNステートフルスイッチのいずれかにより生成されたSYN-ACKを起動した場合、前記サーバがそのようなスイッチにより生成されたシーケンスナンバーを用いることは有利である。前述のように、シーケンスナンバーの生成とサーバへの伝達の手順は上記の方法のいずれであってもよい。
【0021】
前記サーバにより受信された新しいTCP接続確立の内のサブセットだけが実際に加速された場合、前記サーバは(新しいシーケンスナンバーは前記TCPクライアントとTCPサーバの間のパス上のSDNステートフルスイッチのいずれかにより既に生成されているため)新しいシーケンスナンバーを生成する必要があるTCP SYNセグメントとそうではないTCP SYNセグメントとを区別できなくてはならない。一実施形態によれば、これは加速が提供された際TCP SYNセグメントにタグを付けることにより端的に実現可能である、すなわち、前記SDNスイッチが、前記クライアントから受信したTCP SYNセグメントを前記サーバに転送する前にそれらにタグを挿入する。そのために、任意の公知のタグ付け手法を用いてもよい。
【0022】
前記TCPサーバの代わりにシーケンスナンバーを生成する場合と同様、前記スイッチはSYN-ACKパケットを生成するために適切な追加情報を用いてもよい。このため、一実施形態によれば、前記SDNコントローラーはSYN ACKパケット生成のためのTCPオプションの承認又は許可について前記ステートフルSDNスイッチを設定するように構成されてもよい。例えば、この設定は、(IETF RFC 2018: “TCP Selective Acknowledgment Options”, October 1996に示されるように)許可された選択的確認応答のための種類4TCPオプションを加えること(又は加えないこと)に関するものであってよい。このTCPオプションはSYNパケットにおいてのみ認められ、送り手が“選択的確認応答”を処理できることを示す。このオプションを加えるかどうかは要求されたサーバ次第で前記SDNコントローラーにより設定されてもよい、又は前記スイッチにより過去のSYN-ACKから探査/学習されてもよい。
【0023】
加えて又はその代わりに、この設定は、(IETF RFC 7323: “TCP Selective Acknowledgment Options”, October 2014に示されるように)ウィンドウスケーリング用の種類3TCPオプションを加えること(又は加えないこと)に関するものであってよい。このTCPオプションは、SYN-ACKの中に正確なウィンドウスケーリング情報、すなわち、TCPサーバウィンドウスケーリングファクターにマッチする情報を持つことが要求される。これはそうでないと信頼できるTCP移転が確保されないからである。前記と同様、このオプションを加えるかどうかは、要求されたサーバ次第で前記SDNコントローラーにより設定されてもよい、又は前記スイッチにより過去のSYN-ACKから探査/学習されてもよい。
【0024】
更に別の実施形態によれば、この設定は、(IETF RFC 793: “TRANSMISSION CONTROL PROTOCOL−DARPA INTERNET PROGRAM PROTOCOL SPECIFICATION”, September 1981に示されるように)最大セグメントサイズ通知のための種類2TCPオプションを加えること(又は加えないこと)に関するものであってよい。このオプションは、接続に役立つと期待される最大TCPセグメントサイズの他の側を通知するために用いられる。ただし、このオプションを持つことが決定的に重要というわけではない。前記と同様、このオプションを加えるかどうかは、要求されたサーバ次第で前記SDNコントローラーにより設定してもよい、又は前記スイッチにより過去のSYN-ACKから探査/学習されてもよい。
【0025】
本発明の内容を有利なやり方で設計し発展させる方法がいくつもある。このため、従属する請求項、及び図示された、例としての本発明の好適な実施形態についての以下の説明を参照されたい。図に補助された本発明の好適な実施形態の説明と関連して、本発明の内容の一般的に好適な実施形態及び更なる進展が説明されよう。