(57)【要約】      （修正有）【課題】通信コネクションを介してデータを送信する通信装置が、確立されている通信コネクションの数に基づいて適切なデータ単位毎にデータを送信するための処理を行うことで、通信コネクション間の待ち時間を低減することを目的とする。【解決手段】通信コネクションを介してデータを送信する通信装置が、確立されている通信コネクションの数が所定の数より多い場合は、確立されている通信コネクション数が所定の数以下の場合より、データを送信するための処理を行う際のデータ単位を小さくする。【選択図】図５
2019016842.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
一または複数の他の通信装置と少なくとも一つの通信コネクションを確立する確立手段と、
前記確立手段により確立された通信コネクションを介して送信すべきデータの少なくとも一部である入力されたデータに、前記通信コネクションを介して送信するための処理を行う処理手段と、
確立されている通信コネクションの数が所定の数以下の場合は、前記送信すべきデータを第一のデータ単位毎に前記処理手段に入力し、確立されている通信コネクションの数が前記所定の数より多い場合は、前記送信すべきデータを前記第一のデータ単位より小さい第二のデータ単位毎に前記処理手段に入力する入力手段と、
前記処理手段により処理されたデータを、前記通信コネクションを介して送信する第一の送信手段と、
を有することを特徴とする通信装置。
【請求項２】
前記処理手段は、前記処理として、前記入力手段により入力されたデータを分割することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記第一の送信手段により前記通信コネクションを介して送信されるデータの単位としてＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）を決定する決定手段を有し、
前記処理手段は、前記処理として、入力されたデータを前記決定手段により決定されたＭＳＳに基づいて分割することを特徴とする請求項２に記載の通信装置。
【請求項４】
前記入力手段により前記処理手段に入力されるデータに対する第一のＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）ヘッダと第一のＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ヘッダを生成し、付加する付加手段を有することを特徴とする請求項１から３の何れか一項に記載の通信装置。
【請求項５】
前記第一のＴＣＰヘッダと前記第一のＩＰヘッダに基づいて、前記第一の送信手段によって送信されるデータに対する第二のＴＣＰヘッダと第二のＩＰヘッダを生成する生成手段を有することを特徴とする請求項４に記載の通信装置。
【請求項６】
前記処理手段は、前記生成手段を含むことを特徴とする請求項５に記載の通信装置。
【請求項７】
前記処理手段が、前記処理として、前記第二のＴＣＰヘッダと前記第二のＩＰヘッダを、前記第一の送信手段によって送信されるデータに付加することを特徴とする請求項５または６に記載の通信装置。
【請求項８】
前記確立手段により確立される一または複数の他の通信装置との通信コネクションの少なくとも一つは、ＴＣＰコネクションであることを特徴とする請求項１から７の何れか一項に記載の通信装置。
【請求項９】
前記通信コネクションを介さずＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）によるデータの送信を行う第二の送信手段を有し、
前記入力手段は、確立されている通信コネクションの数が所定の数以下であっても、前記第二の送信手段によるデータの送信が行われている場合は、前記送信すべきデータを前記第二のデータ単位毎に前記処理手段に入力することを特徴とする請求項１から８の何れか一項に記載の通信装置。
【請求項１０】
前記送信すべきデータの少なくとも一部が格納される格納手段を有することを特徴とする請求項１から９の何れか一項に記載の通信装置。
【請求項１１】
前記第一のデータ単位は、前記格納手段に格納されたデータのデータサイズと、前記通信コネクションの送信ウィンドウサイズと、前記通信コネクションの輻輳ウィンドウサイズとの少なくとも何れか一つに基づいて決定されることを特徴とする請求項１０に記載の通信装置。
【請求項１２】
前記第一のデータ単位は、前記格納手段に格納されたデータのデータサイズと、前記送信ウィンドウサイズと、前記輻輳ウィンドウサイズの内の最小値であることを特徴とする請求項１１に記載の通信装置。
【請求項１３】
前記第一のデータ単位は、前記処理手段に入力可能なデータサイズの最大値であることを特徴とする請求項１から１０の何れか一項に記載の通信装置。
【請求項１４】
前記所定の数は１であることを特徴とする請求項１から１３の何れか一項に記載の通信装置。
【請求項１５】
前記第二のデータ単位は、ＭＳＳであることを特徴とする請求項１４に記載の通信装置。
【請求項１６】
前記第二のデータ単位は、確立されている通信コネクションの数が増えることに応じて小さくなることを特徴とする請求項１から１５の何れか一項に記載の通信装置。
【請求項１７】
前記格納手段として送信バッファを有し、
前記入力手段は、確立されている通信コネクションの数が前記所定の数以下の場合、あるいは、確立されている通信コネクションの数が前記所定の数より多く、かつ前記送信バッファに格納されたデータのデータサイズが前記送信バッファのバッファサイズの所定の割合より大きい場合は、前記送信すべきデータを前記第一のデータ単位毎に入力し、
確立されている通信コネクションの数が前記所定の数より多く、かつ前記送信バッファに格納されたデータのデータサイズが前記送信バッファのバッファサイズの前記所定の割合より小さい場合は、前記送信すべきデータを前記第二のデータ単位毎に入力することを特徴とする請求項１０から１２の何れか一項に記載の通信装置。
【請求項１８】
前記入力手段は、確立されている通信コネクションの数が前記所定の数以下の場合、あるいは、確立されている通信コネクションの数が前記所定の数より多く、かつ確立されている通信コネクションの内、前記送信すべきデータが介する前記通信コネクションとは異なる通信コネクションに、通信の遅延を低減する設定がされていない場合は、前記送信すべきデータを前記第一のデータ単位毎に入力し、
確立されている通信コネクションの数が所定の数より多く、かつ確立されている通信コネクションの内、前記送信すべきデータが介する前記通信コネクションとは異なる通信コネクションの少なくとも一つに通信の遅延を低減する設定がされている場合は、前記送信すべきデータを前記第二のデータ単位毎に入力することを特徴とする請求項１から１５の何れか一項に記載の通信装置。
【請求項１９】
通信コネクションに通信の遅延を低減する設定がされている場合とは、Ｎａｇｌｅアルゴリズムが無効に設定されている場合であることを特徴とする請求項１８に記載の通信装置。
【請求項２０】
通信コネクションに通信の遅延を低減する設定がされている場合とは、ＴＣＰ遅延ＡＣＫが無効に設定されている場合であることを特徴とする請求項１８または１９に記載の通信装置。
【請求項２１】
入力されたデータに通信コネクションを介して送信するための処理を行う処理部を有する通信装置の制御方法であって、
一または複数の他の通信装置と少なくとも一つの通信コネクションを確立する確立工程と、
確立されている通信コネクションの数が所定の数以下の場合は、前記通信コネクションを介して送信すべきデータを第一のデータ単位毎に前記処理部に入力し、確立されている通信コネクションの数が前記所定の数より多い場合は、前記送信すべきデータを前記第一のデータ単位より小さい第二のデータ単位毎に前記処理部に入力する入力工程と、
前記処理部において前記入力工程で入力されたデータを処理する処理工程と、
前記処理工程において処理されたデータを、前記通信コネクションを介して送信する送信工程と、
を有することを特徴とする制御方法。
【請求項２２】
コンピュータを、請求項１から２０の何れか一項に記載の通信装置の各手段として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置におけるデータの送信に関する。
【背景技術】
【０００２】
近年、ＴＣＰ／ＩＰのプロトコル処理の一部をハードウェアが受け持つようになってきている。具体的には、データの分割や、分割後のデータに付加するＴＣＰヘッダおよびＩＰヘッダの生成を実施できるハードウェアがある。このようなハードウェアが有する機能をＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）という。ＴＳＯ機能を利用することで、ＴＣＰ／ＩＰのプロトコル処理の一部をハードウェアが受け持つことになり、ＣＰＵの負荷が減るという利点がある。
【０００３】
特許文献１には、通信装置がＴＣＰ／ＩＰ通信を行い、通信コネクションとしてＴＣＰコネクションを確立することが記載されている。また、複数のＴＣＰコネクションを確立することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１０／０７３６７１号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ＴＳＯ機能を利用する通信装置が複数の通信コネクションを確立している場合、ＴＳＯ機能を有するハードウェアに入力されるデータのデータサイズによっては、他の通信コネクションを介したデータの送信が遅延する場合がある。ＴＳＯ機能を利用する通信装置が、ある通信コネクションを介してデータを送信する場合、まずＴＳＯ機能を有するハードウェアにあるデータ単位のデータが入力される。そして、当該ハードウェアは入力されたデータの分割やヘッダの付加などの処理を行い、通信コネクションを介してデータを送信する。この場合、ＴＳＯ機能を有するハードウェアは入力されたデータに対する当該処理を終えるまで、他の通信コネクションを介してデータを送信することができない。そのため、当該ハードウェアに入力されたデータのデータサイズが大きい場合、当該処理に必要な時間が増し、他の通信コネクションを介したデータの送信が遅延してしまう虞がある。またＴＳＯ機能を利用する通信装置に限らず、同様の処理を行う通信装置において、同様の課題が発生する。
【０００６】
上記を鑑み、本発明は、通信コネクションを介してデータを送信する通信装置が、確立されている通信コネクションの数に基づいて適切なデータ単位毎にデータを送信するための処理を行うことで、通信コネクション間の待ち時間を低減することを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、本発明に係る通信装置は、一または複数の他の通信装置と少なくとも一つの通信コネクションを確立する確立手段と、前記確立手段により確立された通信コネクションを介して送信すべきデータの少なくとも一部である入力されたデータに前記通信コネクションを介して送信するための処理を行う処理手段と、確立されている通信コネクションの数が所定の数以下の場合は、前記送信すべきデータを第一のデータ単位毎に前記処理手段に入力し、確立されている通信コネクションの数が前記所定の数より多い場合は、前記送信すべきデータを前記第一のデータ単位より小さい第二のデータ単位毎に前記処理手段に入力する入力手段と、前記処理手段により処理されたデータを、前記通信コネクションを介して送信する第一の送信手段と、を有する。
【発明の効果】
【０００８】
本発明によれば、通信コネクションを介してデータを送信する通信装置が、確立されている通信コネクションの数に基づいて適切なデータ単位毎にデータを送信するための処理を行うことで、通信コネクション間の待ち時間を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】通信システム１０のネットワーク構成を示す図である。
【図２】通信装置１０１のハードウェア構成を示す図である。
【図３】通信装置１０１のソフトウェア構成を示す図である。
【図４】通信装置１０１が通信コネクションを介してデータを送信する際に実行するフローチャートである。
【図５】通信装置１０１が、通信コネクションが複数存在することに基づいてデータ単位を決定する際に実行するフローチャートである。
【図６】通信装置１０１が、通信コネクションの数に基づいてデータ単位を決定する際に実行するフローチャートである。
【図７】通信装置１０１が、他の通信コネクションに通信の遅延を低減する設定がされているかということに基づいてデータ単位を決定する際に実行するフローチャートである。
【図８】通信装置１０１が、送信バッファに格納されたデータのデータサイズが、送信バッファのバッファサイズの所定の割合のサイズより大きいかに基づいてデータ単位を決定する際に実行するフローチャートである。
【発明を実施するための形態】
【００１０】
以下、添付の図面を参照して実施形態を詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
【００１１】
＜実施形態１＞
図１に、本実施形態に係る通信システム１０のネットワーク構成を示す。通信システム１０は通信装置１０１と通信装置１０２とを含み、通信装置１０１と通信装置１０２とはネットワーク１１０を介してＴＣＰ／ＩＰ通信を行う。ＴＣＰとはＴｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌの、ＩＰとはＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌの夫々略である。なお、本実施形態においてネットワーク１１０はＥｔｈｅｒｎｅｔ規格に準拠したＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）により構成される。ただしこれに限らず、ネットワーク１１０は例えば、インターネットを含んでいてもよいし、ＩＥＥＥ８０２．１１シリーズ規格やＢｌｕｅｔｏｏｔｈ（登録商標）規格に準拠した無線ＬＡＮを含んでもよい。なお、ＩＥＥＥとは、Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ，Ｉｎｃの略である。また、本実施形態では通信装置１０１と通信装置１０２の２台の装置間での通信に注目して説明を行うが、３台以上の装置がネットワーク１１０を介して通信を行ってもよい。また、本実施形態では、通信装置１０１と通信装置１０２とがＴＣＰ／ＩＰプロトコルに基づいて通信を行う場合を例に説明するが、通信装置１０１と通信装置１０２は他のプロトコルに基づく通信を行ってもよい。ＴＣＰに代わるプロトコルとしては、ＵＤＰ、ＲＳＶＰなどが挙げられる。なお、ＵＤＰはＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌの、ＲＳＶＰはＲｅｓｏｕｒｃｅ  Ｒｅｓｅｒｖａｔｉｏｎ  Ｐｒｏｔｏｃｏｌの夫々略である。
【００１２】
図２に、通信装置１０１のハードウェア構成を示す。通信装置１０１は、記憶部２０１、制御部２０２、機能部２０３、入力部２０４、出力部２０５、および、通信インタフェース２０７を備える。
【００１３】
記憶部２０１はＲＯＭやＲＡＭ等のメモリにより構成され、後述する各種動作を行うためのプログラム（コンピュータプログラム）や、ＩＰ通信のための通信パラメータ等の各種情報を記憶する。また、記憶部２０１は、後述のアプリケーション３０１から入力されるデータを格納する送信バッファを含む。なお、記憶部２０１として、ＲＯＭ、ＲＡＭ等のメモリの他に、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＤＶＤなどの記憶媒体を用いてもよい。また、記憶部２０１が複数のメモリ等を備えていてもよい。
【００１４】
制御部２０２はＣＰＵやＭＰＵ等のプロセッサにより構成され、記憶部２０１に記憶されたプログラムを実行することにより通信装置１０１全体を制御する。なお、制御部２０２は、記憶部２０１に記憶されたプログラムとＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）との協働により通信装置１０１全体を制御するようにしてもよい。また、制御部２０２がマルチコア等の複数のプロセッサを備え、複数のプロセッサにより通信装置１０１全体を制御するようにしてもよい。
【００１５】
また、制御部２０２は、機能部２０３を制御して、撮像やコンテンツの閲覧等の所定の処理を実行する。機能部２０３は、通信装置１０１が所定の処理を実行するためのハードウェアである。例えば、通信装置１０１がカメラである場合、機能部２０３は撮像部であり、撮像処理を行う。
【００１６】
入力部２０４は、ユーザからの各種操作の受付を行う。出力部２０５は、モニタ画面やスピーカーなどを介してユーザに対して各種出力を行う。ここで、出力部２０５による出力とは、画面上への表示や、スピーカーによる音声出力、振動出力等であってもよい。なお、タッチパネルを利用して入力部２０４と出力部２０５の出力先とを１つのモジュールで実現するようにしてもよい。
【００１７】
通信インタフェース２０７は、ネットワーク１１０と直接的に通信するハードウェアである。通信インタフェース２０７はＴＣＰ／ＩＰ通信の制御や、ＩＥＥＥ８０２．１１シリーズに準拠した無線通信の制御、有線ＬＡＮ等の有線通信の制御を行う。なお、ＴＣＰに代えて、もしくは、加えてＵＤＰによる通信を制御してもよい。通信装置１０１は通信インタフェース２０７を介して、画像データ、文書データ、映像データ、音声データ、ソフトウェアデータ、ＧＵＩデータ、メタデータ等のデータを通信装置１０２と送受信する。通信インタフェース２０７は、通信コネクションを介して通信装置１０２と各種データを送受信する。また、通信インタフェース２０７は、通信コネクションを介して通信装置１０２からデータの送信要求を受けることもできる。なお、通信インタフェース２０７は、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）機能を有している。また通信インタフェース２０７は、送信バッファからあるデータ単位毎に入力されたデータを所定のデータ単位で分割する分割部を含む。
【００１８】
ＴＳＯ機能を有する通信インタフェース２０７は、記憶部２０１に含まれる送信バッファから入力されたデータのデータサイズに応じて、ＴＳＯ処理を実施する。データサイズが後述のコネクション管理部３０６で管理されているＭＳＳより大きい場合に、以下のようなＴＳＯ処理を実施する。なおＭＳＳとは、Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅの略であり、通信装置１０２との通信コネクションにおいて、ＩＰ層で分割処理されないＴＣＰペイロード（データ）の最大サイズを示すものである。通信インタフェース２０７は、入力されたデータをＭＳＳ以下のデータ単位で分割する。そして、ＭＳＳ以下のデータ単位で分割されたデータに対するＴＣＰヘッダとＩＰヘッダを生成する。具体的には、入力されたデータに付加されているＴＣＰヘッダやＩＰヘッダをコピーし、分割後の各データに応じてＴＣＰヘッダ内のチェックサムの再計算やＩＰヘッダ内のパケット長の変更などの処理を行う。入力されたデータに付加されているＴＣＰヘッダ内の送信元ポート番号や宛先ポート番号など、分割後のデータに付加するＴＣＰヘッダでも変更されない情報は、当初のＴＣＰヘッダの情報を利用する。また、ＩＰヘッダについても、送信元ＩＰアドレスや宛先ＩＰアドレスなど、分割後のデータに付加するＩＰヘッダでも変更されない情報は、当初のＩＰヘッダの情報を利用する。そして、生成したＴＣＰヘッダやＩＰヘッダを分割したデータに付加し、送信パケットを生成する。そして、生成した送信パケットを、通信装置１０２に通信コネクションを介して送信する。なお、入力されたデータサイズが大きく、送信パケットが複数生成される場合は、生成した送信パケットを連続送信してもよい。
【００１９】
一方、入力されたデータのデータサイズがＭＳＳ以下の場合、通信インタフェース２０７は以下のようなＴＳＯ処理を実施する。通信インタフェース２０７は、入力されたデータに付加されているＴＣＰヘッダ内のチェックサムの再計算やＩＰヘッダ内のパケット長の変更などの処理を行う。他に、データの送信に必要なフィールドの処理を行う。そして、フィールドの処理を行ったＴＣＰヘッダとＩＰヘッダが付加された送信パケットを通信装置１０２に送信する。なお、入力されたＴＣＰヘッダやＩＰヘッダに当該処理を行う必要がない場合は、入力されたデータを付加されているＴＣＰヘッダとＩＰヘッダとともに通信装置１０２に送信してもよい。また、入力されたデータのデータサイズがＭＳＳ以下の場合であっても、入力されたデータのデータサイズがＭＳＳより大きい場合と同様のＴＳＯ処理を行ってもよい。
【００２０】
なお、本実施形態の通信インタフェース２０７は、ＴＳＯ処理として、入力されたデータの分割と、ＴＣＰヘッダやＩＰヘッダのコピーと、ＴＣＰヘッダやＩＰヘッダに対する処理と、分割されたデータに対するＴＣＰヘッダやＩＰヘッダの付加を行っている。通信インタフェース２０７はこれらの各処理の内、少なくとも一つを行えばよい。また、これらの各処理の一部あるいは全てをソフトウェアや、通信インタフェース２０７と異なるハードウェアが行ってもよい。
【００２１】
図３に、通信装置１０１のソフトウェアモジュール３００の内部構成を示す。
【００２２】
アプリケーション３０１は、ユーザアプリケーションを指す。通信インタフェース２０７を介して通信装置１０２からデータの送信要求を受けると、アプリケーション３０１は通信装置１０２に送信するデータをプロトコルスタック３０２に入力する。あるいは、通信装置１０１のアプリケーション３０１が自発的に通信装置１０２に送信するデータをプロトコルスタック３０２に入力してもよい。プロトコルスタック３０２は内部に、バッファ管理部３０３、セグメント処理部３０４、通信プロトコル処理部３０５、コネクション管理部３０６、ＴＣＰウィンドウ制御部３０７、および、輻輳制御部３０８を備える。
【００２３】
バッファ管理部３０３は、アプリケーション３０１から入力されたデータを記憶部２０１に含まれる送信バッファに格納する。この場合に、バッファ管理部３０３は通信コネクションごとに送信バッファを割り当てる。
【００２４】
コネクション管理部３０６は、通信装置１０１と通信装置１０２との通信コネクションを管理し、通信装置１０１の通信コネクションに対するコネクション情報を管理する。本実施形態において、通信装置１０１と通信装置１０２とはネットワーク１１０を介してＴＣＰ／ＩＰ通信を行うので、通信コネクションとしてＴＣＰコネクションが確立される。ＴＣＰでは通信コネクションの確立時に通信を行うデータ単位としてＭＳＳを決定する。コネクション管理部３０６が管理するコネクション情報には、ＭＳＳが含まれる。コネクション情報には他に、アプリケーション３０１が通信に利用するポート番号や、データの送信先である通信装置１０２のアプリケーションが通信に利用するポート番号などの情報も含まれてもよい。
【００２５】
ＴＣＰウィンドウ制御部３０７では通信装置１０２から送信された確認応答（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ、以下ＡＣＫ）に基づいて通信コネクションの送信ウィンドウサイズを決定し、管理する。
【００２６】
これについて具体的に説明する。通信装置１０２は、通信装置１０１から通信コネクションを介してデータを受信すると、通信装置１０１にデータを受信したことを示すＡＣＫを送信する。通信装置１０１は、通信装置１０２からＡＣＫを受信すると、次のデータを送信する。一方、通信装置１０１がデータを送信後、一定時間以内に通信装置１０２からＡＣＫを受信しなかった場合は再度送信する。
【００２７】
また、ＴＣＰではデータの送信を効率よく行うために、ウィンドウ制御を行う。ウィンドウ制御を行うことにより、複数のデータをＡＣＫの受信を待たずに送信することができる。なお、通信装置１０１から送信された複数のデータを受信した後、通信装置１０２はＡＣＫを通信装置１０１に送信する。通信装置１０２は複数のデータの夫々に対してＡＣＫを送信してもよいし、複数のデータに対してＡＣＫを一回送信してもよい。送信ウィンドウサイズとは、通信装置１０１がＡＣＫの受信を待たずに送信できる送信データのサイズのことで、通信装置１０２の受信バッファサイズに基づいて決定されるものである。送信ウィンドウサイズは、通信装置１０２から送信されるＡＣＫに基づいて決定される。具体的には、通信装置１０１がデータを送信後、通信装置１０２から送信されるＡＣＫには、通信装置１０２の受信ウィンドウサイズに関する情報が含まれる。受信ウィンドウサイズとは、通信装置１０２が一度に受信可能なデータの大きさのことである。通信装置１０１はＡＣＫに含まれる受信ウィンドウサイズに関する情報に基づいて、新たな送信ウィンドウサイズを決定する。
【００２８】
輻輳制御部３０８では通信コネクションにおける輻輳制御を管理し、通信コネクションの輻輳ウィンドウを管理する。輻輳ウィンドウサイズとは、通信装置１０１がＡＣＫの受信を待たずに送信できる送信データのサイズのことで、ネットワーク１１０の通信状態で増減するものである。ＴＣＰではネットワークの混雑を回避するために、輻輳制御を行う。輻輳制御では、データの送信側である通信装置１０１でデータの送信量を調整するため、輻輳ウィンドウを設定する。例えば、最初の輻輳ウィンドウの大きさを１ＭＳＳと設定する。通信装置１０１は設定した輻輳ウィンドウの大きさのデータを、通信装置１０２に送信する。通信装置１０２からＡＣＫが返ってくると、通信装置１０１は輻輳ウィンドウを１ＭＳＳより大きく設定し、新たに設定した輻輳ウィンドウの大きさのデータを通信装置１０２に送信する。このように、通信装置１０１はデータの送信後、通信装置１０２からＡＣＫが返ってくるとそれに応じて輻輳ウィンドウの大きさを大きくする。一方、通信装置１０２からＡＣＫが返ってこなかった場合、つまりネットワーク１１０において輻輳が発生した場合には、通信装置１０１は輻輳ウィンドウの大きさを、例えば初期の１ＭＳＳに戻すなど、小さくする。
【００２９】
セグメント処理部３０４では、送信バッファに格納されたデータのデータサイズや、コネクション管理部３０６で管理されているＭＳＳなどの情報に基づいて、送信バッファから通信インタフェース２０７に入力されるデータのデータ単位を決定する。他に、ＴＣＰウィンドウ制御部３０７で管理されている送信ウィンドウサイズや、輻輳制御部３０８で管理されている輻輳ウィンドウサイズに基づいて当該データ単位を決定してもよい。当該データ単位は、ＭＳＳや送信ウィンドウサイズ、輻輳ウィンドウサイズなどの夫々に基づいて決定してもよいし、これらの組み合わせに基づいて決定してもよい。具体的なデータ単位の決定の仕方については後述する。
【００３０】
通信プロトコル処理部３０５では、セグメント処理部３０４で決定したデータ単位毎に送信バッファ内のデータが入力される。そして入力されたデータに対するＴＣＰヘッダやＩＰヘッダを生成し、入力されたデータにＴＣＰヘッダやＩＰヘッダを付加する。生成されるＴＣＰヘッダやＩＰヘッダは、一部のフィールドが空白であってもよい。あるいは一部のフィールドに所定の値を入れてもよいし、ランダムに生成した値を入れてもよい。ここで、一部のフィールドとは、ＩＰヘッダのヘッダチェックサムやパケットヘッダ、パケット長、フラグ、フラグメントオフセット、ＴＣＰヘッダのチェックサムなどのことである。なお、生成されるＴＣＰヘッダやＩＰヘッダは、各フィールドにデータの送信にあたって必要な情報を全て入れたものでもよい。ＴＣＰヘッダやＩＰヘッダが付加されたデータは通信インタフェース制御部３０９に入力される。
【００３１】
通信インタフェース制御部３０９では、プロトコルスタック３０２と通信インタフェース２０７との間でデータや情報のやり取りを担う。
【００３２】
続いて、図４に、通信装置１０１が通信コネクションを介してデータを送信する際に、記憶部２０１に記憶されたプログラムを制御部２０２が読み出し、実行することで実現される処理の流れのフローチャートを示す。本フローチャートは、通信装置１０１において、アプリケーション３０１が立ち上げられたことに応じて開始される。あるいは通信装置１０１にデータの送信指示が出されたことに基づいて開始してもよい。あるいは、所定のボタンの押下などのユーザ操作に基づいて開始してもよい。
【００３３】
ステップＳ４０１では、通信装置１０１は通信装置１０２と通信コネクションを確立する。具体的には、ＴＣＰにおけるＴｈｒｅｅ−ｗａｙ  ｈａｎｄｓｈａｋｅによって通信コネクションを確立する。まず、通信装置１０１が通信装置１０２に、通信コネクションの確立を要求する。通信装置１０２は、通信装置１０１から通信コネクションの確立を要求されると、当該要求へ応答し、かつ通信装置１０１に対して通信コネクションの確立を要求する。当該応答と要求を受信した通信装置１０１は、当該要求への応答を通信装置１０２に送信する。このように通信コネクションの確立の要求や応答を送受信することで、通信装置１０１と通信装置１０２は通信コネクションを確立する。なお、通信装置１０１と通信装置１０２の夫々から送信される通信コネクションの確立の要求には、夫々のＭＳＳの情報が含まれている。通信コネクションで用いられるＭＳＳは、通信装置１０１のＭＳＳと通信装置１０２のＭＳＳとで小さい方の値が用いられ、コネクション管理部３０６によって管理される。通信装置１０１は、通信コネクションを確立するとステップＳ４０２に進む。
【００３４】
なお、本実施形態では最初の通信コネクションの確立の要求を通信装置１０１から送信したが、当該要求を通信装置１０２が送信してもよい。この場合、ステップＳ４０１において、通信装置１０１は当該要求に応答し、かつ、通信装置１０２に対して通信コネクションの確立を要求する。そして、当該応答と要求を受信した通信装置１０２は、当該要求への応答を通信装置１０１に送信する。なお、図４のフローチャートは、通信装置１０２から当該要求を受信したことに基づいて開始してもよい。
【００３５】
ステップＳ４０２では通信装置１０１は、通信装置１０２と確立した通信コネクションを維持するか否か判定する。当該判定は、アプリケーション３０１が停止したか否かに基づいて判定する。アプリケーション３０１が停止した場合は、通信コネクションを維持しないと判定し（ステップＳ４０２のＮｏ）、ステップＳ４０８に進む。一方、アプリケーション３０１が停止していない場合は、通信コネクションを維持すると判定し（ステップＳ４０２のＹｅｓ）、ステップＳ４０３に進む。
【００３６】
なお、ステップＳ４０２において通信コネクションを維持しないと判定する場合とは、他に、通信装置１０１と通信装置１０２の間で当該通信コネクションを介したデータの送受信が所定時間行われていない場合であってもよい。また、通信装置１０１に対して通信装置１０２との通信を終了する指示がなされた場合や、通信装置１０２から通信装置１０１に通信の終了が通知された場合などであってもよい。
【００３７】
ステップＳ４０３で通信装置１０１は、ステップＳ４０１で確立した通信装置１０２との通信コネクションを介してデータの送信要求を受けたか判定する。送信要求を受けていない場合は（ステップＳ４０３のＮｏ）、ステップＳ４０２に戻る。送信要求を受けている場合は（ステップＳ４０３のＹｅｓ）、ステップＳ４０４に進む。なお、ステップＳ４０３は、通信装置１０１がステップＳ４０１で確立した通信コネクションを介して、通信装置１０２にデータを送信するか判定してもよい。
【００３８】
ステップＳ４０４で、バッファ管理部３０３は、通信装置１０２へ送信するデータの少なくとも一部を、記憶部２０１に含まれ、所定のデータ容量を有する送信バッファの空き領域に格納する。当該送信バッファは、通信コネクション毎に割り当てられる。
【００３９】
ステップＳ４０５でセグメント処理部３０４は、ＴＳＯ機能を有するハードウェアに入力するデータのデータ単位を決定する。この場合に、送信バッファに格納されたデータを決定したデータ単位毎に当該ハードウェアに入力する。本実施形態において、ＴＳＯ機能を有するハードウェアとは、通信インタフェース２０７のことである。当該データ単位は、通信装置１０１が確立している通信コネクションの数に基づいて決定される。ステップＳ４０５におけるデータ単位の決定方法については、図５において詳細に説明する。
【００４０】
ステップＳ４０６で、通信プロトコル処理部３０５は、ステップＳ４０５で決定したデータ単位毎に送信バッファに記憶されているデータを入力され、ＴＣＰヘッダやＩＰヘッダを付加する。そして通信インタフェース制御部３０９が、ＴＣＰヘッダやＩＰヘッダが付加されたデータを、ＴＳＯ機能を有する通信インタフェース２０７に入力する。本ステップで付加されるＴＣＰヘッダやＩＰヘッダは一部のフィールドが空白であってもよい。あるいは一部のフィールドに所定の値を入れてもよいし、ランダムに生成した値を入れてもよい。ここで、一部のフィールドとは、ＩＰヘッダのヘッダチェックサムやパケットヘッダ、パケット長、フラグ、フラグメントオフセット、ＴＣＰヘッダのチェックサムなどのことである。なお、付加されるＴＣＰヘッダやＩＰヘッダは各フィールドに、データの送信にあたって必要な情報を全て入れたものでもよい。
【００４１】
ステップＳ４０７では通信インタフェース２０７は、入力されたデータに対して処理としてＴＳＯ処理を実施する。具体的には、入力されたデータをＭＳＳ以下のデータ単位で分割し、かつ、入力されたデータに付加されていたＴＣＰヘッダとＩＰヘッダをコピーする。そして、分割後の各データに、コピーしたＴＣＰヘッダとＩＰヘッダを付加し、送信パケットを生成する。なお、コピーしたＴＣＰヘッダとＩＰヘッダに対しては、分割後の各データに合わせて必要なフィールドの変更処理を行う。そして、生成した送信パケットを、通信装置１０２に通信コネクションを介して送信し、ステップＳ４０２にもどる。なお、本ステップにおいて通信インタフェース２０７は、入力されたデータの分割と、ＴＣＰヘッダやＩＰヘッダのコピーと、ＴＣＰヘッダやＩＰヘッダのフィールドの変更処理と、ＴＣＰヘッダとＩＰヘッダの付加の内、少なくとも何れか一つを行えばよい。これらの処理の少なくとも一つをソフトウェアや、通信インタフェース２０７と異なるハードウェアが行ってもよい。
【００４２】
入力されたデータのデータ単位がＭＳＳ以下だった場合、ＴＳＯ処理としてＴＣＰヘッダとＩＰヘッダの変更処理のみを行い、送信パケットを送信してもよい。また、入力されたデータのデータ単位がＭＳＳ以下であり、かつ、Ｓ４０６においてＴＣＰヘッダやＩＰヘッダは各フィールドに、データの送信にあたって必要な情報を全て入れる場合は、Ｓ４０７におけるＴＳＯ処理を省略してもよい。即ち、入力されたデータの分割と、ＴＣＰヘッダやＩＰヘッダのコピーと、ＴＣＰヘッダやＩＰヘッダのフィールドの変更処理と、ＴＣＰヘッダとＩＰヘッダの付加のいずれも行わず、送信パケットを送信してもよい。
【００４３】
ステップＳ４０７において、ステップＳ４０１で確立された通信コネクションを介して送信パケットが送信されると、他の通信コネクションを介した送信パケットの送信が可能になる。ここで、他の通信コネクションはステップＳ４０１より前に確立されているもので、通信装置１０２との間で確立されていてもよいし、他の通信装置の間で確立されていてもよい。具体的には、ステップＳ４０６で通信インタフェース２０７に入力されたデータに対するＴＳＯ処理と、送信パケットの送信が完了すると、他の通信コネクションを介して送信される送信データに基づくデータを通信インタフェース２０７に入力することができる。そして通信インタフェース２０７は、入力されたデータに対してＴＳＯ処理を行い、他の通信コネクションを介して送信パケットを送信する。これは、Ｓ４０１で確立された通信コネクションと、他の通信コネクションとが夫々異なる送信バッファを用いるためである。そのため、当該確立された通信コネクションが送信バッファに格納されている全てのデータの送信を完了する前に、他の通信コネクションはデータの送信を割り込ませることができる。
【００４４】
ステップＳ４０２で通信装置１０１は、当該通信コネクションを維持しないと判定されると（ステップＳ４０２のＮｏ）、ステップＳ４０８に進む。ステップＳ４０８ではステップＳ４０１で確立した通信コネクションを切断する。具体的には、通信装置１０１から通信装置１０２に通信コネクションの切断要求が送信される。当該切断要求を受信した通信装置１０２は、当該切断要求に対する応答と、通信装置１０１に対する通信コネクションの切断要求を通信装置１０１に送信する。当該応答と切断要求を受け取った通信装置１０１は、通信装置１０２から送信された切断要求に対する応答を通信装置１０２に送信する。これら切断要求と応答の送受信によって通信コネクションは切断される。なお、本実施形態では通信装置１０１が最初の切断要求を送信するが、通信装置１０２が最初の切断要求を送信してもよい。
【００４５】
以上、図４のフローチャートでは、通信コネクションを介してデータを送信する際に、通信装置１０１が実行する処理を示した。
【００４６】
図５のフローチャートで示される処理は、本実施形態において、図４のステップＳ４０５において行われる処理であり、通信装置１０１が、通信コネクションが複数存在することに基づいてデータ単位を決定する際に実行する処理である。図５の処理は、記憶部２０１に記憶されたプログラムを制御部２０２が読み出して実行することで実現される。
【００４７】
ステップＳ５０１では、通信装置１０１のセグメント処理部３０４は、図４のステップＳ４０４で送信バッファに格納したデータのデータサイズを取得する。続いてステップＳ５０２では、セグメント処理部３０４は通信装置１０２との通信コネクションにおける送信ウィンドウサイズを取得する。ステップＳ５０３では、セグメント処理部３０４は通信装置１０２との通信コネクションにおける輻輳ウィンドウサイズを取得する。
【００４８】
続いてステップＳ５０４で、セグメント処理部３０４は、ステップＳ５０１からステップＳ５０３で取得した送信バッファに格納したデータのデータサイズと、送信ウィンドウサイズと、輻輳ウィンドウサイズとの内、最小値を取得する。当該最小値は、通信装置１０１が通信コネクションを介して通信装置１０２に対して、一度に（通信装置１０２からのＡＣＫの受信を待たずに）送信可能なデータサイズに相当する。
【００４９】
ステップＳ５０５では、セグメント処理部３０４は、ステップＳ５０４で取得した最小値がＭＳＳより大きいか否かを判定する。当該最小値がＭＳＳより大きいと判定した場合は（ステップＳ５０５のＹｅｓ）、ステップＳ５０６に進む。一方、当該最小値がＭＳＳ以下と判定した場合は（ステップＳ５０５のＮｏ）、ステップＳ５１１に進む。
【００５０】
ステップＳ５０６では、セグメント処理部３０４は通信装置１０２との通信コネクションが複数存在しているかを判定する。判定に用いる通信コネクションは、通信装置１０１と通信装置１０２の間のＴＣＰコネクションである。しかし、これに限らず、ＵＤＰによる通信制御も含めてよい。ＵＤＰはコネクションレス型の通信プロトコルであるので、明確に通信コネクションを確立しない。しかし、通信装置１０１と通信装置１０２との間で、ＴＣＰコネクションが確立されており、かつＵＤＰによるデータの送受信が行われている場合、通信装置１０１はステップＳ５０６で通信コネクションが複数存在すると判定してよい。通信コネクションが複数存在すると判定した場合は（ステップＳ５０６のＹｅｓ）、ステップＳ５１１に進む。一方、通信コネクションが複数存在しないと判定した場合は（ステップＳ５０６のＮｏ）、ステップＳ５０７に進む。
【００５１】
なお、本ステップでは、セグメント処理部３０４は通信コネクションが複数存在するかという判定を行ったが、通信コネクションが所定の数より多く存在するかという判定を行ってもよい。この場合、所定の数はユーザの指定によって決まる。あるいは送信バッファ内のデータのデータサイズや、送信ウィンドウサイズ、輻輳ウィンドウサイズなどに基づいて決定されてもよい。また、通信装置１０１が確立している通信コネクションの数や、通信装置１０２から送信要求を受けているデータのデータサイズ、通信装置１０１と通信装置１０２との間のデータの伝送速度に基づいて決定されてもよい。
【００５２】
また、通信コネクションが所定の数より多く存在するかという判定を行う際、ＵＤＰによるデータの送受信が行われている場合は、通信コネクションの数が所定の数以下であっても、所定の数より多く存在していると判定してもよい。もしくは、ＵＤＰによるデータの送受信が行われている場合、通信コネクションが一つ確立されているとしてもよい。
【００５３】
ステップＳ５０７で、セグメント処理部３０４は、ＴＳＯ機能を有するハードウェアである通信インタフェース２０７に入力可能なデータサイズの最大値を取得する。なお、これに加えて通信装置１０１が所定の時間内に処理可能であるデータサイズの最大値や、ユーザによって指定された値を取得し、これらの値の最小値を取得してもよい。また、例えば通信装置１０１が所定の時間内に処理可能であるデータサイズの最大値が、ＴＳＯ機能を有するハードウェアに入力可能なデータサイズの最大値より小さいと予め分かっている場合は、処理可能であるデータサイズの最大値のみを取得してもよい。
【００５４】
ステップＳ５０８で、セグメント処理部３０４は、ステップＳ５０７で取得したＴＳＯ機能を有するハードウェアに入力可能なデータサイズの最大値が、ステップＳ５０４で取得した最小値より大きいか否かを判定する。ハードウェアに入力可能なデータサイズの最大値がステップＳ５０４で取得した最小値より大きいと判定した場合は（ステップＳ５０８のＹｅｓ）、ステップＳ５０９に進む。一方、ハードウェアに入力可能なデータサイズの最大値がステップＳ５０４で取得した最小値より小さいと判定した場合は（ステップＳ５０８のＮｏ）、ステップＳ５１０に進む。
【００５５】
ステップＳ５０９で、セグメント処理部３０４は、ハードウェアに入力するデータのデータ単位を、ステップＳ５０４で取得した最小値に決定する。ステップＳ５１０で、セグメント処理部３０４は、ハードウェアに入力するデータのデータ単位を、ＴＳＯ機能を有するハードウェアに入力可能なデータサイズの最大値に決定する。これにより、セグメント処理部３０４はハードウェアに一回で入力でき、かつＡＣＫの待たずに送信できる最大のデータサイズに、ハードウェアに入力するデータのデータ単位を決定できる。また、ステップＳ５１１で、セグメント処理部３０４は、ハードウェアに入力するデータのデータ単位を、ＭＳＳに決定する。
【００５６】
なお、本フローチャートでは、ステップＳ５０６で通信コネクションが複数存在すると判定した場合に、ステップＳ５１１に進み、ハードウェアに入力するデータのデータ単位をＭＳＳに決定した。しかしこれに限らず、通信コネクションが複数存在する場合（ステップＳ５１１）の当該データ単位は、通信コネクションが一つしか存在しない場合の当該データ単位（ステップＳ５０９、ステップＳ５１０）より小さくなるように決定されればよい。
【００５７】
以上、図５のフローチャートでは、通信コネクションが複数存在することに基づいてデータ単位を決定する際に、通信装置１０１が実行する処理を示した。
【００５８】
本実施形態では、通信コネクションが複数ある場合、ハードウェアに入力するデータのデータ単位を通信コネクションが一つの場合と比べ小さくすることで、通信コネクション間の待ち時間を低減することができる。具体的には、ある通信コネクションを介したデータの送信を行う際にハードウェアに入力するデータ単位を小さくすることで、他の通信コネクションを介したデータの送信を割り込ませることが可能になる。つまり、ある通信コネクションを介したデータの送信の完了を待たずに、他の通信コネクションを介したデータを送信することができるため、他の通信コネクションを介したデータの送信の待ち時間を低減できる。
【００５９】
なお、通信コネクションが一つの場合、ハードウェアに入力するデータのデータ単位を通信コネクションが複数ある場合と比べて大きくすることで、当該通信コネクションを介したデータの送信を早く完了させることができる。
【００６０】
＜実施形態２＞
本実施形態における通信システムのネットワーク構成、および通信装置１０１のハードウェア構成、通信装置１０１のソフトウェア構成は、夫々図１、図２、図３と同様である。また、通信装置１０１が通信コネクションを介してデータを送信する際に、記憶部２０１に記憶されたプログラムを制御部２０２が読み出し、実行することで実現される処理の流れは、図４のフローチャートを示した通りである。また図４のステップＳ４０５において、図５のフローチャートで示される処理が行われるが、本実施形態において図５のステップＳ５０６でＹｅｓと判定されて以降の処理は、ステップＳ５１１に代えてステップＳ６０１からステップＳ６０６の処理が行われる。
【００６１】
図６のフローチャートで示される処理は、通信装置１０１が、通信コネクションの数に基づいてデータ単位を決定する際に実行する処理である。図６の処理は、記憶部２０１に記憶されたプログラムを制御部２０２が読み出して実行することで実現される。
【００６２】
ステップＳ６０１で通信装置１０１のセグメント処理部３０４は、通信コネクション数に基づきＴＳＯ送信データ単位を決定する。ここで、ＴＳＯ送信データ単位は、ＴＳＯ機能を有するハードウェアに入力可能なデータサイズの最大値を、通信コネクション数で除算することにより決定される。
【００６３】
なお、ＴＳＯ送信データ単位は、上記の式に基づいて決定するのに限らず、通信コネクション数に応じた所定の値に基づいて決定してもよい。例えば、ＴＳＯ機能を有するハードウェアに入力可能なデータサイズの最大値を、通信コネクション数に応じた所定の値を加算もしくは減算した値で除算することで、ＴＳＯ送信データ単位を決定してもよい。あるいは通信コネクション数に応じた所定の値を、ＴＳＯ送信データ単位として決定してもよい。
【００６４】
ステップＳ６０２で、セグメント処理部３０４は、ステップＳ６０１で決定したＴＳＯ送信データ単位がＭＳＳより大きいか否かを判定する。ＴＳＯ送信データ単位がＭＳＳより大きいと判定された場合は（ステップＳ６０２のＹｅｓ）、ステップＳ６０３に進む。一方、ＴＳＯ送信データ単位がＭＳＳ以下と判定された場合は（ステップＳ６０２のＮｏ）、ステップＳ６０６に進む。
【００６５】
ステップＳ６０３で、セグメント処理部３０４は、ステップＳ６０１で決定したＴＳＯ送信データ単位が、図５のステップＳ５０４で取得した最小値より大きいか否かを判定する。ＴＳＯ送信データ単位が当該最小値より大きいと判定された場合は（ステップＳ６０３のＹｅｓ）、ステップＳ６０４に進む。一方、ＴＳＯ送信データ単位が当該最小値以下と判定された場合は（ステップＳ６０３のＮｏ）、ステップＳ６０５に進む。
【００６６】
ステップＳ６０４で、セグメント処理部３０４は、通信インタフェース２０７に入力するデータのデータ単位を、図５のステップＳ５０４で取得した最小値に決定する。ステップＳ６０５で、セグメント処理部３０４は、ハードウェアに入力するデータのデータ単位を、ＴＳＯ送信データ単位に決定する。また、ステップＳ６０６でセグメント処理部３０４は、ハードウェアに入力するデータのデータ単位をＭＳＳに決定する。なお、ステップＳ６０６で決定したデータ単位は、ＭＳＳに限らずステップＳ６０４やステップＳ６０５で決定されたデータ単位より小さいデータ単位であればよい。
【００６７】
以上、図６のフローチャートでは、通信コネクションの数に基づいてデータ単位を決定する際に、通信装置１０１が実行する処理を示した。
【００６８】
本実施形態では、ハードウェアに入力するデータのデータ単位を、確立している通信コネクションの数に基づいて決定する。通信コネクションの数が増えるとデータ単位は小さくなることで、通信コネクション数が多いほど、他の通信コネクションを介したデータの送信が早く行える。ある通信コネクションを介したデータの送信の完了を待たずに他の通信コネクションを介したデータを送信することができるため、ハードウェアに入力されるデータ単位が小さいほど他の通信コネクションを介したデータの送信の待ち時間を低減できる。
【００６９】
＜実施形態３＞
本実施形態における通信システムのネットワーク構成、および通信装置１０１のハードウェア構成、通信装置１０１のソフトウェア構成は、夫々図１、図２、図３と同様である。また、通信装置１０１が通信コネクションを介してデータを送信する際に、記憶部２０１に記憶されたプログラムを制御部２０２が読み出し、実行することで実現される処理の流れは、図４のフローチャートを示した通りである。また図４のステップＳ４０５において、図５のフローチャートで示される処理が行われるが、本実施形態において図５のステップＳ５０６でＹｅｓと判定されて以降の処理はステップＳ５１１に代えてステップＳ７０１からステップＳ７０５の処理が行われる。
【００７０】
図７のフローチャートで示される処理は、通信装置１０１が、他の通信コネクションに通信の遅延を低減する設定がされているか否かに基づいてデータ単位を決定する際に実行する処理である。図７の処理は、記憶部２０１に記憶されたプログラムを制御部２０２が読み出して実行することで実現される。
【００７１】
ステップＳ７０１では、通信装置１０１のセグメント処理部３０４は通信装置１０２との通信コネクションの少なくとも一つに、通信の遅延を低減するような設定がされているか否かを判定する。具体的には、通信装置１０２との通信コネクションの内、現在データを送信しようとしている通信コネクションとは異なる他の通信コネクションの少なくとも一つに、通信の遅延を低減するような設定がされているか否かを判定する。通信の遅延を低減するような設定とは、ＴＣＰコネクションのＮａｇｌｅアルゴリズム、もしくはＴＣＰ遅延ＡＣＫの少なくとも何れか一つが無効に設定されていることである。
【００７２】
Ｎａｇｌｅアルゴリズムが有効に設定されているＴＣＰコネクションでは、以下の三つの条件の内、どれか一つの条件を成立するまでデータの送信を遅延させる。三つの条件とは、既に送信済みの全てのデータに対するＡＣＫを受信するか、未送信のデータのデータサイズがＭＳＳ以上になるか、もしくは、データを送信してから所定の時間が経過するかである。ＴＣＰ遅延ＡＣＫとは、データを受信した際の応答としてのＡＣＫを、複数回分まとめて送信する技術である。ＴＣＰ遅延ＡＣＫが有効になっているＴＣＰコネクションでは、ＭＳＳの２倍のデータを受信するまで、あるいは所定の時間が経過するまでＡＣＫの送信を遅延させることができる。
【００７３】
しかし、ＮａｇｌｅアルゴリズムとＴＣＰ遅延ＡＣＫの両方が有効になっている場合、通信が遅延する場合がある。例えば、送受信するデータのデータサイズがＭＳＳよりも小さい場合を考える。送信側は、前記の三つの条件のうち一つを満たさないとデータを送信することができない。まず未送信のデータのデータサイズがＭＳＳ以上にならない。この場合、送信側は所定の時間が経過しタイムアウトになるか、あるいは受信側で所定の時間が経過しＡＣＫが送信されるまで、次のデータを送信することができなくなり、結果通信が遅延する。よって、ＮａｇｌｅアルゴリズムとＴＣＰ遅延ＡＣＫとの少なくとも一方を無効化することで、通信の遅延を低減できる。
【００７４】
セグメント処理部３０４は、他の通信コネクションに通信の遅延を低減する設定がされていると判定されると（ステップＳ７０１のＹｅｓ）、ステップ７０６に進む。セグメント処理部３０４は、他の通信コネクションに通信の遅延を低減する設定がされていないと判定されると（ステップＳ７０１のＮｏ）、ステップＳ７０２に進む。
【００７５】
なお、本実施形態ではステップＳ７０１において、セグメント処理部３０４は、他の通信コネクションに通信の遅延を低減するような設定がされているか判定した。しかし、これに限らず、現在データを送信しようとしているアプリケーションとは異なる、他のアプリケーションに通信の遅延を低減するような設定がされているか判定してもよい。あるいは、他のアプリケーションの負荷の状況に応じて判定されてもよい。
【００７６】
ステップＳ７０２からステップＳ７０５は、夫々図５のステップＳ５０８からステップＳ５１１と同様である。
【００７７】
以上、図７のフローチャートでは、他の通信コネクションに通信の遅延を低減する設定がされているかということに基づいてデータ単位を決定する際に通信装置１０１が実行する処理を示した。
【００７８】
本実施形態では、通信コネクションが複数あり、かつ他の通信コネクションに通信の遅延を低減する設定がされているかということに基づいて、ハードウェアに入力するデータのデータ単位を決定した。通信コネクションが複数あり、他の通信コネクションに通信の遅延を低減する設定がなされている場合のデータ単位を、通信コネクションが複数あり、他の通信コネクションに通信の遅延を低減する設定がなされていない場合のデータ単位より小さくする。これにより、通信の遅延を低減する設定がなされている通信コネクションが早くデータの送信を開始することができ、当該通信コネクションの待ち時間を低減することができる。具体的には、ある通信コネクションを介したデータの送信を行う際にハードウェアに入力するデータ単位を小さくすることで、通信の遅延を低減する設定が成されている通信コネクションを介したデータの送信を割り込ませることが可能になる。
【００７９】
＜実施形態４＞
本実施形態における通信システムのネットワーク構成、および通信装置１０１のハードウェア構成、通信装置１０１のソフトウェア構成は、夫々図１、図２、図３と同様である。また、通信装置１０１が通信コネクションを介してデータを送信する際に、記憶部２０１に記憶されたプログラムを制御部２０２が読み出し、実行することで実現される処理の流れは、図４のフローチャートを示した通りである。また図４のステップＳ４０５において、図５のフローチャートで示される処理が行われるが、本実施形態において図５のステップＳ５０６でＹｅｓと判定されて以降の処理はステップＳ５１１に代えてステップＳ８０１からステップＳ８０６の処理が行われる。
【００８０】
図８のフローチャートで示される処理は、通信装置１０１が、送信バッファに格納されたデータのデータサイズが、送信バッファのバッファサイズの所定の割合のサイズより大きいかに基づいてデータ単位を決定する際に実行する処理である。図８の処理は、記憶部２０１に記憶されたプログラムを制御部２０２が読み出して実行することで実現される。
【００８１】
ステップＳ８０１で、通信装置１０１のセグメント処理部３０４は、送信バッファのバッファサイズの所定の割合のサイズを取得する。所定の割合はユーザの指定によって決定される。あるいは、アプリケーションによって決められてもよい。または、通信装置１０１が確立している通信コネクション数や、通信装置１０１が確立している通信コネクションの通信速度などに基づいて決定してもよい。あるいは、割合ではなく、送信バッファのバッファサイズに対する閾値であってもよい。
【００８２】
ステップＳ８０２で、セグメント処理部３０４は、図５のステップＳ５０１で取得した送信バッファに格納されたデータのデータサイズが、ステップＳ８０１で取得した値より大きいか否かを判定する。なお、Ｓ５０１で取得した送信バッファに格納されたデータのデータサイズが、送信バッファのバッファサイズのどれだけの割合に相当するかを取得し、当該割合が所定の割合を超えているか判定してもよい。セグメント処理部３０４は、当該データサイズがステップＳ８０１で取得した値より大きいと判定された場合は（ステップＳ８０２のＹｅｓ）、ステップＳ８０３に進む。一方、当該データサイズがステップＳ８０１で取得した値以下と判定された場合は（ステップＳ８０２のＮｏ）、ステップＳ８０７に進む。ステップＳ８０３からステップＳ８０６は、夫々図５のステップＳ５０８からステップＳ５１１と同様である。
【００８３】
以上、図８のフローチャートでは、送信バッファに格納されたデータのデータサイズが、送信バッファのバッファサイズの所定の割合のサイズより大きいかに基づいてデータ単位を決定する際に通信装置１０１が実行する処理を示した。
【００８４】
本実施形態では、通信コネクションが複数あり、かつ送信バッファに格納されたデータのデータサイズが送信バッファのバッファサイズの所定の割合のサイズより大きいか、ということに基づいてハードウェアに入力するデータのデータ単位を決定した。通信コネクションが複数ある場合に、送信バッファに格納されたデータのデータサイズが送信バッファのバッファサイズの所定の割合のサイズより大きい場合のデータ単位を、小さい場合のデータ単位より大きくする。これにより、通信コネクションが複数ある場合でも、送信バッファに格納されたデータのデータサイズが送信バッファのバッファサイズの所定の割合のサイズより大きい通信コネクションは、ハードウェアに大きなデータ単位毎にデータを入力する。具体的には、ある通信コネクションが用いる送信バッファにデータが多く格納されている場合は、通信コネクションが複数確立されている場合であっても、大きなデータ単位毎にハードウェアにデータを入力することで送信処理の効率化を図ることができる。
【００８５】
なお、実施形態１から４において、通信装置１０１と通信装置１０２との間で複数の通信コネクションが確立していたが、通信装置１０１は通信装置１０２だけでなく通信装置１０２以外の他装置とも通信コネクションを確立してもよい。また、通信装置１０１において、アプリケーション３０１以外の他のアプリケーションも通信コネクションを確立してもよい。
【００８６】
また、実施形態１から４において、通信装置１０１は通信コネクションを介して送信するデータを送信バッファに格納していたが、この限りではない。例えば、通信装置１０１は、通信コネクションを介して送信するデータをアプリケーション３０１からハードウェアに直接所定のデータ単位毎に入力してもよい。この場合、図５のステップＳ５０１では、通信コネクションを介して送信されるデータのデータサイズを取得してもよい。そしてＳ５０４では、当該データサイズと、送信ウィンドウサイズと、輻輳ウィンドウサイズとの内、最小値を取得する。また、図８のステップＳ８０１では、ユーザが決定した所定の値を取得してもよい。
【００８７】
なお、実施形態１から４において、通信装置１０１は通信コネクションごとに送信バッファを有するとしたが、複数の通信コネクションが同一の送信バッファを用いてもよい。例えば、同じアプリケーション３０１が確立する複数の通信コネクションが、同一の送信バッファを用いてもよい。あるいは、同じ相手装置との間に確立された複数の通信コネクションが同一の送信バッファを用いてもよい。
【００８８】
なお、図４から図８における通信装置１０１のフローチャートの少なくとも一部または全部をハードウェアにより実現してもよい。ハードウェアにより実現する場合、例えば、所定のコンパイラを用いることで、各ステップを実現するためのプログラムからＦＰＧＡ上に専用回路を生成し、これを利用すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウェアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。
【００８９】
また、図４から図８に示したフローチャートの各ステップを不図示の複数のＣＰＵもしくは装置で分散して行うようにしてもよい。
【００９０】
以上、実施形態を詳述したが、本発明は例えば、システム、装置、方法、プログラム若しくは記録媒体（記憶媒体）等としての実施態様をとることが可能である。具体的には、複数の機器（例えば、ホストコンピュータ、インタフェース機器、撮像装置、ｗｅｂアプリケーション等）から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【００９１】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９２】
１０  通信システム
１０１  通信装置
１０２  通信装置
１１０  ネットワーク
３０１  アプリケーション
３０２  プロトコルスタック
３０３  バッファ管理部
３０４  セグメント処理部
３０５  通信プロトコル処理部
３０６  コネクション管理部
３０７  ＴＣＰウィンドウ制御部
３０８  輻輳制御部
３０９  通信インタフェース制御部
【図１】
2019016842.tif 000003
【図２】
2019016842.tif 000004
【図３】
2019016842.tif 000005
【図４】
2019016842.tif 000006
【図５】
2019016842.tif 000007
【図６】
2019016842.tif 000008
【図７】
2019016842.tif 000009
【図８】
2019016842.tif 000010