(57)【特許請求の範囲】
【請求項１】
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信する受信部と、
前記第１および第２のパケットを記憶する記憶部と、
前記第１および第２のパケットを前記対向装置に送信する送信部と、
前記送信部が前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを前記受信部が受信した時刻までの時間である応答時間を測定する測定部と、
前記送信部が前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記受信部が前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記記憶部から前記第２のパケットを取得すると共に、前記送信部に、前記第２のパケットを前記対向装置に再度送信させる再送部と、
前記送信元装置から前記再送パケットを受信すると、前記再送パケットの受信時刻と前記第２のパケットを送信した時刻の差である実タイムアウト時間が、前記第２のパケットの送信から前記第２のパケットの再送を前記送信部に指示する時刻までの待機時間より長い場合、前記第２のパケット以降に前記送信元装置から受信した前記対向装置宛のパケットが再送処理の対象であると判定する判定部
を備えることを特徴とする通信装置。
【請求項２】
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信する受信部と、
前記第１および第２のパケットを記憶する記憶部と、
前記第１および第２のパケットを前記対向装置に送信する送信部と、
前記送信部が前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを前記受信部が受信した時刻までの時間である応答時間を測定する測定部と、
前記送信部が前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記受信部が前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記記憶部から前記第２のパケットを取得すると共に、前記送信部に、前記第２のパケットを前記対向装置に再度送信させる再送部と、
前記送信部が前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記受信部が前記第２の応答メッセージと前記再送パケットのいずれも受信しない場合、前記第２のパケット以降に前記送信元装置から受信した前記対向装置宛のパケットが再送処理の対象であると判定するとともに、前記送信元装置を対象装置に指定する判定部と、
前記対象装置から前記第２のパケットの後に送信された第３のパケットが前記送信部から送信された時刻から前記第３のパケットの再送を前記送信部に指示する時刻までの、前記再送部が待機する時間である待機時間を算出する算出部を備え、
前記第３のパケットに対する応答メッセージを、前記第３のパケットが前記送信部から送信された時刻から前記待機時間が経過しても受信しない場合、前記再送部は前記送信部に、前記第３のパケットを前記対向装置に送信させる
ことを特徴とする通信装置。
【請求項３】
前記第３のパケットが前記送信部から前記対向装置に向けて送信された時刻から、前記送信元装置から再送された前記第３のパケットを前記受信部が受信するまでの時間が、前記待機時間よりも短い場合、前記判定部は、前記送信元装置が前記対象装置ではなくなったと判定する
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記送信元装置から前記対向装置へのデータの送信に用いられるコネクションの確立を検出すると共に、前記コネクションを介して送信されたパケットに含まれるデータの次に前記コネクションを介して送信されるデータを特定する第１の値を、前記コネクションと対応付けてコネクションテーブルに記録するコネクション検出部を備え、
前記再送部は前記コネクションを介して送信される前記対向装置宛のパケットとして、前記受信部で受信されたパケットに含まれているデータの次に前記コネクションを介して送信されるデータを特定する第２の値が前記コネクションテーブルに記録されている値以下の場合、前記第２の値で特定されるデータを含むパケットが前記送信元装置から再送されたと認識する
ことを特徴とする請求項２もしくは３に記載の通信装置。
【請求項５】
前記コネクション検出部は、前記コネクションテーブルに記録されている第１のコネクションを介して送受信されるパケットに含まれている制御ビットを確認することにより、前記第１のコネクションを介した通信の終了を検出すると、前記コネクションテーブルから前記第１のコネクションに関するエントリを削除する
ことを特徴とする請求項４に記載の通信装置。
【請求項６】
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信し、
前記第１および第２のパケットを記憶し、
前記第１および第２のパケットを前記対向装置に送信し、
前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを受信した時刻までの間の時間である応答時間を測定し、
前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記第２のパケットを前記対向装置に再度送信し、
前記送信元装置から前記再送パケットを受信すると、前記再送パケットの受信時刻と前記第２のパケットを送信した時刻の差である実タイムアウト時間が、前記第２のパケットの送信から前記第２のパケットを再送する時刻までの待機時間より長い場合、前記第２のパケット以降に前記送信元装置から受信した前記対向装置宛のパケットは再送処理の対象であると判定する
処理を、前記送信元装置から送信された前記対向装置宛のパケットを中継する通信装置が実行することを特徴とする通信方法。
【請求項７】
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信し、
前記第１および第２のパケットを記憶し、
前記第１および第２のパケットを前記対向装置に送信し、
前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを受信した時刻までの間の時間である応答時間を測定し、
前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記第２のパケットを前記対向装置に再度送信し、
前記送信元装置から前記再送パケットを受信すると、前記再送パケットの受信時刻と前記第２のパケットを送信した時刻の差である実タイムアウト時間が、前記第２のパケットの送信から前記第２のパケットを再送する時刻までの待機時間より長い場合、前記第２のパケット以降に前記送信元装置から受信した前記対向装置宛のパケットは再送処理の対象であると判定する
処理をコンピュータに実行させることを特徴とする通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置と、その通信装置により行われる通信方法にかかわる。
【背景技術】
【０００２】
通信技術の普及と発達により、インターネットを含むWide Area Network（ＷＡＮ）経由でデータの送受信が行われることが増えてきている。例えば、ユーザ端末が対向装置にＷＡＮ経由でデータを送信し、対向装置が受信データに基づいて処理を行うシステムが増加してきている。このようなシステムでは、ユーザ装置から送信されたデータが対向装置で受信されないと処理が行われないため、データの送信に失敗すると、ユーザ装置は、対向装置に向けて送信データを再度送信しなおす。例えば、ユーザ端末は、送信したパケットについての確認応答メッセージを再送タイムアウト（Retransmission Time Out、ＲＴＯ）が経過するまでに受信できない場合、送信したパケットを対向装置に向けて再度送信する。
【０００３】
関連する技術として、サーバ装置へ送信する通信データを再送するまでの再送タイムアウトを算出する際に、サーバ装置と通信装置の間をデータが往復する往復時間の測定結果を用いる通信装置が提案されている。この通信装置は、再送タイムアウトの算出結果よりも大きな値となった往復時間の測定結果を、次回の再送タイムアウトの算出の際に用いない。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１７２４８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ユーザ端末によっては、再送タイムアウトが固定値に設定されている場合がある。しかし、ユーザ装置から対向装置までの間のパケットの往復時間は、ネットワークの輻輳状態によって変化する。例えば、ネットワークを介して送受信されるパケットの数が少ない場合、往復時間は短くなる。従って、再送タイムアウトが固定値に設定されている場合、パケットが送信されてからそのパケットが再送されるまでの時間が長くなりすぎる場合がある。なお、背景技術では、ユーザ装置から送信されたデータが対向装置で処理される場合について述べたが、任意の複数の通信装置がＷＡＮを介してパケットを送受信する場合にも、同様の問題が生じる可能性がある。
【０００６】
本発明は、再送タイムアウトが固定値に設定されている装置から送信されたパケットについて、再送が行われるまでの時間をパケットの往復時間に応じて変更することを目的とする。
【課題を解決するための手段】
【０００７】
実施形態に係る通信装置は、受信部、記憶部、送信部、測定部、および、再送部を備える。受信部は、対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信する。記憶部は、前記第１および第２のパケットを記憶する。送信部は、前記第１および第２のパケットを前記対向装置に送信する。測定部は、前記送信部が前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを前記受信部が受信した時刻までの時間である応答時間を測定する。前記送信部が前記第２のパケットを前記対向装置に送信した時刻から前記応答時間より長い時間が経過しても、前記受信部が前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から再送パケットも受信しない場合、再送部が動作する。ここで、再送パケットは、前記送信元装置から前記第２のパケットを再送したパケットである。再送部は、前記記憶部から前記第２のパケットを取得すると共に、前記送信部に、前記第２のパケットを前記対向装置に再度送信させる。
【発明の効果】
【０００８】
再送タイムアウトが固定値に設定されている装置から送信されたパケットについても、再送が行われるまでの時間がパケットの往復時間に応じて変更される。
【図面の簡単な説明】
【０００９】
【図１】ある実施形態にかかる通信装置の動作の例を説明する図である。
【図２】通信装置の構成の例を示す図である。
【図３】直結機器テーブルの例を示す図である。
【図４】直結機器の検出方法の例を説明する図である。
【図５】ＩＰヘッダとＴＣＰヘッダの構成例を示す図である。
【図６】検出されたコネクションの記録方法の例を示す図である。
【図７】通信パケットテーブルの例を示す図である。
【図８】コネクションテーブルと通信パケットテーブルの例を示す図である。
【図９】通信パケットテーブルの例を示す図である。
【図１０】コネクションテーブルと通信パケットテーブルの例を示す図である。
【図１１Ａ】通信装置がパケットを受信したときに行う動作の例を説明するフローチャートである。
【図１１Ｂ】通信装置がパケットを受信したときに行う動作の例を説明するフローチャートである。
【図１２】通信装置に格納されているパケットが対向装置に再送される場合の動作の例を説明するフローチャートである。
【図１３】対向装置に送信されたパケットが送信されてから再送されるまでの時間の例を示すテーブルである。
【図１４Ａ】通信装置がパケットを受信したときに行う動作の例を説明するフローチャートである。
【図１４Ｂ】通信装置がパケットを受信したときに行う動作の例を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
図１は、ある実施形態にかかる通信装置１０の動作の例を説明する図である。通信装置１０は、送信元装置２が対向装置６にむけて送信したパケットを中継する。送信元装置２が対向装置６にむけて送信したパケットについて、そのパケットが対向装置６で受信されたことが一定の時間に通知されず、さらに、送信元装置２からパケットが再送されないとき、通信装置１０は、パケットを対向装置６に再送する。図１を参照しながら、送信元装置２から対向装置６にＷＡＮ４を介してパケットが送信される場合の通信装置１０の動作について説明する。
【００１１】
なお、以下の説明では、あるパケットが通信装置１０から対向装置６に送信された時刻から、そのパケットの受信を通知する応答メッセージが通信装置１０で受信される時刻までの時間を「応答時間」（Round Trip Time、ＲＴＴ）と記載するものとする。さらに、送信元装置２から送信されたパケットが対向装置６に送信された後、通信装置１０が同じパケットを対向装置６に再送するまで待機する時間を「待機時間」と記載することもある。
【００１２】
（１）まず、送信元装置２は、対向装置６に向けて第１のパケットを送信する。通信装置１０は、第１のパケットを受信すると、受信したパケットを複製し、複製した第１のパケットを、送信元装置２を識別する情報と通信装置１０を識別する情報との組み合わせに関連付けて記憶する。
【００１３】
（２）通信装置１０は、第１のパケットをそのパケットの宛先である対向装置６に向けて送信する。さらに、通信装置１０は、第１のパケットを送信した時刻を記憶する。
（３）対向装置６は、第１のパケットを受信すると、第１のパケットを受信したことを通知する第１の応答メッセージを送信元装置２に向けて送信する。第１の応答メッセージが通信装置１０に到達すると、通信装置１０は、第１の応答メッセージを参照して、第１のパケットが対向装置６で受信されたことを認識する。次に、通信装置１０は、第１のパケットを通信装置１０から送信した時刻と、第１の応答メッセージの受信時刻の間の時間（応答時間）を求める。図１のＡは応答時間を示す。
【００１４】
（４）通信装置１０は、第１の応答メッセージを送信元装置２に送信する。
（５）次に、送信元装置２から送信された第２のパケットについて、通信装置１０は、手順（１）と同様に第２のパケットを複製して記憶する。また、第２のパケットを対向装置６に送信した時刻も記憶する。
【００１５】
（６）さらに、通信装置１０は、第２のパケットを対向装置６に転送する。ここで、第２のパケットについて、ＷＡＮ４でパケットロストが発生したとする。この場合、対向装置６は、第２のパケットを受信しないため、対向装置６は、第２のパケットの受信を通知する第２の応答メッセージを送信しない。
【００１６】
（７）通信装置１０は、手順（３）で求めた応答時間を用いて待機時間を計算する。ここで、待機時間は、図１のＢに示すように、応答時間よりも長い時間である。待機時間の計算方法については後述する。通信装置１０は、第２のパケットを対向装置６に送信した時刻から待機時間が経過するまで待機する。待機時間が経過しても、通信装置１０が第２の応答メッセージを受信せず、さらに、送信元装置２から対向装置６に向けて再送された第２のパケットも受信しない場合、通信装置１０は、記憶している第２のパケットを、対向装置６に送信する。
【００１７】
（８）手順（７）で再送された第２のパケットを対向装置６が受信すると、対向装置６は、第２の応答メッセージを送信元装置２に送信する。通信装置１０は、第２の応答メッセージを確認することにより、第２のパケットが対向装置６によって受信されたことを認識する。
【００１８】
（９）通信装置１０は、第２の応答メッセージを送信元装置２に送信する。
このように、パケットの送信時刻から待機時間が経過するまでの間に対向装置６でのパケットの受信が確認できず、さらに、送信元装置２からパケットの再送も行われていない場合に、通信装置１０は、対向装置６にパケットを再送する。ここで、待機時間は、応答時間を基にして計算されているので、応答時間の変動に応じて待機時間の長さも変動する。従って、通信装置１０は、送信元装置２から送信されたパケットの再送のタイミングを応答時間に応じて変動させることができる。例えば、送信元装置２において、再送タイムアウトが固定値に設定されている場合でも、通信装置１０は、応答時間に応じて計算されたタイミングでパケットの再送を行うことができる。すなわち、応答時間が短い場合は、通信装置１０が動作することにより、パケットの送信時刻からそのパケットの再送時刻までの間隔が短くなる。このため、例えば、対向装置６で動作しているアプリケーションが送信元装置２から送信されたデータを処理している場合、パケットの送信に失敗しても、アプリケーションでの処理に間に合うようにパケットを再送できる確率が高くなる。
【００１９】
＜装置構成＞
図２は、通信装置１０の構成の例を示す図である。通信装置１０は、受信部１１、送信部１２、ルーチング部１３、タイマ１４、記憶部２０、および、再送代替部３０を備える。記憶部２０は、直結機器テーブル２１、コネクションテーブル２２、通信パケットテーブル２３、および、ルーティングテーブル２４を備える。再送代替部３０は、直結機器検出部３１、コネクション検出部３２、通信パケット確認部３３、測定部３４、算出部３５、判定部３６、および、再送部３７を備える。
【００２０】
受信部１１は、送信元装置２からパケットを受信する。さらに、受信部１１は、受信したパケットを直結機器検出部３１、送信部１２などに出力することができる。また、受信部１１は、対向装置６から、パケットの受信を通知する応答メッセージを受信する。受信部１１は、受信した応答メッセージを、直結機器検出部３１、送信部１２などに出力する。送信部１２は、送信元装置２から受信したパケットを対向装置６に向けて送信する。また、送信部１２は、パケットを対向装置６に送信した時刻から待機時間が経過したときに、通信パケットテーブル２３を参照して、パケットを対向装置６に再送する。なお、後述するように、通信パケットテーブル２３には、送信元装置２から対向装置６に送信されたが対向装置６での受信が確認されていないパケットと、そのパケットについての情報が記録されている。さらに、送信部１２は、対向装置６から受信した応答メッセージを送信元装置２に送信する。ルーチング部１３は、通信装置１０が受信したパケットの転送先をルーティングテーブル２４に基づいて決定し、送信部１２に通知する。タイマ１４は、直結機器検出部３１、コネクション検出部３２、通信パケット確認部３３、測定部３４、再送部３７などに時刻情報を提供する。
【００２１】
直結機器検出部３１は、通信装置１０と同じネットワークに所属する機器を検出し、検出した機器に関する情報を直結機器テーブル２１に記録する。以下の説明では、通信装置１０と同じネットワークに所属する通信装置を「直結機器」と記載することがある。直結機器は、送信元装置２となる可能性がある。例えば、通信装置Ａが直結機器であり、さらに、通信装置Ａが通信装置Ｂに向けてパケットを送信するとする。通信装置Ａから通信装置Ｂに送信されたパケットが、通信装置１０を経由して通信装置Ｂに送信される場合、通信装置Ａは、図１に示す送信元装置２となる。直結機器テーブル２１の例を図３に示す。図３の例では、直結機器テーブル２１は、直結機器のMedia Access Control（ＭＡＣ）アドレス、Internet Protocol（ＩＰ）アドレス、および、通信装置１０との最新の通信時刻を格納する。なお、図３は、直結機器テーブル２１の例であり、直結機器テーブル２１に含まれる情報は、実装に応じて、適宜、変更される場合がある。
【００２２】
コネクション検出部３２は、送信元装置２と対向装置６の間でTransmission Control Protocol（ＴＣＰ）を用いた通信が行われる場合、送受信されるパケット中のＴＣＰヘッダを参照する。コネクション検出部３２は、ＴＣＰヘッダに含まれている情報に基づいて、コネクションの生成と消滅を監視し、通信が行われているコネクションに関する情報を、コネクションテーブル２２に格納する。コネクションの監視の方法と、コネクションテーブル２２の例については、後述する。
【００２３】
通信パケット確認部３３は、送信元装置２から受信したパケットに基づいて、コネクションテーブル２２や通信パケットテーブル２３を更新する。通信パケットテーブル２３には、パケットの送信時間などの情報が記録される。
【００２４】
測定部３４は、通信パケットテーブル２３に記録されているパケットについての応答メッセージが受信部１１で受信された時刻と、パケットの送信時刻の差から、応答時間を求める。さらに、測定部３４は、通信パケットテーブル２３に記録されている情報のうち、対向装置６から応答メッセージを受信したパケットに関する情報を削除する。このため、通信パケットテーブル２３は、通信装置１０から対向装置６に送信されたパケットのうち、対向装置６からの応答メッセージが通信装置１０で受信されていないパケットに関する情報が格納されている。
【００２５】
算出部３５は、あるパケットが送信部１２から対向装置６に向けて送信された時刻から、再送部３７がパケットの再送を送信部１２に指示する時刻までの待機時間を、応答時間に基づいて計算する。待機時間の計算方法については、後述する。
【００２６】
判定部３６は、通信装置１０が送信元装置２の代わりに対向装置６に対する再送を行うかを判定する。例えば、判定部３６は、送信元装置２がパケットを送信してから同じパケットを再送するまでの時間が、待機時間より長いかを判定する。パケットの送信に待機時間より長い時間がかかると判定された送信元装置２については、パケットの再送を通信装置１０が行う。また、以下の記載では、通信装置１０が送信元装置２の代わりに対向装置６に対する再送を行う場合、その送信元装置２を「対象装置」と記載することがある。
【００２７】
再送部３７は、通信パケットテーブル２３を参照して、対象装置から送信されたパケットのうち、パケットの送信時刻から待機時間が経過するまでに対向装置６からの応答メッセージが受信されていないパケットを特定する。また、再送部３７は、通信パケットテーブル２３に含まれているデータに基づいて、送信部１２にパケットの再送を指示する。
【００２８】
次に、通信装置１０のハードウェア構成の例について述べる。通信装置１０は、例えば、Central Processing Unit（ＣＰＵ）などのプロセッサ、メモリ、ネットワーク接続装置を備えることができる。この場合、ネットワーク接続装置は、通信装置１０をネットワークに接続し、例えば、受信部１１、送信部１２として動作する。ＣＰＵは、再送代替部３０、ルーチング部１３、タイマ１４などとして動作することができる。メモリは、記憶部２０として動作する。例えば、通信装置１０は、プロセッサ、メモリ、ネットワーク接続装置を備えたコンピュータであっても良い。なお、ここで述べた構成は一例であり、実装に応じて通信装置１０の構成は変更される場合がある。
【００２９】
＜第１の実施形態＞
通信装置１０は、直結機器の検出、応答時間の測定、コネクションの検出、直結機器から受信したパケットの保持、待機時間の算出、パケットの再送などを行う。以下、これらの動作の詳細について説明する。
【００３０】
〔直結機器の検出〕
通信装置１０が起動されると、通信装置１０は、まず、送信元装置２となる可能性のある装置（直結機器）を検出する。直結機器検出部３１は、直結機器の検出に、Address Resolution Protocol（ＡＲＰ）要求パケットを用いる。
【００３１】
図４は、直結機器の検出方法の例を説明する図である。通信を開始しようとする装置は、通信先のＩＰアドレスを取得すると、そのＩＰアドレスを用いている装置のＭＡＣアドレスを取得するためにＡＲＰ要求パケットを送信する。図４に、装置Ａから送信されたＡＲＰ要求パケットの例を示す。以下の例では、装置ＡのＩＰアドレスは「ＩＰ１」、ＭＡＣアドレスは「ＭＡＣ１」であるものとする。ＡＲＰ要求パケットは、イーサネットヘッダとＡＲＰメッセージを含む。イーサネットヘッダには、送信先ＭＡＣアドレス、送信元ＭＡＣアドレス、および、Ｔｙｐｅが記録される。ここでは、送信元ＭＡＣアドレスは装置ＡのＭＡＣアドレス、ＴｙｐｅはＡＲＰ要求を表す「０８０６」が記録される。さらに、ＡＲＰ要求パケットの送信先ＭＡＣアドレスはブロードキャストアドレス（ＭＡＣ＿Ｂ）である「ｆｆ：ｆｆ：ｆｆ：ｆｆ：ｆｆ：ｆｆ」が用いられる。このため、ＡＲＰ要求パケットは、装置Ａが所属するネットワークと同じネットワークに所属する全ての通信装置に送信される。
【００３２】
ＡＲＰ要求パケットのＡＲＰメッセージには、Ｏｐｃｏｄｅ、送信元ＭＡＣアドレス、送信元ＩＰアドレス、対象ＭＡＣアドレス、対象ＩＰアドレスが含まれる。ここで、対象ＩＰアドレスはＭＡＣアドレスを取得しようとする装置で用いられているＩＰアドレスである。例えば、対象ＩＰアドレスは、装置Ａが通信する対象の装置のＩＰアドレスである。また、対象ＭＡＣアドレスは、取得しようとするＭＡＣアドレスである。ＡＲＰ要求パケットが生成されるときには、装置Ａは対象ＭＡＣアドレスを取得していないので、ＭＡＣアドレスの代わりに「０」が記録される。Ｏｐｃｏｄｅは、ＡＲＰメッセージがＡＲＰ要求であるかを示す情報であり、ＡＲＰ要求の場合は「１」である。送信元ＭＡＣアドレスと送信元ＩＰアドレスのフィールドには、装置ＡのＭＡＣアドレスとＩＰアドレスが格納されている。
【００３３】
装置Ａが図４に示すＡＲＰ要求パケットをブロードキャストすると、装置Ａと同じネットワークに所属する通信装置１０は、ＡＲＰ要求パケットを受信する。直結機器検出部３１は、受信部１１を介して受信されたパケットの種類を確認し、ＡＲＰ要求パケットを取得する。さらに、直結機器検出部３１は、取得したパケットのＡＲＰメッセージから送信元ＭＡＣアドレスと送信元ＩＰアドレスを抽出して、直結機器テーブル２１（図３）に格納する。また、直結機器検出部３１は、タイマ１４を参照して、ＡＲＰ要求パケットが受信された時刻を取得し、直結機器テーブル２１に格納する。直結機器検出部３１は、通信装置１０がＡＲＰ要求パケットを受信するたびに、ＡＲＰ要求に含まれている送信元ＩＰアドレス、送信元ＭＡＣアドレス、およびＡＲＰ要求パケットの受信時刻を取得し、直結機器テーブル２１に格納する。
【００３４】
すでに直結機器テーブル２１に登録されている装置から再度ＡＲＰ要求パケットを受信した場合、直結機器検出部３１は、ＡＲＰ要求パケットを送信した装置に関する記録の最終通信時刻を変更する。例えば、図３の直結機器テーブル２１の１番上の欄には、すでに、装置Ａとの通信について記録されている。そこで、直結機器検出部３１は、装置ＡからＡＲＰ要求パケットを受信すると、装置Ａとの最終通信時刻をＡＲＰ要求パケットの受信時刻に変更する。また、直結機器検出部３１は、コネクションの生成要求や、既に確立されたコネクションを介して送信されたパケットなどを受信するたびに、それらのパケットの送信元アドレスに対応付けられた最終通信時刻を更新する。
【００３５】
〔コネクションの検出〕
次に、直結機器テーブル２１に記録されている装置が対向装置６との間でコネクションを生成するときに、通信装置１０で行われる動作の例を説明する。以下の説明では、送信元装置２のＩＰアドレスはＩＰ１であり、対向装置６のＩＰアドレスはＩＰ１０であるものとする。なお、以下の説明では、図１に示すように、送信元装置２と対向装置６はＷＡＮ４を介して通信するものとする。
【００３６】
パケットを受信すると、受信部１１は受信パケットを直結機器検出部３１に出力する。直結機器検出部３１は、ＡＲＰ要求パケット以外のパケットについて、ＩＰヘッダを確認することにより、直結装置から送信されたパケットであるかを判定する。
【００３７】
図５（ａ）に、ＩＰヘッダの構成例を示す。図５（ａ）は、ＩＰｖ４で用いられるＩＰヘッダを示す。ＩＰｖ４ヘッダには、パケットの送信元ＩＰアドレスと宛先ＩＰアドレスが含まれている。さらに、ＩＰｖ４ヘッダには、ヘッダ長フィールドとデータ長フィールドが含まれる。ヘッダ長フィールドは、ＩＰヘッダの長さを示す。データ長フィールドは、ＩＰヘッダとセグメントデータを合わせた長さを示す。さらに、ＩＰｖ４ヘッダには、バージョン情報、サービスタイプ、識別番号、フラグ、フラグメントオフセット、Time To Live（ＴＴＬ）、プロトコル、ヘッダチェックサム、オプション、パディングなどのフィールドが含まれる。ここではＩＰｖ４ヘッダについて述べたが、ＩＰｖ６ヘッダにも送信元ＩＰアドレスと宛先ＩＰアドレスが含まれている。また、ＩＰｖ６ヘッダには、ペイロード長フィールドが含まれている。ペイロード長フィールドには、ＩＰｖ６パケットの全体の長さからＩＰｖ６ヘッダの長さを差し引いたペイロードの長さが記録される。
【００３８】
直結機器検出部３１は、受信したパケットのＩＰヘッダに含まれている送信元ＩＰアドレスを、直結機器テーブル２１に含まれているＩＰアドレスと比較する。受信されたパケットの送信元ＩＰアドレスが直結機器テーブル２１に記録されている場合、直結機器検出部３１は、そのパケットの送信元の装置は、直結装置であると判定し、コネクション検出部３２にパケットを出力する。コネクション検出部３２は、直結機器検出部３１から入力されたパケットのＴＣＰヘッダを参照することにより、コネクションに関する情報を取得する。コネクション検出部３２は、取得した情報をコネクションテーブル２２に格納する。
【００３９】
図５（ｂ）は、ＴＣＰヘッダの構成例を示す図である。ＴＣＰヘッダには、送信元ポート番号、宛先ポート番号、シーケンス番号、確認応答番号、制御ビットが含まれる。さらに、ＴＣＰヘッダには、オプション、データオフセット、予約ビット、ウィンドウサイズ、チェックサム、緊急ポインタ、パディングも含まれる。データオフセットフィールドには、ＴＣＰヘッダの長さが記録されている。制御ビットには、ＵＲＧ（urgent）、ＡＣＫ（acknowledge）、ＰＳＨ（push）、ＲＳＴ（reset）、ＳＹＮ（synchronize）、ＦＩＮ（finis）の６ビットが含まれる。通信装置１０では、ＡＣＫ、ＲＳＴ、ＳＹＮ、ＦＩＮの値を用いた制御が行われる。ＳＹＮビットは、コネクションの確立が要求されているかを示す。ＳＹＮ＝１のパケットは、宛先の装置に対してコネクションの確立を要求するために用いられる。以下の記載では、ＳＹＮ＝１のパケットを「送信許可要求パケット」と記載することがある。ＡＣＫビットは、パケットが応答メッセージであるかを示す。ＡＣＫ＝１のパケットは、あるパケットに対する応答メッセージとして用いられる。ＲＳＴとＦＩＮは、そのパケットの送信に用いられたコネクションの切断が要求されているかを示す。ＲＳＴかＦＩＮのいずれかが１であるパケットは、そのパケットの宛先の装置に対して、そのパケットの送信に用いられたコネクションの切断を要求する。
【００４０】
コネクション検出部３２は、直結機器検出部３１から入力された各々のパケットについて、ＴＣＰヘッダ中の制御ビットのうちのＲＳＴ、ＳＹＮ、ＦＩＮのそれぞれの値を確認する。ここでは、ＳＹＮ＝１、ＲＳＴ＝０、ＦＩＮ＝０のパケットを通信装置１０が受信したものとする。ＳＹＮが１の場合、コネクション検出部３２は、送信元装置２から対向装置６に向けたコネクションが確立されると判断して、確立されるコネクションに関する情報をコネクションテーブル２２に記録する。
【００４１】
図６は、検出されたコネクションの記録方法の例を示す図である。コネクションテーブル２２は、例えば、送信元装置２のＩＰアドレス、送信元ポート番号、対向装置６のＩＰアドレス、宛先ポート番号、次に送信されるセグメントのシーケンス番号（ＮｅｘｔＳｅｑＮｏ）を記録する。さらに、応答時間から算出された再送タイムアウト（ＲＴＯ計算値）、再送フラグ、最終通信時刻を格納する。以下の説明では、応答時間から算出された通信装置１０での再送タイムアウトのことを、「ＲＴＯ計算値」と記載することがある。ここで、再送フラグは、通信装置１０がパケットの再送を行う送信元装置２を識別するために用いられる。再送フラグが「ＯＮ」の場合、そのコネクションを介して送信されたパケットについて、通信装置１０は、判定部３６による判定を行わずに再送を行う。なお、再送フラグが「ＯＮ」の場合と「ＯＦＦ」の場合で、算出部３５は、待機時間の算出方法を変更することができる。以下、図６を参照しながら、コネクション検出部３２の動作について説明する。
【００４２】
コネクション検出部３２は、送信許可要求パケットを受信すると、そのパケットのＩＰヘッダから送信元ＩＰアドレスと宛先ＩＰアドレスを取得して、コネクションテーブル２２に記録する。コネクション検出部３２は、ＴＣＰヘッダの送信元ポート番号を送信元装置２でのポート番号とし、ＴＣＰヘッダの宛先ポート番号を対向装置６でのポート番号として、コネクションテーブル２２に記録する。コネクション検出部３２は、パケットを受信した時刻もコネクションテーブル２２に記録する。
【００４３】
次に、コネクション検出部３２は、次に送信されるセグメントのシーケンス番号を計算する。コネクション検出部３２は、ＩＰｖ４パケットのデータ長フィールドに記録されている値からヘッダ長フィールドに記録されている値を差し引いて、セグメントデータの長さを求める。次に、コネクション検出部３２は、ＴＣＰヘッダのデータオフセットフィールドの値を取得し、セグメントデータの長さからＴＣＰヘッダの長さを差し引くことにより、パケットに含まれているデータの長さを求める。すなわち、パケットに含まれているデータ長をＤ、ＩＰｖ４パケットのデータ長フィールドの値をＩＰｄ、ＩＰヘッダ長をＩＰｈ、ＴＣＰヘッダ長をＴＣＰｈとすると、コネクション検出部３２は、以下の計算によりデータ長Ｄを求める。
Ｄ＝ＩＰｄ−ＩＰｈ−ＴＣＰｈ
【００４４】
さらに、コネクション検出部３２は、通信装置１０が受信したパケットに含まれているシーケンス番号（Ｓｅｑ）にデータ長を加えることにより、次に送信されるセグメントのシーケンス番号（ＮｅｘｔＳｅｑ）を算出する。すなわち、次に送信されるセグメントのシーケンス番号は、次式により求められる。コネクション検出部３２は、算出したＮｅｘｔＳｅｑをコネクションテーブル２２に記録する。
ＮｅｘｔＳｅｑ＝Ｓｅｑ＋Ｄ
【００４５】
コネクション検出部３２は、図６に示すように、ＮｅｘｔＳｅｑをコネクションテーブル２２に記録する。なお、送信許可要求パケットのように、データが含まれていないパケットに基づいてＮｅｘｔＳｅｑの値が計算された場合、次に同じコネクションを介して送信されるパケットに含まれているデータのシーケンス番号はＮｅｘｔＳｅｑの値より大きいことがある。例えば、コネクションを確立するために送信元装置２から対向装置６に送信される送信許可要求パケットには、送信元装置２から対向装置６への送信データが含まれていないので、データ長は０バイトになる。コネクションの確立のために送信されたパケットのシーケンス番号が２０００であると、コネクション検出部３２は、ＮｅｘｔＳｅｑを２０００とする。しかし、送信許可要求パケットの次に送信されるパケットに含まれるシーケンス番号は、２０００よりも大きい場合がある。
【００４６】
さらに、コネクション検出部３２は、時刻情報をタイマ１４から取得してコネクションテーブル２２に記録する。コネクションを確立する要求が送信元装置２から対向装置６に送信されたときには、まだ送信元装置２から対向装置６の間の応答時間が求められていないので、ＲＴＯ計算値は記録されない。コネクション検出部３２は、検出したコネクションについて、再送フラグを「ＯＦＦ」に設定する。
【００４７】
次に、送信許可要求パケットは、通信パケットテーブル２３に格納される。図７に通信パケットテーブル２３の例を示す。通信パケットテーブル２３は、例えば、送信元装置２のＩＰアドレス、送信元ポート番号、対向装置６のＩＰアドレス、宛先ポート番号、そのパケットのシーケンス番号、データ長、再送回数、発信時刻を格納する。さらに、これらの情報に対応付けて、受信パケットが通信パケットテーブル２３に格納される。
【００４８】
コネクション検出部３２は、送信許可要求パケットについて、送信元装置２のＩＰアドレス、送信元ポート番号、対向装置６のＩＰアドレス、宛先ポート番号、そのパケットのシーケンス番号、および、データ長を既に認識している。そこで、コネクション検出部３２は、これらの情報を通信パケットテーブル２３に格納し、通信パケット確認部３３に送信許可要求パケットを出力する。通信パケット確認部３３は、パケットを通信パケットテーブル２３に登録するときは、再送回数を「０」に設定する。さらに、通信パケット確認部３３は、タイマ１４から時刻情報を取得し、そのパケットが送信部１２から対向装置６に向けて出力される時刻も、通信パケットテーブル２３に記録する。
【００４９】
〔応答時間の測定とＲＴＯ計算値の算出〕
次に、対向装置６から送信元装置２に向けてコネクションの送信を許可する応答メッセージが送信され、通信装置１０が応答メッセージを受信した場合について説明する。
【００５０】
受信部１１は、対向装置６から受信したパケットを、直結機器検出部３１に出力する。直結機器検出部３１は、パケットのＩＰヘッダに含まれているＩＰアドレスを直結機器テーブル２１に記録されているＩＰアドレスと比較する。宛先ＩＰアドレスが直結機器テーブル２１に記録されている場合、直結機器検出部３１は、そのパケットを測定部３４に出力する。従って、通信装置１０を介して対向装置６に送信された送信許可要求パケットに対する応答パケットは、測定部３４に出力される。
【００５１】
測定部３４は、直結機器検出部３１から入力されたパケットのＴＣＰヘッダ中のＡＣＫビットを参照して、応答メッセージを受信しているかを確認する。ＡＣＫビットの値が「１」である場合、測定部３４は、応答メッセージを受信したと判断し、確認応答番号を参照する。確認応答番号には、対向装置６が送信元装置２から次に受信するデータを識別するシーケンス番号が記録されている。このため、測定部３４は、確認応答番号よりもシーケンス番号が小さな値のデータを含むパケットが対向装置６で受信されたと認識する。ただし、コネクションが確立される段階では、そのコネクションに関連して通信パケットテーブル２３に登録されているパケットは、送信元装置２から対向装置６に送信された送信許可要求パケットだけである。そこで、測定部３４は、応答メッセージは送信許可要求パケットの受信を通知していると判断し、応答メッセージの受信時刻を取得する。次に、測定部３４は、通信パケットテーブル２３を参照することにより、応答メッセージの受信時刻から、送信許可要求パケットの発信時刻までの時間を差し引いた値を、応答時間とする。
【００５２】
例えば、図７に示すように、送信許可要求パケットが通信装置１０から対向装置６に送信された時刻は、１２時０分０秒であり、応答メッセージの受信時刻が１２時０分０．０４秒であるとする。すると、測定部３４は、
（１２時０分０．０４秒）−（１２時０分０秒）＝０．０４秒
を応答時間とする。測定部３４は、求めた応答時間を算出部３５に出力する。さらに、測定部３４は、通信パケットテーブル２３から送信許可要求パケットについての記録を削除する。
【００５３】
算出部３５は、応答時間を用いて、ＲＴＯ計算値と待機時間を算出する。算出部３５は、コネクションについて初めて求められた応答時間を用いて（１）式に基づく計算を行い、ＲＴＯ計算値（ＲＴＯcal ）を求める。
ＲＴＯcal ＝ＳＲＴＴ＋ｍａｘ（Ｇ，Ｋ×ＲＴＴＶＡＲ）  ・・・（１）
ここで、
Ｋ＝４
ＳＲＴＴ＝ＭＲＴＴ
ＲＴＴＶＡＲ＝ＭＲＴＴ／２
であるものとする。ＭＲＴＴ（Measured RTT）は、測定部３４が求めた応答時間である。ＲＴＴＶＡＲは、応答時間の２分の１である。また、Ｇは、通信装置１０が応答時間の測定に使用するクロックの粒度（分解能）である。
【００５４】
例えば、応答時間が０．０４秒、クロックの分解能が０．０５秒であるとすると、ＲＴＯ計算値は以下のように求められる。
ＲＴＴＶＡＲ＝ＭＲＴＴ／２＝０．０４／２=０．０２（秒）
ＳＲＴＴ＝ＭＲＴＴ＝０．０４（秒）
ＲＴＯcal ＝０．０４＋ｍａｘ（０．０５，４×０．０２）＝０．１２（秒）
算出部３５は、求めたＲＴＯ計算値をコネクションテーブル２２に記録する。
【００５５】
〔記録済みのコネクションを介して受信したパケットの保持〕
次に、コネクションテーブル２２に記録されているコネクションを介して送信元装置２から対向装置６に送信されるパケットを、通信装置１０が受信した場合について、通信パケット確認部３３などの動作の例を説明する。受信されたパケットがＡＲＰ要求パケットではない場合、コネクション検出部３２は、受信されたパケットのＴＣＰヘッダを参照し、コネクションテーブル２２に登録されているコネクションを介して送信されたパケットであるかを判定する。コネクションテーブル２２に登録されているコネクションを介して送信元装置２から送信されたパケットを受信した場合、コネクション検出部３２は、パケットを通信パケット確認部３３に出力する。例えば、送信元装置２から対向装置６に送信されたパケットを受信すると、コネクション検出部３２は、ＩＰアドレスとポート番号を用いて、コネクションテーブル２２に登録されているコネクションを介して送信されているかを確認する。登録されているコネクションを介して送信されたパケットであると、コネクション検出部３２は、通信パケット確認部３３にパケットを出力する。
【００５６】
通信パケット確認部３３は、入力されたパケットのシーケンス番号にデータ長を加えた値を、コネクションテーブル２２のＮｅｘｔＳｅｑＮｏに記録されている数値と比較する。ここで、データ長の求め方は、送信許可要求パケットの場合と同様である。通信パケット確認部３３は、シーケンス番号とデータ長の和がＮｅｘｔＳｅｑＮｏに記録されている数値よりも大きい場合、入力されたパケットは、送信元装置２から対向装置６に初めて送られるデータを含むと判定する。一方、通信パケット確認部３３は、シーケンス番号とデータ長の和がＮｅｘｔＳｅｑＮｏに記録されている数値以下の場合、入力されたパケットは再送パケットであると判定する。
【００５７】
図８（ａ）は、通信パケットテーブル２３の例を示す図である。図８（ａ）は、パケットＰ１〜Ｐ３の３つのパケットが送信元装置２から対向装置６に送信された場合の通信パケットテーブル２３を示す。以下の説明では、通信パケットテーブル２３が図８（ａ）に示すように更新されたとき、パケットＰ１〜Ｐ３は、いずれも初めて送られるデータを含むと判定されたとする。
【００５８】
通信パケット確認部３３は、コネクション検出部３２から入力されたパケットのＴＣＰヘッダに含まれているシーケンス番号とデータ長を通信パケットテーブル２３に記録する。通信パケット確認部３３は、送信元装置２および対向装置６のＩＰアドレス、送信元ポート番号、宛先ポート番号を、コネクション検出部３２と同様にＴＣＰヘッダなどを参照して取得し、通信パケットテーブル２３に記録する。通信パケット確認部３３は、パケットを通信パケットテーブル２３に登録するときは、再送回数を「０」に設定する。さらに、通信パケット確認部３３は、タイマ１４から時刻情報を取得し、そのパケットが送信部１２から対向装置６に向けて出力される時刻も、通信パケットテーブル２３に記録する。
【００５９】
通信パケット確認部３３は、コネクション検出部３２から入力されたパケットの情報に基づいて、これまでに送信元装置２から対向装置６に送信されたデータの次のデータを示すシーケンス番号を求め、コネクションテーブル２２に記録する。さらに、通信パケット確認部３３は、コネクションテーブル２２の最終通信時刻も更新する。
【００６０】
図８（ｂ）は、パケットＰ１〜Ｐ３が送信されたときのコネクションテーブル２２の例を示す。パケットＰ１〜Ｐ３はいずれも送信元装置２から対向装置６に同じコネクションを用いて送信されている。従って、そのコネクションでは、シーケンス番号２００１から１０００バイト分、シーケンス番号３００１から１０００バイト分、および、シーケンス番号３００１から１０００バイト分のデータが対向装置６に向けて送信されている。従って、パケットＰ１〜Ｐ３のいずれも対向装置６で受信された場合、シーケンス番号５０００までのデータが対向装置６に送信されていることになる。従って、パケットＰ１〜Ｐ３が対向装置６で受信された場合、次に対向装置６に送信されるパケットは、シーケンス番号５００１から始まるデータを含む。そこで、ＮｅｘｔＳｅｑＮｏには、５００１が記録される。
【００６１】
通信パケット確認部３３は、コネクション検出部３２からパケットを受信するたびに、パケットのシーケンス番号にデータ長を加えた値を、コネクションテーブル２２のＮｅｘｔＳｅｑＮｏに記録されている数値と比較する。シーケンス番号とデータ長の合計値が、コネクションテーブル２２のＮｅｘｔＳｅｑＮｏに記録されている数値よりも大きい場合、通信パケット確認部３３は、ＮｅｘｔＳｅｑＮｏを、得られた合計値に変更する。
【００６２】
〔待機時間の算出〕
通信装置１０は、通信パケットテーブル２３に記録したパケットを、対向装置６に送信する。パケットＰ１〜Ｐ３のようにデータを含むパケットが送信されると、算出部３５は、コネクションテーブル２２に記録されているＲＴＯ計算値を用いて、待機時間を算出する。再送回数をＭとし、パケットの送信時刻からＭ回目の再送までの待機時間をＲＭとすると、算出部３５は、待機時間を（２）式に従って計算する。
ＲM ＝ＲＴＯcal ×２M-1 ×Ｖ  ・・・（２）
（２）式において、Ｖは１以上の定数である。
【００６３】
算出部３５は、Ｖの値を決定する際に、通信パケットテーブル２３の再送フラグの設定を参照することができる。再送フラグが「ＯＮ」に設定されている場合、算出部３５は、再送フラグが「ＯＦＦ」に設定されている場合よりもＶの値を小さくする。例えば、コネクションが確立されるときは、送信元装置２が対象装置であるかの判定が行われる前であるため、再送フラグが「ＯＦＦ」に設定されている。そこで、送信元装置２が自律的に応答時間に応じた時間で再送を行うかを判定するために、算出部３５は、Ｖの値を１より大きい値に設定して待機時間を計算する。例えば、算出部３５は、対象装置であると判定されていない送信元装置２から送信されたパケットを再送するときの待機時間を、Ｖ＝３として計算することができる。一方、再送フラグが「ＯＮ」に設定されているコネクションについては、送信元装置２から対向装置６に送信されたパケットを通信装置１０が再送することが決定されているので、算出部３５は、Ｖの値を１として待機時間を計算できる。
【００６４】
〔パケットの再送〕
通信装置１０は、送信元装置２から送信されたパケットが対向装置６で受信されたかを、応答メッセージ中の確認応答番号を参照することによって確認する。確認応答番号は、応答メッセージに対応するパケットに含まれているデータの次に対向装置６が受信するデータの先頭を表すシーケンス番号である。例えば、パケットＰ１を受信すると、対向装置６はシーケンス番号＝２００１のデータから１０００バイト分を受信しているので、パケットＰ１に対する応答メッセージＡ１では、確認応答番号は３００１となる。
【００６５】
通信装置１０に受信された応答メッセージＡ１は、受信部１１と直結機器検出部３１を介して測定部３４に出力される。測定部３４は、応答メッセージＡ１のＴＣＰヘッダ中のＡＣＫビットの値が「１」であることを確認すると、確認応答番号を取得する。測定部３４は、応答メッセージに含まれている確認応答番号よりも小さいシーケンス番号に対応付けられたパケットは、対向装置６に受信されたと判断し、確認応答番号よりも小さいシーケンス番号に対応するデータやパケットを削除する。さらに、測定部３４は、受信した応答メッセージに対応するパケットと、応答メッセージに対応するパケットに関するデータを通信パケットテーブル２３から削除する。図９に、応答メッセージＡ１に基づいてパケットＰ１に関する情報を削除した後の通信パケットテーブル２３を示す。
【００６６】
一方、パケットが対向装置６で受信されたという通知が待機時間以内に届かない場合、パケットの再送が行われる。通信装置１０から対向装置６へのパケットの再送は、通信装置１０に格納されているパケットが対向装置６に再送される場合と、送信元装置２がパケットを再送する場合とがある。各々の場合について、通信装置１０の動作を説明する。
【００６７】
（Ａ）ケース１
まず、通信装置１０に格納されているパケットが対向装置６に再送される場合について説明する。判定部３６は、再送フラグがＯＦＦに設定されているコネクションの各々について、通信装置１０から送信を行うかを判定する。判定部３６は、タイマ１４から現在時刻を取得し、通信パケットテーブル２３に含まれている発信時刻との差を求める。得られた差が算出部３５で求められた待機時間を超えていると判定部３６は、通信装置１０からパケットの再送を行うことを決定する。判定部３６は、再送を行うパケットを再送部３７に通知する。さらに、判定部３６は、再送を行うことが決定されたパケットの送信に用いられるコネクションについて、コネクションテーブル２２の再送フラグをＯＮに設定する。
【００６８】
例えば、送信元装置２（ＩＰ１）の１３００番のポートから、対向装置６（ＩＰ１０）の１４００番のポートに向けたパケットの送信に用いられるコネクションにおいて、ＲＴＯ計算値が０．１２秒であるとする。また、算出部３５で算出された１回目の待機時間は、０．１２×（２＾０）×３＝０．３６（秒）であるとする。判定部３６が１２時０分０．６１２秒に図９の通信パケットテーブル２３を参照したとする。この場合、現在時刻と発信時刻の差は１２時０分０．６１２秒−１２時０分０．２１２秒＝０．４００秒である。そこで、判定部３６は、パケットＰ２の再送を通信装置１０で行うことを決定し、再送部３７に通知する。さらに、判定部３６は、コネクションテーブル２２の再送フラグをＯＮに設定する。すなわち、コネクションテーブル２２は、図８（ｂ）から図１０（ａ）に示すように変更される。
【００６９】
再送部３７は、判定部３６から通知されたパケットについて、通信パケットテーブル２３の再送回数を１に変更し、再送を送信部１２に指示する。さらに、再送部３７は、通信パケットテーブル２３の発信時刻を、パケットが再送される時刻に更新する。変更後の通信パケットテーブル２３の例を図１０（ｂ）に示す。送信部１２にパケットの再送を指示した後も、再送部３７は、定期的に、再送フラグがＯＮに設定されているコネクションを介して対向装置６に送信されたパケットについて、発信時刻から経過している時間を求める。再送部３７は、発信時刻から経過した時間が２回目の待機時間を越えたパケットについて、送信部１２に２回目の再送を指示する。その後も、発信時刻と再送部３７が通信パケットテーブル２３を確認する時刻の差が、待機時間を越えるたびに再送部３７は、送信部１２にパケットの再送を指示する。
【００７０】
次に、再送フラグがＯＮに設定されているコネクションを介して対向装置６に送信されたパケットの再送について説明する。再送フラグがＯＮに設定されているコネクションを介して送信されたパケットの再送については、算出部３５は、Ｖ＝１として待機時間を算出することができる。算出部３５は、得られた待機時間を、適宜、記憶部２０に記憶する。この場合、再送部３７は、発信時刻から（２）式でＶ＝１として求められた待機時間を超えても通信パケットテーブル２３に記録されているパケットについて、再送を送信部１２に指示する。例えば、パケットＰ３については、再送部３７は、そのコネクションについてＶ＝１で計算された待機時間が経過した時刻に対向装置６に向けて再送を指示する。さらに、再送部３７は、通信パケットテーブル２３の発信時刻を、パケットが再送される時刻に更新する。
【００７１】
なお、この例では、再送タイムアウトの３倍以上の時間が経過しても再送が行われないコネクションについて通信装置１０が再送を行う場合の例を述べたが、通信装置１０が再送を行うと決定するための基準は、実装に応じて任意に変更されることがある。算出部３５は、通信装置１０で再送が行われる基準に応じて待機時間を計算する。さらに、例えば３秒などの、予め決められた閾値よりも長い時間にわたって再送が行われないときに、判定部３６は、通信装置１０で再送を行うことを決定することもできる。この場合、算出部３５で算出された待機時間ではなく、予め記憶している閾値の時間が経過しても再送が行われないコネクションについて、判定部３６は、通信装置１０で再送を行うことを決定する。
【００７２】
（Ｂ）ケース２
次に、送信元装置２がパケットを再送した場合の通信装置１０の動作について説明する。まず、再送フラグの設定が行われていないときの動作から説明する。通信パケット確認部３３は、入力されたパケットのシーケンス番号とデータ長の合計値をＮｅｘｔＳｅｑＮｏと比較する。合計値がＮｅｘｔＳｅｑＮｏ以下であれば、通信パケット確認部３３は、送信元装置２から再送されたパケットを取得したと判断する。すると、通信パケット確認部３３は、取得したパケットとコネクションおよびシーケンス番号が同一であるエントリを通信パケットテーブル２３から抽出し、抽出したエントリの再送回数の値を１つインクリメントする。
【００７３】
次に、通信パケット確認部３３は、送信元装置２から対向装置６に再送されたパケットを送信することと、再送するパケットを特定する情報を判定部３６に通知する。判定部３６は、通信パケット確認部３３から通知を受け取った時刻をタイマ１４から取得する。また、判定部３６は、再送するパケットの前回の発信時刻を通信パケットテーブル２３から取得し、タイマ１４から得られた時刻との差（実タイムアウト時間）を求める。判定部３６は、実タイムアウト時間と待機時間を比較する。待機時間の計算方法はケース１と同様である。実タイムアウト時間が待機時間よりも長い場合、判定部３６は、そのコネクションについて、通信装置１０からパケットの再送を行うことを決定し、コネクションテーブル２２の再送フラグをＯＮに設定する。
【００７４】
判定部３６が実タイムアウト時間を求めた後、通信パケット確認部３３は、再送するパケットの送信を送信部１２に指示し、送信を指示したパケットについて、通信パケットテーブル２３中の発信時刻を更新する。
【００７５】
例えば、図９の通信パケットテーブル２３が生成された後で、通信装置１０がパケットＰ２を再送する前に、送信元装置２が対向装置６にパケットＰ２を送信したとする。また、ここでは再送フラグがＯＦＦに設定されているコネクションについて、Ｖ＝２として（２）式から待機時間が計算されたとする。送信元装置２から再送されたパケットＰ２を通信装置１０が対向装置６に転送した時刻が１２時０分０．５秒であるとする。すると、通信パケット確認部３３は、図８（ａ）に示すパケットＰ２のエントリについて、再送回数を１回インクリメントする。判定部３６は、パケットＰ２の送信時刻が１２時０分０．２１２秒であるので、１２時０分０．５秒−１２時０分０．２１２秒＝０．２８８秒より、実タイムアウト時間が０．２８８秒であることを認識する。次に、判定部３６は、そのコネクションについて計算されている待機時間と実タイムアウト時間を比較する。ここで、ＲＴＯ計算値が０．１２秒であるとすると、待機時間は、Ｖ＝２なので、０．１２×（２＾０）×２＝０．２４（秒）である。従って、実タイムアウト時間は、待機時間より長い。そこで、判定部３６は、パケットＰ２の送信に用いられているコネクションについて、通信装置１０からパケットの再送を行うことを決定し、そのコネクションの再送フラグをＯＮに設定する。その後、通信パケット確認部３３は、パケットＰ２を対向装置６に向けて再送するように送信部１２に指示する。また、パケットＰ２について、発信時刻を１２時０分０．５秒に変更する。
【００７６】
なお、この例では、実タイムアウトがＲＴＯ計算値の２倍以上の場合に通信装置１０が再送を行う場合の例を述べたが、通信装置１０が再送を行うと決定するための実タイムアウトとＲＴＯ計算値の割合は、実装に応じて任意に変更されることがある。さらに、例えば３秒などの、予め決められた時間よりも実タイムアウト時間が長いときに、判定部３６は、通信装置１０で再送を行うことを決定することもできる。
【００７７】
次に、再送フラグがＯＮに設定されているコネクションを介して対向装置６に送信されたパケットについては、ケース１と同様に処理される。従って、すでに再送フラグがＯＮに設定されているコネクションについては、例えば、発信時刻から（２）式でＶ＝１として求められた待機時間が経過したときに、通信装置１０に格納されているパケットが対向装置６に再送される。
【００７８】
〔ＲＴＯ計算値の更新〕
次に、ＲＴＯ計算値の更新について説明する。ここでは、パケットＰ１が対向装置６に受信され、対向装置６から送信元装置２に向けてパケットＰ１についての応答メッセージＡ１が送信された場合を例として述べる。
【００７９】
通信装置１０に受信された応答メッセージＡ１は、前述のとおり、受信部１１と直結機器検出部３１を介して測定部３４に出力される。測定部３４は、確認応答番号よりもデータ長だけ小さな値のシーケンス番号を算出し、応答メッセージで受信が通知されたパケットを特定する。例えば、応答メッセージＡ１では確認応答番号が３００１でデータ長が１０００バイトであるので、測定部３４は、３００１−１０００＝２００１のシーケンス番号のパケットに対する応答メッセージを受信したと認識する。すると、測定部３４は、通信パケットテーブル２３を参照することにより、応答メッセージを受け取ったパケットについて、送信部１２から対向装置６に向けて送信した時刻（発信時刻）を求める。測定部３４は、応答メッセージの受信時刻から、受信が通知されたパケットの発信時刻までの時間を差し引いた値を、応答時間とする。
【００８０】
例えば、図８（ａ）に示すように、パケットＰ１が通信装置１０から対向装置６に送信された時刻は、１２時０分０．２１秒である。測定部３４は、応答メッセージＡ１の受信時刻をタイマ１４から取得する。例えば、応答メッセージＡ１の受信時刻が１２時０分０．４１秒であるとする。すると、測定部３４は、
（１２時０分０．４１秒）−（１２時０分０．２１秒）＝０．２０秒
を応答時間とする。測定部３４は、求めた応答時間を算出部３５に出力する。算出部３５は、ＲＴＯ計算値を更新するときは、（３）式によって更新値を求める。なお、（３）式において、Ｎ番目に算出されるＲＴＯ計算値をＲＴＯcal ，N とする。
ＲＴＯcal ，N ＝ＳＲＴＴN ＋ｍａｘ（Ｇ，Ｋ×ＲＴＴＶＡＲN ）  ・・・（３）
ここで、
Ｋ＝４
ＲＴＴＶＡＲN ＝（１−β）×ＲＴＴＶＡＲN-1 ＋β×｜ＳＲＴＴN-1 −ＭＲＴＴN ｜
ＳＲＴＴN ＝（１−α）×ＳＲＴＴN-1 ＋α×ＭＲＴＴN 
であるものとする。ここで、α＝１／８、β＝１／４であるものとする。Ｎは２以上の任意の整数である。ＭＲＴＴN は、測定部３４がＮ回目に求めた応答時間である。また、Ｇは、通信装置１０が応答時間の測定に使用するクロックの粒度（分解能）である。更新後のＲＴＯ計算値に基づいた待機時間の求め方は前述のとおりである。算出部３５により待機時間が算出されると、待機時間に基づいて再送処理が行われる。
【００８１】
〔通信が終了したときの処理〕
コネクション検出部３２は、ＴＣＰヘッダ中のＲＳＴかＦＩＮが１になっている場合、そのパケットが送信されてきたコネクションに対応する情報をコネクションテーブル２２から消去する。従って、コネクションテーブル２２には、確立されているコネクションが記録されており、消滅したコネクションや送信元装置２からの切断が要求されているコネクションは記録されていない。また、消去されるコネクションを介して送信されたパケットや、そのパケットに関する情報も、通信パケットテーブル２３から消去される。さらに、前述のとおり、直結機器検出部３１は、パケットを受信するたびに、受信パケットの送信元アドレスに対応付けられた最終通信時刻を更新する。そこで、直結機器検出部３１は、最終通信時刻と現在の時刻の差が一定の時間以上になったエントリを直結機器テーブル２１から削除する。
【００８２】
図１１Ａと図１１Ｂは、通信装置１０がパケットを受信したときに行う動作の例を説明するフローチャートである。以下、図１１Ａと図１１Ｂを参照しながら、通信装置１０の動作を説明する。なお、図１１Ａと図１１Ｂに示す通信装置１０の動作は一例であり、実装に応じて変更される場合がある。例えば、ステップＳ３とＳ４は順序を入れ替えることができる。また、ステップＳ５は、ステップＳ１４とＳ１５の組み合わせと順序が変更される場合がある。また、ステップＳ１７とＳ１８の動作の組み合わせ、ステップＳ１９とＳ２０の組み合わせ、および、ステップＳ１とＳ２の組み合わせは、どの組み合わせの処理が最初に行われても良い。
【００８３】
直結機器検出部３１は、一定時間以上、通信装置１０を介した通信が行われていない直結機器があるかを確認し、通信が行われていない直結機器の登録を直結機器テーブル２１から削除する（ステップＳ１、Ｓ２）。受信部１１でパケットが受信されると、直結機器検出部３１は、受信されたパケットはＡＲＰパケットであるかを確認する（ステップＳ３）。受信されたパケットがＡＲＰパケットではない場合、直結機器検出部３１は、受信されたパケットがＴＣＰパケットであるかを確認する（ステップＳ４）。受信されたパケットがＴＣＰパケットである場合、直結機器検出部３１は、送信元アドレスと直結機器テーブル２１に記録されたアドレスを比較して、送信元の装置が直結装置であるかを確認する（ステップＳ５）。送信元の装置が直結装置である場合、コネクション検出部３２は、送信元装置２から対向装置６に向けて設定されているコネクションがコネクションテーブル２２に登録されているかを確認する（ステップＳ５でＹｅｓ、ステップＳ６）。コネクションがコネクションテーブル２２に登録されていない場合、コネクション検出部３２は、コネクションテーブル２２に送信元装置２から対向装置６にデータを送信するためのコネクションを登録する（ステップＳ６でＮｏ、ステップＳ７）。
【００８４】
次に、通信パケット確認部３３は、受信パケットのシーケンス番号とデータ長の合計値とコネクションテーブル２２のＮｅｘｔＳｅｑＮｏを比較することにより、受信したパケットが再送されたパケットであるかを確認する（ステップＳ８）。通信パケット確認部３３は、受信パケットのシーケンス番号とデータ長の合計値がＮｅｘｔＳｅｑＮｏ以下の場合、再送であると判断して、通信パケットテーブル２３を更新する（ステップＳ８でＹｅｓ、ステップＳ９）。一方、受信パケットのシーケンス番号とデータ長の合計値がＮｅｘｔＳｅｑＮｏより大きい場合、通信パケット確認部３３は、処理対象のパケットは再送されたパケットではないと判断する。通信パケットテーブル２３は、コネクションテーブル２２のＮｅｘｔＳｅｑＮｏを、受信パケットのシーケンス番号とデータ長の合計値に更新し、さらに、通信パケットテーブル２３を更新する（ステップＳ８でＮｏ、ステップＳ１０）。
【００８５】
再送されたパケットを受信した場合、判定部３６は、再送パケットを送信する時刻と最初に同じパケットを対向装置６に送信した時刻の間の時間（実タイムアウト時間）を求める。さらに、判定部３６は、実タイムアウト時間が待機時間を超過しているかを判定する（ステップＳ１１）。実タイムアウト時間が待機時間を超過している場合、判定部３６は、算出部３５で計算された待機時間に合わせて対向装置６へのパケットの再送を行うことを決定し、再送フラグをＯＮに設定する（ステップＳ１１でＹｅｓ、ステップＳ１２）。
【００８６】
次に、通信装置１０は、受信パケットが応答メッセージであるかを確認する。この処理は、受信パケットの送信元アドレスが直結機器テーブル２１に登録されていない場合も行われる（ステップＳ５でＮｏ、ステップＳ１３）。直結機器検出部３１は、受信パケットの宛先アドレスが直結機器テーブル２１に記録されているかを確認する。さらに、測定部３４は、受信パケットのＴＣＰヘッダ中のＡＣＫビットの値が１であるかを確認する（ステップＳ１３）。宛先アドレスが直結機器テーブル２１に記録されていて、さらに、ＡＣＫが１になっている場合、測定部３４は、受信パケットが応答メッセージであると判断する。さらに、測定部３４は、応答メッセージにより対向装置６で受信されたことが通知されたパケットについての記録を、通信パケットテーブル２３から削除する（ステップＳ１４）。その後、コネクションテーブル２２の最終通信時刻を更新する（ステップＳ１５）。一方、受信パケットが応答メッセージではない場合も、コネクションテーブル２２の最終通信時刻が更新される（ステップＳ１３でＮｏ、ステップＳ１５）。
【００８７】
さらに、コネクション検出部３２は、コネクションテーブル２２に含まれているコネクションの中で一定時間以上通信が行われていないコネクションがあるかを判定する（ステップＳ１６）。一定時間以上通信が行われていないコネクションがあれば、そのコネクションについて、コネクション検出部３２はコネクションテーブル２２のエントリを削除する。また、通信パケット確認部３３は、通信が行われていないコネクションを介して送信されたパケットの記録を、通信パケットテーブル２３から削除する（ステップＳ１７）。また、コネクション検出部３２は、コネクションテーブル２２に登録されているパケットのうちで、切断されるコネクションがあるかを確認する（ステップＳ１８）。この確認は、受信パケットのＴＣＰヘッダに含まれているＲＳＴビットかＦＩＮビットの値が１になっているかを確認することにより行われる。コネクション検出部３２は、切断されるコネクションのエントリをコネクションテーブル２２から削除する。また、また、通信パケット確認部３３は、通信が行われていないコネクションを介して送信されたパケットの記録を、通信パケットテーブル２３から削除する（ステップＳ１９）。
【００８８】
一方、受信されたパケットがＡＲＰパケットである場合、直結機器検出部３１は、ＡＲＰパケットの送信元の装置が直結機器テーブル２１に登録されているかを確認する（ステップＳ２０）。ＡＲＰパケットの送信元の装置が直結機器テーブル２１に登録されていない場合、直結機器検出部３１は、送信元の装置のＩＰアドレスやＭＡＣアドレスなどを直結機器テーブル２１に登録する（ステップＳ２１）。受信パケットがＡＲＰパケットである場合、ステップＳ２１の処理の後は、ステップＳ１５以降の処理が行われる。また、既に送信元アドレスが直結機器テーブル２１に登録されている場合は、ステップＳ２０の処理の後、ステップＳ１５以降の処理が行われる。また、受信されたパケットの種類がＴＣＰパケットでない場合も、ステップＳ１５以降の処理が行われる（ステップＳ４でＮｏ、ステップＳ１５）。
【００８９】
図１２は、通信装置１０に格納されているパケットが対向装置６に再送される場合の動作の例を説明するフローチャートである。なお、図１２は、動作の例であり、例えば、ステップＳ３４とＳ３５をステップＳ３１の前に行うように順序が変更されるなどの変更が加えられる場合がある。また、図１２は、判定部３６が定期的に起動される場合の動作を示しているが、例えば、判定部３６は通信装置１０が起動している間、継続的に起動しているように変形されても良い。さらに、判定部３６が起動される間隔は、任意の値に設定される。
【００９０】
判定部３６は、通信パケットテーブル２３に含まれている発信時刻と現在時刻の差を求め、得られた差が待機時間を超えているパケットがあるかを確認する（ステップＳ３１）。ここで、待機時間は、ＲＴＯ計算値に基づいて、（２）式から計算される。待機時間を越えても再送が行われていないパケットがあると、再送部３７は、そのパケットの再送を送信部１２に指示する。さらに、再送部３７は、再送を指示したパケットについて、通信パケットテーブル２３の発信時刻を更新する（ステップＳ３１でＹｅｓ、ステップＳ３２）。さらに、判定部３６は、再送されたパケットの送信に用いられるコネクションについて、再送フラグをＯＮに設定する（ステップＳ３３）。
【００９１】
次に、再送部３７は、再送フラグがＯＮに設定されているコネクションを介して送信されたパケットについて、発信時刻からＶ＝１として計算される待機時間を超過しても再送が行われていないパケットが通信パケットテーブル２３に記録されているかを確認する（ステップＳ３４）。該当するパケットが通信パケットテーブル２３に記録されている場合、再送部３７は、そのパケットの再送を送信部１２に指示する。さらに、再送部３７は、再送を指示したパケットについて、通信パケットテーブル２３の発信時刻を更新する（ステップＳ３４でＹｅｓ、ステップＳ３５）。
【００９２】
図１３は、対向装置６に送信されたパケットが送信されてから再送されるまでの時間の例を示すテーブルである。この例では、送信元装置２では、再送タイムアウトが３秒に固定されているものとする。すなわち、送信元装置２は、パケットの送信後３秒以上経過しなければパケットを再送しない。
【００９３】
通信装置１０からの再送を行わないと、送信元装置２からの再送は、（Ａ）に示すように、送信から３秒後に１回目の再送が行われる。１回目の再送を行った後でも応答メッセージが得られなければ、次の再送までの待ち時間を、１回目の再送のときの２倍の長さにして、送信元装置２は、最初のパケットの送信から９秒後に、２回目の再送を行う。
【００９４】
一方、再送フラグがＯＦＦのパケットについて、判定部３６の判定に基づいて再送が行われる場合の待機時間を（Ｂ）に示す。ここで、コネクションの応答時間から計算されたＲＴＯ計算値は０．１２秒であるとする。また、判定部３６は、ＲＴＯ計算値の３倍以内の時間に対向装置６での受信が確認できず、さらに、パケットの再送も行われていない場合、通信装置１０がパケットの再送を行うことを決定するものとする。この場合、最初の再送は、最初にパケットを送信した後０．３６秒で行われる。また、パケットを最初に送信してから１．０８秒後に２回目の再送、２．５２秒後に３回目の再送、５．４秒後に４回目の再送が行われる。
【００９５】
従って、応答時間から算出されたＲＴＯ計算値に基づいて得られた待機時間に合わせて送信が行われると、（Ｂ）に示すように最初にパケットを送信してから１０秒以内に４回再送が行われる。一方、通信装置１０が再送を行わない場合は、（Ａ）に示すように最初にパケットを送信してから１０秒以内に２回までしか再送が行われない。
【００９６】
さらに、再送フラグがＯＮに設定されたコネクションについては、通信装置１０は、送信元装置２の再送処理は、パケットが最初に送信されてからＲＴＯ計算値の３倍以上経過しないと行われないことを認識している。従って、算出部３５は、待機時間を計算する際に（２）式などのＶの値を１に設定することができ、（Ｃ）に示すようなタイミングで再送が行われる。すると、最初にパケットを送信してから１０秒以内に６回再送が行われる。
【００９７】
このように、通信装置１０が応答時間に合わせて待機時間を計算し、パケットの送信から待機時間が経過したときにパケットの再送を行うシステムでは、パケットロストが発生しても、早いタイミングで対向装置６に再送が行われる。送信元装置２から送信されたパケットに含まれているデータを対向装置６で動作しているアプリケーションで処理している場合、アプリケーションでのタイムアウトが発生する前にパケットを再送できることが望ましい。通信装置１０に格納されているパケットを通信装置１０から対向装置６に再送することにより、パケットの再送のタイミングを応答時間に合わせて設定することができる。そのため、応答時間が短い場合は、送信元装置２での再送タイムアウトが固定値になっていたとしても、通信装置１０が再送を行うことで、アプリケーションがタイムアウトするまでのリトライ回数を増やすことができる。このような通信装置１０は、例えば、クラウドコンピューティングシステムのクライアント装置が所属するネットワークに配置されると、送信元装置２で行われる再送のタイミングが固定であっても、リトライ回数を増やすことができる。
【００９８】
さらに、送信元装置２の再送タイムアウトが固定値ではない場合でも通信装置１０を用いることにより、リトライ回数を増やすことができる場合がある。例えば、通信装置１０で計算される待機時間よりも長い時間待機してから送信元装置２がパケットを再送する場合、通信装置１０が送信元装置２に代わってパケットを再送することにより、リトライ回数が増加する。
【００９９】
＜第２の実施形態＞
第１の実施形態では、パケットの再送を行うかをコネクションごとに通信装置１０が決定する場合について説明したが、本実施形態では、通信装置１０での再送を行うかがパケットごとに決定される。従って、通信装置１０での再送を行うかは、送信元装置２が対向装置６に対して送信したパケットを再送するたびに判定される。
【０１００】
図１４Ａと図１４Ｂは、通信装置１０がパケットを受信したときに行う動作の例を説明するフローチャートである。ステップＳ４１〜Ｓ５０の処理は、図１１Ａと図１１Ｂを参照しながら説明したステップＳ１〜Ｓ１０と同様に行われる。次に、判定部３６は、送信元装置２から対向装置６に向けて送信されたパケットについて、実タイムアウト時間を求める。実タイムアウト時間は、再送される通信パケットテーブル２３に記録されている送信時刻と再送するパケットの送信時刻の差である。判定部３６は、実タイムアウト時間を、ＲＴＯ計算値を用いて得られた待機時間と比較する。（ステップＳ５１)。判定部３６は、実タイムアウト時間が待機時間以下の場合、再送フラグを「ＯＦＦ」に設定する（ステップＳ５２）。一方、実タイムアウト時間が待機時間より長い場合、判定部３６は、再送フラグを「ＯＮ」に設定する（ステップＳ５３）。ステップＳ５４〜Ｓ６２の処理は、ステップＳ１３〜Ｓ２１と同様である。
【０１０１】
本実施形態では、通信装置１０での再送を行うかは、待機時間が経過するたびに判定されるので、例えば、誤って再送フラグが「ＯＮ」に設定されたとしても、判定部３６は、次のパケットについて再送を行うかを判定するときに再送フラグの設定を修正できる
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。例えば、直結機器検出部３１は、受信パケットのＭＡＣアドレスを用いて、送信元の装置が直結装置であるかを確認することもできる。この場合、直結機器検出部３１は、受信パケットのイーサネットヘッダを確認する。
【０１０２】
上述の第１、第２の実施形態を含む各実施形態に対し、さらに以下の付記を開示する。
（付記１）
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信する受信部と、
前記第１および第２のパケットを記憶する記憶部と、
前記第１および第２のパケットを前記対向装置に送信する送信部と、
前記送信部が前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを前記受信部が受信した時刻までの時間である応答時間を測定する測定部と、
前記送信部が前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記受信部が前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記記憶部から前記第２のパケットを取得すると共に、前記送信部に、前記第２のパケットを前記対向装置に再度送信させる再送部
を備えることを特徴とする通信装置。
（付記２）
前記送信部が前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記受信部が前記第２の応答メッセージと前記再送パケットのいずれも受信しない場合、前記第２のパケット以降に前記送信元装置から受信した前記対向装置宛のパケットは前記再送部が再送する対象であると判定するとともに、前記送信元装置を対象装置に指定する判定部と、
前記対象装置から前記第２のパケットの後に送信された第３のパケットが前記送信部から送信された時刻から前記第３のパケットの再送を前記送信部に指示する時刻までの、前記再送部が待機する時間である待機時間を算出する算出部をさらに備え、
前記第３のパケットに対する応答メッセージを、前記第３のパケットが前記送信部から送信された時刻から前記待機時間が経過しても受信しない場合、前記再送部は前記第３のパケットを前記対向装置に送信する
ことを特徴とする付記１に記載の通信装置。
（付記３）
前記第３のパケットが前記送信部から前記対向装置に向けて送信された時刻から、前記送信元装置から再送された前記第３のパケットを前記受信部が受信するまでの時間が、前記待機時間よりも短い場合、前記判定部は、前記送信元装置が前記対象装置ではなくなったと判定する
ことを特徴とする付記２に記載の通信装置。
（付記４）
前記送信元装置から前記対向装置へのデータの送信に用いられるコネクションの確立を検出すると共に、前記コネクションを介して送信されたパケットに含まれるデータの次に前記コネクションを介して送信されるデータを特定する第１の値を、前記コネクションと対応付けてコネクションテーブルに記録するコネクション検出部を備え、
前記再送部は前記コネクションを介して送信される前記対向装置宛のパケットとして、前記受信部で受信されたパケットに含まれているデータの次に前記コネクションを介して送信されるデータを特定する第２の値が前記コネクションテーブルに記録されている値以下の場合、前記第２の値で特定されるデータを含むパケットが前記送信元装置から再送されたと認識する
ことを特徴とする付記２もしくは３に記載の通信装置。
（付記５）
前記コネクション検出部は、前記コネクションテーブルに記録されている第１のコネクションを介して送受信されるパケットに含まれている制御ビットを確認することにより、前記第１のコネクションを介した通信の終了を検出すると、前記コネクションテーブルから前記第１のコネクションに関するエントリを削除する
ことを特徴とする付記４に記載の通信装置。
（付記６）
前記受信部が応答メッセージを受信すると、前記記憶部は、受信された応答メッセージに対応するパケットを削除する
ことを特徴とする付記１〜５のいずれか１項に記載の通信装置。
（付記７）
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信し、
前記第１および第２のパケットを記憶し、
前記第１および第２のパケットを前記対向装置に送信し、
前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを受信した時刻までの間の時間である応答時間を測定し、
前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記第２のパケットを前記対向装置に再度送信する
処理を、前記送信元装置から送信された前記対向装置宛のパケットを中継する通信装置が実行することを特徴とする通信方法。
（付記８）
対向装置宛ての第１および第２のパケットを送信し、前記対向装置での受信が確認できないパケットを前記対向装置に再送する送信元装置から、前記第１および第２のパケットを受信し、
前記第１および第２のパケットを記憶し、
前記第１および第２のパケットを前記対向装置に送信し、
前記第１のパケットを前記対向装置に送信した時刻から、前記対向装置での前記第１のパケットの受信を通知する第１の応答メッセージを受信した時刻までの間の時間である応答時間を測定し、
前記第２のパケットを前記対向装置に送信した時刻から、前記応答時間より長い時間が経過しても、前記対向装置での前記第２のパケットの受信を通知する第２の応答メッセージを受信せず、かつ、前記送信元装置から前記第２のパケットを再送したパケットである再送パケットも受信しない場合、前記第２のパケットを前記対向装置に再度送信する
処理をコンピュータに実行させることを特徴とする通信プログラム。
【符号の説明】
【０１０３】
２  送信元装置
４  ＷＡＮ
６  対向装置
１０  通信装置
１１  受信部
１２  送信部
１３  ルーチング部
１４  タイマ
２０  記憶部
２１  直結機器テーブル
２２  コネクションテーブル
２３  通信パケットテーブル
２４  ルーティングテーブル
３０  再送代替部
３１  直結機器検出部
３２  コネクション検出部
３３  通信パケット確認部
３４  測定部
３５  算出部
３６  判定部
３７  再送部
【図１】
0005680978.tif 000002
【図２】
0005680978.tif 000003
【図３】
0005680978.tif 000004
【図４】
0005680978.tif 000005
【図５】
0005680978.tif 000006
【図６】
0005680978.tif 000007
【図７】
0005680978.tif 000008
【図８】
0005680978.tif 000009
【図９】
0005680978.tif 000010
【図１０】
0005680978.tif 000011
【図１１Ａ】
0005680978.tif 000012
【図１１Ｂ】
0005680978.tif 000013
【図１２】
0005680978.tif 000014
【図１３】
0005680978.tif 000015
【図１４Ａ】
0005680978.tif 000016
【図１４Ｂ】
0005680978.tif 000017