(57)【要約】【課題】中継サーバを介して通信を行う端末間でのＴＣＰオプションの不整合によるスループットの低下を防ぐ。【解決手段】中継サーバ１００は互いに通信を行う２つのクライアント端末Ａ２００、クライアント端末Ｂ３００からのＳＹＮメッセージ受信を待ち、クライアント端末Ａ２００、クライアント端末Ｂ３００の双方からのＳＹＮメッセージ受信後、クライアント端末Ａ２００から受信したＳＹＮメッセージに含まれるＴＣＰオプションを含むＳＹＮ  ＡＣＫメッセージを生成し、クライアント端末Ｂ３００へ送信するとともに、クライアント端末Ｂ３００から受信したＳＹＮメッセージに含まれるＴＣＰオプションを含むＳＹＮ  ＡＣＫメッセージを生成し、クライアント端末Ａ２００へ送信する。【選択図】図１
2009164947.tif 000002
【特許請求の範囲】
【請求項１】
複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記パケットデータを送信する端末と当該サーバとを接続するための第１のコネクションアドレスと、当該サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアが記載された転送テーブルと、
前記端末それぞれからＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した場合、該ＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを送信するコネクション構築メッセージ処理部とを有し、
前記コネクション構築メッセージ処理部は、前記転送テーブルに記載されたコネクションアドレスペアの一方のコネクションアドレスを利用して前記ＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信するとともに、前記一方のコネクションアドレスを利用して受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信するサーバ。
【請求項２】
請求項１に記載のサーバにおいて、
前記コネクションアドレスは、前記端末のＩＰアドレス及びポート番号と、当該サーバのＩＰアドレス及びポート番号とから構成されていることを特徴とするサーバ。
【請求項３】
複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記端末からＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した場合、該ＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを送信するコネクション構築メッセージ処理部を有し、
前記コネクション構築メッセージ処理部は、前記複数の端末のうち１つの端末から送信されたＳＹＮメッセージを受信した際、該受信したＳＹＮメッセージに含まれる宛先ＩＰアドレスと宛先ポート番号とを宛先とするＳＹＮメッセージを受信済みかどうかを調べ、受信済みである場合、前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信済みであるＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとするＳＹＮ  ＡＣＫメッセージを生成して送信するとともに、前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信したＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとするＳＹＮ  ＡＣＫメッセージを生成して送信するサーバ。
【請求項４】
請求項３に記載のサーバにおいて、
当該サーバが前記ＳＹＮメッセージの受信に利用するＩＰアドレスおよびポート番号からなるＴＣＰコネクション待受け用アドレスと、該ＴＣＰコネクション待受け用アドレスの使用状況とが、対応付けられて登録された空きアドレス管理テーブルと、
前記端末に対して前記ＴＣＰコネクション待受け用アドレスを通知するコネクションペア作成部とをさらに有し、
前記コネクションペア作成部は、前記端末から通信開始を要求されると前記使用状況が未使用となっているＴＣＰコネクション待受け用アドレスを前記端末に通知し、前記空きアドレス管理テーブルに対して、前記通知したＴＣＰコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録し、前記ＴＣＰコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているＴＣＰコネクション待受け用アドレスを利用した３Ｗａｙ−Ｈａｎｄｓｈａｋｅメッセージの送受信を完了した際に当該使用状況を未使用と登録することを特徴とするサーバ。
【請求項５】
複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記パケットデータを送信する端末と前記サーバとを接続するための第１のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージとは異なるＳＹＮメッセージを受信済みである場合、前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信する処理と、
前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信する処理とを有するパケット転送方法。
【請求項６】
複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記複数の端末のうち１つの端末から送信されたＳＹＮメッセージを受信した際、該受信したＳＹＮメッセージに含まれる宛先ＩＰアドレスと宛先ポート番号とを宛先とするＳＹＮメッセージを受信済みかどうかを調べる処理と、
受信済みである場合、前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信済みであるＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとする前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して送信する処理と、
前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信したＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとする前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して送信する処理とを有するパケット転送方法。
【請求項７】
請求項６に記載のパケット転送方法において、
前記端末から通信開始を要求されると、前記ＳＹＮメッセージの受信に利用するＩＰアドレスおよびポート番号からなるＴＣＰコネクション待受け用アドレスに対応付けられた使用状況が未使用となっているＴＣＰコネクション待受け用アドレスを前記端末に通知する処理と、
前記通知したＴＣＰコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録する処理と、
前記ＴＣＰコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているＴＣＰコネクション待受け用アドレスを利用した３Ｗａｙ−Ｈａｎｄｓｈａｋｅメッセージの送受信を完了した際に当該使用状況を未使用と登録する処理とを有することを特徴とするパケット転送方法。
【請求項８】
複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記パケットデータを送信する端末と前記サーバとを接続するための第１のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージとは異なるＳＹＮメッセージを受信済みである場合、前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信する手順と、
前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信する手順とを前記サーバに実行させるプログラム。
【請求項９】
複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記複数の端末のうち１つの端末から送信されたＳＹＮメッセージを受信した際、該受信したＳＹＮメッセージに含まれる宛先ＩＰアドレスと宛先ポート番号とを宛先とするＳＹＮメッセージを受信済みかどうかを調べる手順と、
受信済みである場合、前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信済みであるＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信済みであるＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとする前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して送信する手順と、
前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含み、前記受信したＳＹＮメッセージの宛先ＩＰアドレス及び宛先ポート番号を送信元アドレスとし、前記受信したＳＹＮメッセージの送信元ＩＰアドレス及び送信元ポート番号を宛先アドレスとする前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して送信する手順とを前記サーバに実行させるプログラム。
【請求項１０】
請求項９に記載のプログラムにおいて、
前記端末から通信開始を要求されると、前記ＳＹＮメッセージの受信に利用するＩＰアドレスおよびポート番号からなるＴＣＰコネクション待受け用アドレスに対応付けられた使用状況が未使用となっているＴＣＰコネクション待受け用アドレスを前記端末に通知する手順と、
前記通知したＴＣＰコネクション待受け用アドレスと対応付けられた使用状況を使用中と登録する手順と、
前記ＴＣＰコネクション待受け用アドレスと対応付けられた使用状況が使用中となっている場合、当該使用状況が使用中となっているＴＣＰコネクション待受け用アドレスを利用した３Ｗａｙ−Ｈａｎｄｓｈａｋｅメッセージの送受信を完了した際に当該使用状況を未使用と登録する手順とを前記サーバに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアント端末間で送受信されるパケットの転送を行うサーバ、パケット転送方法およびプログラムに関し、特にクライアント端末間で構築されるＴＣＰコネクションを終端せずにパケット転送を行うサーバ、パケット転送方法およびプログラムに関する。
【背景技術】
【０００２】
近年企業や部門をまたがったコラボレーションが活発化するなど業務形態が多様化しており、異なる企業ＬＡＮや部門ＬＡＮに接続しているクライアント端末同士（すなわち異なるプライベートネットワークに接続しているクライアント端末同士）の通信へのニーズが急速に高まっている。こうした背景から近年異なるプライベートネットワークに接続するクライアント端末同士の通信を可能にする方式が提案されている。従来方式はグローバルネットワークに設置された中継サーバを介することによって、異なるプライベートネットワークに接続しているクライアント端末同士の通信を実現している。こうした方式を採用している代表的なシステムとしてはＳｏｆｔＥｔｈｅｒ、ＰａｃｋｅｔｉｘＶＰＮやＯｐｅｎＶＰＮなどが挙げられる。
【０００３】
通常、プライベートネットワークにはグローバルネットワークからの通信を遮断するファイヤウォールが設置されている。ファイヤウォールはプライベートネットワークからグローバルネットワークへ向けて構築が開始される特定のＴＣＰコネクション上の通信のみ許可する設定がなされているため（通常はＷｅｂ閲覧用通信に用いられる宛先ポート８０番のＴＣＰ通信（すなわちＨＴＴＰ通信）及び宛先ポート４４３番のＴＣＰ通信（すなわちＨＴＴＰＳ通信））、従来方式ではまず、プライベートネットワーク上のクライアント端末から中継サーバに対してＴＣＰコネクションの構築を開始する。クライアント端末と中継サーバの間でＴＣＰコネクションの構築が完了した後はクライアント端末と中継サーバの間で双方向の通信が行える状態なる。その後、クライアント端末は通信相手のクライアント端末に渡したいデータを中継サーバとの間に構築したＴＣＰコネクションを利用して送信する。中継サーバは受信したデータを通信相手のクライアント端末との間に構築したＴＣＰコネクションを利用して送信する。
【０００４】
以下こうした方式をＦｉｒｅｗａｌｌ透過通信方式と呼ぶ。従来のＦｉｒｅｗａｌｌ透過通信方式では中継サーバがクライアント端末間でパケットの転送を行う際ＴＣＰコネクションを終端していたため、中継サーバにパケットの再送処理やフロー制御処理に伴う負荷がかかっていた。
【０００５】
一方で、ＴＣＰコネクション上を流れるデータの転送方式として、前述のように中継サーバにおいて処理負荷の高いＴＣＰコネクションの終端処理をすることなく、パケットのヘッダを書き換えて転送するＴＣＰスプライシング方式がある（非特許文献１参照）。
【０００６】
図８に非特許文献1に記載されているパケット転送方式を示す。図８ではクライアント端末Ａ１０００、Ｂ２０００と中継サーバ３０００が示されており、クライアント端末Ａ１０００、Ｂ２０００は中継サーバ３０００を介して通信を行う。クライアント端末Ａ１０００はまず中継サーバ３０００に対してＳＹＮメッセージを送信し（Ｓ１０００）、３Ｗａｙ−Ｈａｎｄｓｈａｋｅを行い（Ｓ１０００〜Ｓ３０００）、ＴＣＰコネクションを中継サーバ３０００に対して構築する。中継サーバ３０００は内部のパケット転送テーブル３１００にクライアント端末Ａ１０００との間で構築したＴＣＰコネクションに関する情報を登録する。また、クライアント端末Ａ１０００とのＴＣＰコネクション構築完了後、クライアント端末Ｂ２０００に対してＳＹＮメッセージを送信し（Ｓ４０００）、３Ｗａｙ−Ｈａｎｄｓｈａｋｅを行って（Ｓ４０００〜Ｓ６０００）ＴＣＰコネクションをクライアント端末Ｂ２０００に対して構築する。クライアント端末Ａ１０００、Ｂ２０００双方との間でＴＣＰコネクションが構築されたのち、中継サーバ３０００は一方のＴＣＰコネクションから受信したパケットの他方のコネクションへの転送を開始する（Ｓ７０００）。
【０００７】
パケットの転送は具体的に以下のように行う（Ｓ８０００〜Ｓ９０００）。図８の例ではパケット転送テーブル３１００にはクライアント端末Ａ１０００、Ｂ２０００との間に構築した２つのＴＣＰコネクションについて、
・クライアント側ＩＰアドレス、ポート番号
・中継サーバ側ＩＰアドレス、ポート番号
・転送開始前までにクライアント端末及び中継サーバが当該ＴＣＰコネクションを利用してどのＳｅｑ番号のパケットまで送信したか
が登録されており、中継サーバ３０００は一方のＴＣＰコネクションから受信したパケットのＳｅｑ番号、Ａｃｋ番号、送信元および宛先ＩＰアドレス、ポート番号（および書き変えに伴うチェックサム再計算）を書き換え、他方のＴＣＰコネクションへパケットに転送する。中継サーバ３０００はＴＣＰコネクションを終端した場合に必要なパケットロスに備えた再送用パケットのバッファリング処理や、受信したパケットのＳｅｑ番号やＡｃｋ番号の解析によるパケットロスの検出処理、パケットロス検出に伴うパケットの再送処理、フロー制御処理等を行わない。これらの処理は全てクライアント端末で行われる。したがって非特許文献１に記載されるパケット転送方式では従来方式に比べ中継サーバの負荷が軽減される。
【非特許文献１】D. A. Maltz, et al., “TCP Splice application layer proxy performance,” Journal of High Speed Networks, Volume 8, Issue 3, 1999, p.225-240
【発明の開示】
【発明が解決しようとする課題】
【０００８】
上述した非特許文献１の方式の課題は、中継サーバを介して互いに通信を行うクライアント端末間のＴＣＰオプションの整合を考慮していない点にある。
【０００９】
通常、ＴＣＰではオプションとして最大セグメントサイズ（以下、ＭＳＳ）、ウィンドウスケール（以下、ＷＳ）、選択的受信確認（以下、ＳＡＣＫ）など様々なものがある。こうしたオプションは３Ｗａｙ−ＨａｎｄＳｈａｋｅ時にＳＹＮメッセージおよびＳＹＮ  ＡＣＫメッセージによってＴＣＰコネクションを終端する双方の端末間で整合される。たとえばＭＳＳについては、双方ＳＹＮメッセージ、ＳＹＮ  ＡＣＫメッセージに利用したいＭＳＳ値を挿入して送信し、お互いが提示したＭＳＳ値の小さい方をＴＣＰコネクション構築後の通信に利用する。また、ＷＳについてはＷＳを利用するか否かのフラグ（以下、ＷＳ利用フラグ）及び利用する場合のシフトカウントをＳＹＮメッセージ、ＳＹＮ  ＡＣＫメッセージに挿入し、双方ともＷＳ利用フラグがＯｎの場合コネクション構築後の通信においてＷＳを利用し、ＳＹＮメッセージ、ＳＹＮ  ＡＣＫメッセージにより相手から通知されたシフトカウント値を利用して相手からの広告ウィンドウサイズを計算する。ＳＡＣＫについても同様にＳＡＣＫを利用するか否かのフラグ（以下、ＳＡＣＫ利用フラグ）をＳＹＮメッセージ、ＳＹＮ  ＡＣＫメッセージに挿入し、双方ともＳＡＣＫ利用フラグがＯｎの場合コネクション構築後の通信においてＳＡＣＫを利用する。
【００１０】
非特許文献１の方式では、３Ｗａｙ−ＨａｎｄＳｈａｋｅ後の再送処理やフロー制御等はクライアント端末と中継サーバではなく、クライアント端末間で行われる。このためＴＣＰオプションはクライアント端末間で整合しておく必要がある。
【００１１】
しかし、非特許文献１には３Ｗａｙ−Ｈａｎｄｓｈａｋｅがクライアント端末と中継サーバの間で行われることしか記載されておらず、クライアント端末間のＴＣＰオプションの整合については触れられていない。例えば図８においてクライアント端末Ａ１０００、Ｂ２０００共に３Ｗａｙ−ＨａｎｄＳｈａｋｅ時にＷＳ利用フラグをＯｎにしたＳＹＮメッセージおよびＳＹＮ  ＡＣＫメッセージを中継サーバ３０００に送信したとしても、中継サーバ３０００がＷＳ利用フラグをオフにしたＳＹＮ  ＡＣＫメッセージおよびＳＹＮメッセージをクライアント端末に送信すると、クライアント端末は中継サーバ３０００との間で構築したＴＣＰコネクションにおいてＷＳを利用せずにフロー制御を行うことになる。このため、ＷＳを利用した場合と比較してクライアント端末間の通信スループットが低くなる可能性がある。また、中継サーバがＷＳ利用フラグをオンにしたＳＹＮ  ＡＣＫメッセージおよびＳＹＮメッセージをクライアント端末に送信すると、一方のクライアント端末ではＷＳ利用フラグがオン、他方のクライアント端末ではＷＳ利用フラグがオフとなっている場合、一方のクライアント端末ではＷＳを利用してフロー制御を行おうとし、他方のクライアント端末ではＷＳを利用せずにフロー制御を行おうとするため、クライアント端末間で正しくフロー制御が行えなくなる。ＳＡＣＫについても同様のことが言える。特にＷＳやＳＡＣＫはＴＣＰコネクションのスループットに与える影響が大きく、これらのオプションが整合できなかった場合にはスループットが大幅に低下する可能性がある。
【００１２】
上記の課題は従来のＦｉｒｅｗａｌｌ透過通信方式のように通信を行う二つのクライアント端末の双方が中継サーバに対してＴＣＰコネクションの構築を開始するケースにも当てはまる。
【００１３】
本発明の目的は、中継サーバに対して構築したＴＣＰコネクションを利用して互いに通信する２つのクライアント端末の双方が中継サーバに対してＴＣＰコネクションの構築を開始する場合において、クライアント端末間のＴＣＰオプションを整合させるサーバ、パケット転送方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するために本発明は、
複数の端末が互いに送受信するパケットデータを中継するサーバであって、
前記パケットデータを送信する端末と当該サーバとを接続するための第１のコネクションアドレスと、当該サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアが記載された転送テーブルと、
前記端末それぞれからＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した場合、該ＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを送信するコネクション構築メッセージ処理部とを有し、
前記コネクション構築メッセージ処理部は、前記転送テーブルに記載されたコネクションアドレスペアの一方のコネクションアドレスを利用して前記ＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信するとともに、前記一方のコネクションアドレスを利用して受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信する。
【００１５】
また、複数の端末が互いに送受信するパケットデータを転送するサーバにおけるパケット転送方法であって、
前記パケットデータを送信する端末と前記サーバとを接続するための第１のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージとは異なるＳＹＮメッセージを受信済みである場合、前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信する処理と、
前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信する処理とを有する。
【００１６】
また、複数の端末が互いに送受信するパケットデータを転送するサーバに実行させるプログラムであって、
前記パケットデータを送信する端末と前記サーバとを接続するための第１のコネクションアドレスと、前記サーバと前記パケットデータの宛先である端末とを接続するための第２のコネクションアドレスとが対応付けられたコネクションアドレスペアの一方のコネクションアドレスを利用して、前記端末からＴＣＰコネクションを構築するためのＳＹＮメッセージを受信した際に、前記コネクションアドレスペアの他方のコネクションアドレスを利用して前記受信したＳＹＮメッセージとは異なるＳＹＮメッセージを受信済みである場合、前記受信済みであるＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信したＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記一方のコネクションアドレスを利用して送信する手順と、
前記受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含む前記受信済みであるＳＹＮメッセージの応答メッセージであるＳＹＮ  ＡＣＫメッセージを生成して前記他方のコネクションアドレスを利用して送信する手順とを前記サーバに実行させる。
【発明の効果】
【００１７】
以上説明したように本発明においては、２つのコネクションアドレスがお互いに対応付けられたコネクションペアのうち、一方のコネクションアドレスを利用して受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成し、当該ＳＹＮ  ＡＣＫメッセージを他方のコネクションアドレスを利用して送信する構成としたため、中継サーバを介して通信を行う端末間でのＴＣＰオプションの不整合によるスループットの低下を防ぐことができる。
【発明を実施するための最良の形態】
【００１８】
以下に、本発明の実施の形態について図面を参照して詳細に説明する。
（第１の実施の形態）
まず本発明の第１の実施の形態における通信システムの構成について説明する。
【００１９】
図１に本発明の第１の実施の形態における通信システムの構成例を示す。第１の実施の形態における通信システムは中継サーバ１００、クライアント端末Ａ２００、クライアント端末Ｂ３００、ファイヤウォール４００、プライベートネットワーク５００、インターネット６００から成る。
【００２０】
クライアント端末Ａ２００、クライアント端末Ｂ３００は中継サーバ１００に対して構築したＴＣＰコネクションを利用して互いに通信を行う。なお、クライアント端末Ａ２００、クライアント端末Ｂ３００は図８と異なりプライベートネットワーク５００ではなく、インターネット６００に直接接続していても良い。
【００２１】
ファイヤウォール４００はプライベートネットワーク５００に対する外部からの接続を遮断する装置であり、例えばプライベートネットワーク５００に接続する端末（クライアント端末Ａ２００、クライアント端末Ｂ３００など）からインターネット６００に接続する端末に対して構築されたＴＣＰコネクション上の通信のみ許可する設定がなされている。
【００２２】
中継サーバ１００は転送テーブル１０１、コネクションペア作成部１０２、コネクション構築メッセージ処理部１０３、パケット転送部１０４から成る。
＜転送テーブル１０１＞
転送テーブル１０１にはクライアント端末から受信したパケットの転送を行うのに必要な情報が記載される。具体的に中継サーバ１００はクライアント端末からパケットを受信すると、パケットの転送先を判断しパケットヘッダの書き換え処理を行う。これら転送先判断と書き換え処理に必要な情報が転送テーブル１０１に登録される。
【００２３】
図２に転送テーブル１０１の例を示す。図２を参照すると、転送テーブル１０１にはエントリ番号、コネクションアドレス情報、転送開始時Ｓｅｑ番号情報、ＴＣＰオプション情報が登録されている。また、エントリｘとしてクライアント端末Ａ２００とクライアント端末Ｂ３００が中継サーバ１００を介して通信を行う際のエントリの例が登録されている。
【００２４】
コネクションアドレス情報は、通信を行う２つのクライアント端末が中継サーバ１００を介して他のクライアント端末と通信を行う際に利用するＴＣＰコネクションのＩＰアドレス、ポート番号（アドレス情報）であり、クライアント端末側、中継サーバ１００側双方のアドレス情報がクライアント端末毎に記載されている。たとえば図２のエントリｘにはコネクション１の第１のコネクションアドレス情報としてクライアント端末Ａ２００が中継サーバ１００に対して構築したＴＣＰコネクションのコネクションアドレス情報が登録されており、クライアント端末Ａ２００がＩＰアドレスＩＰ＿Ａ、ポート番号Ｐｏｒt＿Ａを、中継サーバ１００がＩＰ＿Ｘ，Ｐｏｒｔ＿Ｘをそれぞれ利用する旨登録されている。また、コネクション２の第２のコネクションアドレス情報として中継サーバ１００がクライアント端末Ｂ３００に対して構築したＴＣＰコネクションのコネクションアドレス情報が登録されており、クライアント端末Ｂ３００がＩＰアドレスＩＰ＿Ｂ、ポート番号Ｐｏｒt＿Ｂを、中継サーバ１００がＩＰ＿Ｘ，Ｐｏｒｔ＿Ｘをそれぞれ利用する旨登録されている。これらの第１及び第２のコネクションアドレス情報がコネクションアドレスペアとなって登録されている。
【００２５】
転送開始時Ｓｅｑ番号情報には、中継サーバ１００がクライアント端末から受信したパケットを他のクライアント端末へ転送する処理を開始した際に、クライアント端末及び中継サーバ１００がどのＳｅｑ番号までのパケットを送信したかが登録される。図２のエントリｘには、コネクション１側の情報として転送開始までにクライアント端末Ａ２００がＳｅｑ番号：ａ＋１までのパケットを、中継サーバ１００がＳｅｑ番号：ｂ＋１までのパケットをそれぞれ送信した旨登録されている。
【００２６】
ＴＣＰオプション情報には、クライアント端末が中継サーバ１００に対して提示したＴＣＰオプション情報が登録される。図２のエントリｘには、コネクション１側の情報としてクライアント端末Ａ２００がＭＳＳ：１４６０バイト、ＷＳ：フラグＯｎ、５ビットシフト、ＳＡＣＫ：フラグＯｎを提示した旨登録されている。
＜コネクションペア作成部１０２＞
コネクションペア作成部１０２は中継サーバ１００がクライアント端末から受信したパケットについて、どのＴＣＰコネクションから受信したパケットをどのＴＣＰコネクションに転送するかを決定し、これらＴＣＰコネクションのコネクションアドレス情報を転送テーブル１０１に登録する。
【００２７】
コネクションペア作成部１０２はクライアント端末から受信したパケットの転送を開始する前に転送テーブル１０１に通信を行う２つのクライアント端末（図１の場合はクライアント端末Ａ２００、クライアント端末Ｂ３００）が利用するＴＣＰコネクションのコネクションアドレス情報を登録しておく。以下具体的な登録方法の例を説明する。
【００２８】
例えば、各クライアント端末にＩＤを割り当て、各クライアント端末は他のクライアント端末と通信を開始する前に自身のＩＤと通信相手のクライアント端末との通信に利用するＴＣＰコネクションのコネクションアドレス情報、及び通信相手のクライアント端末のＩＤをコネクションペア作成部１０２に通知する方法が考えられる。これによりコネクションペア作成部１０２は、互いに通信を行う２つのクライアント端末のコネクションアドレス情報を取得し、転送テーブル１０１に当該アドレス情報を登録する。例えば図１に示す構成において、クライアント端末Ａ２００、クライアント端末Ｂ３００が通信を行う場合、予めコネクションアドレス情報としてクライアント端末Ａ２００がＩＰアドレス：ＩＰ＿Ａ、ＴＣＰポート番号：Ｐｏｒｔ＿Ａを、クライアント端末Ｂ３００がＩＰアドレス：ＩＰ＿Ｂ、ＴＣＰポート番号：Ｐｏｒｔ＿Ｂをコネクションペア作成部１０２に通知しておき、通信開始時にクライアント端末Ａ２００がコネクションペア作成部１０２に対して通信相手がクライアント端末Ｂ３００であることを通知することで、上記アドレス情報をコネクションペア作成部１０２が転送テーブル１０１に登録する。
【００２９】
なお、クライアント端末がコネクションペア作成部１０２に予め通知しておくアドレス情報は複数でもよく、例えばクライアント端末Ａ２００がアドレス情報としてＩＰアドレス：ＩＰ＿Ａ，ＴＣＰポート番号：Ｐｏｒｔ＿Ａ１〜ｎ、クライアント端末Ｂ３００がアドレス情報としてＩＰアドレス：ＩＰ＿Ｂ、ＴＣＰポート番号：Ｐｏｒｔ＿Ｂ１〜ｎをそれぞれ一括して通知しておき、クライアント端末Ａ２００からクライアント端末Ｂ３００と通信したい旨通知を受けた場合に、コネクションペア作成部１０２が予め通知されたアドレス情報の中から未使用のアドレス情報を選択し、クライアント端末Ａ２００、クライアント端末Ｂ３００それぞれに対して、クライアント端末Ａ２００とクライアント端末Ｂ３００との間の通信に利用すべきアドレス情報を通知しても良い。なお、例えばクライアント端末Ａ２００とクライアント端末Ｂ３００との間の通信においてクライアント端末Ａ２００が利用すべきアドレス情報としてＩＰアドレス：ＩＰ＿Ａ、ＴＣＰポート番号：Ｐｏｒｔ＿Ａ１が選択された場合、クライアント端末Ａ２００がクライアント端末Ｃと通信する際にはコネクションペア作成部１０２はＩＰアドレス：ＩＰ＿Ａ、ＴＣＰポート番号：Ｐｏｒｔ＿ＡＸ（２＜Ｘ≦ｎ）を選択する。複数のアドレス情報を一括して登録することにより、クライアント端末間で通信を開始するたびに、コネクションペア作成部１０２にアドレス情報を逐一通知する手間を省くことができる。
＜コネクション構築メッセージ処理部１０３＞
コネクション構築メッセージ処理部１０３は、クライアント端末とＴＣＰコネクションを構築するためのメッセージ、すなわち３Ｗａｙ−Ｈａｎｄｓｈａｋｅ（以下３ＷＨ）メッセージの送受信を行う。また、パケット転送部１０４に対してクライアント端末から受信したパケットの転送開始のタイミングを指示するとともに、転送開始前までに、クライアント端末と中継サーバ１００が３ＷＨメッセージの送受信に利用したコネクションアドレスを使って、それぞれＳｅｑ番号が何番のデータパケットまで送信したかを転送テーブルに記録しておく。以下具体的な処理内容を説明する。
【００３０】
まず、３ＷＨメッセージの送受信処理について説明する。図３にクライント端末からＳＹＮメッセージを受信した際のコネクション構築メッセージ処理部１０３の処理フローチャートを示す。コネクション構築メッセージ処理部１０３はＳＹＮメッセージを受信すると（Ｓ１０１）、受信したＳＹＮメッセージのコネクションアドレス情報（送信元ＩＰアドレス、ＴＣＰポート番号、宛先ＩＰアドレス、ＴＣＰポート番号）に一致するアドレス情報を持つエントリ（以下ＳＹＮ対応エントリと呼ぶ）が転送テーブル１０１に登録されているか否かをチェックする（Ｓ１０２）。
【００３１】
ＳＹＮ対応エントリが登録されていない場合はこれを廃棄し（Ｓ１０３）、登録されている場合はＳＹＮ対応エントリに登録されている他方のコネクションアドレスを利用してＳＹＮメッセージを受信済みか否かチェックする（Ｓ１０４）。
【００３２】
受信していない場合は受信したＳＹＮメッセージの内容をキャッシュしておく（Ｓ１０５）。受信済みの場合は、Ｓ１０１において受信したＳＹＮメッセージ（新規受信ＳＹＮメッセージ）とキャッシュしておいたＳＹＮメッセージのうち、ＳＹＮ対応エントリに登録されたコネクションアドレス情報と同一の送信元・宛先アドレス情報を持つＳＹＮメッセージ（新規受信ＳＹＮ対応キャッシュメッセージ）を元にＳＹＮ  ＡＣＫメッセージを生成し、送信する（Ｓ１０６）。
【００３３】
新規受信ＳＹＮ対応キャッシュメッセージに対しては、新規受信ＳＹＮメッセージを元に以下のＳＹＮ  ＡＣＫメッセージを生成し、送信する。
・送信元ＩＰアドレス／ポート番号
新規受信ＳＹＮ対応キャッシュメッセージの宛先ＩＰアドレスとポート番号（つまり中継サーバが新規受信ＳＹＮ対応キャッシュメッセージ受信に利用したＩＰアドレス、ポート番号）。
・宛先ＩＰアドレス／ポート番号
新規受信ＳＹＮ対応キャッシュメッセージの送信元ＩＰアドレスとポート番号。
・Ｓｅｑ番号／Ａｃｋ番号
Ｓｅｑ番号：ランダムに選択した値。新規受信ＳＹＮメッセージのＳｅｑ番号と同じ値でも良い。
【００３４】
Ａｃｋ番号：新規受信ＳＹＮ対応キャッシュメッセージのＳｅｑ番号に１を加えた値。
・ＴＣＰオプション情報
新規受信ＳＹＮメッセージのＴＣＰオプション情報。
【００３５】
また、新規受信ＳＹＮメッセージに対しては、新規受信ＳＹＮ対応キャッシュメッセージを元に以下のＳＹＮ  ＡＣＫメッセージを生成し、送信する。
・送信元ＩＰアドレス／ポート番号
新規受信ＳＹＮメッセージの宛先ＩＰアドレスとポート番号（つまり中継サーバが新規受信ＳＹＮメッセージ受信に利用したＩＰアドレス、ポート番号）。
・宛先ＩＰアドレス／ポート番号
新規受信ＳＹＮメッセージの送信元ＩＰアドレスとポート番号。
・Ｓｅｑ番号／Ａｃｋ番号
Ｓｅｑ番号：ランダムに選択した値。新規受信ＳＹＮ対応キャッシュメッセージのＳｅｑ番号と同じ値でも良い。
【００３６】
Ａｃｋ番号：新規受信ＳＹＮメッセージのＳｅｑ番号に１を加えた値。
・ＴＣＰオプション情報
新規受信ＳＹＮ対応キャッシュメッセージのＴＣＰオプション情報。
【００３７】
次に、転送開始タイミングの指示について説明する。クライアント端末と中継サーバの間で３ＷＨメッセージの送受信を完了した後（直後とは限らない）、パケット転送部１０４に対してデータパケットの転送開始を指示する。
【００３８】
指示のタイミングは中継サーバ１００においてクライアント端末から受信したパケットを解析し中継サーバ１００が決定する方法や、クライアント端末から中継サーバ１００に対してデータパケットの転送開始のタイミングを通知するための特別のメッセージを送信する方法を採ることができる。
【００３９】
前者の場合は、３ＷＨメッセージの交換が完了した直後に受信したパケットから転送を開始したり、３ＷＨメッセージの最後のメッセージ、すなわちＳＹＮ  ＡＣＫメッセージに対するＡＣＫメッセージ以降のパケット（ＡＣＫメッセージ自体も含む）から転送開始を指示したりしても良い。また、３ＷＨメッセージの送受信完了後、更にクライアント端末と中継サーバ１００の間でＳＳＬのハンドシェイクメッセージの送受信を完了した後に開始を指示しても良い。
【００４０】
また、データパケット転送開始直前までにクライアント端末との通信によってクライアント端末及び中継サーバ１００がどのＳｅｑ番号のパケットまで送信したかを転送テーブル１０１に登録しておく。
＜パケット転送部１０４＞
パケット転送部１０４は、中継サーバ１００がクライアント端末から受信したパケットのＩＰヘッダおよびＴＣＰヘッダの書き換えを行い、パケットを他方のクライアントへ転送する。具体的な処理内容は以下のとおりである。
【００４１】
受信パケットの送信元および宛先ＩＰアドレス、ポート番号と一致するエントリを転送テーブル１０１から検索し当該エントリ（以下、受信パケット対応エントリ）を参照して、送信元ＩＰアドレス、ポート番号、宛先ＩＰアドレス、ポート番号、Ｓｅｑ番号、Ａｃｋ番号を以下のように書き変えて、チェックサム再計算後ネットワークに送出する。
・送信元ＩＰアドレス、ポート番号
受信パケット対応エントリに登録されたコネクションアドレスの内、パケット受信に利用したコネクションアドレス（以下送信元コネクションアドレス）ではない方のコネクションアドレス（以下転送先コネクションアドレス）。図２に示す転送テーブル１０１において受信パケット対応エントリがエントリｘ、送信元コネクションアドレスがコネクション１のコネクションアドレスの場合、コネクション２側のサーバ側アドレス情報、ＩＰ＿Ｘ、Ｐｏｒｔ＿Ｘを送信元ＩＰアドレス、ポート番号とする。
・宛先ＩＰアドレス、ポート番号
転送先コネクションアドレスの端末側のアドレス情報を宛先ＩＰアドレス、ポート番号とする。上述の例の場合、ＩＰ＿Ｂ、Ｐｏｒｔ＿Ｂとする。
・Ｓｅｑ番号、Ａｃｋ番号
Ｓｅｑ番号：受信パケットのＳｅｑ番号−受信パケット対応エントリに記載された送信元コネクションのクライアント端末側のＳｅｑ番号＋受信パケット対応エントリに記載された転送先コネクションのサーバ側Ｓｅｑ番号。
【００４２】
Ａｃｋ番号：受信パケットのＡｃｋ番号−受信パケット対応エントリに記載された送信元コネクションのサーバ側Ｓｅｑ番号＋受信パケット対応エントリに記載された転送先コネクションのクライアント端末側Ｓｅｑ番号。
【００４３】
次に本発明の第１の実施の形態における通信システムの動作について説明する。
【００４４】
図１の構成においてクライアント端末Ａ２００とクライアント端末Ｂ３００が中継サーバ１００を介して通信する際の動作例を説明する。
＜アドレス情報の登録＞
まず、前述の方法等によって転送テーブル１０１にクライアント端末Ａ２００、クライアント端末Ｂ３００がクライアント端末Ａ２００−クライアント端末Ｂ３００の通信に利用するコネクションアドレス情報が登録される。例えば転送テーブル１０１が図２に示すフォーマットの場合、コネクションアドレス情報として、コネクション１側にクライアント端末Ａ２００のＩＰアドレス、ＩＰ＿ＡとＴＣＰポート番号Ｐｏｒｔ＿Ａが、コネクション２側にクライアント端末Ｂ３００のＩＰアドレス、ＩＰ＿ＢとＴＣＰポート番号Ｐｏｒｔ＿Ｂがそれぞれ登録される。中継サーバ１００のＩＰアドレスＩＰ＿Ｘ、ポート番号Ｐｏｒｔ＿Ｘもサーバ側のアドレス情報として登録される。なお、図２の例ではコネクション１、２でサーバ側アドレス情報が共通だが、異なっていても良い。転送開始時Ｓｅｑ番号情報およびＴＣＰオプション情報はこの段階では登録されない。
＜ＳＹＮメッセージの送出＞
次にクライアント端末Ａ２００又はクライアント端末Ｂ３００のいずれかが中継サーバ１００に対してＳＹＮメッセージを送信する。以降のメッセージシーケンスを図４に示す。
［Ｓ２１１］
クライアント端末Ａ２００が中継サーバ１００に対してＩＰ＿Ａ：Ｐｏｒｔ＿ＡからＳＹＮメッセージを送信する。中継サーバ１００がこのメッセージを受信するとコネクション構築メッセージ処理部１０３は受信したＳＹＮメッセージの送信元および宛先ＩＰアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを転送テーブル１０１から検索する。この場合エントリ番号ｘのエントリが検索される。また、コネクション構築メッセージ処理部１０３は受信したＳＹＮメッセージに記載されたＴＣＰオプション情報、ＭＳＳ：１４６０バイト、ＷＳ：フラグＯｎ、５バイトシフト、ＳＡＣＫ：フラグＯｎをエントリｘに登録する。
【００４５】
次にコネクション構築メッセージ処理部１０３は、エントリｘに登録されているもう一方のコネクションアドレス情報（すなわち送信元ＩＰアドレスＩＰ＿Ｂ、ポート番号Ｐｏｒｔ＿Ｂ、宛先ＩＰアドレスＩＰ＿Ｘ、ポート番号Ｐｏｒｔ＿Ｘ）からＳＹＮメッセージを受信しているか否かを調べる。Ｓ２１１の段階では未だ受信していないのでＳＹＮメッセージがキャッシュされる。
［Ｓ２２１］
Ｓ２１１の後、クライアント端末Ｂ３００が中継サーバ１００に対してＩＰ＿Ｂ：Ｐｏｒｔ＿ＢからＳＹＮメッセージを送信する。中継サーバ１００がこのメッセージを受信するとコネクション構築メッセージ処理部１０３は転送テーブル１０１に受信したＳＹＮメッセージの送信元および宛先ＩＰアドレス、ポート番号と同一のコネクションアドレス情報を持つエントリを検索する。この場合エントリ番号ｘのエントリが検索される。また、コネクション構築メッセージ処理部１０３は受信したＳＹＮメッセージに記載されたＴＣＰオプション情報、ＭＳＳ：１４５４バイト、ＷＳ：フラグＯｎ、３バイトシフト、ＳＡＣＫ：フラグＯｎをエントリｘに登録する。
【００４６】
次にコネクション構築メッセージ処理部１０３は、エントリｘに登録されているもう一方のコネクションアドレス情報（すなわち送信元ＩＰアドレスＩＰ＿Ａ、ポート番号Ｐｏｒｔ＿Ａ、宛先ＩＰアドレスＩＰ＿Ｘ、ポート番号Ｐｏｒｔ＿Ｘ）からＳＹＮメッセージを受信しているか否かを調べる。Ｓ２１１の段階で既にＩＰ＿Ａ、Ｐｏｒｔ＿Ａを送信元、ＩＰ＿Ｘ、Ｐｏｒｔ＿Ｘを宛先とするＳＹＮメッセージを受信しているので、ＳＹＮ  ＡＣＫメッセージを生成し送信する。以下、ＳＹＮ  ＡＣＫメッセージ送信時の具体的な動作を述べる。
［Ｓ２１２、Ｓ２２２］
コネクション構築メッセージ処理部１０３は、以下のＳＹＮ  ＡＣＫメッセージを生成しネットワークに送出する。
・送信元ＩＰアドレス、ポート番号
Ｓ２１１でキャッシュしたＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージについてはキャッシュしたＳＹＮメッセージの宛先ＩＰアドレス、ポート番号（ＩＰ＿Ｘ、Ｐｏｒｔ＿Ｘ）に、Ｓ２２１で受信したＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージついては受信したＳＹＮメッセージの宛先ＩＰアドレス、ポート番号（ＩＰ＿Ｘ、Ｐｏｒｔ＿Ｘ）にする。
・宛先ＩＰアドレス、ポート番号
Ｓ２１１でキャッシュしたＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージについてはキャッシュしたＳＹＮメッセージの送信元ＩＰアドレス、ポート番号（ＩＰ＿Ａ、Ｐｏｒｔ＿Ａ）に、Ｓ２２１で受信したＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージついては受信したＳＹＮメッセージの宛先ＩＰアドレス、ポート番号（ＩＰ＿Ｂ、Ｐｏｒｔ＿Ｂ）にする。
・Ｓｅｑ番号、Ａｃｋ番号
Ｓｅｑ番号は、ランダムな値に変換しても良いし、キャッシュまたは受信したメッセージのものをそのまま利用しても良い。
【００４７】
Ａｃｋ番号については、Ｓ２１１でキャッシュしたＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージについてはキャッシュしたＳＹＮメッセージのＳｅｑ番号に１足したもの（ａ＋１）を、Ｓ２２１で受信したＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージついては受信したＳＹＮメッセージのＳｅｑ番号に１足したもの（ｃ＋１）とする。
・ＴＣＰオプション情報
Ｓ２１１でキャッシュしたＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージについてはＳ２２１で受信したＳＹＮメッセージに含まれるＴＣＰオプション情報を、Ｓ２２１で受信したＳＹＮメッセージに対して送信するＳＹＮ  ＡＣＫメッセージついてはＳ２１１でキャッシュしたＳＹＮメッセージに含まれるＴＣＰオプション情報をそれぞれ含める。
【００４８】
これにより、クライアント端末Ａ２００、クライアント端末Ｂ３００はそれぞれ以下のＳＹＮ  ＡＣＫメッセージを受信する。
・クライアント端末Ａ２００の受信するＳＹＮ  ＡＣＫメッセージ（Ｓ２１２）
（１）送信元ＩＰアドレス：ポート番号／宛先ＩＰアドレス：ポート番号
ＩＰ＿Ｘ：Ｐｏｒｔ＿Ｘ／ＩＰ＿Ａ：Ｐｏｒｔ＿Ａ
（２）Ｓｅｑ番号、Ａｃｋ番号
Ｓｅｑ番号／Ａｃｋ番号：ｂ／ａ＋１
（３）ＴＣＰオプション
クライアント端末Ｂ３００がＳＹＮメッセージによって提示したＴＣＰオプション情報。
【００４９】
ＭＳＳ：１４５４バイト、ＷＳ：フラグＯｎ、３ビットシフト、ＳＡＣＫ：フラグＯｎ
・クライアント端末Ｂ３００の受信するＳＹＮ  ＡＣＫメッセージ（Ｓ２２２）
（１）送信元ＩＰアドレス：ポート番号／宛先ＩＰアドレス：ポート番号
ＩＰ＿Ｘ：Ｐｏｒｔ＿Ｘ／ＩＰ＿Ｂ：Ｐｏｒｔ＿Ｂ
（２）Ｓｅｑ番号、Ａｃｋ番号
Ｓｅｑ番号／Ａｃｋ番号：ｄ／ｃ＋１
（３）ＴＣＰオプション
クライアント端末Ａ２００がＳＹＮメッセージによって提示したＴＣＰオプション情報。
【００５０】
ＭＳＳ：１４６０バイト、ＷＳ：フラグＯｎ、５ビットシフト、ＳＡＣＫ：フラグＯｎ
［Ｓ２１３、Ｓ２２３］
Ｓ２１２、Ｓ２２２のＳＹＮ  ＡＣＫメッセージによってクライアント端末Ａ２００にはクライアント端末Ｂ３００が提示したＴＣＰオプション情報が、クライアント端末Ｂ３００にはクライアント端末Ａが提示したＴＣＰオプション情報がそれぞれ提示されるため、クライアント端末Ａ２００、クライアント端末Ｂ３００はクライアント端末Ａ２００−クライアント端末Ｂ３００間の通信で利用するＴＣＰコネクションのオプション値を整合させることができる。図４の場合、ＴＣＰコネクションのオプション値はＭＳＳ：１４５４バイト、ＷＳ：フラグＯｎ、Ａ→Ｂに広告するＷｉｎｄｏｗサイズは５ビットシフト、Ｂ→Ａに広告するＷｉｎｄｏｗサイズは３ビットシフト、ＳＡＣＫ：フラグＯｎとなる。
＜３ＷＨの完了＞
［Ｓ２１４、Ｓ２１５］
オプション値整合後、クライアント端末Ａ２００、クライアント端末Ｂ３００は中継サーバ１００へＡＣＫメッセージを送信し、クライアント端末Ａ２００及び、クライアント端末Ｂ３００と中継サーバ１００の間の３ＷＨメッセージの交換が完了する。
＜データパケットの転送＞
クライアント端末Ａ２００、クライアント端末Ｂ３００との３ＷＨメッセージ交換完了以降、中継サーバ１００はクライアント端末Ａ２００、クライアント端末Ｂ３００間のデータパケットの転送を開始する。データパケットの転送開始のタイミングは中継サーバ１００においてクライアント端末Ａ２００、クライアント端末Ｂ３００から受信したパケットを解析し中継サーバ１００が決定する方法や、クライアント端末Ａ２００、クライアント端末Ｂ３００から中継サーバ１００に対してデータパケットの転送開始のタイミングを通知するための特別のメッセージを送信する方法を採ることができる。
【００５１】
前者の場合は、図４に示すように３ＷＨメッセージの交換が完了した直後に受信したパケットから転送を開始したり（Ｓ２３１）、ＡＣＫメッセージ（Ｓ２１４、Ｓ２１５）以降のパケット（ＡＣＫメッセージ自体も含む）から転送を開始したりしても良い。また、３ＷＨメッセージの交換完了後、更にクライアント端末Ａ２００、クライアント端末Ｂ３００と中継サーバ１００の間でＳＳＬのハンドシェイクメッセージの交換を完了した後に開始しても良い。
【００５２】
コネクション構築メッセージ処理部１０３はデータパケット転送開始までにクライアント端末Ａ２００およびクライアント端末Ｂ３００との通信によってＳｅｑ番号およびＡｃｋ番号がどこまで進んだかを転送テーブル１０１に登録する。図４の例ではＳＹＮ  ＡＣＫメッセージに対するＡＣＫメッセージ受信（Ｓ２１４、Ｓ２２４）後からデータパケットの転送を開始するので、ＡＣＫメッセージのＳｅｑ番号、Ａｃｋ番号を元に、クライアント端末Ａ２００側のＴＣＰコネクションについてはクライアント端末側がＳｅｑ番号：ａ＋１まで、サーバ側がＳｅｑ番号：ｂ＋１までそれぞれ送信完了、クライアント端末Ｂ３００側のＴＣＰコネクションについてはクライアント端末側がＳｅｑ番号：ｃ＋１まで、サーバ側がＳｅｑ番号：ｄ＋１までそれぞれ送信完了した旨転送テーブル１０１に登録する。
【００５３】
データパケットの転送を開始して以降は、受信パケットの送信元ＩＰアドレス、ポート番号と一致するエントリを転送テーブル１０１から検索し（図２に示す転送テーブルの場合、エントリｘが該当）、当該エントリを参照して、送信元ＩＰアドレス、ポート番号、宛先ＩＰアドレス、ポート番号、Ｓｅｑ番号、Ａｃｋ番号を以下のように書き変えて、チェックサム再計算後ネットワークに送出する（Ｓ２１５、Ｓ２２５）。
・送信元ＩＰアドレス、ポート番号
クライアント端末Ａ２００、クライアント端末Ｂ３００から受信したパケットの送信元ＩＰアドレス、ポート番号を中継サーバ１００のＩＰアドレス、ポート番号（ＩＰ＿Ｘ：Ｐｏｒｔ＿Ｘ）に変換する。
・宛先ＩＰアドレス、ポート番号
クライアント端末Ａ２００から受信したパケットについては宛先ＩＰアドレス、ポート番号をクライアント端末Ｂ３００のアドレス情報（ＩＰ＿Ｂ、Ｐｏｒｔ＿Ｂ）に、クライアント端末Ｂ３００から受信したパケットについては宛先ＩＰアドレス、ポート番号をクライアント端末Ａ２００のアドレス情報（ＩＰ＿Ａ、Ｐｏｒｔ＿Ａ）に変換する。
・Ｓｅｑ番号、Ａｃｋ番号
（１）クライアント端末Ａ２００から受信したパケットのＳｅｑ番号：受信パケットのＳｅｑ番号−エントリｘに記載された転送開始時のクライアント端末Ａ２００のＳｅｑ番号＋エントリｘに記載された転送開始時のクライアント端末ＢのＳｅｑ番号。
【００５４】
Ｓ２１５の場合、（ａ＋１＋ｘ）−（ａ＋１）＋（ｄ＋１）
（２）クライアント端末Ａ２００から受信したパケットのＡｃｋ番号：受信パケットのＡｃｋ番号−エントリｘに記載された転送開始時のクライアント端末Ａ２００との通信における中継サーバ１００側のＳｅｑ番号＋エントリｘに記載された転送開始時のクライアント端末Ｂ３００との通信における中継サーバ１００側のＳｅｑ番号。
【００５５】
Ｓ２１５の場合、（ｂ＋１）−（ｂ＋１）＋（ｃ＋１）
（３）クライアント端末Ｂ３００から受信したパケットのＳｅｑ番号：受信パケットのＳｅｑ番号−エントリｘに記載された転送開始時のクライアント端末Ｂ３００のＳｅｑ番号＋エントリｘに記載された転送開始時のクライアント端末Ａ２００のＳｅｑ番号。
（４）クライアント端末Ｂ３００から受信したパケットのＡｃｋ番号：受信パケットのＡｃｋ番号−エントリｘに記載された転送開始時のクライアント端末Ｂ３００との通信における中継サーバ１００側のＳｅｑ番号＋エントリｘに記載された転送開始時のクライアント端末Ａ２００との通信における中継サーバ１００側のＳｅｑ番号。
【００５６】
以上述べたように、第１の実施の形態ではクライアント端末が中継サーバに対して構築したＴＣＰコネクションを利用して互いに通信を行う通信システムにおいて、クライアント端末から中継サーバへのＴＣＰコネクションの構築を開始する場合に、一方のクライアント端末が中継サーバへ送信したＳＹＮメッセージに記載されるＴＣＰオプション情報が他方のクライアント端末へ提示され、中継サーバを介して通信を行うクライアント端末同士でＴＣＰオプションの整合することができる。
【００５７】
その理由は、中継サーバ内のコネクション構築メッセージ処理部が、互いに通信を行うクライアント端末の双方からのＳＹＮメッセージを受信した後に、一方のクライアント端末から受信したＳＹＮメッセージに記載されたＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成し、当該ＳＹＮ  ＡＣＫメッセージを他方のクライアント端末から受信したＳＹＮメッセージに対するＳＹＮ  ＡＣＫメッセージとして送信するからである。
（第２の実施の形態）
次に本発明の第２の実施の形態について説明する。図５に第２の実施の形態における通信システムの構成例を示す。
【００５８】
図５に示す構成ではクライアント端末Ａ２００とクライアント端末Ｂ３００とが中継サーバ１１０を介して通信を行う。クライアント端末Ａ２００、クライアント端末Ｂ３００は中継サーバ１１０と直接ＴＣＰコネクションを構築することはできず、一旦Ｗｅｂ  Ｐｒｏｘｙ７００とＴＣＰコネクションを構築した後、Ｗｅｂ  Ｐｒｏｘｙ７００が中継サーバ１１０に対してＴＣＰコネクションを構築する。クライアント端末は通信相手のクライアント端末に送信したいデータをＷｅｂ  Ｐｒｏｘｙ７００との間で構築したＴＣＰコネクションを利用して送信し、Ｗｅｂ  Ｐｒｏｘｙ７００が当該ＴＣＰコネクションで受信したデータを中継サーバ１１０との間で構築したＴＣＰコネクションへ転送する。中継サーバ１１０は、クライアント端末が送信したデータをＷｅｂ  Ｐｒｏｘｙ７００との間に構築したＴＣＰコネクションによって受信する。
【００５９】
第２の実施の形態は図５に示す構成のように、中継サーバ１１０とクライアント端末の間でＴＣＰコネクションが終端されるような構成においても、中継サーバ１１０に対して直接ＴＣＰコネクションの構築を行うノード（図５の場合Ｗｅｂ  Ｐｒｏｘｙ７００）同士のＴＣＰオプションを整合させることを目的とする（図５の例においてはクライアント端末Ａ２００側Ｗｅｂ  Ｐｒｏｘｙ７００とクライアント端末Ｂ３００側Ｗｅｂ  Ｐｒｏｘｙ７００の間でＴＣＰオプションを整合させる）。
【００６０】
図６に第２の実施の形態における中継サーバ１１０によって実現されるＴＣＰオプション整合の例を示す。なお、図６に示す全てのケースにおいてクライアント端末Ａ２００、クライアント端末Ｂ３００が中継サーバ１１０を介して通信を行うものとする。
【００６１】
図６（Ａ）はＷｅｂ  ＰｒｏｘｙＡ７０１によってクライアント端末Ａ２００と中継サーバ１１０の間でＴＣＰコネクションが終端され、Ｗｅｂ  ＰｒｏｘｙＢ７０２によってクライアント端末Ｂ３００と中継サーバ１１０の間でＴＣＰコネクションが終端されるケースを示している。この場合、中継サーバ１１０はＷｅｂ  ＰｒｏｘｙＡ７０１とＷｅｂ  ＰｒｏｘｙＢ７０２の間のＴＣＰオプションを整合させる。
【００６２】
図６（Ｂ）はＷｅｂ  ＰｒｏｘｙＣ７０３およびＷｅｂ  ＰｒｏｘｙＡ７０１によってクライアント端末Ａ２００と中継サーバ１１０の間でＴＣＰコネクションが終端され、Ｗｅｂ  ＰｒｏｘｙＢ７０２によってクライアント端末Ｂ３００と中継サーバ１１０の間でＴＣＰコネクションが終端されるケースを示している。この場合、中継サーバ１１０はＷｅｂ  ＰｒｏｘｙＡ７０１とＷｅｂ  ＰｒｏｘｙＢ７０２の間のＴＣＰオプションを整合させる。
【００６３】
図６（Ｃ）はＷｅｂ  ＰｒｏｘｙＣ７０３、Ｗｅｂ  ＰｒｏｘｙＡ７０１によってクライアント端末Ａ２００と中継サーバ１１０の間でＴＣＰコネクションが終端されるケースを示している。この場合、中継サーバ１１０はＷｅｂ  ＰｒｏｘｙＡ７０１とクライアント端末Ｂ３００の間のＴＣＰオプションを整合させる。
【００６４】
第１の実施の形態では、中継サーバ１００がＳＹＮメッセージを受信する前にコネクションペア作成部１０２が転送テーブル１０１にクライアント端末間の通信に利用するコネクションアドレス情報を登録しておくことで、ＳＹＮメッセージで提示されたＴＣＰオプション情報の提示先（すなわちＳＹＮメッセージにて提示されたＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージの送信先）を判断していた。しかし、本実施の形態ではＴＣＰオプション情報の提示先がクライアント端末でないケースがあり、提示先のコネクションアドレス情報をＳＹＮメッセージ受信前に把握しておくことが不可能である。
【００６５】
例えば、図６の（Ａ）の場合Ｗｅｂ  ＰｒｏｘｙＡ７０１からＳＹＮメッセージで提示されたＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを、Ｗｅｂ  ＰｒｏｘｙＢ７０２が中継サーバ１１０へのＳＹＮメッセージ送信に利用した送信元ＩＰアドレス、送信元ポート番号へ送信する必要があるが、当該送信元アドレス情報はＷｅｂ  ＰｒｏｘｙＢ７０２がＳＹＮメッセージを送信する際にＷｅｂ  ＰｒｏｘｙＢ７０２内部で自動的に決められるため、ＳＹＮメッセージ送信前に外部から判断することができない。このため、第１の実施の形態における中継サーバ１００は、中継サーバ１００とクライアント端末の間でＴＣＰコネクションが終端されるような構成に対応することができない。
【００６６】
本実施の形態ではこのようなケースに対応するため、中継サーバ１１０が受信したＳＹＮメッセージの宛先アドレス情報を元にＴＣＰオプション情報の提示先を判断する方法を採る。本実施の形態において中継サーバ１１０はＳＹＮメッセージの受信に利用するＩＰアドレス、ポート番号のペア（以下、ＴＣＰコネクション待受け用アドレスと呼ぶ）を１つ以上持ち、互いに通信を行うクライアント端末のペアは、中継サーバ１１０のどのＴＣＰコネクション待受け用アドレスを利用するかをはじめに決めておく。以降、互いに通信を行うクライアント端末のペアが利用するＴＣＰコネクション待受け用アドレスをランデブーアドレスと呼ぶ。
【００６７】
クライアント端末は自身が構築したＴＣＰコネクションを終端しているＷｅｂ  Ｐｒｏｘｙ等の途中ノードに対してランデブーアドレスにＴＣＰコネクションを構築するよう要求する。クライアント端末が直接中継サーバ１１０とＴＣＰコネクションを構築できる場合は、自らが直接ランデブーアドレスに対してＳＹＮメッセージを送信する。
【００６８】
中継サーバ１１０は同一ランデブーアドレス宛てのＳＹＮメッセージを２つ受け取ることになる。中継サーバ１１０はＳＹＮメッセージで提示されたＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成し、当該ＳＹＮメッセージの宛先ランデブーアドレスと同一のランデブーアドレス宛ての他方のＳＹＮメッセージの送信元アドレスへＳＹＮ  ＡＣＫメッセージを送信する。これによりＴＣＰオプションの整合が実現される。
【００６９】
以下、本実施の形態における中継サーバ１１０の構成について説明する。図５を参照すると本実施の形態における中継サーバ１１０は空きアドレス管理テーブル１１５を持つ点が第１の実施の形態における中継サーバ１００と異なる。
【００７０】
図７に空きアドレス管理テーブル１１５の例を示す。空きアドレス管理テーブル１１５には、中継サーバ１１０が保持するＴＣＰコネクション待受け用アドレスとその使用状況が管理されている。なお、図７にはＴＣＰコネクション待受け用アドレスとしてＩＰアドレスのみ記載したが、ＩＰアドレスとポート番号の組やポート番号のみでも良い。前者の場合ＩＰアドレスが同一でもポート番号が異なれば異なるアドレスとして扱われる。使用状況はコネクションペア作成部１１２によって更新される。
【００７１】
コネクションペア作成部１１２は互いに通信を行いたいクライアント端末のペアがあると、空きアドレス管理テーブル１１５から使用されていないＴＣＰコネクション待受け用アドレスを検索し、未使用のＴＣＰコネクション待受け用アドレスをランデブーアドレスとして選択、クライアント端末へ通知する。なお、通知の方法としてはクライアント端末にメールを送信したり別途Ｗｅｂページを設けてそこへクライアント端末がアクセスして確認したりするなどの方法が考えられる。
【００７２】
コネクションペア作成部１１２はランデブーアドレスとして選択したＴＣＰコネクション待受け用アドレスの使用状況を使用中として空きアドレス管理テーブル１１５を更新するとともに、ランデブーアドレスを転送テーブル１０１へサーバ側のコネクションアドレス情報として登録する。
【００７３】
クライアント端末へランデブーアドレスを通知した後、２つの異なる送信元アドレスからランデブーアドレス宛てのＳＹＮメッセージを受信した場合、コネクションペア作成部１１２は転送テーブル１０１へ端末側のコネクションアドレス情報としてＳＹＮメッセージの送信元アドレスを登録する。
（ランデブーアドレスの解放）
空きアドレス管理テーブル１１５に使用中と登録されているランデブーアドレスは、当該ランデブーアドレス宛に２つの異なる送信元アドレスからＳＹＮメッセージを受信し、中継サーバ１００が当該ＳＹＮメッセージの受信に利用したコネクションアドレスに対してＳＹＮ  ＡＣＫメッセージを送信後、当該ＳＹＮ  ＡＣＫメッセージに対するＡＣＫメッセージを受信した時点（すなわち３ＷＨメッセージの送受信が完了した時点）で、未使用に戻す。これによりＳＹＮ  ＡＣＫメッセージのパケットロス等によりＳＹＮメッセージが再送されるケースに対応することができる。
【００７４】
コネクション構築メッセージ処理部１０３やパケット転送部１０４は第１の実施の形態と同様の処理を行うため説明を省略する。
【００７５】
第２の実施の形態ではクライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末と中継サーバの間でＴＣＰコネクションを終端するノード（以下、ＴＣＰコネクション終端ノード）が存在し、ＴＣＰコネクション終端ノードが中継サーバへのＴＣＰコネクションの構築を開始する場合に、一方のＴＣＰコネクション終端ノードが中継サーバへ送信したＳＹＮメッセージに記載されるＴＣＰオプション情報が他方のＴＣＰコネクション終端ノードへ提示され、ＴＣＰコネクション終端ノード同士でＴＣＰオプションの整合することができる。
【００７６】
その理由は、中継サーバが受信したＳＹＮメッセージに含まれるＴＣＰオプションの提示先をＳＹＮメッセージの宛先アドレスから判断するため、事前にＳＹＮメッセージの送信元アドレスが分からない場合であっても、ＳＹＮメッセージに含まれるＴＣＰオプションの提示先を正しく判断できるためである。
【００７７】
なお、図１に示す中継サーバ１００または図５に示す中継サーバ１１０の処理は、目的に応じて作製された論理回路で行うようにしても良い。また、処理内容を記述したプログラムを中継サーバ１００，１１０にて読取可能な記録媒体に記録し、この記録媒体に記録されたプログラムを中継サーバ１００，１１０に読み込ませ、実行するものであっても良い。中継サーバ１００，１１０にて読取可能な記録媒体とは、フロッピーディスク（登録商標）、光磁気ディスク、ＤＶＤ、ＣＤなどの移設可能な記録媒体の他、中継サーバ１００，１１０に内蔵されたＨＤＤ等を指す。この記録媒体に記録されたプログラムは、中継サーバ１００，１１０内のＣＰＵ（不図示）にて読み込まれ、ＣＰＵの制御によって、上述したものと同様の処理が行われる。ここで、中継サーバ１００，１１０は、プログラムが記録された記録媒体から読み込まれたプログラムを実行するコンピュータとして動作するものである。
【００７８】
以上説明したように、本発明においては以下の効果を有する。
【００７９】
第１の効果は、クライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末から中継サーバへのＴＣＰコネクションの構築を開始する場合に、一方のクライアント端末が中継サーバへ送信したＳＹＮメッセージに記載されるＴＣＰオプション情報が他方のクライアント端末へ提示され、中継サーバを介して通信を行うクライアント端末同士でＴＣＰオプションの整合することができる点である。
【００８０】
その理由は、中継サーバ内のコネクション構築メッセージ処理部が、一方のクライアント端末から受信したＳＹＮメッセージに記載されたＴＣＰオプション情報を含むＳＹＮ  ＡＣＫメッセージを生成し、当該ＳＹＮ  ＡＣＫメッセージを他方のクライアント端末から受信したＳＹＮメッセージに対するＳＹＮ  ＡＣＫメッセージとして送信するからである。
【００８１】
第２の効果は、クライアント端末が中継サーバを介して通信を行う通信システムにおいて、クライアント端末と中継サーバの間でＴＣＰコネクションを終端するノード（以下、ＴＣＰコネクション終端ノード）が存在し、ＴＣＰコネクション終端ノードが中継サーバへのＴＣＰコネクションの構築を開始する場合に、一方のＴＣＰコネクション終端ノードが中継サーバへ送信したＳＹＮメッセージに記載されるＴＣＰオプション情報が他方のＴＣＰコネクション終端ノードへ提示され、ＴＣＰコネクション終端ノード同士でＴＣＰオプションの整合することができる。
【００８２】
その理由は、中継サーバが受信したＳＹＮメッセージに含まれるＴＣＰオプションの提示先をＳＹＮメッセージの宛先アドレスから判断するため、事前にＳＹＮメッセージの送信元アドレスが分からない場合であっても、ＳＹＮメッセージに含まれるＴＣＰオプションの提示先を正しく判断できるためである。
【図面の簡単な説明】
【００８３】
【図１】本発明の第１の実施の形態の構成の例を示す図である。
【図２】図１に示した第１の実施の形態における転送テーブルの例を示す図である。
【図３】図１に示した第１の実施の形態におけるデータ転送開始までのメッセージシーケンスの例を示す図である。
【図４】図１に示した第１の実施の形態におけるコネクション構築メッセージ処理部のＳＹＮメッセージ受信時の動作フローを示す図である。
【図５】本発明の第２の実施の形態の構成の例を示す図である。
【図６】図５に示した第２の実施の形態におけるＴＣＰコネクションの構築例を示す図である。
【図７】図５に示した第２の実施の形態における空きアドレス管理テーブルの例を示す図である。
【図８】一般的なパケット転送方式の一例を示す図である。
【符号の説明】
【００８４】
１００，１１０    中継サーバ
１０１    転送テーブル
１０２，１１２    コネクションペア作成部
１０３    コネクション構築メッセージ処理部
１０４    パケット転送部
１１５    空きアドレス管理テーブル
２００    クライアント端末Ａ
３００    クライアント端末Ｂ
４００    ファイヤウォール
５００    プライベートネットワーク
６００    インターネット
７００〜７０３    Ｗｅｂ  Ｐｒｏｘｙ
【図１】
2009164947.tif 000003
【図２】
2009164947.tif 000004
【図３】
2009164947.tif 000005
【図４】
2009164947.tif 000006
【図５】
2009164947.tif 000007
【図６】
2009164947.tif 000008
【図７】
2009164947.tif 000009
【図８】
2009164947.tif 000010