(57)【要約】【課題】  クライアント装置とサーバ装置間にコネクションを確立する際に、そのコネクションが不完全な状態のままになることを回避しつつ、ＳＹＮＦｌｏｏｄ攻撃を確実に防御する。【解決手段】  クライアント装置とサーバ装置との間にコネクションを確立する際に、下りのコネクションの確立を要求する旨の第１のメッセージをクライアント装置からサーバ装置へ送信し、その第１のメッセージを受信したサーバ装置に、上りのコネクションの確立を要求する旨の第２のメッセージをクライアント装置へ送信させる。その第２のメッセージを受信したクライアント装置に、該第２のメッセージを受信したことを表すとともに上記下りのコネクションの確立を要求する旨の第３のメッセージをサーバ装置へ送信させ、その第３のメッセージを受信した前記サーバ装置に、該第３のメッセージの内容に基づいてその下りのコネクションを確立させる。【選択図】      図４
2006042156.tif 000002
【特許請求の範囲】
【請求項１】
相手装置から送信されたメッセージを受信する受信手段と、
前記相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記受信手段により受信された場合に、前記相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記相手装置へ送信する送信手段と、
前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記受信手段により受信された場合に、該第３のメッセージから前記識別子を読み出す読み出し手段と、
前記読み出し手段により読み出された前記識別子に基づいて、前記相手装置との間に前記下りのコネクションを確立するコネクション確立手段と
を有するサーバ装置。
【請求項２】
前記読み出し手段は、
前記識別子の他に、前記下りのコネクションを介して前記相手装置へデータを送信する際の通信態様を指示する付加データが前記第３のメッセージに含まれている場合には、前記識別子に加えて該付加データを読み出し、
前記コネクション確立手段は、
前記読み出し手段により読み出された前記識別子と前記付加データとに基づいて前記下りのコネクションを確立する
ことを特徴とする請求項１に記載のサーバ装置。
【請求項３】
前記第１のメッセージの送信元と前記第３のメッセージの送信元とが同一であるか否かを、前記第１のメッセージおよび前記第３のメッセージの内容に基づいて判定する判定手段を備え、
前記読み出し手段は、前記判定手段の判定結果が肯定的である場合にのみ、前記第３のメッセージから前記識別子を読み出す
ことを特徴とする請求項１に記載のサーバ装置。
【請求項４】
前記第１のメッセージおよび第３のメッセージには、各々の送信元がデータを送信する際に利用するシーケンス番号の初期値を表すシーケンス番号データが書き込まれており、
前記判定手段は、
前記第１のメッセージに書き込まれている前記シーケンス番号データと前記第３のメッセージに書き込まれているシーケンス番号データとが同一のシーケンス番号を表している場合に、該第３のメッセージの送信元と前記第１のメッセージの送信元とが同一であると判定する
ことを特徴とする請求項３に記載のサーバ装置。
【請求項５】
前記受信手段は、相手装置から送信されてきたメッセージの所定の領域に付加データが書き込まれていた場合には、該メッセージを破棄し、
前記送信手段は、
前記第２のメッセージを送信する際に、その前記所定の領域へ前記付加データを書き込んで送信する
ことを特徴とする請求項１に記載のサーバ装置。
【請求項６】
前記受信手段により受信された第１のメッセージが、特定の通信ポートを介して相手装置から送信されたか否かを該第１のメッセージの内容に基づいて判定する判定手段を備え、
前記送信手段は、
前記受信手段により受信された第１のメッセージが前記特定の通信ポートを介して送信されたと前記判定手段により判定された場合に、前記付加データを前記所定の領域へ書き込んだ第２のメッセージを送信する
ことを特徴とする請求項５に記載のサーバ装置。
【請求項７】
通信手段と、
制御手段と、
を備え、
前記制御手段は、
相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記通信手段により受信された場合に、該相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記通信手段により該相手装置へ送信する第１の処理と、
前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記通信手段によって受信された場合に、該第３のメッセージから前記識別子を読み出す第２の処理と、
前記第２の処理にて読み出した前記識別子に基づいて前記下りのコネクションを確立する第３の処理と、
を行う
ことを特徴とするサーバ装置。
【請求項８】
相手装置との間にコネクションを確立し該相手装置へデータを送信するサーバ装置の制御方法において、
前記相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記相手装置から送信されてきた場合に、前記相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記相手装置へ送信する第１のステップと、
前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記相手装置から送信されてきた場合に、該第３のメッセージから前記識別子を読み出す第２のステップと、
前記第２のステップにて読み出した前記識別子に基づいて、前記下りのコネクションを確立する第３のステップと、
を前記サーバ装置に順次行わせることを特徴とする制御方法。
【請求項９】
クライアント装置が、送信されたデータの受信に用いる下りのコネクションの確立を要求する旨の第１のメッセージをサーバ装置へ送信する第１のステップと、
前記第１のメッセージを受信した前記サーバ装置が、前記クライアント装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨のメッセージを前記クライアント装置へ送信する第２のステップと、
前記第２のメッセージを受信した前記クライアント装置が、該第２のメッセージを受信したことを表すとともに前記下りのコネクションの確立を要求する旨の第３のメッセージを前記サーバ装置へ送信する第３のステップと、
前記第３のメッセージを受信した前記サーバ装置が、該第３のメッセージの内容に基づいて前記下りのコネクションを確立する第４のステップと
を順次行うことを特徴とするコネクション確立方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアント装置とサーバ装置との間にデータを送受信するためのコネクションを確立する技術に関する。
【背景技術】
【０００２】
近年、インターネットを介して様々な通信サービスが提供されている。インターネットにおいて利用されている通信プロトコルの一例としては、ＴＣＰ（Transmission Control Protocol）が挙げられる。ＴＣＰは、いわゆるコネクション型の通信プロトコルであり、信頼性の高い通信を実現することが可能である。なお、コネクション型の通信プロトコルとは、データの送受信に先だって、そのデータの送り手側の通信装置（以下、サーバ装置）とその受け手側の通信装置（以下、クライアント装置）との両者に、そのデータの送受信に用いる通信路（以下、コネクション）を示すデータ（以下、コネクション識別子）を交換させ、コネクションの確立を行っておく通信プロトコルである。なお、上記コネクション識別子の一例としては、サーバ装置やクライアント装置に割り当てられている通信アドレスや、各装置がそのデータの送受信に用いる通信ポートを表すデータ（例えば、通信ポート番号）およびシーケンス番号の初期値などが挙げられる。例えば、ＴＣＰにおいては、３ウェイハンドシェークと呼ばれる手順で上記コネクションの確立が行われる。以下では、まず、３ウェイハンドシェークの概要について説明する。
【０００３】
図１０は、ＴＣＰにしたがって通信する機能を有するクライアント装置２０とサーバ装置４０とが実行する３ウェイハンドシェークの概要を表す図である。例えば、サーバ装置４０からのデータの取得を所望するユーザが、サーバ装置４０の通信アドレスやそのデータの取得に用いる通信プロトコルを表すデータ（例えば、ＵＲＬなど）の入力など所定の操作を行うと、クライアント装置２０は、図１０に示すように、ＳＹＮメッセージ２００をサーバ装置４０へ送信する。このＳＹＮメッセージ２００は、サーバ装置４０からクライアント装置２０へデータを送信する際に用いるコネクション（以下、下りのコネクション）の確立を要求する旨のメッセージであり、このＳＹＮメッセージ２００には、上記下りのコネクションのコネクション識別子が書き込まれている。
【０００４】
一方、サーバ装置４０は、ＳＹＮメッセージ２００を受信すると、そのＳＹＮメッセージ２００の送信元であるクライアント装置２０との間にコネクションの確立を行うために、コンピュータ資源（以下、リソースともいう）の割り当てを行う。具体的には、サーバ装置４０は、その通信相手の相手装置（すなわち、クライアント装置２０）を識別するデータ（例えば、上記下りのコネクションのコネクション識別子）をＲＡＭ（Random Access Memory）などの記憶部へ書き込み記憶する。次いで、サーバ装置４０は、上記ＳＹＮメッセージ２００を受信したことを表すとともに逆方向のコネクション（以下、上りのコネクション）の確立を要求する旨のＳＹＮ／ＡＣＫメッセージ２１０をクライアント装置２０へ送信する。なお、上りのコネクションとは、クライアント装置２０からサーバ装置４０へデータを送信する際に用いられるコネクションであり、上記ＳＹＮ／ＡＣＫメッセージ２１０には、この上りのコネクションのコネクション識別子が書き込まれている。
【０００５】
クライアント装置２０は、ＳＹＮ／ＡＣＫメッセージ２１０を受信すると、そのＳＹＮ／ＡＣＫメッセージ２１０からコネクション識別子を読み出しそのコネクション識別子の表すコネクション（すなわち、上りのコネクション）を確立する。そして、クライアント装置２０は、ＳＹＮ／ＡＣＫメッセージ２１０を受信したことを表す確認応答メッセージ（以下、ＡＣＫ）２２０をサーバ装置４０へ送信する。このＡＣＫ２２０を受信すると、サーバ装置４０は上記下りのコネクションを確立するとともに、その通信相手を表すデータを上記記憶部から削除して、データの送信を要求する旨のメッセージなどがその通信相手から送信されてくることを待ち受ける。
【０００６】
ところで、上記記憶部の記憶容量などサーバ装置４０が有するコンピュータ資源（以下、リソースともいう）は有限であるため、その記憶部に格納することができるコネクション識別子の数にも上限がある。つまり、サーバ装置４０は、この上限を超える数のクライアント装置２０からＡＣＫ２２０が送信されてくることを待ち受けることはできない。このことを悪用してサーバ装置４０を利用不能にし、通信サービスの提供を妨害することが企てられる虞がある。いわゆる、ＳＹＮＦｌｏｏｄ攻撃である。
【０００７】
より詳細に説明すると、ＳＹＮＦｌｏｏｄ攻撃とは、多量のＳＹＮメッセージ２００をサーバ装置４０へ送信し続け、サーバ装置４０から返信されてくるＳＹＮ／ＡＣＫメッセージ２１０を受信しても、意図的にＡＣＫ２２０を返信しないようにすることである。このようなことが為されると、サーバ装置４０は、その通信相手との間でコネクションの確立が完了していないものとみなして、そのコネクション識別子を記憶部に保持したまま、ＡＣＫ２２０が返信されてくることを待ち続ける。このため、上記ＳＹＮＦｌｏｏｄ攻撃が為されると、記憶部に格納されているコネクション識別子の数が急速に増加して上記上限へ達し、サーバ装置４０のリソースが枯渇してしまう。このような状況下では、サーバ装置４０は、他のクライアント装置からのコネクション確立要求を受け付けることができなくなり、それら他のクライアント装置に対して通信サービスを提供することができなくなってしまう。このような事態が生じてしまうことを回避するため、従来よりＳＹＮＦｌｏｏｄ攻撃に対する防御方法が種々提案されており、その一例としては、非特許文献１に開示されたＳＹＮＣｏｏｋｉｅが挙げられる。以下、図１０を参照しつつＳＹＮＣｏｏｋｉｅについて説明する。
【０００８】
図１１は、ＳＹＮＣｏｏｋｉｅによるコネクション確立の概略を説明するための図である。ＳＹＮＣｏｏｋｉｅによりコネクションを確立するサーバ装置５０は、クライアント装置２０から送信されてきたＳＹＮメッセージ２００を受信すると、そのメッセージの内容を所定のアルゴリズムにしたがって圧縮しハッシュデータを生成する。そして、このハッシュデータを書き込んだＳＹＮ／ＡＣＫメッセージ２１０をクライアント装置２０へ送信する。ここで注目すべき点は、ＳＹＮメッセージ２００を受信した時点では、そのＳＹＮメッセージ２００に書き込まれているコネクション識別子の記憶部への書き込みを行わない点である。そして、サーバ装置５０は、クライアント装置２０から返信されたＡＣＫ２２０に上記ハッシュデータが書き込まれていた場合に、そのＡＣＫ２２０に書き込まれているコネクション識別子を読み出しそのコネクション識別子の表すコネクション（すなわち、下りのコネクション）を確立する。このように、ＳＹＮＣｏｏｋｉｅにおいては、ＳＹＮメッセージ２００に書き込まれているコネクション識別子を記憶しないようにしたため、意図的にＡＣＫ２２０を送信しないようにしてもサーバ装置５０のリソースが枯渇してしまうことはなく、ＳＹＮＦｌｏｏｄ攻撃を確実に防御することが可能になる。
【非特許文献１】J.Lemon,          "Resisting SYN flood Dos attacks with a SYN cash",          Proceedings of the BSDCon 2002 Conference, 2002.,          インターネット          ＜http://people.freebsd.org/~jlemon/papers/syncash.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、ＴＣＰにおいては、メッセージを送信してから所定の時間が経過した時点で、相手装置がそのメッセージを受信したことを表すＡＣＫが返信されてこなかった場合には、そのメッセージは消失してしまったものとみなして、そのメッセージを再送信するべきことが定められている。例えば、図１１のサーバ装置５０は、ＳＹＮ／ＡＣＫメッセージ２１０を送信してから所定の時間が経過しても、ＡＣＫ２２０が送信されてこない場合には、そのＳＹＮ／ＡＣＫメッセージ２１０を再送信しなければならない。
【００１０】
しかしながら、サーバ装置５０においては、このような再送信を行うことはできない。何故ならば、サーバ装置５０は、ＳＹＮメッセージ２００を受信しても、そのＳＹＮメッセージ２００に書き込まれているコネクション識別子を記憶しないので、ＳＹＮ／ＡＣＫメッセージ２１０を再送信する際の送信先を特定することができないからである。このようにＳＹＮ／ＡＣＫメッセージ２１０の再送信が不可能になってしまうと、例えば、ＳＹＮ／ＡＣＫメッセージ２１０に対してクライアント装置２０から送信されたＡＣＫ２２０が消失してしまった場合に、以下に述べるような問題が発生してしまう。
【００１１】
すなわち、サーバ装置５０とクライアント装置２０との間では、上りのコネクションについてはクライアント装置２０がＳＹＮ／ＡＣＫメッセージ２１０を受信した時点で確立されているが、下りのコネクションについては、ＡＣＫ２２０が消失してしまったため、確立されていない。つまり、サーバ装置５０とクライアント装置２０との間のコネクションは不完全な状態になっている。そして、ＳＹＮ／ＡＣＫメッセージ２１０を再送信することができないのであるから、ＡＣＫ２２０をクライアント装置２０に再送信させて下りのコネクションを確立することはできない。このことは、上記不完全な状態を解消することができないことを意味している。このように、ＳＹＮＣｏｏｋｉｅを採用すると、サーバ装置とクライアント装置とがコネクションを確立する際に、そのコネクションが不完全な状態になってしまうとともに、その不完全な状態を解消することができなくなってしまう虞がある。
【００１２】
本発明は上記課題に鑑みて為されたものであり、クライアント装置とサーバ装置間にコネクションを確立する際に、そのコネクションが不完全な状態のままになることを回避しつつ、ＳＹＮＦｌｏｏｄ攻撃を確実に防御することを可能にする技術を提供することを目的としている。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明は、相手装置から送信されたメッセージを受信する受信手段と、前記相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記受信手段により受信された場合に、前記相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記相手装置へ送信する送信手段と、前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記受信手段により受信された場合に、該第３のメッセージから前記識別子を読み出す読み出し手段と、前記読み出し手段により読み出された前記識別子に基づいて、前記相手装置との間に前記下りのコネクションを確立するコネクション確立手段とを有するサーバ装置を提供する。
【００１４】
また、上記課題を解決するための本発明の別の態様にあっては、コンピュータ装置を、相手装置から送信されたメッセージを受信する受信手段と、前記相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記受信手段により受信された場合に、前記相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記相手装置へ送信する送信手段と、前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記受信手段により受信された場合に、該第３のメッセージから前記識別子を読み出す読み出し手段と、前記読み出し手段により読み出された前記識別子に基づいて、前記相手装置との間に前記下りのコネクションを確立するコネクション確立手段として機能させるプログラムと、コンピュータ装置が読み取り可能な記録媒体であって、該プログラムが記録された記録媒体と、を提供するとしても良い。
【００１５】
このようなサーバ装置、プログラムおよび記録媒体によれば、相手装置であるクライアント装置が上記第２のメッセージを受信したことを上記第３のメッセージによって確認した場合に、そのクライアント装置との間に下りのコネクションが確立される。
【００１６】
より好ましい態様においては、前記読み出し手段は、前記識別子の他に、前記下りのコネクションを介して前記クライアント装置へデータを送信する際の通信態様を指示する付加データが前記第３のメッセージに含まれている場合には、前記識別子に加えて該付加データを読み出し、前記コネクション確立手段は、前記読み出し手段により読み出された前記識別子と前記付加データとに基づいて、前記下りのコネクションを確立することを特徴とする上記サーバ装置を提供する。
【００１７】
このような態様にあっては、上記下りのコネクションを確立した後に上記付加データの示す通信態様で上記クライアント装置と通信を行うことが可能になる。これにより、ＳＹＮＦｌｏｏｄ攻撃に対する防御を行いつつ、上記コネクションが不完全な状態のままになることを回避することに加えて、きめ細やかな通信態様で上記クライアント装置と通信を行うことが可能になるといった効果を奏する。
【００１８】
また、別の好ましい態様においては、前記第１のメッセージの送信元と前記第３のメッセージの送信元とが同一であるか否かを、前記第１のメッセージおよび前記第３のメッセージの内容に基づいて判定する判定手段を備え、前記読み出し手段は、前記判定手段の判定結果が肯定的である場合にのみ、前記第３のメッセージから前記識別子を読み出すことを特徴とする上記サーバ装置を提供する。より具体的には、前記第１のメッセージおよび第３のメッセージには、各々の送信元がデータを送信する際に利用するシーケンス番号の初期値を表すシーケンス番号データが書き込まれており、前記判定手段は、前記第１のメッセージに書き込まれている前記シーケンス番号データと前記第３のメッセージに書き込まれているシーケンス番号データとが同一のシーケンス番号を表している場合に、該第３のメッセージの送信元と前記第１のメッセージの送信元とが同一であると判定するとしても良い。
【００１９】
このような態様にあっては、上記第１のメッセージと上記第３のメッセージとが同一の相手装置から送信されたことが確認された場合に、その相手装置との間に下りのコネクションが確立される。
【００２０】
また、別の好ましい態様においては、前記受信手段は、相手装置から送信されてきたメッセージの所定の領域に付加データが書き込まれていた場合には、該メッセージを破棄し、前記送信手段は、前記第２のメッセージを送信する際に、その前記所定の領域へ前記付加データを書き込んで送信することを特徴とする上記サーバ装置を提供する。また、前記受信手段により受信された第１のメッセージが、特定の通信ポートを介して相手装置から送信されたか否かを該第１のメッセージの内容に基づいて判定する判定手段を備え、前記送信手段は、前記受信手段により受信された第１のメッセージが前記特定の通信ポートを介して送信されたと前記判定手段により判定された場合に、前記付加データを前記所定の領域へ書き込んだ第２のメッセージを送信するようにしても良い。
【００２１】
このような態様にあっては、本態様に係る第１のサーバ装置に成りすましている相手装置から本態様に係る第２のサーバ装置へ上記第１のメッセージが送信された場合に、この第２のサーバ装置は上記第２のメッセージの上記所定の領域へ上記付加データを書き込んで上記第１のサーバ装置へ送信する。そして、このような第２のメッセージが上記第１のサーバ装置に受信されても、この第１のメッセージは破棄される。これにより、第１のサーバ装置と第２のサーバ装置との間でメッセージの送受信が際限なく行われることが回避される。
【００２２】
また、上記課題を解決するために、本発明は、通信手段と、制御手段と、を備え、前記制御手段は、相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記通信手段により受信された場合に、該相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記通信手段により該相手装置へ送信する第１の処理と、前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記通信手段によって受信された場合に、該第３のメッセージから前記識別子を読み出す第２の処理と、前記第２の処理にて読み出した前記識別子に基づいて、前記下りのコネクションを確立する第３の処理と、を行うことを特徴とするサーバ装置を提供する。
【００２３】
また、上記課題を解決するための本発明の別の態様にあっては、コンピュータ装置に、相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記通信手段により受信された場合に、該相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記通信手段により該相手装置へ送信する第１の処理と、前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記通信手段によって受信された場合に、該第３のメッセージから前記識別子を読み出す第２の処理と、前記第２の処理にて読み出した前記識別子に基づいて、前記下りのコネクションを確立する第３の処理と、を行わせるプログラムと、コンピュータ装置が読み取り可能な記録媒体であって、該プログラムが記録された記録媒体と、を提供するとしても良い。
【００２４】
このようなサーバ装置、プログラムおよび記録媒体によれば、相手装置であるクライアント装置が上記第２のメッセージを受信したことを上記第３のメッセージによって確認した場合に、そのクライアント装置との間に下りのコネクションが確立される。
【００２５】
また、上記課題を解決するために、本発明は、相手装置との間にコネクションを確立し該相手装置へデータを送信するサーバ装置の制御方法において、前記相手装置へのデータの送信に用いる下りのコネクションを識別する識別子を含み該下りのコネクションの確立を要求する旨の第１のメッセージが前記相手装置から送信されてきた場合に、前記相手装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨の第２のメッセージを前記相手装置へ送信する第１のステップと、前記識別子を含み前記下りのコネクションの確立を要求するとともに前記第２のメッセージを受信したことを表す第３のメッセージが前記相手装置から送信されてきた場合に、該第３のメッセージから前記識別子を読み出す第２のステップと、前記第２のステップにて読み出した前記識別子に基づいて、前記下りのコネクションを確立する第３のステップと、を前記サーバ装置に順次行わせることを特徴とする制御方法を提供する。
【００２６】
このような制御方法によれば、相手装置であるクライアント装置が上記第２のメッセージを受信したことを上記第３のメッセージによって確認した場合に、そのクライアント装置との間に下りのコネクションを確立するように上記サーバ装置は制御される。
【００２７】
また、上記課題を解決するため、本発明は、クライアント装置が、送信されたデータの受信に用いる下りのコネクションの確立を要求する旨の第１のメッセージをサーバ装置へ送信する第１のステップと、前記第１のメッセージを受信した前記サーバ装置が、前記クライアント装置から送信されたデータの受信に用いる上りのコネクションの確立を要求する旨のメッセージを前記クライアント装置へ送信する第２のステップと、前記第２のメッセージを受信した前記クライアント装置が、該第２のメッセージを受信したことを表すとともに前記下りのコネクションの確立を要求する旨の第３のメッセージを前記サーバ装置へ送信する第３のステップと、前記第３のメッセージを受信した前記サーバ装置が、該第３のメッセージの内容に基づいて前記下りのコネクションを確立する第４のステップとを順次行うことを特徴とするコネクション確立方法を提供する。
【００２８】
このようなコネクション確立方法によれば、クライアント装置が上記第２のメッセージを受信したことを上記第３のメッセージによって上記サーバ装置が確認した場合に、そのクライアント装置とサーバ装置との間に下りのコネクションが確立される。
【発明の効果】
【００２９】
本発明によれば、クライアント装置とサーバ装置間にコネクションを確立する際に、そのコネクションが不完全な状態のままになることを回避しつつ、ＳＹＮＦｌｏｏｄ攻撃を確実に防御することが可能になるといった効果を奏する。
【発明を実施するための最良の形態】
【００３０】
以下、図面を参照しつつ本発明を実施するための最良の形態について説明する。
（Ａ：構成）
（Ａ−１：通信システムの構成）
図１は、本発明の１実施形態に係るサーバ装置３０を有する通信システムの全体構成の一例を示す図である。図１に示されているように、この通信システムは、通信網１０と、この通信網１０に接続されたクライアント装置２０およびサーバ装置３０とを含んでいる。図１では、１つのクライアント装置と１つのサーバ装置とが通信網１０に接続されている場合について例示されているが、多数のクライアント装置が通信網１０に接続されているとしても良く、また、多数のサーバ装置が通信網１０に接続されているとしても良い。なお、以下では、クライアント装置とサーバ装置とを区別する必要がない場合には、「通信装置」と称する。
【００３１】
図１の通信網１０は、例えば、インターネットであり、ルータやゲートウェイなどの中継装置を含んでいる。この通信網１０は、自網に接続されている通信装置から所定の通信プロトコル（本実施形態では、ＴＣＰ）にしたがってメッセージが送信されてきた場合に、そのメッセージを上記中継装置によってその宛先へ適宜ルーティングし送り届けるためのものである。なお、本実施形態では、通信網１０がインターネットである場合について説明するが、ＬＡＮ（Local Area Network）であっても良く、また、移動パケット通信網や無線ＬＡＮのような無線通信網であっても良い。
【００３２】
図１のクライアント装置２０とサーバ装置３０とは、何れも通信網１０に接続されたパーソナルコンピュータ（以下、「ＰＣ」）であり、この通信網１０を介してＴＣＰにしたがった通信を行うことができる。より詳細に説明すると、クライアント装置２０やサーバ装置３０は、図２に示すフォーマットを有するメッセージを生成し、そのヘッダ部の各領域に所定のデータを書き込んで送信する。
【００３３】
図２に示されたフォーマットは、ＴＣＰにしたがって送信されるメッセージのフォーマットであり、詳細な図示は省略したが、図２のコントロールフラグ領域は、ＵＲＧ、ＡＣＫ、ＰＳＨ、ＲＳＴ、ＳＹＮおよびＦＩＮの６つのビットフラグを書き込むための領域である。クライアント装置２０やサーバ装置３０は、これら６つのビットフラグに“１”又は“０”を書き込んで送信することによって、上述した、ＳＹＮ、ＳＹＮ／ＡＣＫおよびＡＣＫの各メッセージを送信することができる。例えば、クライアント装置２０からサーバ装置３０へ宛ててＳＹＮメッセージを送信する場合には、上記各領域に以下のデータを書き込んで送信する。
【００３４】
すなわち、図２の送信元ポート番号には、通信の開始を要求したアプリケーション（例えば、ブラウザなど）の通信ポート番号が書き込まれる。図２の送信先ポート番号には、その通信相手のアプリケーション（例えば、ＨＴＴＰＤ）の通信ポート番号が書き込まれる。図２のシーケンス番号には、上記通信を行う際にクライアント装置２０が用いるシーケンス番号の初期値が書き込まれる。そして、コントロールフラグについてはＳＹＮフラグにのみ“１”がセットされ、他のフラグには“０”がセットされる。なお、図２においては省略したが、クライアント装置２０とサーバ装置３０との間で送受信されるメッセージには、ＴＣＰよりも下位の通信プロトコル（例えば、Internet Protocol：以下、「ＩＰ」）によってそのメッセージの送信元や宛先である通信装置を表すデータ（例えば、各装置に割り当てられているＩＰアドレスなどの通信アドレス）が書き込まれたヘッダが更に付加されて送信される。また、本実施形態では、クライアント装置２０とサーバ装置３０とが、ＴＣＰにしたがって通信するＰＣである場合について説明するが、ＴＣＰにしたがって通信するＰＤＡ（Personal Digital Assistance）や携帯電話機であっても良いことは勿論である。要は、ＴＣＰにしたがって通信する機能を有するコンピュータ装置であれば、何れであっても良い。
【００３５】
さて、図１に示す通信システムにおいて、クライアント装置２０はＴＣＰにしたがって通信する従来のコンピュータ装置と何ら変わるところはないので、詳細な説明は省略する。一方、図１のサーバ装置３０は、本発明に係るサーバ装置に特徴的な機能を備えており、その機能によって本発明に係るコネクション確立方法でコネクションの確立を行うものである。以下では、サーバ装置３０を中心に説明する。
【００３６】
（Ａ−２：サーバ装置３０の構成）
まず、図３を参照しつつサーバ装置３０の構成を説明する。図３に示されているように、サーバ装置３０は、制御部１００と、通信インターフェイス（以下、「ＩＦ」と表記する）部１１０と、記憶部１２０と、これら各構成要素間のデータ授受を仲介するバス１３０とを有している。
【００３７】
制御部１００は、例えばＣＰＵ（Central Processing Unit）であり、記憶部１２０に格納されているソフトウェアを読み出して実行することにより、サーバ装置３０の各部を制御することができる。通信ＩＦ部１１０は、通信網１０に接続されており、通信網１０を介して送くられてくるメッセージを受信し制御部１００へ引渡すとともに、制御部１００から引渡されたメッセージを通信網１０へ送り出すためのものである。
【００３８】
記憶部１２０は、図３に示されているように、揮発性記憶部１２０ａと不揮発性記憶部１２０ｂとを有している。揮発性記憶部１２０ａは、例えばＲＡＭであり、ソフトウェアにしたがって作動している制御部１００によってワークエリアとして利用される。一方、不揮発性記憶部１２０ｂは、例えば、ハードディスクであり、各種データが格納されている。不揮発性記憶部１２０ｂに格納されているデータの一例としては、クライアント装置２０からの要求に応じてそのクライアント装置２０へ送信するデータや、そのデータをＴＣＰにしたがってクライアント装置２０へ送信する際の通信態様を規定するデータ（例えば、輻輳ウィンドウサイズやタイムアウト時間を表すデータなど）が挙げられる。
【００３９】
また、不揮発性記憶部１２０ｂには、上記各種データの他に、オペレーティングシステム（Operating System：以下、「ＯＳ」）を制御部１００に実現させるためのＯＳソフトウェアや、ＴＣＰにしたがった通信を制御部１００に実現させるための制御ソフトウェアが格納されている。以下、これらソフトウェアを実行することによって制御部１００に付与される機能について説明する。
【００４０】
サーバ装置３０の電源（図示省略）が投入されると、制御部１００は、まず、ＯＳソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する。ＯＳソフトウェアにしたがって作動している制御部１００には、サーバ装置３０の各部を制御する機能や他のソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する機能が付与される。そして、ＯＳソフトウェアの実行を完了し、ＯＳを実現している状態の制御部１００は、即座に、上記制御ソフトウェアを不揮発性記憶部１２０ｂから読み出し実行する。
【００４１】
そして、上記制御ソフトウェアにしたがって作動している制御部１００は、クライアント装置２０からＳＹＮメッセージやＳＹＮ／ＡＣＫメッセージが送信されてきた場合に、以下に述べる３つの処理を図４に示すフローチャートにしたがって行う。すなわち、第１に、クライアント装置２０から下りのコネクションの確立を要求する旨のＳＹＮメッセージが送信されてきた場合に、上りのコネクションの確立を要求するＳＹＮメッセージを生成しクライアント装置２０へ送信する処理（図４のステップＳＡ３）である。第２に、上記第１の処理にて送信したＳＹＮメッセージを受信したことを表すとともに上記下りのコネクションの確立を要求する旨のＳＹＮ／ＡＣＫメッセージが送信されてきた場合に、その下りのコネクションを識別するコネクション識別子を上記ＳＹＮ／ＡＣＫメッセージから読み出し取得する処理（図４のステップＳＡ４）である。そして、第３に、上記第２の処理にて取得したコネクション識別子に基づいて、上記下りのコネクションを確立する処理（図４のステップＳＡ５）である。つまり、上記制御ソフトウェアは、サーバ装置３０の制御部１００に、本発明に特徴的な制御方法を実現させ、本発明に特徴的なコネクション確立方法を実行させるためのソフトウェアである。
【００４２】
また、上記制御ソフトウェアは、制御部１００を以下に述べる４つの手段として機能させるソフトウェアである、ということもできる。すなわち、第１に、クライアント装置から送信されたメッセージを通信ＩＦ部１１０を介して受信する受信手段である。第２に、上記受信手段により受信したメッセージが、クライアント装置２０との間に下りのコネクションを確立することを要求する旨のＳＹＮメッセージである場合に、上りのコネクションの確立を要求する旨のＳＹＮメッセージを生成しそのクライアント装置２０へ送信する送信手段である。第３に、上記受信手段により受信したメッセージが、上記送信手段により送信したＳＹＮメッセージを受信したことを表すとともに上記下りのコネクションの確立を要求する旨のＳＹＮ／ＡＣＫメッセージである場合に、その下りのコネクションを識別するコネクション識別子をそのＳＹＮ／ＡＣＫメッセージから読み出す読み出し手段である。そして、第４に、上記読み出し手段により読み出したコネクション識別子に基づいて、上記下りのコネクションを確立するコネクション確立手段である。
【００４３】
以上に説明したように、サーバ装置３０のハードウェア構成は一般的なコンピュータ装置のハードウェア構成と同一であり、記憶部１２０に格納されている各種ソフトウェアを制御部１００に実行させることによって、本発明に係るサーバ装置に特有な機能を制御部１００に実現させ、本発明に係る制御方法が実現される。これにより、クライアント装置２０とサーバ装置３０とによって本発明に係るコネクション確立方法が実行される。なお、本実施形態では、本発明に係るサーバ装置に特有な機能をソフトウェアモジュールで実現する場合について説明したが、これらソフトウェアモジュールと同一の機能を担っているハードウェアモジュールを用いてサーバ装置３０を構成しても良いことは勿論である。すなわち、上述した受信手段、送信手段、読み出し手段および書き込み手段の各々をハードウェアモジュールで実現しサーバ装置３０を構成するとしても勿論良い。
【００４４】
（Ｂ：動作）
次いで、サーバ装置３０が行う動作のうち、その特徴を顕著に示す動作について図面を参照しつつ説明する。
【００４５】
（Ｂ−１：基本動作）
まず、クライアント装置２０とサーバ装置３０とがコネクションを確立する際に行う動作の流れについて説明する。前述した如くクライアント装置２０はＴＣＰにしたがって通信する従来の通信装置と何ら変わるところがないため、ユーザが所定の操作（サーバ装置３０のＵＲＬの入力など）を行うと、図５に示すようにＳＹＮメッセージ２００をサーバ装置３０へ送信する。以下、このＳＹＮメッセージ２００を受信した場合に、サーバ装置３０の制御部１００が行う動作について図４を参照しつつ説明する。
【００４６】
サーバ装置３０の制御部１００は、図４に示すように、通信ＩＦ部１１０を介してメッセージを受信（ステップＳＡ１）すると、そのメッセージがＳＹＮメッセージであるか、それとも、ＳＹＮ／ＡＣＫメッセージであるか、をそのメッセージの内容に基づいて判定する（ステップＳＡ２）。より詳細に説明すると、制御部１００は、そのメッセージのコントロールフラグ（図２参照）にてＳＹＮフラグのみに“１”がセットされている場合には、そのメッセージをＳＹＮメッセージである判定し、ＳＹＮフラグの他にＡＣＫフラグにも“１”がセットされている場合には、ＳＹＮ／ＡＣＫメッセージと判定する。そして、制御部１００は、ステップＳＡ２にてＳＹＮメッセージであると判定した場合には、図４のステップＳＡ３の処理を行い、逆に、ステップＳＡ２にてＳＹＮ／ＡＣＫメッセージであると判定した場合には、図４のステップＳＡ４からステップＳＡ６までの処理を行う。
【００４７】
本動作例では、クライアント装置２０からはＳＹＮメッセージ２００が送信されてくるのであるから、上記ステップＳＡ３の処理が行われる。このステップＳＡ３においては、制御部１００は、ステップＳＡ１にて受信したＳＹＮメッセージの送信元（すなわち、クライアント装置２０）へ宛てて、上りのコネクションの確立を要求する旨のＳＹＮメッセージを送信する。その結果、図５に示すように、サーバ装置３０からクライアント装置２０へＳＹＮメッセージ２０５が送信されることになる。
【００４８】
一方、クライアント装置２０は、上述した如くＴＣＰにしたがって通信する従来のクライアント装置と同一の機能を備えているから、ＳＹＮメッセージ２０５を受信すると、同時接続が為されたものとみなして動作する。ここで、同時接続とは、クライアント装置２０とその通信相手とが、略同時にＳＹＮメッセージを送信し、送信したＳＹＮメッセージに対するＡＣＫを受信する前に他方が送信したＳＹＮメッセージを受信した場合のことである。ＴＣＰにおいては、このような場合には、相手装置から送信されたＳＹＮメッセージを受信したことを契機としてＳＹＮ／ＡＣＫメッセージを返信するべきことが定められている。このため、クライアント装置２０は、ＳＹＮメッセージ２０５を受信したことを表すとともに、下りのコネクションの確立を要求する旨のＳＹＮ／ＡＣＫメッセージ２１０をサーバ装置３０へ送信する（図５参照）。
【００４９】
サーバ装置３０の制御部１００は、ＳＹＮ／ＡＣＫメッセージ２１０を通信ＩＦ部１１０を介して受信（ステップＳＡ１）すると、上述したようにステップＳＡ４からステップＳＡ６までの処理を行う。より詳細に説明すると、制御部１００は、クライアント装置２０から受信したＳＹＮ／ＡＣＫメッセージ２１０から下りのコネクションのコネクション識別子を読み出して取得し（ステップＳＡ４）、そのコネクション識別子の表すコネクションを確立する（ステップＳＡ５）。これにより、クライアント装置２０とサーバ装置３０との間に下りのコネクションが確立される。そして、制御部１００は、上記ＳＹＮ／ＡＣＫメッセージ２１０を受信したことを表すＡＣＫ２２０に上りのコネクションを表すコネクション識別子を書き込んでクライアント装置２０へ送信する（ステップＳＡ６）。以降、ＡＣＫ２２０がクライアント装置２０へ到達すると、クライアント装置２０は、そのＡＣＫ２２０に書き込まれているコネクション識別子を読み出し、そのコネクション識別子の表すコネクション（すなわち、上りのコネクション）を確立する。
【００５０】
このように、本実施形態に係るサーバ装置３０によれば、クライアント装置２０から送信されたＳＹＮメッセージ２００を受信した時点では、そのＳＹＮメッセージ２００に書き込まれているコネクション識別子（すなわち、上りのコネクションのコネクション識別子）を記憶しないので、ＳＹＮＦｌｏｏｄ攻撃を確実に防御することができるといった効果を奏する。
【００５１】
（Ｂ−２：ＡＣＫ２２０又はＳＹＮ／ＡＣＫ２１０が消失した場合の動作）
さて、以上では、クライアント装置２０およびサーバ装置３０から送信された各メッセージが通信網１０内で消失することなく、その宛先へ到達する場合について説明した。以下では、上記各メッセージが通信網１０内で消失してしまった場合に、クライアント装置２０およびサーバ装置３０が行う動作について説明する。
【００５２】
まず、図６を参照しつつ、サーバ装置３０からクライアント装置２０へ宛てて送信されたＡＣＫ２２０が消失してしまった場合について説明する。ＡＣＫ２２０は、クライアント装置２０から送信されたＳＹＮ／ＡＣＫメッセージ２１０をサーバ装置３０が受信したことをクライアント装置２０へ通知する役割を担っている。このため、クライアント装置２０は、ＳＹＮ／ＡＣＫメッセージ２１０を送信してから所定の時間（例えば、Ｔｃ秒：図６参照）が経過した時点で、ＡＣＫ２２０が返信されてこないと、上記ＳＹＮ／ＡＣＫメッセージ２１０は消失してしまったものとみなして、そのＳＹＮ／ＡＣＫメッセージ２１０を再送信する。以降、図６に示すように、サーバ装置３０は、上記再送信されたＳＹＮ／ＡＣＫメッセージ２１０を受信するとＡＣＫ２２０を再送信する。
【００５３】
このように、本実施形態によれば、サーバ装置３０からクライアント装置２０へ送信されたＡＣＫが消失してしまっても、クライアント装置２０がＳＹＮ／ＡＣＫメッセージ２１０を再送信することによって、そのＡＣＫ２２０の再送信をサーバ装置３０へ促すことが可能になる。なお、クライアント装置２０から送信されたＳＹＮ／ＡＣＫメッセージ２１０が消失した場合にも、ＡＣＫ２２０が返信されてくることはないから、上記ＳＹＮ／ＡＣＫメッセージ２１０を送信してから所定の時間が経過した時点でそのＳＹＮ／ＡＣＫメッセージ２１０が再送信されることになる。
【００５４】
また、本実施形態では、ＡＣＫ２２０をＳＹＮ／ＡＣＫメッセージ２１０に対するＡＣＫとして扱う場合について説明した。これは、ＳＹＮメッセージ２００を送信した後、ＳＹＮメッセージ２０５を受信した時点でそのＳＹＮメッセージ２００を送信してからの所定の時間（図６：ＴＣ）の計測を中断し、ＳＹＮ／ＡＣＫメッセージ２１０を送信した時点から再度その所定の時間の経過を計測し直すことを意味している。しかしながら、ＳＹＮメッセージ２００を送信した後に、ＳＹＮメッセージ２０５を受信しても上記所定の時間の計測を中断しないようにしても良い。このようにすると、上記ＡＣＫ２２０は、ＳＹＮメッセージ２００に対する受信確認の役割を担うことになり、ＳＹＮメッセージ２００を送信してから所定の時間が経過してもＡＣＫ２２０が送信されてこない場合には、ＳＹＮメッセージ２００が再送信されることになる。
【００５５】
（Ｂ−３：ＳＹＮメッセージ２０５又は２００が消失した場合の動作）
サーバ装置３０から送信されたＳＹＮメッセージ２０５が消失した場合には、そのＳＹＮメッセージ２０５に対する受信確認の役割を担っているＳＹＮ／ＡＣＫメッセージ２１０が返信されてくることはない。このような場合には、ＳＹＮメッセージ２０５を送信してから所定の時間が経過した時点でＳＹＮメッセージ２０５を再送信する必要がある。しかしながら、サーバ装置３０は、ＳＹＮメッセージ２００を受信した時点では、そのＳＹＮメッセージ２００の送信元を表すデータを記憶しないため、ＳＹＮメッセージ２０５の送信先を特定することができず、その再送信を行うことはできない。
【００５６】
このように、サーバ装置３０にＳＹＮメッセージ２０５を再送信させることはできないものの、本実施形態によれば、図７に示すように、ＳＹＮメッセージ２００を送信してから所定の時間が経過した時点で、そのＳＹＮメッセージ２００がクライアント装置２０から再送信されるため、上記ＳＹＮメッセージ２０５をサーバ装置３０に再送信させることが可能になる。また、クライアント装置２０から送信されたＳＹＮメッセージ２００が消失した場合にも、そのＳＹＮメッセージ２００を送信してから所定の時間が経過した時点でそのＳＹＮメッセージ２００の再送信が行われることは勿論である。
【００５７】
以上に説明したように、本実施形態によれば、クライアント装置２０とサーバ装置３０との間で送受信されるメッセージのうちの何れが消失した場合であっても、そのメッセージの再送信を行うことが可能であり、サーバ装置３０とクライアント装置２０との間のコネクションが不完全な状態で確立されたままの状態になることが確実に回避されるといった効果を奏する。
【００５８】
（Ｃ：変形例）
以上、本発明を実施するための最良の形態について説明した。しかしながら、以下に述べるような変形を加えても良いことは勿論である。
【００５９】
（Ｃ−１：変形例１）
上述した実施形態では、クライアント装置とサーバ装置とがＴＣＰにしたがって通信する場合について説明した。しかしながら、本発明に係るコネクション確立方法により確立されるコネクションは、ＴＣＰにしたがって行われるデータ通信のためのコネクションに限定されるものではなく、他の通信プロトコルにしたがって行われるデータ通信のためのコネクションであっても勿論良い。要は、ＴＣＰのようにデータの送受信に先立ってコネクションを確立しておくコネクション型の通信プロトコルであれば、どのような通信プロトコルに対しても本発明に係るコネクション確立方法を適用することが可能である。また、上述した如くメッセージを送信してから所定の時間が経過しても、そのメッセージを受信したことを表す確認応答が送信されてこなかった場合に、そのメッセージを再送信する再送信手段を設けておけば、ＴＣＰ以外のコネクション型の通信プロトコルについてもクライアント装置とサーバ装置との間でコネクションが不完全な状態のままになることが回避されるといった効果を奏する。
【００６０】
（Ｃ−２：変形例２）
上述した実施形態では、クライアント装置から送信されたＳＹＮ／ＡＣＫメッセージを受信した場合に、そのＳＹＮ／ＡＣＫメッセージからコネクション識別子を読み出しそのコネクション識別子の表すコネクションを確立する場合について説明した。しかしながら、上記コネクションを介してクライアント装置２０へデータを送信する際の通信態様の詳細を表す付加データが上記ＳＹＮ／ＡＣＫメッセージのオプション領域（図２参照）に書き込まれていた場合には、上記下りのコネクションを確立した後に、その付加データの表す通信態様でそのクライアント装置へデータを送信するようにしても勿論良い。上記付加データの一例としては、ウインドウ拡大オプションやタイムスタンプオプションなど各種オプションの利用の可否や、選択確認応答（ＳＡＣＫ）やＥＣＮなどの利用の可否を指示するデータが挙げられる。このような態様によれば、本発明に係るコネクション確立方法により確立したコネクションを介して、その通信相手のクライアント装置の性能に応じたきめ細やかな通信態様で通信を行うことが可能になるといった効果を奏する。
【００６１】
（Ｃ−３：変形例３）
上述した実施形態では、クライアント装置から送信されたＳＹＮ／ＡＣＫメッセージを受信した場合には無条件にそのクライアント装置２０との間に下りのコネクションを確立する場合について説明した。しかしながら、ＳＹＮメッセージを送信してきたクライアント装置とＳＹＮ／ＡＣＫメッセージを送信してきたクライアント装置とが同一であるか否かの認証を行い、両者が同一であると認証された場合にそのクライアント装置との間に下りのコネクションを確立するとしても勿論良い。
【００６２】
このようなことは、以下のようにして実現される。すなわち、上述した実施形態に係るサーバ装置に、受信したメッセージの内容を所定のアルゴリズムにしたがって圧縮しハッシュデータを生成するハッシュデータ生成手段を設け、上りのコネクションの確立を要求する旨のＳＹＮメッセージ２０５を送信する際に、クライアント装置から送信されてきたＳＹＮメッセージ２００について上記ハッシュデータ生成手段により生成したハッシュデータを書き込んで送信させる。そして、クライアント装置から送信されてきたＳＹＮ／ＡＣＫメッセージに上記ハッシュデータが書き込まれている場合に、上記下りのコネクションを識別するコネクション識別子をそのＳＹＮ／ＡＣＫメッセージから読み出すようにすれば良い。
【００６３】
（Ｃ−４：変形例４）
上述した実施形態では、下りのコネクションの確立を要求する旨のＳＹＮメッセージがクライアント装置から送信されてきた場合には、上りのコネクションの確立を要求する旨のＳＹＮメッセージを無条件にそのクライアント装置へ返信する場合について説明した。しかしながら、上記クライアント装置が特定の通信ポート（例えば、ウェルノウンポートと呼ばれる通信ポート）を用いてＳＹＮメッセージを送信してきた場合には、その旨を表す所定の付加データを所定の領域に書き込んだＳＹＮメッセージ２０５を送信するようにしても良い。その理由は以下の通りである。
【００６４】
ＴＣＰにしたがって通信を行うクライアント装置は、エフェメラルポートと呼ばれる通信ポートを用いてＳＹＮメッセージを送信することが一般的である。ここで、エフェメラルポートとは、特定の用途が定められておらず、クライアント装置側でその都度その用途を自由に定めることができる通信ポートである。一方、ウェルノウンポートとは、その用途が予め定められている通信ポートである。例えば、ポート番号が８０である通信ポートは、ＨＴＴＰにしたがった通信で利用すべきことが予め定められている。
【００６５】
上述したように、クライアント装置においては、エフェメラルポートを用いてＳＹＮメッセージを送信することが一般的であるが、他の装置（例えば、他のサーバ装置）に成りすましてＳＹＮメッセージを送信するクライアント装置について、そのサーバ装置で利用されているウェルノウンポートを用いてＳＹＮメッセージを送信することが一般的である。つまり、ウェルノウンポートを用いてＳＹＮメッセージを送信してきたクライアント装置については、他のサーバ装置に成りすましている虞がある。
【００６６】
例えば、クライアント装置２０が、本実施形態に係るサーバ装置３０Ｂに割り当てられている通信アドレス（以下、ＡｄｒＢ）を送信元アドレスとして書き込み、その送信元ポート番号として８０を書き込んだＳＹＮメッセージを、本実施形態に係るサーバ装置３０Ａへ送信した場合を想定する。上記ＳＹＮメッセージを受信したサーバ装置３０Ａは、そのＳＹＮメッセージの送信元がサーバ装置３０ＢであることをそのＳＹＮメッセージの内容から検出し、上りのコネクションの確立を要求する旨のＳＹＮメッセージをサーバ装置３０Ｂへ送信してしまう。一方、サーバ装置３０Ｂはそのサーバ装置３０Ａから初めてＳＹＮメッセージを受信するのであるから、そのサーバ装置３０ＡへＳＹＮメッセージを返信する。以降、サーバ装置３０Ａと３０Ｂとの間でＳＹＮメッセージの送受信が際限なく行われてしまうといった不具合が生じてしまう虞がある。
【００６７】
これに対して、一般のクライアント装置では利用しない特定の通信ポート（例えば、ウェルノウンポート）を用いてＳＹＮメッセージが送信されてきた場合など、そのクライアント装置が他の装置に成りすましていることが推定される場合には、その旨を示す付加データを所定の領域に書き込んだＳＹＮメッセージ２０５を返信することによって、上述の不具合を回避することが可能になる。以下、クライアント装置２０が、本発明に係るサーバ装置に成りすましている場合と、従来のサーバ装置に成りすましている場合とに分けて説明する。なお、以下では、上記付加データを書き込む領域として、コントロールフラグ（図２参照）のＵＲＧフラグを用い、上記付加データとして“１”または“０”の何れかの値を有する１ビットデータを用いる場合について説明するが、図２に示すオプション領域に上記付加データを書き込んで送信するとしても勿論良い。
【００６８】
図８は、クライアント装置２０が本変形例に係るサーバ装置３０Ｂに成りすまして、同じく本変形例に係るサーバ装置３０ＡへＳＹＮメッセージを送信した場合の通信シーケンスを示す図である。サーバ装置３０Ａは、上記ＳＹＮメッセージを受信すると、そのＳＹＮメッセージの送信に用いられた通信ポートが特定の通信ポート（例えば、ウェルノウンポート）であるか否かをそのＳＹＮメッセージの内容（例えば、そのＳＹＮメッセージに内包されているコネクション識別子）に基づいて判定する。そして、サーバ装置３０Ａは、その判定結果が肯定的である場合には、その旨を表すためにコントロールフラグ（図２参照）のＵＲＧフラグに“１”をセットしたＳＹＮメッセージ（以下、ＳＹＮ／ＵＲＧメッセージ）を返信する。
【００６９】
ここで、クライアント装置２０は、サーバ装置３０Ｂに成りすましているため、図８に示すように、サーバ装置３０Ａは、上記ＳＹＮ／ＵＲＧメッセージをサーバ装置３０Ｂへ送信することになる。一方、サーバ装置３０Ｂは、ＳＹＮメッセージなどの送受信を行っていない状態（例えば、ＴＣＰにおいてＬＩＳＴＥＮ状態と定義されている状態）で、上記ＳＹＮ／ＵＲＧメッセージを受信する。このような状態で、上記ＳＹＮ／ＵＲＧメッセージを受信した場合には、そのＳＹＮ／ＵＲＧメッセージをサーバ装置３０Ｂに破棄させるようにすれば上述したような不具合は発生しない。
【００７０】
次いで、クライアント装置２０が従来のサーバ装置４０に成りすましてサーバ装置３０へＳＹＮメッセージを送信してきた場合の通信シーケンスについて図９を参照しつつ説明する。まず、上記ＳＹＮメッセージを受信した場合に、サーバ装置３０がＳＹＮ／ＵＲＧメッセージをサーバ装置４０へ宛てて返信することは、図８の場合と同様である。
【００７１】
図９のサーバ装置４０は、ＴＣＰにしたがって通信する従来のサーバ装置であるから、上記ＳＹＮ／ＵＲＧメッセージを受信した場合には、その送信元へ宛ててＳＹＮ／ＡＣＫメッセージを送信する。ここで注目すべき点は、図９に示すように、サーバ装置４０から送信されたＳＹＮ／ＡＣＫメッセージに書き込まれているシーケンス番号（Ｎｂ）と、クライアント装置２０から送信されたＳＹＮメッセージに書き込まれていたシーケンス番号（Ｎ０）と、は必ずしも連続にならない点である。このように、ＳＹＮ／ＡＣＫメッセージに書き込まれているシーケンス番号と、そのＳＹＮ／ＡＣＫメッセージに先立ってその送信元から受信したＳＹＮメッセージに書き込まれているシーケンス番号とが連続にならない場合には、不正なメッセージであるとしてＲＳＴメッセージをサーバ装置３０に返信させて、コネクション確立動作を中止させるようにすれば、上述の如き不具合の発生を回避することができる。なお、本変形例４では、相手装置から送信されたＳＹＮメッセージが特定の通信ポートを用いて送信されていた場合に、その旨を示す付加データを書き込んだＳＹＮメッセージをサーバ装置３０Ａに返信させる場合について説明した。しかしながら、相手装置から送信されたＳＹＮメッセージを受信した場合には、そのＳＹＮメッセージが特定の通信ポートを用いて送信されたか否かを問わずに、常に上記付加データを書き込んだＳＹＮメッセージをその相手装置へ返信させるようにしても勿論良い。その理由は、他の装置に成りすましている相手装置が常に上記特定の通信ポートを用いてＳＹＮメッセージを送信するとは限らないからである。
【００７２】
（Ｃ−５：変形例５）
上述した実施形態では、本発明に係るサーバ装置に特有な機能を制御部１００に実現させるためのソフトウェアを記憶部１２０に予め格納しておく場合について説明した。しかしながら、例えば、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）やＤＶＤ（Digital Versatile Disk）などのコンピュータ装置が読み取り可能な記録媒体に、上記ソフトウェアを記録しておき、このような記録媒体を用いて一般的なコンピュータ装置に上記ソフトウェアをインストールするとしても良いことは勿論である。このようにすると、既存の通信システムに含まれているサーバ装置を、本発明に係るサーバ装置として機能させることが可能になるといった効果を奏する。
【図面の簡単な説明】
【００７３】
【図１】本発明の１実施形態に係るサーバ装置３０を有する通信システムの一例を示す図である。
【図２】ＴＣＰにしたがって送受信されるメッセージのフォーマットを示す図である。
【図３】同サーバ装置３０のハードウェア構成の一例を示す図である。
【図４】同サーバ装置３０の制御部１００が制御ソフトウェアにしたがって行う制御動作の流れを示すフローチャートである。
【図５】同サーバ装置３０とクライアント装置２０とがコネクションの確立を行う際の通信シーケンスの一例を示す図である。
【図６】サーバ装置３０から送信したＡＣＫ２２０が消失した場合の通信シーケンスの一例を示す図である。
【図７】クライアント装置２０から送信したＳＹＮメッセージ２０５が消失した場合の通信シーケンスの一例を示す図である。
【図８】変形例４に関連し、クライアント装置２０がサーバ装置３０Ｂに成りすましてサーバ装置３０ＡへＳＹＮメッセージを送信した場合の通信シーケンスの一例を示す図である。
【図９】同変形例４に関連し、クライアント装置２０がサーバ装置４０に成りすましてサーバ装置３０ＡへＳＹＮメッセージを送信した場合の通信シーケンスの一例を示す図である。
【図１０】従来の３ウェイハンドシェークを説明するための図である。
【図１１】従来のＳＹＮＣｏｏｋｉｅを説明するための図である。
【符号の説明】
【００７４】
１０…通信網、２０…クライアント装置、３０，３０Ａ，３０Ｂ，４０，５０…サーバ装置、１００…制御部、１１０…通信ＩＦ部、１２０…記憶部、１２０ａ…揮発性記憶部、１２０ｂ…不揮発性記憶部、１３０…バス。
【図１】
2006042156.tif 000003
【図２】
2006042156.tif 000004
【図３】
2006042156.tif 000005
【図４】
2006042156.tif 000006
【図５】
2006042156.tif 000007
【図６】
2006042156.tif 000008
【図７】
2006042156.tif 000009
【図８】
2006042156.tif 000010
【図９】
2006042156.tif 000011
【図１０】
2006042156.tif 000012
【図１１】
2006042156.tif 000013