(57)【特許請求の範囲】
【請求項１】
第１の通信装置、第２の通信装置、および、第３の通信装置を含むネットワークにおいて、前記第２の通信装置は、
前記第１の通信装置から受信したパケットから、前記第３の通信装置に転送するパケットである転送パケットを特定し、
前記転送パケットを前記第１の通信装置から受信する間隔を計測し、
前記転送パケットを前記第３の通信装置に転送し、
前記転送パケットの受信状況を通知する通知情報を、前記第３の通信装置から受信し、
前記通知情報を用いて、前記第３の通信装置へ転送したパケットのうちで前記第３の通信装置から受信の成功が通知されていないパケットである対象パケットを選択し、
前記第１の通信装置から前記転送パケットを受信する間隔が閾値を超えると、前記対象パケットを、誤り補正が可能な形式で前記第３の通信装置に再送信する
ことを特徴とする通信方法。
【請求項２】
前記対象パケットは、前記第３の通信装置から受信状況が通知されていないパケットと、前記第３の通信装置からパケットの受信の失敗を通知されたパケットを含む
ことを特徴とする請求項１に記載の通信方法。
【請求項３】
前記第２の通信装置は、前記対象パケットを前記誤り訂正が可能な形式で送信するために用いる冗長分のデータを、前記第２の通信装置と前記第３の通信装置の間の回線中の使用されていない帯域幅を用いて、前記第２の通信装置が前記第３の通信装置に送信するためにかかる時間を、前記閾値として計算する
ことを特徴とする請求項１または２に記載の通信方法。
【請求項４】
前記第２の通信装置は、
前記第２の通信装置が第１のパケットを前記第３の通信装置に向けて送信した時刻から、前記第１のパケットについての応答である第２のパケットが前記第２の通信装置に到達するまでの時間である応答時間を求め、
前記閾値が、前記応答時間を越えているかを判定し、
前記閾値が前記応答時間を超えている場合、前記閾値を第１の値で割って得られる商が前記応答時間よりも短くなるように、前記第１の値を求め、
前記対象パケットを前記誤り訂正が可能な形式で送信するために用いる冗長分のデータの量を前記第１の値で割って得られるデータ量である第２の値を求め、
前記第２の値のデータ量を、前記第２の通信装置と前記第３の通信装置の間の回線中の使用されていない帯域幅を用いて、前記第２の通信装置が前記第３の通信装置に送信するためにかかる時間の長さを第３の値とし、
前記第１の通信装置から前記転送パケットを受信する間隔が前記第３の値を超えると、前記対象パケットを前記第１の値と同数のグループに分けて得られる１つのグループに含まれるパケットを、誤り補正が可能な形式で前記第３の通信装置に再送信する
ことを特徴とする請求項３に記載の通信方法。
【請求項５】
端末からパケットを受信する受信部と、
前記端末の通信先に向けて転送するパケットである転送パケットを受信する間隔を計測する計測部と、
前記転送パケットを、前記通信先に向けて転送する転送処理部と、
前記通信先へ転送したパケットのうちで前記通信先から受信の成功が通知されていないパケットである対象パケットを選択する選択部と、
前記転送パケットの受信間隔が閾値を超えると、前記対象パケットを、誤り補正が可能な形式で前記通信先に再送信するための処理を行う再送処理部
を備えることを特徴とする通信装置。
【請求項６】
前記選択部は、前記通信先からの受信状況の通知を受信していないパケットと、前記通信先からパケットの受信の失敗を通知されたパケットを、前記対象パケットとして選択する
ことを特徴とする請求項５に記載の通信装置。
【請求項７】
前記対象パケットを前記誤り訂正が可能な形式で送信するために用いる冗長分のデータを、前記通信装置と前記通信先の間の回線中の使用されていない帯域幅を用いて、前記通信装置が前記通信先に送信するためにかかる時間を、前記閾値として計算する計算部
をさらに備えることを特徴とする請求項５または６に記載の通信装置。
【請求項８】
第１の通信装置、第２の通信装置、および第３の通信装置を含むネットワーク中の前記第２の通信装置に、
前記第１の通信装置から受信したパケットから、前記第３の通信装置に転送するパケットである転送パケットを特定し、
前記転送パケットを前記第１の通信装置から受信する間隔を計測し、
前記転送パケットを前記第３の通信装置に転送し、
前記転送パケットの受信状況を通知する通知情報を、前記第３の通信装置から受信し、
前記通知情報を用いて、前記第３の通信装置へ転送したパケットのうちで前記第３の通信装置から受信の成功が通知されていないパケットである対象パケットを選択し、
前記第１の通信装置から前記転送パケットを受信する間隔が閾値を超えると、前記対象パケットを、誤り補正が可能な形式で前記第３の通信装置に再送信する
処理を行わせることを特徴とする通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の通信装置の間で行われる通信に関する。
【背景技術】
【０００２】
クラウドコンピューティングの普及により、通信の高速化が求められているが、データの送受信を行う通信装置同士の距離は、事業のグローバル化などにより長くなってきている。Transmission Control Protocol（ＴＣＰ）など、通信中に消失したパケットを再送する方式を用いて通信が行われる場合、送信側の通信装置は、受信側の通信装置からの確認応答パケットを用いて、次に送信するデータの大きさや再送を行うかを決定する。送信側の通信装置と受信側の通信装置との間の経路の往復遅延時間（Round Trip Time、ＲＴＴ）は、送信側の通信装置と受信側の通信装置の間の距離が長いほど長くなる。このため、ＴＣＰを用いた通信では、送信側の通信装置と受信側の通信装置の間の距離が長くなると、通信速度が遅くなってしまう。一方、誤り訂正を用いる通信方式では、送信側の通信装置は、送信するデータを含むパケットの他に冗長パケットを送信する。パケットロスが発生したときに、受信側の通信装置は、消失したパケットに含まれているデータを、冗長パケットを用いて復元する。このため、誤り訂正を用いる通信では、再送による遅延を防止できるが、冗長パケットを送信するために、スループットが低下するという問題がある。【０００３】
関連する技術として、冗長パケットを用いたときの通信で発生するジッタと、消失したパケットを再送する方式を用いたときの通信で発生するジッタを計測し、ジッタが小さいほうの通信方式を用いてデータを送信する通信装置が考案されている（例えば、特許文献１）。さらに、誤り訂正メカニズムを、状態パラメータやコネクションパラメータを用いて決定する方法も提案されている（例えば、特許文献２）。ここで、状態パラメータは、帯域幅や許容される遅延時間など、データが使用されるアプリケーションに応じて要求される品質情報である。また、コネクションパラメータは、通信コネクションに関する情報である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２００７／０６１０８７号
【特許文献２】特表２００２−５０７３６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
通信中に消失したパケットを再送する方式では、送信側の通信装置と受信側の通信装置の距離が長くなると、往復遅延時間が長くなることにより通信速度が落ちるという問題がある。一方、誤り訂正に使用される冗長パケットを送信する方式では、再送処理による通信速度の低下は防止できるが、冗長パケットを送信することにより、スループットが低下するという問題がある。【０００６】
使用可能な通信方式のうちでジッタが小さい方式を採用して通信を行う通信装置では、各パケットの送信にかかる時間の変動を小さくすることはできるが、通信の高速化をすることはできない。また、誤り訂正メカニズムを、状態パラメータなどを用いて決定する方法では、アプリケーションから要求される品質情報を用いて通信方式を決定することになる。このため、品質情報が分からないと適切に通信方式を選択できないという問題がある。従って、品質情報を用いて通信方式を決定する方法は、不特定のアプリケーションで用いられるデータの転送を行う通信装置には適用できない。【０００７】
本発明は、１つの側面では、スループットの低下を防ぎつつ遅延を抑制する方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
実施形態にかかる通信方法が用いられるネットワークは、第１の通信装置、第２の通信装置、および、第３の通信装置を含む。前記第２の通信装置は、前記第１の通信装置から受信したパケットから、前記第３の通信装置に転送するパケットである転送パケットを特定する。前記第２の通信装置は、前記転送パケットを前記第１の通信装置から受信する間隔を計測する。前記第２の通信装置は、前記転送パケットを前記第３の通信装置に転送する。前記第２の通信装置は、前記転送パケットの受信状況を通知する通知情報を、前記第３の通信装置から受信する。前記第２の通信装置は、前記通知情報を用いて、前記第３の通信装置へ転送したパケットのうちで前記第３の通信装置から受信の成功が通知されていないパケットである対象パケットを選択する。前記第２の通信装置は、前記第１の通信装置から前記転送パケットを受信する間隔が閾値を超えると、前記対象パケットを、誤り補正が可能な形式で前記第３の通信装置に再送信する。
【発明の効果】
【０００９】
スループットの低下を防ぎつつ、遅延を抑制できる。
【図面の簡単な説明】
【００１０】
【図１】実施形態にかかる通信方法の例を示す図である。
【図２】ネットワークの例を示す図である。
【図３】通信装置の構成の例を示す図である。
【図４】通信装置のハードウェア構成の例を示す図である。
【図５】通信方法の例を示すシーケンス図である。
【図６】送信テーブルの例を示す図である。
【図７】パケットのフォーマットの例を示す図である。
【図８】ＴＣＰヘッダとＵＤＰヘッダのフォーマットの例を示す図である。
【図９】通信装置間でのパケットの送受信の例を示す図である。
【図１０】制御応答パケットに含まれる情報の例を示す図である。
【図１１】送信テーブルの更新例を示す図である。
【図１２】送信データの種類によるパケットの送信パターンの例を示す図である。
【図１３】通信装置の処理の例を示す図である。
【図１４】通信装置の処理の例を説明するフローチャートである。
【図１５】パケットの受信のタイミング例を説明する図である。
【図１６】送信テーブルの変形例を示す図である。
【図１７】ネットワークの例を示す図である。
【発明を実施するための形態】
【００１１】
図１は、実施形態にかかる通信方法の例を示す。図１の例では、端末は通信装置Ｂに向けてパケットを送信するものとする。通信装置Ａは、端末から受信したパケットを、通信装置Ｂに転送する。図１中の太い矢印は、複数のパケットを示す。図１において、「Ｐ」の文字と数字の組合せは、端末から送信されたパケットを示し、Ｐに続く数字は、パケットのシーケンス番号を示すものとする。白抜きの矢印は、受信側が受信に失敗したパケットが送信側から再送される通信方式での通信を示す。以下、受信側が受信に失敗したパケットが送信側から再送される通信方式のことを、「再送ベース」の通信方式と記載することがある。一方、点描を含む矢印は、誤り訂正に使用される冗長パケットを送信する方式で行われる通信を示すものとする。以下の説明では、誤り訂正に使用される冗長パケットを送信する方式のことを、「誤り訂正ベース」の通信方式と記載することがある。
【００１２】
（１）端末は、再送ベースの通信方式で、通信装置Ｂに向けて、Ｐ０〜Ｐ９９９９のパケットを送信する。ここでは、通信装置Ａは端末から送信されたパケットを全て受信できたものとする。
【００１３】
（２）通信装置Ａは、端末から受信したパケットを、再送ベースの方式で通信装置Ｂに転送する。このとき、通信装置Ｂは通信装置Ａから送信されたパケットのうち、Ｐ１００のパケットの受信に失敗したとする。
【００１４】
（３）端末は、再送ベースの通信方式で、通信装置Ｂに向けて、Ｐ１００００〜Ｐ１９９９９のパケットを送信する。
【００１５】
（４）通信装置Ｂは、所定の時間間隔で、通信装置Ａに、パケットの受信状況を通知するための制御応答パケット（Ａｃｋ）を送信する。制御応答パケットには、制御応答パケットが生成される時点での受信状況が記録されている。図１の例では、通信装置Ｂは、Ｐ１００の受信に失敗したことを通知する制御応答パケットを、通信装置Ａに送信する。通信装置Ａは、Ｐ０〜Ｐ９９とＰ１０１〜Ｐ９９９９の通信装置Ｂへの送信に成功し、Ｐ１００の通信装置Ｂへの送信に失敗したことを認識する。
【００１６】
（５）通信装置Ａは、通信装置Ｂから制御応答パケットが送信されてから制御応答パケットの処理を終了するまでの間に、端末から受信したパケットＰ１００００〜Ｐ１９９９９を、再送ベースの方式で通信装置Ｂに転送する。
【００１７】
（６）端末から通信装置Ｂあてのパケットの送信が中断されたとする。端末から通信装置Ｂ宛てのパケットの送信が中断されている期間、通信装置Ａは、端末からパケットを受信しないので、通信装置Ａから通信装置Ｂへの新たなパケットの転送も中断されている。端末からパケットを受信しない期間が所定の閾値Ｔｈを超えると、通信装置Ａは、通信装置Ｂへの新たなパケットの転送処理が中断している期間が閾値Ｔｈを超えたと判定する。ここで、閾値Ｔｈは、往復遅延時間（ＲＴＴ）よりも短い時間に設定されるものとする。新たなパケットの転送処理が中断している期間が閾値Ｔｈを超えると、通信装置Ａは、転送の成功が確認できていないパケットを、誤り訂正ベースの送信方法を用いて、通信装置Ｂに再送する。この時点では、通信装置Ａは、通信装置Ｂから新たに制御応答パケットを受信していないため、Ｐ１００００〜Ｐ１９９９９については送信が成功しているかを知らない。さらに、通信装置Ａは、手順（４）でＰ１００のパケットの転送に失敗したことを認識している。そこで、通信装置Ａは、通信装置Ｂに、Ｐ１００とＰ１００００〜Ｐ１９９９９のパケットを、誤り訂正ベースで再送する。
【００１８】
通信装置Ｂは、通信装置Ａから再送されたパケットにより、Ｐ１００とＰ１００００〜Ｐ１９９９９を受信できる。手順（６）では、通信装置Ａから誤り訂正ベースでパケットが送信されているので、通信装置Ｂは、受信に失敗したパケットについては、冗長パケットなどを用いて復元することができる。
【００１９】
（７）端末は、新たにパケットＰ２００００〜Ｐ２９９９９を通信装置Ａに送信したとする。すると、通信装置Ａは、通信装置Ｂに、再送ベースの通信方法により、Ｐ２００００〜Ｐ２９９９９を転送する。
【００２０】
このように、通信装置Ａは、新たな転送対象のパケットを受信しない期間が閾値を超えると、パケットの転送に使用できる帯域の空きが増えたと判定する。そこで、新たなパケットの転送を行う合間に、転送の成功が確認できていないパケットを、誤り訂正ベースの通信方法で、再度、転送する。このため、制御応答パケットを待っているパケットについては、制御応答パケットの到着を待たずに再送処理が行われる。従って、制御応答パケットを待っているパケットであり、かつ、１度目の送信に失敗しているパケットについては、往復遅延時間（ＲＴＴ）が経過する前に再送が行われることになる。従って、実施形態にかかる通信方法を用いると、ＲＴＴが長くなっても、遅延を抑えることができる。
【００２１】
なお、以下の説明では、通信装置Ａと通信装置Ｂの間での往復遅延時間は、通信にかかる時間の計測に用いられるパケット（計測パケット）の送信時刻から計測パケットの応答パケットの受信時刻までの時間であるものとする。例えば、通信装置Ａが第１の計測パケットを通信装置Ｂに送信した時刻から、第１の計測パケットの応答として通信装置Ｂから送信された第２の計測パケットを通信装置Ａが受信する時刻までが、通信装置Ａと通信装置Ｂの間のＲＴＴである。
【００２２】
ところで、実施形態にかかる通信装置は、新たなパケットの転送を行う合間に行う再送では冗長パケットを送信するが、再送ベースで通信している間は冗長パケットを送信しない。このため、実施形態にかかる通信方法では、冗長パケットの送信によるスループットの低下を小さく抑えることができる。
【００２３】
なお、図１の例では、理解し易くするために、端末から通信装置Ｂ宛てのパケットが送信されているケースを例として説明したが、端末からのパケットは、通信装置Ｂを介して他の装置に転送されても良いものとする。
【００２４】
＜ネットワークの例と装置構成＞
図２は、実施形態にかかる通信装置１０が用いられるネットワークの例を示す。図２は、Wide Area Network（ＷＡＮ）２をはさんで、端末１とデータセンタ３中のサーバ４が通信する場合のネットワークの例を示す。データセンタ３には、通信装置１０ｂとサーバ４が含まれているものとする。また、端末１は、通信装置１０ａを介してＷＡＮ２にアクセスするものとする。ここで、通信装置１０ａおよび通信装置１０ｂは、ＷＡＮ高速化装置として動作することができるものとする。なお、端末１の数とデータセンタ３に含まれているサーバ４の数は任意である。
【００２５】
図３は、通信装置１０の構成の例を示す。通信装置１０は、送信部１１、受信部１２、送受信部１３、転送処理部１４、再送処理部１５、パケット処理部１６、受信パケット管理部１７、帯域算出部１８、切り替え部２０を備える。切り替え部２０は、計測部２１、選択部２２、閾値計算部２３を有する。
【００２６】
送信部１１は、通信装置１０がＷＡＮ２に含まれている装置や、他の通信装置１０にパケットを送信するときに使用される。送信部１１は、転送処理部１４、再送処理部１５、受信パケット管理部１７などから入力されたパケットを、宛先に向けて送信する。受信部１２は、ＷＡＮ２に含まれている装置や、他の通信装置１０からパケットを受信する。受信部１２は、受信したパケットを、パケット処理部１６に出力する。送受信部１３は、通信装置１０が端末１やサーバ４との間でパケットを送受信するときに使用される。送受信部１３は、端末１から受信したパケットを、選択部２２に出力する。
【００２７】
転送処理部１４は、選択部２２から入力されたパケットを、再送ベースの通信方法を用いてＷＡＮ２に送信するためのパケットに変換して、送信部１１に出力する。再送処理部１５は、選択部２２から入力されたパケットを、誤り訂正ベースの通信方法を用いてＷＡＮ２に送信するためのパケットに変換して、送信部１１に出力する。パケットのフォーマットについては後述する。
【００２８】
パケット処理部１６、受信パケット管理部１７、帯域算出部１８は、通信装置１０が、ＷＡＮ２を介して接続されている他の通信装置１０からパケットを受信している場合に処理を行う。パケット処理部１６は、他の通信装置１０から受信したパケットを、端末１やサーバ４に送信可能な形式に変換する。パケット処理部１６は、処理済のパケットを送受信部１３に出力する。すると、送受信部１３は、端末１またはサーバ４に宛てたパケットを端末１またはサーバ４に送信する。
【００２９】
受信パケット管理部１７は、パケット処理部１６での受信状況をモニタする。例えば、受信パケット管理部１７は、現在受信しているパケットのシーケンスＩＤの最大値と受信できたパケットのシーケンスＩＤを特定する。シーケンスＩＤについては後述する。受信パケット管理部１７は、特定した情報を用いて、送信側の通信装置１０に宛てた制御応答パケットを生成する。受信パケット管理部１７は、制御応答パケットを送信部１１に出力する。
【００３０】
帯域算出部１８は、通信装置１０が、ＷＡＮ２を介して接続されている他の通信装置１０からパケットを受信している場合、パケットの受信に使用している帯域幅を算出する。帯域算出部１８は、得られた帯域幅を受信パケット管理部１７に通知する。
【００３１】
計測部２１は、通信装置１０が端末１からパケットを受信していない期間の長さを計測する。計測部２１は、通信装置１０が端末１からパケットを受信すると、計測値を０にリセットする。
【００３２】
選択部２２は、送受信部１３から入力されたパケットを、転送処理部１４に出力する。さらに、選択部２２は、通信装置１０が他の通信装置１０に転送したパケットと、送信先の通信装置１０から制御応答（Ａｃｋ）を受信したパケットを特定することにより、パケットの送信状況をモニタする。選択部２２は、通信装置１０が端末１からパケットを受信していない期間Ｔが閾値Ｔｈを越えると、送信済みのパケットのうちでＡｃｋを受信していないパケットを選択する。言い換えると、選択部２２は、誤り訂正ベースの再送処理の対象とするパケットを選択する。選択部２２は、選択したパケットを、再送処理部１５に出力する。閾値計算部２３は、選択部２２が判定に使用する閾値Ｔｈを計算し、得られた閾値を選択部２２に出力する。さらに、選択部２２は、送信部１１からパケットが送信された最新の時刻をモニタする。
【００３３】
図４は、通信装置１０のハードウェア構成の例を示す。通信装置１０は、プロセッサ３１、メモリ３２、バス３５、外部記憶装置３６、ネットワーク接続装置３９を備える。さらにオプションとして、通信装置１０は、入力装置３３、出力装置３４、媒体駆動装置３７を備えても良い。通信装置１０は、例えば、コンピュータなどで実現されることがある。
【００３４】
プロセッサ３１は、Central Processing Unit（ＣＰＵ）を含む任意の処理回路とすることができる。プロセッサ３１は、転送処理部１４、再送処理部１５、パケット処理部１６、受信パケット管理部１７、帯域算出部１８、切り替え部２０として動作する。なお、プロセッサ３１は、例えば、外部記憶装置３６に記憶されたプログラムを実行することができる。メモリ３２は、プロセッサ３１の動作により得られたデータや、プロセッサ３１の処理に用いられるデータも、適宜、記憶する。ネットワーク接続装置３９は、他の装置との通信に使用され、送信部１１、受信部１２、送受信部１３として動作する。
【００３５】
入力装置３３は、例えば、ボタン、キーボードやマウスとして実現され、出力装置３４は、ディスプレイなどとして実現される。バス３５は、プロセッサ３１、メモリ３２、入力装置３３、出力装置３４、外部記憶装置３６、媒体駆動装置３７、ネットワーク接続装置３９の間を相互にデータの受け渡しが行えるように接続する。外部記憶装置３６は、プログラムやデータなどを格納し、格納している情報を、適宜、プロセッサ３１などに提供する。媒体駆動装置３７は、メモリ３２や外部記憶装置３６のデータを可搬記憶媒体３８に出力することができ、また、可搬記憶媒体３８からプログラムやデータ等を読み出すことができる。ここで、可搬記憶媒体３８は、フロッピイディスク、Magneto-Optical（ＭＯ）ディスク、Compact Disc Recordable（ＣＤ−Ｒ）やDigital Versatile Disk Recordable（ＤＶＤ−Ｒ）を含む、持ち運びが可能な任意の記憶媒体とすることができる。
【００３６】
＜第１の実施形態＞
以下、図２に示すネットワークにおいて、端末１とサーバ４の間で通信が行われるケースでの通信装置１０の処理を説明する。図５は、通信方法の例を示すシーケンス図であり、図５の（Ａ）〜（Ｅ）に分けて、通信装置１０ａおよび通信装置１０ｂで行われる処理を説明する。以下の例では、通信装置１０ａは端末１との間でＴＣＰパケットを送受信し、通信装置１０ｂはサーバ４との間でＴＣＰパケットを送受信する。また、通信装置１０ａが通信装置１０ｂに向けてデータを送信する場合を例とする。さらに、第１の実施形態では、理解し易くするために、通信装置１０ａと通信装置１０ｂは、ＷＡＮ２に設置されている専用線を用いて通信しているものとする。さらに、通信装置１０ａと通信装置１０ｂのいずれの動作であるかを分り易くするために、通信装置１０中の部分の番号の後ろに、その処理を行っている通信装置１０の番号に含まれているアルファベットを記載するものとする。例えば、計測部２１ａは通信装置１０ａに含まれている計測部２１であり、受信パケット管理部１７ｂは、通信装置１０ｂに含まれている受信パケット管理部１７である。
【００３７】
（Ａ）端末１から受信したパケットの転送処理
まず、端末１がサーバ４宛のデータを通信装置１０ａに送信する。端末１と通信装置１０ａの間の通信では、図５の（ａ１）に示すように、ＴＣＰプロトコルを用いて行われ、適宜、確認応答や再送処理が行われる。通信装置１０ａは、端末１との通信を開始するとき、ＴＣＰ通信を行っている端末１を一意に認識するための識別番号（ＴＣＰアプリケーション識別子）を、端末１との間の通信で使用されるコネクションに対して割り振る。
【００３８】
ここで、パケットＰ０〜Ｐ１９９９９が連続的に通信装置１０ａに送信されたとする。通信装置１０ａの計測部２１ａは、通信装置１０ａが端末１からパケットを受信するごとにパケットを受信していない期間の長さを０にリセットする。送信側の通信装置１０ａの選択部２２ａは、送受信部１３ａからパケットＰ０を取得し、送信テーブルを作成する（図５の（ａ２）、（ａ３））。
【００３９】
図６（ａ）は、送信テーブルの例を示す。送信テーブルは、端末１から受信したパケットを保持する。送受信部１３ａは、パケットＰ０を選択部２２ａに出力する。このとき、選択部２２ａは、パケットＰ０が端末１からサーバ４に転送する対象のパケットであるため、パケットＰ０に送信中であることを示すフラグを付加する。以下、送信中であることを示すフラグを「送信中フラグ」と記載することがある。さらに、選択部２２ａは、端末１から受信した各パケットに対し、ＴＣＰアプリケーション識別子ごとに、同じコネクションを介して受信したパケットの順序を示す識別子として、シーケンスＩＤを割り当てる。選択部２２ａは、ＴＣＰアプリケーション識別子で識別されるコネクションを介して最初に受信したパケットのシーケンスＩＤを０とし、受信したパケットの順序になるように、シーケンスＩＤを割り当てるものとする。以下の説明では、分かりやすくするために、端末１から送信された最初のパケットのシーケンス番号が０であるケースを例として説明する。従って、以下の例では、パケットのＴＣＰヘッダ中のシーケンス番号と、パケットに割り当てられたシーケンスＩＤは同じ値である。選択部２２ａは、パケットＰ０に割り当てたシーケンスＩＤをキーとしたハッシュテーブルを生成して、パケットＰ０を記憶する。さらに、選択部２２ａは、送受信部１３ａから入力されたパケットＰ０を、ＴＣＰアプリケーション識別子およびシーケンスＩＤに対応付けて、転送処理部１４ａに出力する。
【００４０】
Ｐ１〜Ｐ９９９９のパケットを受信したときも、Ｐ０のときと同様に処理する。このため、選択部２２ａは、パケットＰ０〜Ｐ９９９９を処理することにより、図６（ａ）に示す情報を格納したハッシュテーブルを備えることになる。さらに、選択部２２ａは、パケットＰ０〜Ｐ９９９９を、転送処理部１４ａに出力する。転送処理部１４ａは、選択部２２ａから入力されたパケットを転送パケットに変換する（図５の（ａ４））。
【００４１】
図７は、パケットのフォーマットの例を示す図である。図７は、通信装置１０ａと通信装置１０ｂの間で送受信されるパケットの例を示している。以下、通信装置１０ａと通信装置１０ｂの間でデータの送受信に使用されるパケットのことを「転送パケット」と記載することがある。図７（ａ）は、データの転送に使用されるパケットのフォーマットの例である。データの転送に使用される転送パケットは、Internet Protocol（ＩＰ）ヘッダ、User Datagram Protocol（ＵＤＰ）ヘッダ、プロトコルＩＤ情報、データヘッダ、データを含む。ＩＰヘッダとＵＤＰヘッダのフォーマットは、それぞれのプロトコルで規定された通りである。プロトコルＩＤは、転送パケットが、データの転送と、データの再送のいずれに使われているかを判定するための情報を格納する。データヘッダは図７（ｃ）に示すように、ＴＣＰアプリケーション識別子、シーケンスＩＤ、パケットＩＤを含む。データは、転送パケットにより送信されるデータである。
【００４２】
図７（ｄ）は、選択部２２ａから転送処理部１４ａに入力されるパケットの例を示す図である。選択部２２ａから転送処理部１４ａに入力されるパケットは、ＩＰヘッダ、ＴＣＰヘッダ、および、データを含む。転送処理部１４ａは、選択部２２ａから入力されたパケットのＩＰヘッダは変更しない。
【００４３】
ＴＣＰヘッダに含まれている情報要素の例を図８（ａ）に示す。ＴＣＰヘッダは、送信元ポート番号、宛先ポート番号、シーケンス番号、確認応答番号、データオフセット、リザーブ領域、制御ビット、ウィンドウサイズ、チェックサム、緊急ポインタ、オプションを含む。一方、ＵＤＰヘッダは、図８（ｂ）に示すように、送信元ポート番号、宛先ポート番号、セグメントサイズ、チェックサムを含む。
【００４４】
そこで、転送処理部１４ａは、パケットＰ０が選択部２２ａから入力されると、パケットＰ０のＴＣＰヘッダから、送信元ポート番号、宛先ポート番号、シーケンス番号を取得する。転送処理部１４ａは、取得した送信元ポート番号と宛先ポート番号を、転送パケットのＵＤＰヘッダの送信元ポート番号と宛先ポート番号に設定する。転送処理部１４ａは、選択部２２ａから通知されたＴＣＰアプリケーションの識別子とシーケンスＩＤをデータヘッダに含める。転送処理部１４は、端末１から受信したパケットのＴＣＰヘッダに含まれていたシーケンス番号を、パケットＩＤとしてデータヘッダに記録する。
【００４５】
さらに、転送処理部１４ａは、プロトコルＩＤを、データの転送を表す値に設定する。転送処理部１４ａは、パケットＰ０のデータを転送パケットのデータとし、セグメントサイズ、チェックサムを設定する。以上の処理により、転送処理部１４ａは、パケットＰ０を、パケットＰ０によって送信されたデータを含む転送パケットに変換する。転送処理部１４ａは、生成した転送パケットを送信部１１ａに出力する（図５の（ａ５））。
【００４６】
図９は、通信装置１０ａと通信装置１０ｂの間でのパケットの送受信の例を示す。送信部１１ａは、転送処理部１４ａから入力された転送パケットを通信装置１０ｂに送信する（図５の（ａ６））。選択部２２ａは、送信部１１ａが転送パケットを送信した時刻を最終送信時刻として記憶する。図９の転送パケット（Ｕ０）は、パケットＰ０から変換された転送パケットを表す。その他に通信装置１０ａが通信装置１０ｂに転送するパケットについても、パケットＰ０と同様に転送処理部１４ａでの変換処理と送信部１１ａからの送信処理が行われる。図９で通信装置１０ａから通信装置１０ｂに送信されている各パケットは、Ｕの後に続く数字と同じ値のシーケンスＩＤが付けられた転送パケットであるものとする。なお、選択部２２ａは、通信装置１０ａから転送パケットが送信されるたびに、最終送信時刻を新たな送信時刻に更新する。
【００４７】
（Ｂ）通信装置１０ｂで行われる受信処理とサーバ４への転送処理
通信装置１０ｂは、通信装置１０ａから転送パケットを受信する（図５の（ｂ１））。通信装置１０ｂの受信部１２ｂは、受信したパケットを、パケット処理部１６ｂに出力する（図５の（ｂ２））。パケット処理部１６ｂは、入力された転送パケット中のデータヘッダからシーケンスＩＤとＴＣＰアプリケーション識別子を抽出し、得られた値を受信パケット管理部１７ｂに出力する。受信パケット管理部１７ｂは、パケット処理部１６ｂから入力された値を、通信装置１０ａから受信できたパケットのシーケンスＩＤとして、ＴＣＰアプリケーション識別子に対応付けて記憶する。転送パケットＵ０からは、シーケンスＩＤ＝０が得られるので、受信パケット管理部１７ｂは、シーケンスＩＤ＝０のパケットの受信に成功したと認識する。
【００４８】
次に、パケット処理部１６ｂは、転送パケットのＵＤＰヘッダ中の情報とデータヘッダ中のパケットＩＤを含むＴＣＰヘッダを生成する。ここで、パケット処理部１６ｂは、パケットＩＤを、ＴＣＰヘッダ中のシーケンス番号とする。さらに、パケット処理部１６ｂは、ＵＤＰヘッダの送信元ポート番号と宛先ポート番号を、ＴＣＰヘッダの送信元ポート番号と宛先ポート番号に設定する。パケット処理部１６ｂは、転送パケットからＵＤＰヘッダ、プロトコルＩＤ、データヘッダを除去し、これらの情報の代わりに生成したＴＣＰヘッダを含めることにより、端末１から送信された情報を含むＴＣＰパケットを生成する（図５の（ｂ４））。例えば、転送パケットＵ０からは、パケットＰ０で送信された情報を含むＴＣＰパケットが生成される。パケット処理部１６ｂは、生成したパケットを送受信部１３ｂに出力する。送受信部１３ｂは、パケット処理部１６ｂから入力されたパケットを、サーバ４に送信する（図５の（ｂ５））。
【００４９】
通信装置１０ｂは、他に受信した転送パケットも同様に処理する。このため、通信装置１０ｂが通信装置１０ａから受信できた転送パケットに含まれている情報は、サーバ４に送信される。さらに、帯域算出部１８ｂは、パケットの受信に使用した帯域幅を計算する。受信パケット管理部１７ｂは、通信装置１０ｂが通信装置１０ａから受信することができたパケットに含まれているシーケンスＩＤを記憶している。例えば、通信装置１０ｂは、受信したパケットのシーケンスＩＤを記録するテーブル（受信テーブル）を保持することができる（図５の（ｂ３））。ここでは、通信装置１０ｂは、シーケンスＩＤが０〜８０１９、８０２４〜８６９９、８７０１〜９００９、９０２２〜９９９９のパケットの受信に成功したとする。受信パケット管理部１７ｂは、受信に成功したパケットのシーケンスＩＤを記憶する。
【００５０】
（Ｃ）通信装置１０ｂからの制御応答パケットの送信
通信装置１０ｂは、予め決められた周期ごとに、通信装置１０ａに制御応答パケット（Ａｃｋ）を送信することにより、受信状況を通知する。制御情報の通知に使用されるパケットのフォーマットを、図７（ｂ）に示す。制御情報の通知に使用されるパケットは、ＩＰヘッダ、ＵＤＰヘッダ、プロトコルＩＤ情報、データヘッダ、制御情報を含む。制御応答パケットの場合、プロトコルＩＤ情報はＡｃｋに設定され、制御情報には、受信に成功したパケットを特定する情報が記録される。
【００５１】
図１０は、制御応答パケットの制御情報に含まれる情報の例を示す図である。制御応答パケット中の制御情報には、制御情報識別子、受信サイズ、最大受信サイズ、受信帯域、応答要求情報、再送開始ＩＤ、再送開始シーケンス長が含まれる。制御情報識別子は、受信状況を報告する対象となっているパケットに含まれていたＴＣＰアプリケーション識別子である。受信サイズは、ＴＣＰアプリケーション識別子が等しいパケットのうち、連続的に受信に成功したパケットの末端までで得られるデータの総量をバイト単位で示した値である。受信サイズを１つの転送パケット中のペイロードの大きさで割ると、連続的に受信できているシーケンスＩＤの最大値が得られる。なお、転送パケット中のペイロードの大きさは、予め、通信装置１０ａと通信装置１０ｂに設定されているものとする。最大受信サイズは、受信に成功しているパケットに付されているシーケンスＩＤの最大値と、転送パケットのペイロードのバイト数の積である。受信帯域は、通信装置１０ｂが通信装置１０ａからの転送パケットの受信に使用した帯域幅である。通信装置１０ｂの受信帯域は、帯域算出部１８ｂが算出する。
【００５２】
再送開始ＩＤと再送開始シーケンス長は、組合せで使用される。再送開始ＩＤは、通信装置１０ｂが受信に失敗したパケットをシーケンスＩＤが連番になっているグループごとに分けたときに、各グループの中の最小のシーケンスＩＤとなる値である。再送開始シーケンス長は、再送開始ＩＤを最小値とするグループに属する受信に失敗したパケットの数である。応答要求情報は、パケットに対するＡｃｋを要求するかを示す値である。再送ベースの送信方法の場合、応答要求情報は、Ａｃｋを要求することを示す値に設定される。一方、誤り訂正ベースの再送や、Ａｃｋを通知するための制御パケットなどでは、応答要求情報は、Ａｃｋを要求しないことを示す値に設定される。
【００５３】
図１０は、通信装置１０ｂが生成する制御応答パケットでの制御情報の例である。通信装置１０ｂは、シーケンスＩＤが０〜８０１９、８０２４〜８６９９、８７０１〜９００９、９０２２〜９９９９のパケットの受信に成功している。このため、通信装置１０ｂの受信パケット管理部１７ｂは、８０２０〜８０２３、８７００、９０１０〜９０２１のシーケンスＩＤが割り当てられたパケットの再送を通信装置１０ａに要求するための制御応答パケットを生成する。受信パケット管理部１７ｂは、受信サイズを８０１９×Ｕ、最大受信サイズを１００００×Ｕに設定する。ここで、Ｕは、転送パケットのペイロード長である。さらに、受信パケット管理部１７ｂは、再送開始ＩＤとして、８０２０、８７００、９０１０を指定する。さらに、受信パケット管理部１７ｂは、再送開始ＩＤ＝８０２０に対応する再送開始シーケンス長を４に指定することにより、８０２０〜８０２３のシーケンスＩＤが割り当てられたパケットの再送を要求する。同様に、受信パケット管理部１７ｂは、再送開始ＩＤ＝８７００に対応する再送開始シーケンス長を１、再送開始ＩＤ＝９０１０に対応する再送開始シーケンス長を１１に指定する。さらに、受信パケット管理部１７ｂは、帯域算出部１８ｂで得られた受信帯域を制御応答パケットに含める（図５の（ｃ１））。
【００５４】
受信パケット管理部１７ｂは、宛先を通信装置１０ａ、送信元を通信装置１０ｂに指定したＩＰヘッダを、制御応答パケットに付加する。さらに、受信パケット管理部１７ｂは、ＵＤＰヘッダ、データヘッダなども適宜設定し、プロトコルＩＤに制御応答パケットであることを示す情報を含める。受信パケット管理部１７ｂは、生成した制御応答パケットを、送信部１１ｂに出力する。送信部１１ｂは、入力された制御応答パケットを、通信装置１０ａに送信する（図５の（ｃ２））。
【００５５】
（Ｄ）制御応答パケットを用いた送信履歴管理
通信装置１０ａは、シーケンスＩＤ＝９９９９のパケットの送信後で、通信装置１０ｂから制御応答パケットを受信する前に、シーケンスＩＤが１００００〜１９９９９のパケットを通信装置１０ｂに送信していたとする。すると、通信装置１０ｂからの制御応答パケットを受信する前に選択部２２ａは、送信中のパケットの情報として、図６（ｂ）に示す情報を保持している。
【００５６】
その後、通信装置１０ａの受信部１２ａは、図１０を参照しながら説明した情報を含む制御応答パケットを受信する。受信部１２ａは、制御応答パケットをパケット処理部１６ａに出力する（図５の（ｄ１））。パケット処理部１６ａは、プロトコルＩＤの値が制御応答パケットであることを示す情報である場合、入力されたパケットを選択部２２ａに出力する。選択部２２ａは、制御応答パケットが入力されると、通信装置１０ｂでの受信状況に応じて、送信中のパケットの情報を更新する。
【００５７】
図１１は、送信テーブルの更新例を示す。選択部２２ａは、制御応答パケットから送信に成功したことが確認できたパケットの情報を削除する。例えば、図１０に示す情報を含む制御応答パケットを受信すると、選択部２２ａは、シーケンスＩＤが０〜８０１９、８０２４〜８６９９、８７０１〜９００９、９０２２〜９９９９のパケットの送信に成功したと判定する。一方、選択部２２ａは、８０２０〜８０２３、８７００、９０１０〜９０２１のシーケンスＩＤが割り当てられたパケットの送信に失敗したと判定する。さらに、シーケンスＩＤが１００００〜１９９９９のパケットについては、制御応答パケットを受信していないので、送信の成功状況が分らないと判定する。そこで、送信に成功したと判定したパケットの情報を削除することにより、送信中のパケットの情報を、図６（ｂ）に示す情報から、図１１に示す情報に更新する（図５の（ｄ２））。
【００５８】
（Ｅ）新たなパケットの転送の中断中に行われる誤り訂正ベースの再送
図１２は、送信データの種類によるパケットの送信パターンの例を示す。ファイル転送が行われる場合、端末１からのデータの送信は連続的に行われる。このため、図１２（ａ）に示すように、通信装置１０ａが端末１からのパケットを受信しない時間間隔は、比較的短い。言い換えると、通信装置１０ａは、端末１から連続的にパケットを受信する。一方、送信データが動画などである場合、図１２（ｂ）に示すように、動画フレームレートに応じて、パケットが端末１から送信されない期間が発生する。このため、端末１から動画が転送されている場合、通信装置１０ａが端末１からパケットを受信しない期間は、ファイル転送が行われている場合に比べて長い。
【００５９】
通信装置１０ａが、端末１からパケットを受信しない場合、通信装置１０ａは新たなパケットを通信装置１０ｂに転送しないので、通信装置１０ａと通信装置１０ｂの通信回線に空き容量が発生する可能性がある。そこで、通信装置１０ａは、新たなパケットの転送を行わないことによって発生した空き容量で、送信の成功が確認できていないパケットを誤り訂正ベースで再送する。以下、誤り訂正ベースの再送を行うかを判定する方法から、再送処理までを詳しく説明する。
【００６０】
通信装置１０ａの閾値計算部２３ａは、誤り訂正ベースの再送を行うかを判定するために使用する閾値を計算する。選択部２２ａは、再送の対象となるパケットを選択して、選択したパケットのデータ量を閾値計算部２３ａに通知する。ここで、選択部２２ａは、送信に失敗したことを通知されているパケットに加えて、制御応答パケットによって受信状況が通知されていないパケットも、再送対象とする。従って、図１１を用いて説明した例では、選択部２２ａは、シーケンスＩＤが８０２０〜８０２３、８７００、９０１０〜９０２１、１００００〜１９９９９のパケットを再送対象とする。
【００６１】
閾値計算部２３ａは、受信の確認が取れていないデータを誤り訂正ベースで再送する際に送信する冗長分の情報量を、未使用の帯域幅で送信できる時間を閾値として求め、得られた値を選択部２２ａに通知する。閾値計算部２３ａは、次式により閾値Ｔｈを計算する。なお、ここでは、閾値Ｔｈが往復遅延時間（ＲＴＴ）よりも小さい値である場合について説明する。
Ｔｈ＝Ｘ×Ａ／（Ｂ−Ｂｕｓｅｄ）
ここで、Ｘは再送しようとするデータの総量をバイト単位で示す値である。Ａは、誤り訂正ベースの再送を行うために送信する冗長分のパケットに含まれるデータ量が再送の対象とするデータの総量に対して占める割合である。Ａは、再送方式によって任意に設定されるが、例えば、０．１〜０．２程度の値に設定することができる。Ｂは、通信装置１０ａと通信装置１０ｂの間を結ぶ回線の帯域幅である。なお、閾値計算部２３ａは、予め、Ａの値と帯域幅（Ｂ）を記憶しているか、メモリ３２ａから読み出すものとする。Ｂｕｓｅｄは、通信装置１０ａと通信装置１０ｂの間の通信に使用されている帯域幅であり、制御応答パケットによって、通信装置１０ｂから通知された値を用いる。従って、（Ｂ−Ｂｕｓｅｄ）は、通信装置１０ａと通信装置１０ｂの間の通信に使用されていない空き帯域の帯域幅である。
【００６２】
選択部２２ａは、計測部２１ａから、通信装置１０ａが端末１からパケットを受信していない期間の値を取得して、閾値Ｔｈと比較する。ここで、通信装置１０ａが端末１からパケットを受信していない期間が閾値Ｔｈを超えたとする。すると、選択部２２ａは、誤り訂正ベースの再送処理が可能であると判定する（図５の（ｅ１））。
【００６３】
選択部２２ａは、再送処理の対象とするパケットを、再送処理部１５ａに出力する。再送処理部１５ａは、選択部２２ａから入力されたパケットに含まれているデータを誤り訂正が可能になるように、冗長化する。例えば、再送処理部１５ａは、選択部２２ａから入力されたパケットのデータをForward Error Correction（ＦＥＣ）符号化により、誤り訂正に用いる冗長パケットを生成する。さらに、再送処理部１５ａは、各パケットと、冗長パケットのそれぞれに、ヘッダ情報を付加する。再送処理部１５ａは、転送処理部１４ａが転送パケットを生成したときと同様の手順でヘッダ情報を付加する。ただし、再送処理部１５ａは、プロトコルＩＤ情報に、誤り訂正ベースの再送パケットであることを示す情報を記録する。再送処理部１５ａは、生成したパケットを送信部１１ａに出力する（図５の（ｅ２））。送信部１１ａは、再送処理部１５ａから入力されたパケットを、通信装置１０ｂに送信する（図５の（ｅ３））。選択部２２ａは、再送処理部１５ａから誤り訂正ベースで送信されたパケットを送信テーブルから削除する。
【００６４】
図１３は、実施形態にかかる通信装置の処理の例を示す。端末１からＴＣＰパケットを受信している間、通信装置１０ａは、受信したパケットをＵＤＰパケットに変換して通信装置１０ｂに送信する。通信装置１０ａは、通信装置１０ｂの受信パケット管理部１７ｂで生成された受信テーブルの情報を含む制御応答パケット（Ａｃｋ）を所定の周期で受信し、制御応答パケットに応じた再送処理を行う。なお、通信装置１０ａは、ＴＣＰパケットを端末１から受信している間に再送を行う場合は、送信に失敗したパケットを再送ベースで再送する。
【００６５】
一方、通信装置１０ａの選択部２２ａは、端末１からＴＣＰパケットを受信しない期間が所定の期間を超えると、通信装置１０ａと通信装置１０ｂの間に新たなパケットが転送されていないことにより、回線が空いたと判定する。このため、選択部２２ａは、受信の確認が取れていないパケットを選択して、再送処理部１５ａに出力する。再送処理部１５ａは、ＦＥＣ符号化を用いて、選択部２２ａから入力されたパケットを誤り訂正が可能な形式にし、再送処理を行う。端末１からのＴＣＰパケットの送信が再開すると、通信装置１０ａは、再度、冗長化パケットを用いない通信方法でパケットを転送する。
【００６６】
図１４は、通信装置の処理の例を説明するフローチャートである。図１４の処理例では、ＴＣＰパケットを転送パケットに変換して転送する処理にかかる時間が、パケットによって変動しないとする。このため、計測部２１は、最後に送信部１１からの送信が行われた時刻（最終送信時刻）と現在時刻との差を、通信装置１０が端末１からパケットを受信していない期間の近似値として扱っている。また、計測部２１は、閾値Ｔｈよりも十分に短い値に設定したタイマを保持していて、タイマがタイムアップするたびに、選択部２２に誤り訂正ベースの再送を行うかの判定を要求するものとする。
【００６７】
切り替え部２０やパケット処理部１６として動作しているプロセッサ３１は、割り込みの要求があるまで待機する（ステップＳ１）。プロセッサ３１は、割り込みがあると、割り込みで要求されている内容を判定する（ステップＳ２）。割り込みがＴＣＰパケットの受信を示している場合、端末１からの受信パケットが選択部２２ａに入力されている（ステップＳ３）。そこで、選択部２２はＴＣＰパケットを転送処理部１４に出力し、転送処理部１４は、ＴＣＰパケットを転送パケットに変換する（ステップＳ４）。転送処理部１４は、送信部１１を介して、転送パケットを、再送ベースの転送方法で、受信側の通信装置１０に転送する（ステップＳ５）。選択部２２は、最終送信時刻を現在時刻に更新する（ステップＳ６）。
【００６８】
ステップＳ２において、割り込みがＵＤＰパケットの受信を示している場合、受信側の通信装置１０からの制御応答パケットが選択部２２に入力されている（ステップＳ７）。選択部２２は制御応答パケットを用いて、送信テーブルを更新する（ステップＳ８）。選択部２２は、さらに、Ａｃｋを未受信であるため再送の対象とするパケットの量と、空き帯域の推定値を更新する（ステップＳ９）。閾値計算部２３は、空き帯域の値を利用して閾値Ｔｈを算出する（ステップＳ１０）。
【００６９】
ステップＳ２において、計測部２１が保持するタイマのタイムアップによる割り込みであると判定された場合、計測部２１が選択部２２に、誤り訂正ベースの再送処理を行うかの判定を要求している（ステップＳ１１）。そこで、選択部２２は、現在時刻を取得する（ステップＳ１２）。選択部２２は、最終送信時刻に閾値を加えることによって得られる時刻と現在時刻を比較する（ステップＳ１３）。最終送信時刻に閾値を加えることによって得られる時刻が現在時刻よりも後の時刻である場合、最後にパケットを受信側の通信装置１０に転送してから経過した時間は、閾値よりも短い。この場合、選択部２２は、まだ誤り訂正ベースの再送をすることができる程度に、受信側の通信装置１０との間の帯域が空いていないと判定し、ステップＳ１に戻る（ステップＳ１３でＮｏ）。最終送信時刻に閾値を加えることによって得られる時刻が現在時刻以降の時刻である場合、最後にパケットを受信側の通信装置１０に転送してから経過した時間は、閾値以上である。この場合、選択部２２は、誤り訂正ベースの再送をすることができる程度に、受信側の通信装置１０との間の帯域が空いていると判定し、誤り訂正ベースの再送を再送処理部１５に要求する（ステップＳ１３でＹｅｓ）。再送処理部１５は、選択部２２の要求に応じて、誤り訂正ベースの再送処理を行う。また、選択部２２は最終送信時刻を現在時刻に更新する（ステップＳ１４）。
【００７０】
図１５は、パケットの受信のタイミング例を説明する図である。通信装置１０ａが転送パケットＵ０〜Ｕｎを、再送ベースの送信方法で通信装置１０ｂに送信したとする。さらに、通信装置１０ｂがパケットＵｘ−１を受信したときに生成された制御応答パケットが、通信装置１０ｂから通信装置１０ａに送信されたとする。ここで、パケットＵ０〜Ｕｘ−１までは全て通信装置１０ｂで受信できたとすると、通信装置１０ａの選択部２２ａは、Ｕｘ〜ＵｎはＡｃｋ待ちであると判定し、Ｕｘ〜Ｕｎを送信テーブルに残す。
【００７１】
一方、通信装置１０ｂは、Ｕｘ〜Ｕｎ−１を受信できなかったが、パケットＵｎを受信したとする。すると、通信装置１０ｂは、パケットＵｎは受信できたがＵｘ〜Ｕｎ−１の受信に失敗したことを通知するための制御応答パケットを生成し、通信装置１０ａに向けて送信する。
【００７２】
ここで、パケットＵｎが通信装置１０ｂに到達するまでの間に、通信装置１０ａが端末１からパケットを受信しない期間が閾値Ｔｈを超えていたとする。すると、選択部２２ａは再送処理部１５ａに、誤り訂正ベースでのＵｘ〜Ｕｎの再送を要求する。このため、通信装置１０ａは、Ｕｘ〜Ｕｎについての制御応答パケットを受信する前に、Ｕｘ〜Ｕｎを誤り訂正ベースで通信装置１０ｂに再送する。従って、通信装置１０ｂは、時刻Ｔ１にＵｘ〜Ｕｎを受信できる。Ｕｘ〜Ｕｎについての制御応答パケットは、通信装置１０ａがＵｘ〜Ｕｎを送信した時刻から往復遅延時間（ＲＴＴ）が経過した時刻に通信装置１０ａに到達する。このため、通信装置１０ａは、制御応答パケットの受信待ちの間に、通信装置１０ｂからのＡｃｋを待っているパケットであり、かつ、１回目の送信に失敗したパケットを、そのパケットのＲＴＴが経過する前に強制的に再送信していることになる。従って、ＲＴＴとは無関係にパケットの強制的な再送信を行うことができるため、通信装置１０ａを用いた通信では、ＲＴＴの長さが長くなることによる遅延が発生しにくい。
【００７３】
例えば、図１５に示すように、通信装置１０ｂからの２回目の制御応答パケットを待ってからＵｘ〜Ｕｎ−１を再送した場合、通信装置１０ｂがＵｘ〜Ｕｎ−１を受信する時刻は、時刻Ｔ２にまで遅延してしまう。従って、実施形態にかかる通信方法を用いると、通信装置１０ａと通信装置１０ｂの間で発生する通信遅延を、Ｔ２―Ｔ１の期間分だけ縮めることができる。さらに、誤り訂正ベースの再送は、通信装置１０ａと通信装置１０ｂの間の回線に所定以上の空きがあることが見込まれる場合に行われる。このため、冗長パケットの送信によるスループットの低下を防ぐことができる。
【００７４】
例えば、通信装置１０ａと通信装置１０ｂの間の帯域幅がＭ（ｂｐｓ）、ＦＥＣによる冗長度がＡ、通信装置１０ａと通信装置１０ｂの間のＲＴＴがｒ（ｓｅｃ）、パケットロス率がｄであるときの送信方法によるスループットとレイテンシを比較する。なお、冗長度Ａは０．１程度、パケットロス率ｄは０．１〜０．２程度の値であると仮定する。
【００７５】
再送ベースで全てのパケットの転送および再送を行うと、スループットは、Ｍｂｐｓである。しかし、レイテンシの期待値は、（ｒ／２）×（１−ｄ）＋（ｒ／２＋ｒ）×ｄとなる。ＦＥＣで全てのパケットの転送を行う場合は、スループットは、Ｍ／（１＋Ａ）ｂｐｓとなるが、レイテンシの期待値は（ｒ／２）である。
【００７６】
一方、通信装置１０を用いて転送処理を行うことにより、再送ベースの転送と誤り訂正ベースの再送を組み合わせてパケットを転送すると、スループットの期待値はＭｂｐｓであり、レイテンシの期待値は（ｒ／２）である。従って、通信装置１０を用いて、再送ベースの転送と誤り訂正ベースの再送を行うことにより、スループットを低下させることなく、再送による遅延を抑制することができる。
【００７７】
＜第２の実施形態＞
第１の実施形態では、閾値Ｔｈが通信装置１０ａと通信装置１０ｂの間の往復遅延時間（ＲＴＴ）よりも短いケースを例として説明したが、閾値Ｔｈの計算値がＲＴＴを超える場合もある。この場合、通信装置１０ａは、送信の成功が確認できていないパケットの再送処理を複数回に分けることにより、送信側と受信側の通信装置１０の間のＲＴＴが経過する前に、受信側の通信装置１０での受信状況を確認できていないパケットを強制的に再送できる。
【００７８】
第２の実施形態では、計測部２１は、計測パケットを用いて通信装置１０ａと通信装置１０ｂの間の通信にかかる時間も計測できるものとする。計測部２１ａは、第１の計測パケットを生成し、送信部１１ａから通信装置１０ｂに第１の計測パケットが送信された時刻を記憶する。第１の計測パケットは通信装置１０ｂの受信部１２ｂで受信され、計測部２１ｂに出力される。なお、受信部１２ｂは、計測パケットのフォーマットを予め記憶しており、他のパケットと計測パケットを識別できるものとする。計測部２１ｂは、第１の計測パケットに応答する第２の計測パケットを生成し、送信部１１ｂを介して、通信装置１０ａに送信する。通信装置１０ａの受信部１２ａは第２の計測パケットを受信すると、計測部２１ａに第２の計測パケットを出力する。計測部２１ａは、第２の計測パケットを受信した時刻を取得し、第１の計測パケットの送信時刻との間の差分を計算する。計測部２１ａは、得られた差分を、ＲＴＴとして閾値計算部２３ａに出力する。
【００７９】
閾値計算部２３ａは、閾値ＴｈとＲＴＴの値を比較する。閾値ＴｈがＲＴＴ以上の場合、閾値計算部２３ａは、閾値Ｔｈの代わりに閾値Ｔｈｋを算出する。閾値Ｔｈｋが算出される場合、誤り訂正ベースの再送処理を行うかの判定の際に、閾値Ｔｈの代わりに閾値Ｔｈｋが使用される。閾値Ｔｈｋは、以下の式から算出される。
Ｔｈｋ＝Ｙ×Ａ／（Ｂ−Ｂｕｓｅｄ）＝Ｘ×Ａ／Ｋ（Ｂ−Ｂｕｓｅｄ）＝Ｔｈ／Ｋ
ここで、Ｙ＝Ｘ／Ｋである。Ｙは、１回の誤り訂正ベースの再送処理で送信しようとするデータのバイト数である。Ｋは誤り訂正ベースで行う再送処理の回数である。また、Ｘは再送しようとするデータの総量のバイト数であり、Ａは誤り訂正ベースの再送を行うために送信する冗長分のパケットに含まれるデータ量が再送するデータの量に対して占める割合である。（Ｂ−Ｂｕｓｅｄ）は、通信装置１０ａと通信装置１０ｂの間の通信に使用されていない空き帯域の帯域幅である。
【００８０】
閾値計算部２３ａは、再送処理の回数を、閾値Ｔｈの値に応じて決定することができる。例えば、閾値計算部２３ａは、閾値Ｔｈが長いほどＫの値を大きくすることができ、閾値Ｔｈの長さに応じて、任意の２以上の整数をＫに設定することができる。このように、誤り訂正ベースの再送処理を複数回に分けることにより、再送処理の際に送信される冗長分のデータ量が多くなっても、通信装置１０は、ＲＴＴの経過前にＡｃｋを受信していないパケットを強制的に再送信できる。このため、送信側の通信装置１０と受信側の通信装置１０の距離が長くなることにより、ＲＴＴが長くなっても、通信の遅延を抑えることができる。
【００８１】
さらに、第２の実施形態では、１度の再送処理の際に送信されるデータ量が少なくなるので、１度の再送処理に用いられる冗長パケットの量も抑えることができる。このため、誤り訂正ベースの再送により予測以上にスループットが低下する事態を避けやすくなる。
【００８２】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００８３】
上記の実施形態では、図を見やすくするために、ＴＣＰヘッダのシーケンス番号とデータヘッダのシーケンスＩＤが同じ値である場合を例として説明したが、両者は異なっていてもよい。ＴＣＰヘッダはＴＣＰを用いた通信を行う装置間で決められたシーケンス番号であるが、シーケンスＩＤは、コネクションごとに０からカウントアップされる。従って、例えば、端末１から通信装置１０ａに送信されるパケットのシーケンス番号が１００から開始したとすると、シーケンス番号１００のＴＣＰパケットに含まれるデータは、シーケンスＩＤ＝０の転送パケットに含まれることになる。
【００８４】
上記の実施形態では、送信テーブルがハッシュテーブルである場合を例として説明したが、シーケンスＩＤに対応付けて、各パケットの送信状況とＡｃｋの受信状況を記録するテーブルを送信テーブルとしても良い。送信テーブルの変形例を図１６に示す。図１６の例では、送信中フラグ＝０は送信済みであることを示し、送信中フラグ＝１は送信後でＡｃｋが取得できていないことを示す。Ａｃｋ受信状況は、制御応答パケットの受信状況を示す。従って、送信中フラグ＝０でＡｃｋ受信状況＝受信となっているパケットは、そのパケットの送信後、そのパケットの送信の成功を示すＡｃｋが含まれている制御応答パケットを受信したパケットを表す。送信中フラグ＝１でＡｃｋ受信状況＝受信待ちとなっているパケットは、そのパケットの送信後、送信の結果を示すＡｃｋが含まれた制御応答パケットを受信していないパケットを表す。さらに、送信中フラグ＝１でＡｃｋ受信状況＝受信となっているパケットは、そのパケットの送信後、そのパケットの送信の失敗を示す情報が含まれている制御応答パケットを受信したパケットを表す。従って、図１６は、シーケンスＩＤ８０２０〜８０２３、８７００、９０１０〜９０２１のパケットの送信に失敗し、さらに、シーケンスＩＤが１００００〜１９９９９のパケットについては、制御応答パケットを受信していない場合の送信テーブルである。
【００８５】
図１７は、ネットワークの例を示す。通信装置１０は、図１７に示すように、３台以上の通信装置１０が含まれるネットワークで使用されても良い。この場合、選択部２２での判定では、閾値Ｔｈｄが用いられる。閾値Ｔｈｄは、以下の式で求められる。
Ｔｈｄ＝Ｘ×Ａ／Ｚ
ここで、Ｚは、帯域幅から通信に使用されている帯域の総和を差し引いた値を、送信元の通信装置１０と通信しうる通信装置１０の数で割った値である。また、Ｘは再送しようとするデータのバイト数、Ａは誤り訂正によって付加される冗長度である。
【００８６】
例えば、図１７の例では、通信装置１０ａ〜１０ｃがネットワーク中にあるので、通信装置１０ａに接続されている回線は、通信装置１０ａと通信装置１０ｂの間の通信と、通信装置１０ａと通信装置１０ｃの間の通信の両方に使用される可能性がある。そこで、通信装置１０ａに接続されている回線の帯域幅から、通信装置１０ａと通信装置１０ｂの間の通信で使用されている帯域幅と、通信装置１０ａと通信装置１０ｃの通信で使用される帯域幅を差し引いた値を２で割った値が、Ｚとして用いられる。このように選択部２２が使用する閾値を変更することにより、２以上の任意の数の通信装置１０が含まれるネットワークにおいて、再送ベースと誤り訂正ベースの２種類の送信方法を組み合わせた通信を行うことができる。
【００８７】
さらに、ＲＴＴの計測方法は、実装に応じて変更されても良い。第２の実施形態では、閾値ＴｈがＲＴＴ以上の場合に閾値Ｔｈｋを用いて再送を行うかを判定し、一度の再送処理では、再送の対象として選択されたパケットの１／Ｋを再送する場合を説明したが、閾値ＴｈがＲＴＴより短くても同様の処理を行っても良い。
【００８８】
また、上記の例では、ＴＣＰやＵＤＰが用いられる場合を例として説明したが、実装に応じて、通信に使用するプロトコルを変更しても良い。さらに、誤り訂正ベースの再送の際に、ＦＥＣ以外の誤り訂正を用いることもできるものとする。
【符号の説明】
【００８９】
１  端末
２  ＷＡＮ
３  データセンタ
４  サーバ
１０  通信装置
１１  送信部
１２  受信部
１３  送受信部
１４  転送処理部
１５  再送処理部
１６  パケット処理部
１７  受信パケット管理部
１８  帯域算出部
２０  切り替え部
２１  計測部
２２  選択部
２３  閾値計算部
３１  プロセッサ
３２  メモリ
３３  入力装置
３４  出力装置
３５  バス
３６  外部記憶装置
３７  媒体駆動装置
３８  可搬記憶媒体
３９  ネットワーク接続装置
【図１】
0005935940.tif 000002
【図２】
0005935940.tif 000003
【図３】
0005935940.tif 000004
【図４】
0005935940.tif 000005
【図５】
0005935940.tif 000006
【図６】
0005935940.tif 000007
【図７】
0005935940.tif 000008
【図８】
0005935940.tif 000009
【図９】
0005935940.tif 000010
【図１０】
0005935940.tif 000011
【図１１】
0005935940.tif 000012
【図１２】
0005935940.tif 000013
【図１３】
0005935940.tif 000014
【図１４】
0005935940.tif 000015
【図１５】
0005935940.tif 000016
【図１６】
0005935940.tif 000017
【図１７】
0005935940.tif 000018