(57)【要約】【課題】データを受信する装置が過負荷になるのを抑制すること。【解決手段】通信部１１及び制御部１２を有する情報処理装置１０が提供される。通信部１１は、第１のデータ＃１〜＃３を他の情報処理装置７に送信し、他の情報処理装置７が第１のデータ＃１〜＃３の処理に要した時間に応じた処理時間情報２２を他の情報処理装置７から受信し、第２のデータ＃１〜＃４を他の情報処理装置７に送信する。制御部１２は、他の情報処理装置７からの応答を待たずに送信できるデータの量の閾値を第１の閾値Ｔｈ１に設定して、第１のデータの量を第１の閾値Ｔｈ１以下に制限し、処理時間情報２２に基づいてデータの量の閾値を第１の閾値Ｔｈ１から第２の閾値Ｔｈ２に変更して、第２のデータ＃１〜＃４の量を第２の閾値Ｔｈ２以下に制限する。【選択図】図１
2014127969.tif 000002
【特許請求の範囲】
【請求項１】
他のコンピュータにデータを送信可能なコンピュータに、
前記他のコンピュータからの応答を待たずに送信できるデータの量の閾値を第１の閾値に設定し、前記第１の閾値以下の量の第１のデータを前記他のコンピュータに送信し、
前記他のコンピュータが前記第１のデータの処理に要した時間に応じた処理時間情報を前記他のコンピュータから取得し、
前記処理時間情報に基づいて、前記データの量の閾値を前記第１の閾値から第２の閾値に変更し、前記第２の閾値以下の量の第２のデータを前記他のコンピュータに送信する、
処理を実行させるプログラム。
【請求項２】
前記第１のデータは符号化されて送信され、
前記第１のデータの処理に要した時間は、前記他のコンピュータが前記第１のデータを復号する時間を含む、
請求項１に記載のプログラム。
【請求項３】
前記第１のデータの処理に要した時間は、前記他のコンピュータが前記第１のデータの復号を開始してから復号された前記第１のデータを所定の記憶装置に書き込むまでの時間を含む、
請求項２に記載のプログラム。
【請求項４】
前記処理時間情報と前記第１のデータが送信されたときの通信状況を示す通信状況情報との組み合わせに基づいて、前記データの量の閾値を変更する、
請求項１乃至３の何れか一項に記載のプログラム。
【請求項５】
前記第２のデータは符号化されて送信され、
前記第２のデータの送信では、符号化前の前記第２のデータの量を前記第２の閾値に基づいて制限するか、又は、符号化率を変更することで符号化後の前記第２のデータの量を前記第２の閾値に基づいて制限する、
請求項１乃至４の何れか一項に記載のプログラム。
【請求項６】
他の情報処理装置にデータを送信可能な情報処理装置であって、
第１のデータを前記他の情報処理装置に送信し、前記他の情報処理装置が前記第１のデータの処理に要した時間に応じた処理時間情報を前記他の情報処理装置から受信し、第２のデータを前記他の情報処理装置に送信する通信部と、
前記他の情報処理装置からの応答を待たずに送信できるデータの量の閾値を第１の閾値に設定して、前記第１のデータの量を前記第１の閾値以下に制限し、前記処理時間情報に基づいて前記データの量の閾値を前記第１の閾値から第２の閾値に変更して、前記第２のデータの量を前記第２の閾値以下に制限する制御部と、
を有する情報処理装置。
【請求項７】
他の情報処理装置にデータを送信可能な情報処理装置が実行する通信方法であって、
前記他の情報処理装置からの応答を待たずに送信できるデータの量の閾値を第１の閾値に設定し、前記第１の閾値以下の量の第１のデータを前記他の情報処理装置に送信し、
前記他の情報処理装置が前記第１のデータの処理に要した時間に応じた処理時間情報を前記他の情報処理装置から取得し、
前記処理時間情報に基づいて、前記データの量の閾値を前記第１の閾値から第２の閾値に変更し、前記第２の閾値以下の量の第２のデータを前記他の情報処理装置に送信する、
通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報処理装置、及び通信方法に関する。
【背景技術】
【０００２】
現在、データ通信用のネットワークとして、インターネット、Local Area Network（ＬＡＮ）、Wide Area Network（ＷＡＮ）、携帯電話網などの様々なネットワークが利用されている。多くのデータ通信では、データを生成する送信装置とデータの最終的な宛先である受信装置との間のエンドツーエンドの通信を制御し、アプリケーション層に適切にデータを渡すため、何れかのトランスポート層のプロトコルが利用される。トランスポート層のプロトコルの例として、コネクション型のTransmission Control Protocol（ＴＣＰ）と、コネクションレス型のUser Datagram Protocol（ＵＤＰ）とが挙げられる。
【０００３】
ＴＣＰでは、データパケットが受信装置に到達したことを保証するため、受信装置が、データパケットを正常に受信したときにACKnowledgement（ＡＣＫ）パケットを送信装置に向かって返信する。送信装置は、データパケットを送信してから一定時間内に期待されるＡＣＫパケットを受信できないとき、当該データパケットを再送する。但し、１つのデータパケットを送信した後、送信装置がＡＣＫを待ってから次のデータパケットを送信すると、データ送信のスループットが低くなるおそれがある。そこで、ＴＣＰでは、受信装置の受信ウィンドウサイズの範囲内で、送信装置がＡＣＫを待たずに連続して複数のデータパケットを送信することができる。受信ウィンドウサイズは、受信装置がもつトランスポート層のバッファの空き領域に基づいて決定され、受信装置から送信装置に通知される。
【０００４】
上記のように、ＴＣＰは信頼性の高いトランスポート層のプロトコルであり、File Transfer Protocol（ＦＴＰ）やHypertext Transfer Protocol（ＨＴＴＰ）などのアプリケーション層のプロトコルと組み合わせて用いられることが多い。一方、ＵＤＰは、ＡＣＫによる到達確認が行われない軽量なトランスポート層のプロトコルであり、通信のスループットやリアルタイム性を重視するデータ通信について用いられることが多い。但し、ＵＤＰは自由度の高いプロトコルであるため、ＵＤＰの上位層のプロトコルにおいて信頼性を高めるための機能を独自に実装することも可能である。
【０００５】
例えば、ＵＤＰと組み合わせて、前方誤り訂正（ＦＥＣ：Forward Error Correction）符号化や再送制御などの機能を実装することで、通信のリアルタイム性と信頼性とのバランスを図った通信システムが提案されている。なお、再送制御に関して、ファイルを複数のデータブロックに分割して各データブロックに順序番号を付して送信し、１ファイルのデータブロックを全て送信し終えてから再送要求を受け付けることで、トラフィック量を抑えるファイル配信方法が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】国際公開第００／１３３５７号
【特許文献２】特開２００２−１６９７３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、到達確認が行われる通信システムにおいて、送信装置が受信装置からの到達確認を待たずにある程度の量のデータを連続して送信できることがある。しかし、従来、到達確認を待たずに送信できるデータの量は、受信装置における現在のデータ処理の負荷を適切に反映しているとは限らない。このため、受信装置が過負荷になって受信したデータを処理しきれずに、オーバーフローが発生し得るという問題がある。
【０００８】
例えば、ＴＣＰの場合、受信装置の受信ウィンドウサイズは、トランスポート層のバッファの空き領域に基づいて決定される。このため、データがトランスポート層からアプリケーション層などの上位層に渡されると、トランスポート層のバッファの空き領域が増えて、受信ウィンドウサイズが大きくなる。しかしながら、上位層のプロトコルにおいて、計算量の大きな処理（例えば、誤り訂正復号）や低速な処理（例えば、補助記憶装置へのデータの書き出し）が行われる場合、上位層のデータ処理がボトルネックとなり得る。この場合、上位層のプロトコルのメモリ領域がオーバーフローしてしまう可能性がある。
【０００９】
そこで、１つの側面では、本発明は、データを受信する装置が過負荷になるのを抑制できるプログラム、情報処理装置、及び通信方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、他のコンピュータにデータを送信可能なコンピュータに実行させるプログラムが提供される。プログラムを実行するコンピュータは、他のコンピュータからの応答を待たずに送信できるデータの量の閾値を第１の閾値に設定し、第１の閾値以下の量の第１のデータを他のコンピュータに送信する。他のコンピュータが第１のデータの処理に要した時間に応じた処理時間情報を他のコンピュータから取得する。処理時間情報に基づいて、データの量の閾値を第１の閾値から第２の閾値に変更し、第２の閾値以下の量の第２のデータを他のコンピュータに送信する。
【００１１】
また、１つの態様では、他の情報処理装置にデータを送信可能な、通信部と制御部とを有する情報処理装置が提供される。また、１つの態様では、他の情報処理装置にデータを送信可能な情報処理装置が実行する通信方法が提供される。
【発明の効果】
【００１２】
１つの側面では、データを受信する装置が過負荷になるのを抑制できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態に係る情報処理装置等の例を示した図である。
【図２】第２の実施の形態に係る通信システムの例を示した図である。
【図３】第２の実施の形態に係る情報処理装置のハードウェアの例を示した図である。
【図４】第２の実施の形態に係る送信側の情報処理装置の機能の例を示したブロック図である。
【図５】マッピング表の例を示した図である。
【図６】第２の実施の形態に係る受信側の情報処理装置の機能の例を示したブロック図である。
【図７】ＲＰＳ符号及びＵＤＰを利用したアプリケーションデータの送信方法を説明した図である。
【図８】ＲＰＳ符号化及びＲＰＳ復号の処理について説明した図である。
【図９】ＲＰＳ符号及びＵＤＰを利用したデータ送信方法における再送制御の方法を説明した図である。
【図１０】第２の実施の形態に係る送信制御方法を説明した第１の図である。
【図１１】第２の実施の形態に係る送信制御方法を説明した第２の図である。
【図１２】第２の実施の形態に係る送信制御方法を説明した第３の図である。
【図１３】第２の実施の形態に係る送信制御方法を説明した第４の図である。
【図１４】第２の実施の形態に係るチェックポイントデータ及びＡＣＫの送信処理について説明した図である。
【図１５】ＴＣＰに係るＡＣＫの送信方法と第２の実施の形態に係るＡＣＫの送信方法とを比較した図である。
【図１６】第２の実施の形態に係る処理時間について説明した図である。
【図１７】第２の実施の形態に係る送信処理の流れについて説明した第１の図である。
【図１８】第２の実施の形態に係る送信処理の流れについて説明した第２の図である。
【図１９】第２の実施の形態に係る受信処理の流れについて説明した図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照しながら実施の形態について説明する。
［第１の実施の形態］
第１の実施の形態について説明する。
【００１５】
図１は、第１の実施の形態に係る情報処理装置等の例を示した図である。
図１に示すように、第１の実施の形態に係る情報処理装置１０は、通信部１１及び制御部１２を有する。また、情報処理装置１０は、ネットワーク５を介して他の情報処理装置７と接続されている。
【００１６】
また、図示しないが、情報処理装置１０及び他の情報処理装置７は、記憶装置を有している。この記憶装置は、Random Access Memory（ＲＡＭ）などの揮発性記憶装置であってもよいし、Hard Disk Drive（ＨＤＤ）やフラッシュメモリなどの不揮発性記憶装置であってもよい。
【００１７】
また、制御部１２は、Central Processing Unit（ＣＰＵ）やDigital Signal Processor（ＤＳＰ）などのプロセッサであってもよい。また、制御部１２は、Application Specific Integrated Circuit（ＡＳＩＣ）やField Programmable Gate Array（ＦＰＧＡ）などのプロセッサ以外の電子回路であってもよい。また、制御部１２は、上述した記憶装置又は他のメモリに記憶されたプログラムを実行する。
【００１８】
通信部１１は、第１のデータ＃１〜＃３を他の情報処理装置７に送信し、他の情報処理装置７が第１のデータ＃１〜＃３の処理に要した時間に応じた処理時間情報２２を他の情報処理装置７から受信し、第２のデータ＃１〜＃４を他の情報処理装置７に送信する。
【００１９】
制御部１２は、他の情報処理装置７からの応答を待たずに送信できるデータの量の閾値を第１の閾値Ｔｈ１に設定して、第１のデータの量を第１の閾値Ｔｈ１以下に制限する。さらに、制御部１２は、処理時間情報２２に基づいてデータの量の閾値を第１の閾値Ｔｈ１から第２の閾値Ｔｈ２に変更して、第２のデータ＃１〜＃４の量を第２の閾値Ｔｈ２以下に制限する。
【００２０】
このように、処理時間情報２２に応じて応答を待たずに送信できるデータ２１の量を調整することで、他の情報処理装置７の負荷状況を考慮した送信データ量の制御が可能になる。例えば、他の情報処理装置７でデータを記憶装置に格納する際に遅延が発生した場合でも、送信データ量が少なく調整されることで、記憶装置の前段に設けられたバッファがオーバーフローするような事態を回避することができる。その結果、安定して高いスループットを維持することが可能になる。
【００２１】
以上、第１の実施の形態について説明した。
［第２の実施の形態］
第２の実施の形態について説明する。
【００２２】
（システムについて）
まず、図２を参照しながら、第２の実施の形態に係る通信システム１００について説明する。図２は、第２の実施の形態に係る通信システムの例を示した図である。
【００２３】
図２に示すように、通信システム１００は、情報処理装置１１０と、ネットワーク９４を介して情報処理装置１１０に接続された情報処理装置１３０とを有する。なお、以下の説明では、情報処理装置１１０を送信側、情報処理装置１３０を受信側と表現することがある。また、説明の都合上、情報処理装置１１０から情報処理装置１３０へとデータを送信する場合を想定して説明を進める。但し、情報処理装置１３０から情報処理装置１１０へと情報が送信されることもある。
【００２４】
図２の例では情報処理装置１１０、１３０が共に据え置き型のコンピュータの形状で表現されているが、情報処理装置１１０、１３０は据え置き型のコンピュータ以外の形態であってもよい。例えば、情報処理装置１１０は、ノート型パーソナルコンピュータ、タブレット型コンピュータ、携帯電話機、スマートフォン、デジタルカメラ、カーナビゲーションシステムなどであってもよい。また、情報処理装置１１０は、無線基地局、無線通信端末、ルータ、ハブ、モデム、衛星通信用の通信機器、その他の通信機器であってもよい。なお、情報処理装置１３０の形態についても同様である。
【００２５】
また、図２の例では情報処理装置１１０を１台のコンピュータで表現しているが、複数台のコンピュータを接続した並列型のコンピュータであってもよいし、クラウドコンピューティングシステムであってもよい。この場合、情報処理装置１１０が有する機能の一部又は全部は、複数のコンピュータを利用して実現される。なお、情報処理装置１３０についても同様である。また、情報処理装置１１０、１３０のうち一方の機能を１台のコンピュータで実現させ、他方の機能を複数台のコンピュータで実現させてもよい。
【００２６】
（ハードウェアについて）
また、情報処理装置１１０の機能は、図３に示すようなハードウェアにより実現される。図３は、第２の実施の形態に係る情報処理装置のハードウェアの例を示した図である。なお、図３に示したハードウェア要素の組み合わせは一例であり、実施の態様に応じて一部の要素を省略することや、新たな要素を追加することも可能である。
【００２７】
図３に示すように、情報処理装置１１０は、例えば、ＣＰＵ９０１、ＲＡＭ９０２、ＨＤＤ９０３、画像信号処理部９０４、入力信号処理部９０５、ディスクドライブ９０６、及び通信インターフェース９０７を有する。
【００２８】
なお、ＣＰＵ９０１は、第１の実施の形態に係る制御部１２の一例である。また、ＲＡＭ９０２やＨＤＤ９０３は、第１の実施の形態に係る記憶装置の一例である。また、通信インターフェース９０７は、第１の実施の形態に係る通信部１１の一例である。
【００２９】
ＣＰＵ９０１は、プログラムに記述された命令を実行する演算器を含むプロセッサである。ＣＰＵ９０１は、ＨＤＤ９０３に記憶されているプログラムやデータの少なくとも一部をＲＡＭ９０２にロードし、プログラムに記述された命令を実行する。なお、ＣＰＵ９０１は、複数のプロセッサコアを含んでいてもよい。また、情報処理装置１１０は、複数のＣＰＵ９０１を搭載していてもよい。この場合、情報処理装置１１０は、処理を並列実行することができる。
【００３０】
ＲＡＭ９０２は、ＣＰＵ９０１が実行するプログラムや、処理に用いられるデータを一時的に記憶するための揮発性メモリである。なお、情報処理装置１１０は、ＲＡＭ９０２とは異なる種類のメモリを有していてもよい。また、情報処理装置１１０は、複数のメモリを備えていてもよい。
【００３１】
ＨＤＤ９０３は、Operating System（ＯＳ）、ファームウェア、或いは、アプリケーションソフトウェアなどのプログラムや、処理に用いられるデータなどを記憶する不揮発性記憶装置の一例である。なお、情報処理装置１１０は、フラッシュメモリやSolid State Drive（ＳＳＤ）など、ＨＤＤ９０３とは異なる種類の記憶装置を有していてもよい。また、情報処理装置１１０は、複数の記憶装置を有していてもよい。
【００３２】
画像信号処理部９０４は、ＣＰＵ９０１による制御を受け、情報処理装置１１０に接続された表示装置９１に画像を出力する。表示装置９１は、例えば、Cathode Ray Tube（ＣＲＴ）ディスプレイ、Liquid Crystal Display（ＬＣＤ）、Plasma Display Panel（ＰＤＰ）、Organic Electro-Luminescence Display（ＯＥＬＤ）などの表示デバイスである。
【００３３】
入力信号処理部９０５は、情報処理装置１１０に接続された入力デバイス９２から入力信号を取得し、ＣＰＵ９０１に通知する。入力デバイス９２としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、トラックボール、リモートコントローラ、ボタンスイッチなどを用いることができる。
【００３４】
ディスクドライブ９０６は、記録媒体９３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体９３としては、例えば、Flexible Disk（ＦＤ）、ＨＤＤなどの磁気ディスク、Compact Disc（ＣＤ）やDigital Versatile Disc（ＤＶＤ）などの光ディスク、Magneto-Optical disk（ＭＯ）などの光磁気ディスクを用いることができる。ディスクドライブ９０６は、例えば、ＣＰＵ９０１による制御を受け、記録媒体９３から読み取ったプログラムやデータをＲＡＭ９０２又はＨＤＤ９０３に格納する。
【００３５】
通信インターフェース９０７は、ネットワーク９４を介して他のコンピュータと通信を行うためのインターフェースである。通信インターフェース９０７は、有線インターフェースであってもよいし、無線インターフェースであってもよい。また、通信インターフェース９０７は、衛星通信用の通信インターフェースであってもよいし、携帯電話網に接続するための通信インターフェースであってもよい。
【００３６】
（情報処理装置１１０の機能について）
上記のハードウェアを用いることで、情報処理装置１１０は、図４に示すような機能を実現することができる。図４は、第２の実施の形態に係る送信側の情報処理装置の機能の例を示したブロック図である。
【００３７】
図４に示すように、情報処理装置１１０は、データ入力部１１１と、ブロック化部１１２と、パケット生成部１１３と、消失訂正符号化部１１４と、通信部１１５と、制御部１１６とを有する。
【００３８】
なお、ブロック化部１１２、パケット生成部１１３、消失訂正符号化部１１４、通信部１１５、及び制御部１１６が有する機能の一部又は全部は、ＣＰＵ９０１が実行するプログラムのモジュールとして実現できる。また、ブロック化部１１２、パケット生成部１１３、消失訂正符号化部１１４、通信部１１５、及び制御部１１６が有する機能の一部又は全部をソフトウェアではなく電子回路として実現することも可能である。
【００３９】
データ入力部１１１には、受信側の情報処理装置１３０に送信するデータが入力される。データ入力部１１１に入力されるデータは、情報処理装置１１０とは異なる外部のコンピュータが実行しているアプリケーションソフトウェアから提供されたものであってもよいし、情報処理装置１１０が実行しているアプリケーションソフトウェアから提供されたものであってもよい。データ入力部１１１に入力されたデータは、ブロック化部１１２に入力される。
【００４０】
ブロック化部１１２は、データ入力部１１１から入力されたデータをブロック化する。ここで言うブロック化とは、予め設定した量のデータを蓄積し、蓄積したデータを１つのデータブロックとして管理することを意味する。ブロック化部１１２により形成された各データブロックは、パケット生成部１１３に入力される。パケット生成部１１３は、各データブロックを複数のデータ部に分け、それぞれにヘッダを付加して複数のデータパケットを生成する。ヘッダには、例えば、対応するデータ部のデータを出力したアプリケーションソフトウェアの識別情報やデータ長などの情報が含まれる。
【００４１】
パケット生成部１１３により生成された各ブロックに対応する複数のデータパケットは、消失訂正符号化部１１４に入力される。消失訂正符号化部１１４は、パケット生成部１１３から入力された各ブロックに対応する複数のデータパケットを符号化して複数のパリティパケットを生成する。符号化の方式としては、例えば、ＲＰＳ符号などの消失訂正符号を用いる方式が適用される。消失訂正符号はＦＥＣ符号の一種である。ＦＥＣ符号を用いる方式では、送信側で予めデータに冗長性を付加しておき、伝送路でパケットの一部が消失しても受信側で追加の情報を得ずに元のデータを復元できるようにする。
【００４２】
消失訂正符号化部１１４によりブロック毎に生成された複数のパリティパケットは、通信部１１５に入力される。なお、各パリティパケットには、Cyclic Redundancy Check（ＣＲＣ）などの誤り検出符号が付加されていてもよい。通信部１１５は、消失訂正符号化部１１４により生成された複数のパリティパケットを受信側の情報処理装置１３０へと送信する。
【００４３】
また、通信部１１５は、受信側の情報処理装置１３０から、少なくとも消失訂正復号の処理を実行する際に要した処理時間の情報を取得する。また、通信部１１５は、受信側の情報処理装置１３０で復元された複数のデータパケットに含まれるデータのデータ量を示す情報を取得する。これらの情報は、例えば、１回の消失訂正処理が終わった時点で受信側の情報処理装置１３０から送信される送達確認に含めて提供される。通信部１１５により取得された処理時間の情報及びデータ量の情報は、制御部１１６に入力される。
【００４４】
なお、１回の消失訂正処理で全てのデータパケットが復元されなかった場合、受信側の情報処理装置１３０は、送信側の情報処理装置１１０にパリティパケットの再送を要求する。この場合、通信部１１５は、受信側の情報処理装置１３０から再送要求を受信する。この再送要求には、処理時間の情報及びデータ量の情報が含まれる。この場合も、通信部１１５により取得された処理時間の情報及びデータ量の情報は、制御部１１６に入力される。
【００４５】
制御部１１６は、通信部１１５から入力された処理時間の情報及びデータ量の情報に基づいて、受信側の情報処理装置１３０において単位時間当たりに処理されたデータ量を示す処理速度を計算する。なお、制御部１１６は、計算した処理速度の情報を保持する。但し、制御部１１６は、今回送信したブロック（現在のブロック）についての処理速度の情報、及び前回送信したブロック（１つ前のブロック）についての処理速度の情報だけを保持するようにしてもよい。
【００４６】
制御部１１６は、１つ前のブロックについての処理速度よりも現在のブロックについての処理速度の方が遅い場合、受信側の情報処理装置１３０の処理負荷が増大したと判断する。この場合、制御部１１６は、例えば、１つのブロックに含めるデータのデータ量を低減させる。なお、制御部１１６は、受信側の情報処理装置１３０の処理負荷が増大したと判断した場合に、各データパケットを復元可能なパリティパケットの組み合わせ数を低減させてもよい。
【００４７】
一方、１つ前のブロックについての処理速度よりも現在のブロックについての処理速度の方が速い場合、制御部１１６は、受信側の情報処理装置１３０の処理負荷が低下したと判断する。この場合、制御部１１６は、例えば、１つのブロックに含めるデータのデータ量を増加させる。なお、制御部１１６は、受信側の情報処理装置１３０の処理負荷が低下したと判断した場合に、各データパケットを復元可能なパリティパケットの組み合わせ数を増加させてもよい。
【００４８】
また、制御部１１６は、通信速度、パケットロス率、及びRound Trip Time（ＲＴＴ）などを計算する。通信速度は、単位時間当たりに送信できたデータ量から算出される。パケットロス率は、送信したデータパケットのうち受信側で復元できたデータパケットの割合である。但し、パケットロス率は、再送制御が開始される前に復元されたデータパケットの数に基づいて計算される。
【００４９】
なお、ＲＴＴは、送信が開始されてから送達確認を受信するまでにかかった時間から処理時間を差し引いた時間である。ＴＣＰの場合、トランスポート層の処理が済むとＡＣＫが返されるため、データの送信からＡＣＫの受信までの時間がＲＴＴとなる。しかし、第２の実施の形態に係る方式の場合、アプリケーション層の処理が済んだ後、アプリケーション層の処理に要した時間の情報を送達確認に含めて返送するため、アプリケーション層における処理時間を差し引いた時間がＲＴＴとなる。
【００５０】
制御部１１６は、１つ前のブロックと現在のブロックとについて処理速度、通信速度、パケットロス率、ＲＴＴが変化した場合に１つのブロックに含めるデータの数や各データパケットを復元可能なパリティパケットの組み合わせ数を調整する。
【００５１】
制御部１１６は、１つ前のブロックについてのパケットロス率よりも現在のブロックについてのパケットロス率の方が大きい場合、１つのブロックに含めるデータの数の仮設定値αを１つ前のブロックに含めたデータの数にする。逆に、１つ前のブロックについてのパケットロス率よりも現在のブロックについてのパケットロス率の方が大きいか、同じ場合、制御部１１６は、１つのブロックに含めるデータの数の仮設定値αを現在のブロックに含めたデータの数にする。
【００５２】
そして、制御部１１６は、後述するマッピング表を参照し、処理速度、通信速度、パケットロス率、ＲＴＴの変化を総合的に考慮して、上記の仮設定値αを基準に１つのブロックに含めるデータの数を調整する。なお、制御部１１６は、各データパケットを復元可能なパリティパケットの組み合わせ数を調整してもよい。
【００５３】
例えば、１つ前のブロックと現在のブロックとについて処理速度、パケットロス率、ＲＴＴが同じで、通信速度が増加した場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも大きくする。なお、この場合において、制御部１１６は、各データパケットを復元可能なパリティパケットの組み合わせ数を大きくしてもよい。
【００５４】
逆に、１つ前のブロックと現在のブロックとについて処理速度、パケットロス率、ＲＴＴが同じで、通信速度が低下した場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも小さくする。なお、この場合において、制御部１１６は、各データパケットを復元可能なパリティパケットの組み合わせ数を小さくしてもよい。
【００５５】
また、１つ前のブロックと現在のブロックとについて処理速度、通信速度、ＲＴＴが同じで、パケットロス率が低下した場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも大きくする。なお、この場合において、制御部１１６は、各データパケットを復元可能なパリティパケットの組み合わせ数を小さくしてもよい。
【００５６】
ＲＴＴが大きい場合、１つのブロックに含めるデータの数を増加させて送達確認の頻度を低減させることでスループットを向上させることができる。そこで、１つ前のブロックと現在のブロックとについて処理速度、通信速度、パケットロス率が同じで、ＲＴＴが増加した場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも大きくする。逆に、１つ前のブロックと現在のブロックとについて処理速度、通信速度、パケットロス率が同じで、ＲＴＴが低下した場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも小さくする。
【００５７】
１つのブロックに含めるデータの数を増加させることで、送達確認を待たずに一度に多くのデータを送信することができ、送達確認の頻度を低減できる。また、データパケットを復元可能なパリティパケットの組み合わせ数を増加させることで、消失訂正の能力が向上し、再送制御の頻度を低減できる。
【００５８】
また、１つのブロックに含めるデータの数を減少させることで、復号処理の負荷を低減することができる。また、各データパケットを復元可能なパリティパケットの組み合わせ数を減少させることで復号処理の負荷を低減することができる。さらに、各データパケットを復元可能なパリティパケットの組み合わせ数を減少させることで、１つのデータパケットを復元するために送信されるパリティパケットの数を減らすことができる。
【００５９】
上記のように処理速度、通信速度、パケットロス率、及びＲＴＴを考慮して１つのブロックに含めるデータの数や１つのデータパケットを復元するために用いるパリティパケットの数を制御することで安定して高いスループットを維持することが可能になる。
【００６０】
また、制御部１１６は、受信側の情報処理装置１３０で一部のデータパケットが復元できなかった場合に、パリティパケットの再送制御を実行する。このとき、制御部１１６は、復元できなかったデータパケットの復元に用いるパリティパケットを再送させる。例えば、パリティパケットＡ及びＢを用いてデータパケット＃１が復元される場合、パリティパケットＢが伝送路で失われるとデータパケット＃１が復元不能になる。この場合、制御部１１６は、少なくともパリティパケットＢを再送させる。
【００６１】
以上、送信側の情報処理装置１１０の機能について説明した。
（マッピング表について）
ここで、図５を参照しながら、マッピング表について説明する。図５は、マッピング表の例を示した図である。マッピング表には、処理速度、通信速度、パケットロス率、ＲＴＴと、変動量βとの間の関係が記述されている。変動量βは、１つのブロックに含めるデータの量について仮設定値αから増減させるデータの量を示す。例えば、仮設定値αから１増加させる場合、変動量βは＋１となる。逆に、仮設定値αから１減少させる場合、変動量βは−１となる。なお、１つ前のブロックと現在のブロックとについて変化がない項目の欄には「−」が表示されている。
【００６２】
例えば、１つ前のブロックと現在のブロックとについて通信速度、パケットロス率、ＲＴＴが同じで処理速度が増加した場合、変動量βは「＋１」となる。この場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも１大きくする。逆に、１つ前のブロックと現在のブロックとについて通信速度、パケットロス率、ＲＴＴが同じで処理速度が減少した場合、変動量βは「−１」となる。この場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも１小さくする。
【００６３】
また、１つ前のブロックと現在のブロックとについてパケットロス率、ＲＴＴが同じで処理速度及び通信速度が増加した場合、変動量βは「＋２」となる。この場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αよりも２大きくする。このように、処理速度、通信速度、パケットロス率、ＲＴＴのうち２つの要素が良い方向に変化した場合については、１つの要素が良い方向（通信状況が改善する方向）に変化した場合に比べて変動量βが大きく設定される。
【００６４】
また、１つ前のブロックと現在のブロックとについてパケットロス率、ＲＴＴが同じで処理速度が増加し、通信速度が減少した場合、変動量βは「０」となる。この場合、制御部１１６は、１つのブロックに含めるデータの数を上記の仮設定値αのままとする。このように、処理速度、通信速度、パケットロス率、ＲＴＴのうち１つの要素が良い方向に変化し、他の１つの要素が悪い方向（通信状況が劣化する方向）に変化した場合については、両者の効果が相殺し合うように変動量βが設定される（図５の例では０）。
【００６５】
上記のように、処理速度、通信速度、パケットロス率、ＲＴＴのそれぞれが変化した方向を考慮し、１つのブロックに含めるデータの数を総合的に決定できるように、マッピング表には４つの要素の組み合わせ毎に変動量βが設定されている。なお、図５に示したマッピング表は一例である。例えば、１つの要素が良い方向に変化した場合に、１つのブロックに含めるデータの数が２以上大きくなるように変動量βを設定してもよい。
【００６６】
以上、マッピング表について説明した。
（情報処理装置１３０の機能について）
次に、図６を参照しながら、受信側の情報処理装置１３０の機能について説明する。図６は、第２の実施の形態に係る受信側の情報処理装置の機能の例を示したブロック図である。なお、受信側の情報処理装置１３０が有する機能は、送信側の情報処理装置１１０と同じハードウェアを用いて実現できる。
【００６７】
図６に示すように、情報処理装置１３０は、通信部１３１と、消失訂正復号部１３２と、処理時間計測部１３３と、再送制御部１３４と、データ出力部１３５と、記憶部１３６とを有する。
【００６８】
なお、通信部１３１、消失訂正復号部１３２、処理時間計測部１３３、再送制御部１３４、及びデータ出力部１３５が有する機能の一部又は全部は、ＣＰＵ９０１が実行するプログラムのモジュールとして実現できる。また、通信部１３１、消失訂正復号部１３２、処理時間計測部１３３、再送制御部１３４、及びデータ出力部１３５が有する機能の一部又は全部をソフトウェアではなく電子回路として実現することも可能である。また、記憶部１３６は、ＲＡＭ９０２やＨＤＤ９０３に確保された記憶領域である。
【００６９】
通信部１３１は、送信側の情報処理装置１１０から送信された１つのブロックに対応する複数のパリティパケットを受信する。通信部１３１により受信された複数のパリティパケットは、消失訂正復号部１３２に入力される。消失訂正復号部１３２は、各パリティパケットに対する誤り検出を実行する。また、消失訂正復号部１３２は、当該ブロックに対応する複数のパリティパケットのうち正しく受信されたパリティパケットを利用し、消失訂正復号の処理を実行して元のデータパケットを復元する。
【００７０】
また、消失訂正復号部１３２は、あるブロックについての消失訂正復号の処理を開始する際、処理時間の計測を開始するように処理時間計測部１３３に指示する。消失訂正復号部１３２は、復元したデータパケットをデータ出力部１３５に入力し、データ出力部１３５が当該ブロックのデータパケットのデータを記憶部１３６に記録し終わった時点で処理時間の計測を終了するように処理時間計測部１３３に指示する。
【００７１】
消失訂正復号部１３２は、復元不能なデータパケットが存在する場合、再送制御部１３４に対し、復元不能なデータパケットを復元するために用いるパリティパケットの再送を要求するように依頼する。例えば、データパケット＃１を復元するためにパリティパケットＡ及びＢが用いられる場合、伝送路でパリティパケットＢが失われると、データパケット＃１が復元不能になる。この場合、消失訂正復号部１３２は、少なくともパリティパケットＢの再送を要求するように再送制御部１３４に依頼する。この依頼を受けた再送制御部１３４は、送信側の情報処理装置１１０に対して復元不能なデータパケットの復元に用いるパリティパケットの再送を要求する。
【００７２】
再送されたパリティパケットは、通信部１３１により受信され、消失訂正復号部１３２に入力される。消失訂正復号部１３２は、再送されたパリティパケット、及び再送前に受信していたパリティパケットを利用して復元不能となっていたデータパケットを復元する。上記のような再送制御は、あるブロックの全てのデータパケットが復元されるまで繰り返し実行される。
【００７３】
なお、あるブロックのデータパケットを復元する際に再送制御が行われる場合、１回目の再送要求には、処理時間計測部１３３により計測された処理時間の情報及び復元できたデータのデータ量を示す情報が含まれる。
【００７４】
消失訂正復号部１３２は、データパケットが復元される度に、復元されたデータパケットをデータ出力部１３５に入力する。データ出力部１３５は、復元されたデータパケットのデータを記憶部１３６に記録する。
【００７５】
例えば、１つのブロックのデータは、データパケットより大きくブロックより細かい単位（セグメント）でＲＡＭ９０２などのメモリ上に格納される。データ出力部１３５は、あるセグメント内のデータが全て揃った際に、そのセグメントをファイルに書き出す。データが揃っていないセグメントは、データ出力部１３５によりファイルに書き出されずにメモリ上に残る。この場合に再送制御が行われる。
【００７６】
消失訂正復号部１３２は、１つのブロックに対応する全てのデータパケットを復元すると、通信部１３１に対して送達確認を送信するように依頼する。この依頼を受けた通信部１３１は、送信側の情報処理装置１１０に送達確認を送信する。再送要求が送信されなかった場合、送達確認には、処理時間計測部１３３により計測された処理時間の情報及び復号されたデータのデータ量を示す情報が含まれる。
【００７７】
以上、受信側の情報処理装置１３０の機能について説明した。
（ＲＰＳ＋ＵＤＰによるデータ送信方法について）
次に、消失訂正符号の一例としてＲＰＳ符号を取り上げ、ＲＰＳ符号化したアプリケーションデータをＵＤＰにより送信するデータ送信方法について説明する。
【００７８】
まず、図７を参照しながら、ＲＰＳ符号及びＵＤＰを利用したアプリケーションデータの送信方法について説明する。図７は、ＲＰＳ符号及びＵＤＰを利用したアプリケーションデータの送信方法を説明した図である。図７の例は、送信側のアプリケーションソフトウェアＡTからアプリケーションソフトウェアＡRへとデータＤAを送信する処理を示している。
【００７９】
アプリケーションソフトウェアＡTから出力されたデータＤAは、ミドルウェアＭTにより複数のブロックＢＬ1、…、ＢＬNに分散して割り当てられる。なお、ミドルウェアＭTは、送信側の情報処理装置１１０上で動作しているソフトウェアである。ミドルウェアＭTは、ブロックＢＬ1に割り当てたデータをパケット化及びＲＰＳ符号化してＲＰＳ符号ＲＰＳ1を生成する。同様に、ミドルウェアＭTは、ブロックＢＬ2、…、ＢＬNにそれぞれ対応するＲＰＳ符号ＲＰＳ2、…、ＲＰＳNを生成する。なお、ＲＰＳ符号ＲＰＳ1、…、ＲＰＳNは、パリティパケットの一例である。
【００８０】
ＲＰＳ符号ＲＰＳ1、…、ＲＰＳNは、ＵＤＰに従って受信側の情報処理装置１３０上で動作しているミドルウェアＭRへと送信される。ミドルウェアＭRは、ＲＰＳ符号ＲＰＳ1をＲＰＳ復号してブロックＢＬ1に割り当てられたデータを復元する。同様に、ミドルウェアＭRは、ブロックＢＬ2、…、ＢＬNにそれぞれ割り当てられたデータを復元する。そして、ミドルウェアＭRは、ブロックＢＬ1、…、ＢＬNに割り当てられたデータを組み合わせてデータＤAを復元し、アプリケーションソフトウェアＡRに入力する。
【００８１】
以上、ＲＰＳ符号及びＵＤＰを利用したアプリケーションデータの送信方法について説明した。上記のように、ＵＤＰに従ってデータを送信することで、送達確認の頻度を抑制することができる分だけスループットを向上させることができる。また、データがＲＰＳ符号化されるため、伝送路で一部のＲＰＳ符号が消失してもデータを復元することができる。そのため、データ転送の確実性が向上する。また、消失訂正能力の高いＲＰＳ符号を適用することで、再送要求の頻度が低減され、スループットがさらに向上する。
【００８２】
ここで、図８を参照しながら、ＲＰＳ符号化及びＲＰＳ復号の処理について具体例を挙げて説明する。図８は、ＲＰＳ符号化及びＲＰＳ復号の処理について説明した図である。図８の例は、データパケット＃１〜＃４をＲＰＳ符号化して送信し、ＲＰＳ復号によりデータパケット＃１〜＃４を復元する処理を示している。
【００８３】
図８に示すように、ＲＰＳ符号化方式では、送信する複数のデータパケットを組み合わせ、全てのデータパケットが複数のパリティパケットに変換される。各パリティパケットを生成するために用いるデータパケットの組み合わせは、パリティパケットの消失に対して全てのデータパケットが復元できる可能性が高くなるような組み合わせに設定される。例えば、シミュレーションなどを用いてパリティパケットの組み合わせが決定される。
【００８４】
また、所定数のデータパケットに対してＲＰＳ符号化により生成されるパリティパケットの数は自由に変更することが可能である。そのため、パケットロス率が高い伝送路を用いる場合にはパリティパケットの数を増加させ、パケットロス率が低い伝送路を用いる場合にはパリティパケットの数を減少させるなど、状況に応じた柔軟な対応が可能になる。
【００８５】
図８の例では、データパケット＃１、＃２を用いてパリティパケットＡが、データパケット＃２、＃３を用いてパリティパケットＢが生成されている。また、データパケット＃１、＃３を用いてパリティパケットＣが、データパケット＃１、＃２、＃３、＃４を用いてパリティパケットＤが生成されている。また、データパケット＃３、＃４を用いてパリティパケットＥが、データパケット＃１、＃２、＃３を用いてパリティパケットＦが、データパケット＃２、＃３、＃４を用いてパリティパケットＧが生成されている。このように、各パリティパケットは、複数のデータパケットを用いて生成される。
【００８６】
図８に示すように、パリティパケットＡ〜Ｇは、ＵＤＰに従って送信される。伝送路で一部のパリティパケットＢ、Ｅ、Ｆが失われた場合、データパケット＃１はパリティパケットＡ、Ｄを用いて復元され、データパケット＃２はパリティパケットＡ、Ｄ、Ｇを用いて復元される。また、データパケット＃３はパリティパケットＣ、Ｄ、Ｇを用いて復元され、データパケット＃４はパリティパケットＤ、Ｇを用いて復元される。図８の例ではパリティパケットＢ、Ｅ、Ｆが伝送路で失われているが、データパケット＃１〜＃４が全て復元されている。このように、各データパケットの復元に用いるパリティパケットの組み合わせが適当であれば、伝送路で一部のパリティパケットが消失しても、各データパケットを正しく復元することができる。
【００８７】
ＲＰＳ符号は消失訂正能力の高い符号であるが、伝送路で多くのパリティパケットが消失した場合には、一部のデータパケットが復元不能となることがある。例えば、図９に示すように、パリティパケットＢ、Ｄ、Ｅ、Ｆが消失した場合、データパケット＃４が復元不能になる。この場合、データパケット＃４の復元に用いるパリティパケットの再送制御が行われる。図９は、ＲＰＳ符号及びＵＤＰを利用したデータ送信方法における再送制御の方法を説明した図である。
【００８８】
データパケット＃４は、例えば、パリティパケットＤ、Ｇがあれば復元することが可能である。つまり、パリティパケットＤが再送されればデータパケット＃４を復元することができる。そのため、図９の例ではパリティパケットＤの再送が要求される。
【００８９】
但し、データパケット＃４はパリティパケットＥ、Ｇの組み合わせでも復元可能であるため、パリティパケットＥの再送が要求されてもよい。このように、再送を要求するパリティパケットの選択が可能な場合もある。
【００９０】
再送を要求するパリティパケットの選択が可能な場合、再送するパリティパケットの数がより少なくなるように、再送を要求するパリティパケットの組み合わせを選択することが好ましい。例えば、２つのデータパケットを復号可能にするパリティパケットＸと、４つのデータパケットを復号可能にするパリティパケットＹとがある場合、パリティパケットＸの再送を要求する方が好ましい。このような方法でパリティパケットを選択することで、効率的に全てのデータパケットを復元することが可能になる。
【００９１】
以上説明したように、ＲＰＳ符号は、所定数のデータパケットを送信するために用いるパリティパケットの数を自由に変更することができる。そのため、パケットロス率が低い伝送路ではパリティパケットの数を少なくし、パケットロス率が高い伝送路ではパリティパケットの数を多くするなどの調整を行うことができる。
【００９２】
また、各ブロックに対応するパリティパケットの数は変更せず、受信側の処理負荷や通信環境などに応じて各ブロックに割り当てるデータの数を調整することも可能である。このような調整を行うことで、例えば、受信側のアプリケーション層で利用されるバッファがオーバーフローするなどの事態を回避することが可能になる。以下、このような方法について説明する。
【００９３】
（送信制御方法について）
図１０は、第２の実施の形態に係る送信制御方法を説明した第１の図である。
図１０の例では、ブロックＢＬ1、ＢＬ2、ＢＬ3に割り当てられたデータが順番に送信される。まず、ブロックＢＬ1に割り当てられたデータがＲＰＳ符号化され、複数のパリティパケットで形成されるＲＰＳ符号ＲＰＳ1が生成される。ＲＰＳ符号ＲＰＳ1はＵＤＰに従って送信される。
【００９４】
受信側では、受信されたＲＰＳ符号ＲＰＳ1が、ブロックＢＬ1に対応するデータに復元される。このとき、ＲＰＳ復号の開始から復号されたデータをファイルへ書き出すまでに要した処理時間が計測され、送信側へと通知される。例えば、処理時間の情報は、送達確認に含めて送信側へと送信される。
【００９５】
ブロックＢＬ1に割り当てられたデータの復元時に要した処理時間が長い場合、ブロックＢＬ2に割り当てられるデータの量（ブロックサイズ）を少なくする。ブロックＢＬ2に割り当てられたデータは、ＲＰＳ符号ＲＰＳ2に変換されて受信側へと送信される。受信側では、ＲＰＳ符号ＲＰＳ2からブロックＢＬ2に割り当てられたデータが復元される。このとき、ＲＰＳ復号の開始から復号されたデータをファイルへ書き出すまでに要した処理時間が計測され、送信側へと通知される。
【００９６】
ブロックＢＬ2に割り当てられたデータの復元時に要した処理時間が依然として長い場合、ブロックＢＬ3に割り当てられるデータの量を少なくする。ブロックＢＬ3に割り当てられたデータは、ＲＰＳ符号ＲＰＳ3に変換されて受信側へと送信される。受信側では、ＲＰＳ符号ＲＰＳ3からブロックＢＬ3に割り当てられたデータが復元される。なお、処理時間が短い場合には、図１０の例とは逆に、各ブロックに割り当てるデータの量を増加させる。
【００９７】
上記のように、受信側の処理時間が長い場合に１つのブロックに割り当てるデータの量を減少させることで復元すべきデータの量が減って処理負担が軽減される。さらに、１つのブロック当たりに復元されるデータの量が減るため、受信側のアプリケーション層で利用するバッファがオーバーフローする事態を回避できる。
【００９８】
なお、一部のデータパケットが復号不能となった場合、図１１に示すように再送制御が行われる。図１１は、第２の実施の形態に係る送信制御方法を説明した第２の図である。
例えば、ブロックＢＬ1に割り当てられたデータから生成されるＲＰＳ符号ＲＰＳ1の一部が伝送路で失われ、受信側で一部のデータパケットが復元不能となった場合、復元不能となったデータパケットの復元に用いるパリティパケットの再送が要求される。このとき、パケットロス率の計算に用いられる情報が、再送要求に含めて受信側から送信側へと通知される。この要求に応じてパリティパケットが再送され、このパリティパケットを利用して、復元不能となっていたデータパケットが復元される。
【００９９】
なお、再送要求に含めて送信される情報としては、例えば、再送要求を行う前に復元できたデータパケットの数を示す情報がある。この情報を用いると、ブロックＢＬ1に対応するデータパケットのうち、１回目の送信の際に復元不能となったデータパケットの割合を計算することができる。つまり、パケットロス率を計算することが可能になる。
【０１００】
上記のパケットロス率は、次に送信されるブロックＢＬ2に割り当てられるデータの量を決める際に利用される。例えば、パケットロス率が高い場合、ブロックＢＬ2に割り当てるデータの量を減少させる。
【０１０１】
なお、ブロックに割り当てるデータの量を減少させる場合、減少量又は減少率は受信側の処理速度を考慮して決められる。そのため、処理時間の情報及び復元できたデータの量を示す情報も再送要求に含めて送信される。減少量又は減少率が大き過ぎると、受信側の処理負荷が低くなり過ぎて演算リソースの無駄が生じる上、一度に転送されるデータ量が減るためにスループットの低下を招いてしまう。従って、受信側のアプリケーション層で利用するバッファがオーバーフローしない範囲で、受信側の演算リソースが十分に生かせるようにブロックに割り当てるデータの量が決定される。
【０１０２】
上記のように、処理速度に加えてパケットロス率を考慮することで、受信側の処理負荷を考慮しつつ、再送制御が発生する頻度を低減することが可能になる。その結果、更なるスループットの向上が期待できる。また、処理速度及びパケットロス率に応じて動的に設定を変更するため、時々刻々と変化する処理負荷の状況及び伝送路の状況に応じた好適な設定でデータを転送することが可能になり、安定して高いスループットを維持することができるようになる。
【０１０３】
以下、一変形例として、処理速度などに応じて符号化率を調整する送信制御方法について説明する。
図１２は、第２の実施の形態に係る送信制御方法を説明した第３の図である。
【０１０４】
図１２の例では、ブロックＢＬ1、ＢＬ2、ＢＬ3に割り当てられたデータが順番に送信される。まず、ブロックＢＬ1に割り当てられたデータがＲＰＳ符号化され、複数のパリティパケットで形成されるＲＰＳ符号ＲＰＳ1が生成される。ＲＰＳ符号ＲＰＳ1はＵＤＰに従って送信される。また、受信されたＲＰＳ符号ＲＰＳ1は、ブロックＢＬ1に対応するデータに復元される。このとき、ＲＰＳ復号の開始から復号されたデータをファイルへ書き出すまでに要した処理時間が計測され、送信側へと通知される。例えば、処理時間の情報は、送達確認に含めて送信側へと送信される。
【０１０５】
ブロックＢＬ1に割り当てられたデータの復元に要した処理時間が長い場合、ブロックＢＬ2に割り当てられたデータを符号化する際に、各データパケットの復元に用いるパリティパケットの組み合わせ数を少なくする。ブロックＢＬ2に割り当てられたデータは、ＲＰＳ符号ＲＰＳ2に変換されて受信側へと送信される。受信側では、ＲＰＳ符号ＲＰＳ2からブロックＢＬ2に割り当てられたデータが復元される。このとき、ＲＰＳ復号時に要した処理時間が計測され、送信側へと通知される。
【０１０６】
ブロックＢＬ2に割り当てられたデータの復元時に要した処理時間が依然として長い場合、ブロックＢＬ3に割り当てられたデータを符号化する際に、各データパケットの復元に用いるパリティパケットの組み合わせ数を少なくする。ブロックＢＬ3に割り当てられたデータは、ＲＰＳ符号ＲＰＳ3に変換されて受信側へと送信される。受信側では、ＲＰＳ符号ＲＰＳ3からブロックＢＬ3に割り当てられたデータが復元される。なお、処理時間が短い場合には、図１２の例とは逆に、消失訂正能力を向上させるため、各データパケットの復元に用いるパリティパケットの組み合わせ数を増加させる。
【０１０７】
上記のように、受信側の処理負荷に係る処理時間が長い場合に各データパケットの復元に用いるパリティパケットの組み合わせ数を減少させることで、復号処理が間に合わずに処理遅延が発生してしまう事態を回避することができる。また、処理時間が短い場合に各データパケットの復元に用いるパリティパケットの組み合わせ数を増加させることで、より高い消失訂正能力を発揮することが可能になる。この場合、再送制御の頻度が低減するため、スループットの向上に寄与する。
【０１０８】
なお、一部のデータパケットが復号不能となった場合、図１３に示すように再送制御が行われる。図１３は、第２の実施の形態に係る送信制御方法を説明した第４の図である。
例えば、ブロックＢＬ1に割り当てられたデータから生成されるＲＰＳ符号ＲＰＳ1の一部が伝送路で失われ、受信側で一部のデータパケットが復元不能となった場合、復元不能となったデータパケットの復元に用いるパリティパケットの再送が要求される。この要求に応じてパリティパケットが再送され、このパリティパケットを利用して、復元不能となっていたデータパケットが復元される。
【０１０９】
なお、パケットロス率の計算に用いられる情報は再送要求に含めて受信側から送信側へと通知される。例えば、再送要求を行う前に復元できたデータパケットの数を示す情報が受信側から送信側へと通知される。この情報を用いると、ブロックＢＬ1に対応するデータパケットのうち、復元不能となったデータパケットの割合を計算することができる。つまり、パケットロス率を計算することが可能になる。このようにして計算したパケットロス率は、次に送信されるブロックＢＬ2に割り当てられたデータの送信時に利用される。
【０１１０】
例えば、パケットロス率が高い場合、ＲＰＳ符号ＲＰＳ2を形成するパリティパケットの数を増加させる。つまり、各データパケットの復元に利用可能なパリティパケットの数が増加する。各データパケットの復元に利用可能なパリティパケットの数が増加することで、伝送路におけるパリティパケットの消失に対する耐性が向上し、パケットロス率を低減することが可能になる。
【０１１１】
なお、各データパケットの復元に利用可能なパリティパケットの数を増加させる場合、増加数又は増加率は受信側の処理速度を考慮して決められる。そのため、処理時間の情報及び復元できたデータの量を示す情報も再送要求に含めて送信される。例えば、処理速度が速い状況では再送をほぼ発生させない程度に十分に増加数又は増加率を大きくし、処理速度が遅い状況では多少の再送を許容して増加数又は増加率を小さめに設定する。
【０１１２】
上記のように、処理速度に加えてパケットロス率を考慮することで、受信側の処理負荷を考慮しつつ、再送制御が発生する頻度を低減することが可能になる。その結果、さらにスループットが向上する。また、処理速度及びパケットロス率に応じて動的に設定を変更するため、時々刻々と変化する処理負荷の状況及び伝送路の状況に応じた好適な設定でデータを転送することが可能になり、安定して高いスループットを維持することが可能になる。
【０１１３】
（チェックポイントデータ及びＡＣＫの送信について）
ここで、図１４を参照しながら、ＲＰＳ符号の送信処理及び送達確認の返信処理について説明を補足する。図１４は、第２の実施の形態に係るチェックポイントデータ及びＡＣＫの送信処理について説明した図である。
【０１１４】
これまでも説明してきたように、各ブロックに割り当てられたデータは、ＲＰＳ符号に符号化されて受信側へと送信される。
図１４の例では、あるブロックに割り当てられたデータ＃１がＲＰＳ符号ＲＰＳ1に変換され、受信側へと送信されている。このとき、ＲＰＳ符号ＲＰＳ1の後に、チェックポイントデータＣＰ1が送信される。このチェックポイントデータＣＰ1は、ＲＰＳ符号ＲＰＳ1で送信したデータのデータ量を示す情報を含んでいる。そのため、受信側でＲＰＳ符号ＲＰＳ1から復元したデータのデータ量と、チェックポイントデータＣＰ1に含まれる情報が示すデータ量とを比較することで、ブロックに割り当てられたデータが全て復元されたか否かを受信側で確認することができる。
【０１１５】
ブロックに割り当てられたデータが全て復元された場合、受信側から送信側へと送達確認ＡＣＫ1が送信される。この送達確認ＡＣＫ1には、少なくとも復号処理にかかった時間及び復元したデータを記憶部に書き込む際の書き込み処理にかかった時間を含む処理時間の情報が含まれる。また、送達確認ＡＣＫ1には、復元したデータのデータ量を示す情報が含まれる。その他にも、送達確認ＡＣＫ1には、パリティパケットの受信処理に要した時間や、最初のパリティパケットを受信した時刻から送達確認ＡＣＫ1を送信する時刻までの時間などを示す情報が含まれていてもよい。
【０１１６】
上記のような情報を含む送達確認ＡＣＫ1が得られると、単位データ量当たりの処理時間を示す処理速度や、データ＃１の送信開始から送達確認ＡＣＫ1の受信までに要した時間から処理時間を差し引いて計算されるＲＴＴなどを計算することが可能になる。また、最初の再送制御が行われる前に復元できたデータパケットの数を示す情報が送達確認ＡＣＫ1に含まれていれば、その情報を利用してパケットロス率が計算可能になる。
【０１１７】
上記のようにして計算される処理速度やパケットロス率などに応じて、次に送信されるデータ＃２の送信設定が決定される。つまり、次のブロックに割り当てるデータ＃２のデータ量や、データ＃２の送信に利用するＲＰＳ符号ＲＰＳ2を形成するパリティパケットの数などが処理速度やパケットロス率などに応じて変更される。
【０１１８】
データ＃１と同様に、データ＃２もＲＰＳ符号ＲＰＳ2に変換されて送信側から受信側へと送信される。この場合も、ＲＰＳ符号ＲＰＳ2と共にチェックポイントデータＣＰ2が送信側から受信側へと送信される。そして、受信側でデータ＃２が復元された場合、受信側から送信側へと送達確認ＡＣＫ2が送信される。
【０１１９】
送達確認ＡＣＫ2にも、送達確認ＡＣＫ1と同様に処理時間などの情報が含まれる。送達確認ＡＣＫ2が得られると、処理速度やパケットロス率などが計算され、次に送信されるデータ＃３の送信設定が決定される。このように、各ブロックに割り当てられたデータが送信される度に、伝送路の状況や受信側の負荷状況に応じて送信設定が変更される。
【０１２０】
上記のようなＲＰＳ符号の送信処理及び送達確認の返信処理を適用することで、時々刻々と変化する伝送路の状況や受信側の負荷状況に適した送信設定でデータが転送され、安定して高いスループットを実現することが可能になる。
【０１２１】
次に、図１５を参照しながら、通常のＴＣＰに係るＡＣＫの送信方法及び第２の実施の形態に係る送達確認の送信方法について説明を補足する。図１５は、ＴＣＰに係るＡＣＫの送信方法と第２の実施の形態に係るＡＣＫの送信方法とを比較した図である。
【０１２２】
図１５（Ａ）に示すように、ＴＣＰの場合、送信側から受信側へと送信されたパケットが受信側のトランスポート層で受信されると、トランスポート層の処理により受信完了を示すＡＣＫが受信側から送信側へと返信される。また、トランスポート層で受信されたパケットのデータは、アプリケーション層の処理によりファイルに書き出される。
【０１２３】
一方、図１５（Ｂ）に示すように、第２の実施の形態に係る方法の場合、送信側から受信側へと送信されたパケット（パリティパケット）は、アプリケーション層の処理によりデータパケットへと復元され、復元されたデータパケットのデータがファイルに書き出される。なお、データパケットの復元処理には、ＲＰＳ復号の他、順序が入れ替わって到達したパケットの整列なども含まれる。また、処理時間や復元できたデータのデータ量などを示す情報が送達確認に付加された後、これらの情報が付加された送達確認がトランスポート層の機能により受信側から送信側へと送信される。
【０１２４】
なお、再送制御が行われる場合、第２の実施の形態に係る方法においては、ＲＰＳ復号の開始から復元したデータをファイルへと書き出すまでの処理時間及び復元できたデータのデータ量を示す情報を受信側で再送要求に付加して送信側へと送信する。
【０１２５】
（処理時間の計測方法について）
ここで、図１６を参照しながら、処理時間の計測方法について説明を補足する。図１６は、第２の実施の形態に係る処理時間について説明した図である。
【０１２６】
図１６に示すように、送信側から受信側へとパケット（パリティパケット）が送信され、受信側のトランスポート層で処理される。パリティパケットは、トランスポート層の上位に位置するソケット層で処理され、アプリケーション層へと転送される。あるブロックについてアプリケーション層に転送されたパリティパケットに対する復号処理が開始されるタイミングで受信側において処理時間の計測が開始される。
【０１２７】
アプリケーション層では、伝送路で入れ替わったパケットの整列やＲＰＳ復号の処理がさらに実行され、復元されたデータがファイルに書き出される。
例えば、１つのブロックのデータは、データパケットより大きくブロックより細かい単位（セグメント）でＲＡＭ９０２などのメモリ（アプリケーション層のバッファ）上に格納される。あるセグメントＳｇ1内のデータが全て揃った際に、そのセグメントＳｇ1がファイルに書き込まれる。ファイルへの書き込みが終了したタイミングで処理時間の計測が終了する。なお、データが揃っていないセグメントはファイルに書き出されずにメモリ上に残され、再送制御が行われる。処理時間の情報は、送信側で処理速度の計算及び送信設定の決定に利用される。
【０１２８】
ファイルへの書き込みが遅延すると、復元したデータを一時的に蓄積するアプリケーション層のメモリの空き容量が不足することがある。アプリケーション層のメモリの空き容量が不足すると、トランスポート層から転送されるパリティパケットをアプリケーション層で受け取れなくなるなど、受信処理が滞ってしまう原因となる。しかし、上記のようにデータの書き出しに要する時間を処理時間に含むことで、ファイルへの書き込みが遅延している状況を考慮した送信設定の動的な変更が行われるようになり、書き込み遅延に起因して受信処理が滞ってしまう事態を回避することができる。
【０１２９】
例えば、記憶装置にデータを書き込む場合、時々刻々と記憶装置の負荷状況が変化している。そのため、受信側の演算リソースに余裕があっても、データの書き込み処理が滞ってしまうことがある。データの書き込み処理が滞ると後続の処理が滞ってしまうため、送信側から受信側へと続々と送信されるパケットの処理が追い付かなくなる可能性がある。しかし、図１６に示したような処理時間に基づいて送信設定を動的に変更すれば、受信側においてアプリケーション層のバッファがオーバーフローするなどの状況を回避することができ、安定して高いスループットを実現することが可能になる。
【０１３０】
以上、第２の実施の形態に係る送信制御方法について説明した。
（送信処理の流れについて）
次に、図１７及び図１８を参照しながら、第２の実施の形態に係る送信処理の流れについて説明する。なお、図１７及び図１８に示した処理は、送信側の情報処理装置１１０により実行される。
【０１３１】
図１７は、第２の実施の形態に係る送信処理の流れについて説明した第１の図である。
（Ｓ１０１）制御部１１６は、送信するデータのデータ量を示すチェックポイントサイズを設定する。制御部１１６により設定されたチェックポイントサイズの情報は、ブロック化部１１２に入力される。
【０１３２】
（Ｓ１０２）ブロック化部１１２は、チェックポイントサイズのデータをブロックに割り当てる。パケット生成部１１３は、ブロックに割り当てられたデータを分割してヘッダを付加することで、複数のデータパケットを生成する。消失訂正符号化部１１４は、これらデータパケットをＲＰＳ符号化して複数のパリティパケットを生成する。通信部１１５は、パリティパケット及びチェックポイントデータを送信する。
【０１３３】
（Ｓ１０３）制御部１１６は、受信側の情報処理装置１３０から再送要求を受け取ったか否かを確認し、再送要求の有無によりパケットロスが発生したか否かを判定する。パケットロスが発生した場合（再送要求を受け取った場合）、処理はＳ１０４に進む。パケットロスが発生していない場合（再送要求を受け取っていない場合）、処理はＳ１０５に進む。
【０１３４】
なお、あるブロックについて再送制御なしに全てのデータが復元できた場合、制御部１１６は、処理時間の情報及び復元したデータのデータ量を示す情報を含む送達確認を受け取る。一方、あるブロックについて再送制御が行われた場合、制御部１１６は、１回目の再送要求から処理時間の情報及び復元したデータのデータ量を示す情報を取得する。さらに、全てのデータが復元できた際に送信される送達確認を受け取る。
【０１３５】
（Ｓ１０４）制御部１１６は、受信側の情報処理装置１３０から受け取った再送要求に応じて、復元不能なデータパケットの復元に用いるパリティパケットを再送させる。Ｓ１０４の処理が終了すると、処理はＳ１０３に進む。
【０１３６】
（Ｓ１０５）制御部１１６は、処理時間の情報や復元したデータのデータ量を示す情報に基づき、単位時間当たりに処理したデータ量を示す処理速度を計算する。そして、制御部１１６は、処理速度の情報を保持する。
【０１３７】
（Ｓ１０６）制御部１１６は、パリティパケットの送信時刻やパリティパケットの受信時刻などの情報に基づいて通信速度を計算する。
（Ｓ１０７）制御部１１６は、再送制御を行う前に復元できなかったデータパケットのパケット数、及び送信したデータパケットのパケット数に基づいてパケットロス率を計算する。また、制御部１１６は、計算したパケットロス率を保持する。
【０１３８】
（Ｓ１０８）制御部１１６は、パリティパケットを送信してから送達確認を受信するまでに要した時間から処理時間を差し引いてＲＴＴを計算する。Ｓ１０８の処理を終了すると、処理は図１８に示すＳ１０９に進む。
【０１３９】
図１８は、第２の実施の形態に係る送信処理の流れについて説明した第２の図である。
（Ｓ１０９）制御部１１６は、１つ前のブロックのデータ送信時に計算したパケットロス率が、今回のブロックのデータ送信時に計算したパケットロス率よりも低いか否かを判定する。１つ前のブロックのデータ送信時に計算したパケットロス率の方が低い場合、処理はＳ１１０に進む。一方、１つ前のブロックのデータ送信時に計算したパケットロス率の方が低くない場合、処理はＳ１１１に進む。
【０１４０】
（Ｓ１１０）制御部１１６は、１つ前のブロックのチェックポイントサイズを仮設定値αに設定する。Ｓ１１０の処理を終了すると、処理はＳ１１２に進む。
（Ｓ１１１）制御部１１６は、今回のブロックのチェックポイントサイズを仮設定値αに設定する。Ｓ１１１の処理を終了すると、処理はＳ１１２に進む。
【０１４１】
（Ｓ１１２）制御部１１６は、１つ前のブロックのデータ送信時に計算した処理速度が、今回のブロックのデータ送信時に計算した処理速度よりも速いか否かを判定する。１つ前のブロックのデータ送信時に計算した処理速度の方が速い場合、処理はＳ１１３に進む。一方、１つ前のブロックのデータ送信時に計算した処理速度の方が速くない場合、処理はＳ１１４に進む。
【０１４２】
（Ｓ１１３）制御部１１６は、受信側の情報処理装置１３０における処理負荷が高いと判断し、上述したマッピング表に基づいて変動量βを設定する。なお、通信速度・パケットロス率・ＲＴＴが１つ前のブロックと今回のブロックとで大きく変化していない場合、変動量βの値は負（マイナス）になることが期待される。Ｓ１１３の処理を終了すると、処理はＳ１１５に進む。
【０１４３】
（Ｓ１１４）制御部１１６は、受信側の情報処理装置１３０における処理負荷が低いと判断し、上述したマッピング表に基づいて変動量βを設定する。なお、通信速度・パケットロス率・ＲＴＴが１つ前のブロックと今回のブロックとで大きく変化していない場合、変動量βの値は正（プラス）になることが期待される。Ｓ１１４の処理を終了すると、処理はＳ１１５に進む。
【０１４４】
（Ｓ１１５）制御部１１６は、データの送信を終了するか否かを判定する。例えば、制御部１１６は、ユーザ又はアプリケーションによる終了指示の有無や、送信すべきデータの有無に基づいてデータの送信を終了するか否かを判定する。データの送信を終了しない場合、処理はＳ１１６に進む。一方、データの送信を終了する場合、Ｓ１０１〜Ｓ１１６に係る一連の処理を終了する。
【０１４５】
（Ｓ１１６）制御部１１６は、次回のブロックのデータ送信時に用いるチェックポイントサイズを（α＋β）に設定する。Ｓ１１６の処理を終了すると、処理は図１７のＳ１０２に進む。
【０１４６】
以上、第２の実施の形態に係る送信処理の流れについて説明した。
（受信処理の流れについて）
次に、図１９を参照しながら、第２の実施の形態に係る受信処理の流れについて説明する。なお、図１９に示した処理は、受信側の情報処理装置１３０により実行される。図１９は、第２の実施の形態に係る受信処理の流れについて説明した図である。
【０１４７】
（Ｓ２０１）通信部１３１は、送信側の情報処理装置１１０から送信されたパリティパケットを受信する。
（Ｓ２０２）消失訂正復号部１３２は、ＲＰＳ復号を実施してパリティパケットからデータパケットを復元する。このとき、伝送路でパケットの順序が入れ替わっている場合にはパケットの順序が整列される。また、処理時間計測部１３３は、１つのブロックについての復元処理が開始されたタイミングで処理時間の計測を開始する。
【０１４８】
（Ｓ２０３）データ出力部１３５は、復元されたデータを記憶部１３６に書き込む。データ出力部１３５は、復元されたデータを順次バッファに蓄積していき、連続する所定量（セグメント単位）のデータが揃った時点で、揃ったデータを記憶部１３６に書き込む。但し、パケットロスなどに起因してセグメント単位でデータが揃っていない場合には、再送制御などによりデータが揃うまで、そのセグメントのデータはバッファに保持される。
【０１４９】
（Ｓ２０４）処理時間計測部１３３は、復元されたデータが記憶部１３６に書き込まれたタイミングで処理時間の計測を終了し、処理時間を計算する。
（Ｓ２０５）消失訂正復号部１３２は、復元したデータのデータ量を計算する。
【０１５０】
（Ｓ２０６）消失訂正復号部１３２は、チェックポイントデータが示すデータ量のデータが全て復元されたか否かを判定する。データが全て復元された場合、処理はＳ２０７に進む。復元不能なデータが存在する場合、再送制御部１３４は、送信側の情報処理装置１１０に対して再送要求を送信する。再送要求を送信した場合、処理はＳ２０１に進む。
【０１５１】
１回目の再送要求を送信する場合、その再送要求は、処理時間及び復元したデータのデータ量を示す情報を含めて送信される。２回目以降の再送要求を送信する場合には、Ｓ２０４及びＳ２０５の処理をスキップし、処理時間及び復元したデータのデータ量を示す情報を含まない再送要求を送信側の情報処理装置１１０に送信する。
【０１５２】
（Ｓ２０７）通信部１３１は、送達確認を送信側の情報処理装置１１０に送信する。再送制御が行われなかった場合、処理時間及び復元したデータのデータ量を示す情報を含む送達確認が送信される。一方、再送制御が行われた場合、処理時間及び復元したデータのデータ量を示す情報を含まない送達確認が送信される。
【０１５３】
（Ｓ２０８）データの受信を終了する場合、Ｓ２０１〜Ｓ２０８に係る一連の受信処理は終了する。一方、データの受信を終了しない場合、処理はＳ２０１に進む。例えば、ユーザ又はアプリケーションによる終了指示や送信側の情報処理装置１１０から受けた終了指示に応じて受信処理が終了する。
【０１５４】
以上、第２の実施の形態に係る受信処理の流れについて説明した。
以上説明したように、第２の実施の形態に係る技術を適用すれば、受信側の処理負荷が高い場合でも、処理遅延により受信側のアプリケーション層のバッファがオーバーフローするといった困難な事態を回避することが可能になる。また、パケットロス率が高い状況では消失訂正能力を高めるなどの制御が動的に実施されるため、再送要求の頻度が低減される。このように、時々刻々と変化する伝送路の状況や受信側の負荷状況に応じて送信設定を動的に変更することで、安定して高いスループットを維持することが可能になる。
【０１５５】
ところで、これまでは一例としてＲＰＳ符号化方式を前提に説明を進めてきたが、ＲＰＳ符号に代えてＬＤＰＣ符号やターボ符号などの誤り訂正符号を適用する方法も考えられる。例えば、ＬＤＰＣ符号を適用する場合、受信側の処理速度が遅い場合に符号長を短く変更し、受信側の処理速度が速い場合に符号長を長く変更する仕組みに変形すればよい。さらに、パケットロス率が高い場合に符号長を長く、パケットロス率が低い場合に符号長を短くする仕組みに変形すればよい。
【０１５６】
また、上記説明においては、符号化の対象となるブロックに含めるデータの量を受信側の処理速度などに応じて調整する方法を示したが、ＴＣＰのウィンドウサイズのように、ＡＣＫを待たずに送信できるパケット量を調整する方法も考えられる。この方法を適用した場合でも、ファイルの書き込み遅延に起因してアプリケーション層のメモリがオーバーフローするような事態を回避することが可能である。
【符号の説明】
【０１５７】
１０、１１０、１３０  情報処理装置
１１、１１５、１３１  通信部
１２、１１６  制御部
２１  データ
２２  処理時間情報
１１１  データ入力部
１１２  ブロック化部
１１３  パケット生成部
１１４  消失訂正符号化部
１３２  消失訂正復号部
１３３  処理時間計測部
１３４  再送制御部
１３５  データ出力部
１３６  記憶部
【図１】
2014127969.tif 000003
【図２】
2014127969.tif 000004
【図３】
2014127969.tif 000005
【図４】
2014127969.tif 000006
【図５】
2014127969.tif 000007
【図６】
2014127969.tif 000008
【図７】
2014127969.tif 000009
【図８】
2014127969.tif 000010
【図９】
2014127969.tif 000011
【図１０】
2014127969.tif 000012
【図１１】
2014127969.tif 000013
【図１２】
2014127969.tif 000014
【図１３】
2014127969.tif 000015
【図１４】
2014127969.tif 000016
【図１５】
2014127969.tif 000017
【図１６】
2014127969.tif 000018
【図１７】
2014127969.tif 000019
【図１８】
2014127969.tif 000020
【図１９】
2014127969.tif 000021