(57)【要約】【課題】  送信レートの高精度な制御を実現する通信制御プログラム、通信制御方法、及び、通信制御装置を提供することを目的とする。【解決手段】  所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、処理をコンピュータに実行させる。【選択図】図５
2017224995.tif 000002
【特許請求の範囲】
【請求項１】
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、
処理をコンピュータに実行させる通信制御プログラム。
【請求項２】
請求項１において、さらに、
前記送信周期ごとに、送信レートに応じた量のデータを送信する、
通信制御プログラム。
【請求項３】
請求項１において、
前記特定は、前記誤差が前記所定の範囲に収まるか否かを判定し、前記誤差が前記所定の範囲に収まっていない場合に前記送信周期を前記変化させて前記実行及び前記取得を行い、前記誤差が前記所定の範囲に収まる場合に前記送信周期に決定する、
通信制御プログラム。
【請求項４】
請求項１において、
前記特定は、前記誤差が第１の閾値以下である場合に、前記指定した送信周期を、前記誤差が前記所定の範囲に収まる送信周期として特定する、
通信制御プログラム。
【請求項５】
請求項１において、
前記特定は、前記誤差の前記指定した送信周期に対する割合が第２の閾値以下である場合に、前記指定した送信周期を、前記誤差が前記所定の範囲に収まる送信周期として特定する、
通信制御プログラム。
【請求項６】
請求項１において、
前記所定の命令は、指定された時間、所定の処理を行う命令である、
通信制御プログラム。
【請求項７】
請求項２において、
前記送信は、前記送信レートに応じた量のデータを第１のサイズにしたがって複数の分割データに分割し、分割データごとに送信間隔を空けて送信する、
通信制御プログラム。
【請求項８】
請求項７において、
前記送信は、前記データの送信先の受信装置におけるパケットの受信状態に基づいて、前記第１のサイズを決定する、
通信制御プログラム。
【請求項９】
請求項８において、
前記パケットの受信状態は、パケットロスが発生しないパケット群のサイズである、
通信制御プログラム。
【請求項１０】
請求項８において、
前記パケットの受信状態は、前記受信装置に対する送信レートと、前記受信装置における受信レートが一致するパケット群のサイズである、
通信制御プログラム。
【請求項１１】
請求項７において、
前記第１のサイズは、前記データの送信先の受信装置におけるパケットの受信状態に基づいて決定されるサイズより小さく、
前記送信間隔は、前記分割データの数と前記送信周期とに基づいて決定される時間より短い、
通信制御プログラム。
【請求項１２】
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、
通信制御方法。
【請求項１３】
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得する取得部と、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する特定部と、
を有する通信制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御プログラム、通信制御方法、及び、通信制御装置に関する。
【背景技術】
【０００２】
大規模ネットワークの普及に伴い、大量のデータを送受信する際に所定のスループットを実現できない事象が発生している。所定のスループットを実現できない要因の１つに、ネットワーク間の帯域の差がある。
【０００３】
帯域の狭いネットワークと接続する中継装置に大量のデータ（パケット）が送信されると、中継装置のバッファが溢れ、パケットの消失（以下、パケットロス、パケットドロップともいう）が生じる。ＴＣＰ／ＩＰ（Transmission Control Protocol ／Internet Protocol）にしたがってデータを送信する場合、パケットの消失に応じてパケットが再送される。パケットの再送の発生により、スループットが低下する。
【０００４】
これに対し、パケットの消失の発生を抑制するために、データの送信時に、通信制御装置側で送信レートの制御を行う方法がある。通信制御装置は、単位時間当たりに送信するデータの量に上限を設けることで、送信レートを制御する。送信レートが制御されることにより、中継装置に送信されるデータの量が制限され、パケットの消失の発生が低減する。
【０００５】
通信制御装置は、例えば、パケット間に送信間隔を設けることによって、送信レートを制御する。このとき、通信制御装置は、例えば、オペレーションシステムのタイマ制御等にしたがって、送信間隔を測定する。
【０００６】
ネットワークの制御に関する技術については、例えば、特許文献１〜３に記載される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−５０８７号公報
【特許文献２】特開２０１５−１８８１８６号公報
【特許文献３】特開２０１５−１７０９４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、オペレーションシステムのタイマ制御は、短い時間を測定する場合の精度が低い。これにより、通信制御装置は、送信間隔を精度よく測定できない場合がある。つまり、送信間隔と、タイマ制御にしたがって測定された測定時間との間に誤差が生じる。これにより、通信制御装置は、送信レートの高精度な制御を実現できない場合がある。
【０００９】
開示の１つの側面は、送信レートの高精度な制御を実現する通信制御プログラム、通信制御方法、及び、通信制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１の態様によれば、所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、処理をコンピュータに実行させる。
【発明の効果】
【００１１】
１つの側面では、送信レートの高精度な制御を実現できる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態における情報処理システムの構成の一例を示す図である。
【図２】送信レートの制御の一例を模式的に説明する図である。
【図３】ギャップの揺らぎが生じる場合における、送信レートの制御の一例を模式的に説明する図である。
【図４】第１の実施の形態における通信制御装置１００の処理の流れを説明するフローチャート図である。
【図５】第１の実施の形態の通信制御処理を模式的に説明する図である。
【図６】第２の実施の形態における通信制御装置１００（１００ａ、１００ｂ）のハードウェア構成図である。
【図７】図６に示した通信制御装置１００のソフトウェアの機能を示す図である。
【図８】図６、図７に示したレート制御テーブル１２２の一例を説明する図である。
【図９】図６、図７に示した通信制御プログラム１２１の処理の流れを説明するフローチャート図である。
【図１０】図９の工程Ｓ２１の処理を模式的に説明する図である。
【図１１】図９の工程Ｓ２１の処理の詳細を説明するフローチャート図である。
【図１２】図９の工程Ｓ２４の処理の詳細を説明するフローチャート図である。
【図１３】第３の実施の形態の通信制御処理を模式的に説明する図である。
【図１４】第３の実施の形態におけるクライアント装置２００のハードウェア構成図である。
【図１５】第３の実施の形態における通信制御装置１００、及び、クライアント装置２００のソフトウェアの機能を示す図である。
【図１６】図１５に示した、通信制御装置１００の通信制御プログラム１２１の処理の流れを説明するフローチャート図である。
【図１７】許容バーストサイズの測定処理（図１６の工程Ｓ５２）のシーケンス図である。
【図１８】測定パケットの送受信の一例を説明する図である。
【図１９】図１６の工程Ｓ５２の、送信側測定モジュール（許容バーストサイズ測定モジュール）１３４の処理の詳細を説明するフローチャート図である。
【図２０】図１６の工程Ｓ５２の、受信側測定モジュール（許容バーストサイズ測定モジュール）２３２の処理の詳細を説明するフローチャート図である。
【図２１】図１５で説明したレート制御テーブル１２２ｘの一例を説明する図である。
【図２２】図１６の工程Ｓ５５の処理の詳細を説明するフローチャート図である。
【図２３】図２２の工程Ｓ８７の処理の詳細を説明するフローチャート図である。
【図２４】送信周期ｓｔごとにバーストデータを送信する場合の送信レートの変移を表す図である。
【図２５】送信周期ｓｔごとにバーストデータを分割して送信する場合の送信レートの変移を表す図である。
【図２６】第４の実施の形態における通信制御装置１００の通信制御プログラム１２１の処理を説明するフローチャート図である。
【発明を実施するための形態】
【００１３】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１４】
［情報処理システムの構成］
図１は、本実施の形態における情報処理システムの構成の一例を示す図である。図１は、２つの通信制御装置１００ａ、１００ｂ（以下、通信制御装置１００ともいう）、１つの中継装置３００、２つのクライアント装置２００ａ、２００ｂ（以下、クライアント装置２００ともいう）を有する情報処理システムを例示する。通信制御装置１００は、例えば、サーバ等の情報処理装置である。中継装置３００は、例えば、スイッチやルータ等である。
【００１５】
なお、通信制御装置１００、中継装置３００、クライアント装置２００（以下、各装置とも称する）の数は、図１の例に限定されるものではない。図１は説明のために簡易な例を示すが、情報処理システムは、各装置を多数有する。
【００１６】
図１は、通信制御装置１００が、中継装置３００を介して、クライアント装置２００に大量のデータを送信する場合を例示する。図１の例では、各通信制御装置１００は中継装置３００と有線通信を介して接続し、中継装置３００は各クライアント装置２００と無線通信を介して接続する。無線通信の帯域は、有線通信の帯域に対して狭い。
【００１７】
通信制御装置１００ａは、帯域が広く回線速度が速いネットワーク１５０ａにしたがって、データを中継装置３００に送信する。また、中継装置３００は、帯域が狭く回線速度が遅いネットワーク２５０ａにしたがって、クライアント装置２００ａにデータを送信する。
【００１８】
中継装置３００は、送信側と受信側の回線速度の差異を補うために、データを一時的に保持するバッファを有する。中継装置３００のバッファは、他のネットワーク１５０ｂ、２５０ｂでも共有される。したがって、中継装置３００に大量のデータが送信される場合、中継装置３００のバッファが溢れる場合がある。バッファが溢れることにより、データを含むパケットの消失（以下、パケットロス、パケットドロップともいう）が発生する。
【００１９】
また、ＴＣＰ（Transmission Control Protocol：ＴＣＰ）にしたがって通信を行う場合、パケットの消失の発生に応じてパケットの再送が行われる。パケットの再送が多発する場合、データを使用するアプリケーションプログラム（図１に図示せず）のスループットが低下する。
【００２０】
パケットの消失の発生を抑制するために、通信制御装置１００ａは、データの送信レート（伝送レートともいう）を制御する。送信レートは、単位時間当たりに送信するデータの量を示す。通信制御装置１００ａは、パケットの送信時や、回線への入り口等で、単位時間当たりに送信するデータの量を制御する。これにより、中継装置３００に送信されるデータ（パケット）の量が制限され、中継装置３００のバッファ溢れを抑制可能になる。したがって、通信制御装置１００ａは、パケットの消失の発生を抑制できる。
【００２１】
なお、図１の例では、通信制御装置１００と中継装置３００が有線通信を介して接続し、中継装置３００とクライアント装置２００が無線通信を介して接続する場合を例示した。ただし、この例に限定されるものではなく、例えば、各装置は、帯域の異なる有線通信を介して、接続してもよい。
【００２２】
［送信レートの制御］
図２は、送信レートの制御の一例を模式的に説明する図である。図２に示す矢印ｔｔは時間の経過を示し、図２に示す各矩形ｐｋ１〜ｐｋ６（以下、パケットｐｋともいう）は１つのパケットを示す。
【００２３】
例えば、通信制御装置は、送信するパケットごとにギャップを挿入することにより、送信レートに上限を設ける。ギャップは、送信間隔である。つまり、通信制御装置は、送信するパケット間に送信間隔を設けることによって、単位時間当たりに送信するデータの量に上限を設ける。
【００２４】
通信制御装置は、パケットｐｋ１〜ｐｋ６のそれぞれを、一定の送信間隔ｔｍ１を空けて送信することで、送信レートを制御する。通信制御装置は、所望の送信レートになるように、パケット間の送信間隔ｔｍ１を設定する。具体的に、通信制御装置は、所定の期間ｐｒに送信するデータの量が、所望の送信レートと一致するように、送信間隔ｔｍ１を設定する。
【００２５】
一方、ネットワークの機能を仮想化するＮＦＶ（Network Functions Virtualization）やクラウドコンピューティングの需要が増加している。これにより、ソフトウェアが送信レートの制御を行うケースが増加している。ソフトウェアが送信レートの制御を行う場合、ソフトウェアは、例えば、タイマ処理を行う命令にしたがって、送信間隔ｔｍ１を測定する。
【００２６】
タイマ処理を行う命令は、例えば、指定した時間、所定の処理を行う命令である。本実施の形態では、タイマ処理を行う命令として、ｓｌｅｅｐ関数を例示する。ｓｌｅｅｐ関数は、指定された時間、呼び出し元のプロセスを停止状態に制御する命令である。なお、タイマ処理を行う命令には、ｓｌｅｅｐ関数の他に、ｕｓｌｅｅｐ関数、ｎａｎｏｓｌｅｅｐ関数、及び、指定した時間、プロセスを待機処理に制御する関数等がある。
【００２７】
タイマ処理を行う命令の制御は、オペレーションシステムのタイマ制御に依存する。また、オペレーションシステムは、タイマ割り込みに基づいてタイマ制御を行う。これにより、タイマ処理を行う命令は、タイマ割り込みが発生する周期よりも短い周期にしたがって、プロセスを制御できない。
【００２８】
したがって、ｓｌｅｅｐ関数にタイマ割り込みの発生周期よりも短い時間を指定する場合、指定した時間通りにプロセスの状態が制御されない。つまり、プロセスが停止状態に制御される時間が、ｓｌｅｅｐ関数に指定した時間より長くなる場合がある。
【００２９】
一方、ｓｌｅｅｐ関数にタイマ割り込みの発生周期より長い時間を指定する場合でも、指定した時間通りにプロセスの状態が制御されない場合がある。オペレーションシステムのプロセス管理スケジューラは、所定のアルゴリズムにしたがって、プロセスに資源を割り当てる。したがって、プロセスが停止状態に制御される時間は、プロセス管理スケジューラに応じて、ｓｌｅｅｐ関数に指定した時間より長くなる場合や、短くなる場合がある。
【００３０】
このように、タイマ処理を行う命令の制御はオペレーションシステムのタイマ制御に依存するため、命令に指定された時間通りにプロセスが制御されない場合がある。これにより、ソフトウェアは、タイマ処理を行う命令にしたがって、正確な送信間隔を測定できない。
【００３１】
例えば、送信レート「1 Gbps（Gigabits per second：Gbps）」であって、単位時間当たりに送信するパケット数が値「1.5 Mpps（Mega packet per second：Mpps）」である場合を例示する。この場合、ソフトウェアは、１つのパケットを「約7 us（microsecond：us）」以下の処理時間で制御する必要がある。したがって、パケット間に挿入するギャップは「7 us」以下になる。
【００３２】
Ｗｉｎｄｏｗｓ７（登録商標）のタイマ割り込みの発生周期は、例えば、値「1 ms（millisecond：ms）」である。このため、Ｗｉｎｄｏｗｓ７は、時間「7 us」を測定できない。また、Ｌｉｎｕｘ（登録商標）のタイマ割り込みの発生周期は、値「4 us」である。Ｌｉｎｕｘのタイマ割り込みの発生周期「4 us」は、処理時間「7 us」より短いものの、時間「7 us」を測定できるとは限らない。
【００３３】
このように、タイマ処理を行う命令に短い時間を指定する場合、指定した時間通りプロセスの状態が制御できない場合がある。つまり、命令に指定された時間と、命令によってプロセスが制御された時間との間に誤差が生じる場合がある。また、送信間隔の測定の度に異なる場合がある。つまり、ギャップに揺らぎが生じる。
【００３４】
［ギャップの揺らぎ］
図３は、ギャップの揺らぎが生じる場合における、送信レートの制御の一例を模式的に説明する図である。図３において、図２で示したものと同一のものは、同一の符号で示す。
【００３５】
図３は、図２の例と同様の送信間隔ｔｍ１ごとにパケットを送信する場合を例示する。図３に示す実線の矢印ｔｍ１はｓｌｅｅｐ関数に指定する送信間隔を、破線の矢印ｔｅ１〜ｔｅ５はｓｌｅｅｐ関数にしたがって停止状態に制御された時間（以下、測定時間ともいう）を示す。また、矢印ｅｒ２〜ｅｒ４は、送信間隔ｔｍ１と測定時間ｔｅ１〜ｔｅ４との差分（誤差）をそれぞれ示す。
【００３６】
図３の例では、パケットｐｋ１、ｐｋ２間の、送信間隔ｔｍ１と測定時間ｔｅ１は同一である。また、パケットｐｋ５、ｐｋ６間の、送信間隔ｔｍ１と測定時間ｔｅ５は同一である。一方、パケットｐｋ２、ｐｋ３間の測定時間ｔｅ２は、送信間隔ｔｍ１より長く、誤差ｅｒ２がある。同様にして、パケットｐｋ３、ｐｋ４間の測定時間ｔｅ３は、送信間隔ｔｍ１より長く、誤差ｅｒ３がある。また、誤差ｅｒ２と誤差ｅｒ３は異なる。
【００３７】
測定時間ｔｅ２、ｔｅ３が送信間隔ｔｍ１より長い状態が継続すると、所定の期間ｐｒに送信するパケットの数が図２の例に対して低減し、送信レートが低減する。そこで、一時的に送信間隔を短くすることにより、所望の送信レートに制御する場合がある。ただし、この場合、送信レートが高くなることにより、中継装置のバッファが溢れ、パケットの消失が発生する場合がある。
【００３８】
また、図３のパケットｐｋ４、ｐｋ５間の測定時間ｔｅ４のように、測定時間ｔｅ４が送信間隔ｔｍ１より短くなる場合もある。測定時間ｔｅ４が送信間隔ｔｍ１より短い状態が継続すると、期間ｐｒに送信するパケットの数が図２の例に対して増加し、送信レートが上昇する。送信レートが上昇することにより、中継装置のバッファが溢れ、パケットの消失が発生する場合がある。
【００３９】
このように、ソフトウェアが送信レートの制御を行う場合、タイマ処理を行う命令の精度が低いことにより、ソフトウェアは精度よく送信間隔ｔｍ１を測定できない。これにより、図３の例によると、誤差ｅｒ２〜ｅｒ４は送信間隔ごとに異なる。したがって、送信間隔ｔｍ１を一様に変更しても、所望の送信レートに制御することは容易ではない。
【００４０】
（空のループ処理）
一方、送信間隔を測定するために、ｓｌｅｅｐ関数等のタイマ処理を行う命令の代わりに、空のループ処理を使用する方法がある。ループ処理は、ｆｏｒ文やｗｈｉｌｅ文等の繰り返し処理を指示する命令を使用する処理である。例えば、ソフトウェアは、現在の時刻を取得しながら、ループ処理を繰り返し、送信間隔ｔｍ１が経過したときにループ処理を終了する。これにより、ソフトウェアは、送信間隔ｔｍ１を測定する。
【００４１】
空のループ処理を使用する方法は、ｓｌｅｅｐ関数よりも高い精度を実現することが可能である。ただし、空のループ処理を使用する方法によると、ループ処理を繰り返すために、通信制御装置１００のＣＰＵ（Central Processing Unit：ＣＰＵ）の負荷が上昇する。
【００４２】
このように、ｓｌｅｅｐ関数等のタイマ処理を行う命令を使用して送信間隔ｔｍ１を測定する場合、送信間隔ｔｍ１を高精度に測定できない場合がある。一方、空のループ処理を使用して送信間隔ｔｍ１を測定する場合、タイマ処理を行う命令に対して送信間隔ｔｍ１を精度よく測定できるものの、ＣＰＵの負荷が上昇する。このように、ソフトウェアにしたがって、送信レートを高精度に制御することは容易ではない。
【００４３】
［第１の実施の形態］
したがって、本実施の形態における通信制御装置１００は、所定の命令に送信周期を指定して実行するとともに、実行を開始した開始時刻、及び、実行から復帰した終了時刻を取得する。そして、通信制御装置１００は、送信周期を変化させて実行及び取得を行い、終了時刻と開始時刻の差分と、指定した送信周期との誤差が所定の範囲に収まる送信周期を特定する。
【００４４】
このように、通信制御装置１００は、所定の命令を実行した際の誤差が所定の範囲に収まるように、送信周期を変更させて所定の命令の実行及び時刻の取得を行う。これにより、通信制御装置１００は、誤差が所定範囲に収まる送信周期を特定できる。つまり、通信制御装置１００は、所定の命令による測定時間との誤差が小さい送信周期を特定できる。
【００４５】
したがって、通信制御装置１００は、誤差の小さい送信周期ごとにパケットをまとめて送信することによって、送信レートを高精度に制御できる。したがって、通信制御装置１００は、ソフトウェアにしたがって送信レートを制御する場合であっても、高精度な送信レートの制御を実現できる。これにより、通信制御装置１００は、パケットの消失の発生を抑制でき、スループットを向上できる。
【００４６】
また、本実施の形態における通信制御装置１００によると、ｓｌｅｅｐ関数等の所定の命令にしたがって、送信周期を精度よく測定できる。したがって、通信制御装置１００は、空のループ処理を使用する必要がないため、ＣＰＵの負荷の増大を回避できる。
【００４７】
（第１の実施の形態の処理の流れ）
図４は、第１の実施の形態における通信制御装置１００の処理の流れを説明するフローチャート図である。
【００４８】
Ｓ１１：通信制御装置１００は、任意の送信周期を設定する。
【００４９】
Ｓ１２：通信制御装置１００は、ｔｉｍｅ関数等の時刻を取得する命令を実行し、現在の時刻を取得する。つまり、通信制御装置１００は、所定の命令の開始時刻を取得する。
【００５０】
Ｓ１３：通信制御装置１００は、所定の命令に、工程Ｓ１１で設定した送信周期を指定し、実行する。所定の命令は、指定された時間、所定の処理を行う命令である。前述したとおり、所定の命令は、例えば、ｓｌｅｅｐ関数等のタイマ処理を行う命令である。
【００５１】
Ｓ１４：通信制御装置１００は、所定の命令の実行から復帰した終了時刻を取得する。工程Ｓ１２と同様にして、通信制御装置１００は、タイム関数等の時刻を取得する命令を実行し、現在の時刻を終了時刻として取得する。
【００５２】
工程Ｓ１１〜Ｓ１４に示すように、通信制御装置１００は、所定の命令に送信周期を指定して実行するとともに、命令の実行を開始した開始時刻、及び、命令の実行から復帰した終了時刻を取得する。これにより、通信制御装置１００は、所定の命令を実行した場合の測定時間（図３のｔｅ１〜ｔｅ５）を取得できる。
【００５３】
Ｓ１５：通信制御装置１００は、工程Ｓ１４で取得した終了時刻と、工程Ｓ１２で取得した開始時刻の差分（測定時間）と、送信周期（Ｓ１１）との誤差（図３の誤差ｅｒ２〜ｅｒ４）を算出する。
【００５４】
Ｓ１６：通信制御装置１００は、工程Ｓ１５で算出した誤差が、所定の範囲に収まるか否かを判定する。
【００５５】
Ｓ１７：誤差が所定の範囲に収まらない場合（Ｓ１６のＮｏ）、通信制御装置１００は、送信周期を変化させて、工程Ｓ１２〜Ｓ１６の処理を繰り返す。
【００５６】
Ｓ１８：一方、誤差が所定の範囲に収まる場合（Ｓ１６のＹｅｓ）、通信制御装置１００は、送信周期を、誤差が所定の範囲に収まる送信周期として特定する。
【００５７】
工程Ｓ１５〜Ｓ１８に示すように、通信制御装置１００は、送信周期を変化させて実行及び取得を行い、終了時刻と開始時刻の差分と、指定した送信周期との誤差が所定の範囲に収まる送信周期を特定する。これにより、通信制御装置１００は、誤差が小さくなる送信周期を特定できる。
【００５８】
なお、図示していないが、第１の実施の形態における通信制御装置１００は、ＣＰＵとメインメモリとを備える。そして、ＣＰＵがメインメモリ内にロードされた、通信制御プログラムを実行することによって、図４のフローチャート図に示す通信制御処理を実現する。
【００５９】
（第１の実施の形態の処理の説明）
図５は、第１の実施の形態の通信制御処理を模式的に説明する図である。図５において、図２、図３で示したものと同一のものは、同一の符号で示す。
【００６０】
図５に示す通信制御処理ｐｓ１は、図２、図３に示した通信制御処理を示す。一方、図５に示す通信制御処理ｐｓ２は、図４のフローチャート図にしたがって特定した送信周期ｓｔにしたがってパケットを送信する場合の通信制御処理を示す。
【００６１】
実線の矢印ｓｔは送信周期を示し、破線の矢印ｘｔは、命令に送信周期を指定して実行した場合の開始時刻と終了時刻の差分（測定時間）を示す。なお、命令に送信周期を指定して実行する場合、例えば、ｓｌｅｅｐ関数（命令）のパラメータには、送信周期ｓｔからパケットｐｋ１〜ｐｋ６の処理時間を引いた時間（パケットｐｋ６の送信後からパケットｐｋ１１の送信までの時間）が指定される。これにより、送信周期ｓｔを指定した命令の実行が実現される。また、太線ｅｒｘは、送信周期ｓｔと測定時間ｘｔとの誤差を示す。
【００６２】
通信制御処理ｐｓ２に示すように、通信制御装置１００は、送信周期ｓｔごとに、送信レートに応じた量のデータをまとめて送信する。送信レートに応じた量のデータは、送信レートと送信周期ｓｔを乗算した値である。図５の例において、送信レートに応じた量のデータは、パケットｐｋ１〜ｐｋ６に対応する。また、図５に示すように、通信制御装置１００は、次の送信周期ｓｔで、パケットｐｋ１１〜ｐｋ１６を送信する。
【００６３】
このように、本実施の形態における通信制御装置１００は、パケットごとに送信間隔ｔｍ１を空けて送信する代わりに、誤差ｅｒｘが所定の範囲に収まる長い送信周期ｓｔごとに、送信レートに応じた複数のパケットをまとめて送信する。通信制御装置１００は、送信周期ｓｔを精度よく測定できるため、送信周期ｓｔごとに送信レートに応じた量のデータを送信することで、送信レートに高精度に制御できる。
【００６４】
また、誤差ｅｒｘは、送信周期ｓｔが同一の場合であっても、オペレーションシステム等に応じて異なる。また、仮想マシンにしたがって通信制御装置１００を実現する場合、誤差ｅｒｘは、オペレーションシステムと、仮想マシンに割り当てられるハードウェア資源の組み合わせに応じて異なる。したがって、通信制御装置１００は、送信レートの制御を行う環境上で、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを特定することによって、送信レートをより高精度に制御できる。
【００６５】
［第２の実施の形態］
図６は、第２の実施の形態における通信制御装置１００（１００ａ、１００ｂ）のハードウェア構成図である。通信制御装置１００は、例えば、ＣＰＵ１０１、メインメモリ１１０や補助記憶装置１１１等を備えるメモリ１０２、通信インタフェース部１０３を有する。各部は、バス１０６を介して相互に接続する。
【００６６】
ＣＰＵ１０１は、バス１０６を介してメモリ１０２等と接続するとともに、通信制御装置１００全体の制御を行う。通信インタフェース部１０３は、有線通信を介して、中継装置３００や他の装置等と接続し、データの送受信を行う。通信インタフェース部１０３は、例えば、ＮＩＣ（Network Interface Card：ＮＩＣ）である。
【００６７】
ＲＡＭ（Random Access Memory：ＲＡＭ）等を示すメインメモリ１１０は、ＣＰＵ１０１が処理を行うデータ等を記憶する。補助記憶装置１１１は、ＣＰＵ１０１が実行するオペレーションシステムのプログラムを格納する領域（図示せず）や、アプリケーションプログラム格納領域１２０、通信制御プログラム格納領域１２１を有する。また、補助記憶装置１１１は、レート制御テーブル格納領域１２２を有する。補助記憶装置１１１は、ＨＤＤ（Hard disk drive）、不揮発性半導体メモリ等を示す。
【００６８】
アプリケーションプログラム格納領域１２０のアプリケーションプログラム（以下、アプリケーションプログラム１２０と称する）はメインメモリ１１０にロードされる。そして、ＣＰＵ１０１がメインメモリ１１０内にロードされたアプリケーションプログラム１２０を実行することによって、データの送受信を管理するアプリケーションの処理を実現する。
【００６９】
通信制御プログラム格納領域１２１の通信制御プログラム（以下、通信制御プログラム１２１と称する）はメインメモリ１１０にロードされる。そして、ＣＰＵ１０１がメインメモリ１１０内にロードされた通信制御プログラム１２１を実行することによって、本実施の形態における通信制御処理を実現する。
【００７０】
レート制御テーブル格納領域１２２のレート制御テーブル（以下、レート制御テーブル１２２と称する）は、セッションの通信先ごとに、送信周期ｓｔ及び送信レート等の情報を有する。レート制御テーブル１２２の一例を、図８にしたがって後述する。
【００７１】
［通信制御装置１００のソフトウェアの機能］
図７は、図６に示した通信制御装置１００のソフトウェアの機能を示す図である。図７において、図６で示したものと同一のものは、同一の符号で示す。図７に示すように、通信制御プログラム１２１は、例えば、トランスポート処理モジュール１３１、送信周期測定モジュール１３２、送信レート制御モジュール１３３を有する。
【００７２】
トランスポート処理モジュール１３１は、アプリケーションプログラム１２０から送信対象のデータを受信し、送信対象のデータを含むパケットを生成する。そして、トランスポート処理モジュール１３１は、生成したパケットを送信レート制御モジュール１３３に出力する。
【００７３】
送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを特定する。また、送信周期測定モジュール１３２は、特定した送信周期ｓｔを、レート制御テーブル１２２に記憶する。
【００７４】
つまり、送信周期測定モジュール１３２は、所定の命令に送信周期ｓｔを指定して実行するとともに、実行を開始した開始時刻、及び、実行から復帰した終了時刻を取得する。そして、送信周期測定モジュール１３２は、送信周期ｓｔを変化させて実行及び取得を行い、終了時刻と開始時刻の差分と、指定した送信周期ｓｔとの誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを特定する。
【００７５】
送信レート制御モジュール１３３は、トランスポート処理モジュール１３１から送信対象のデータを含むパケットを取得するとともに、レート制御テーブル１２２を参照し、データの送信先の送信周期ｓｔ及び送信レートを取得する。送信レート制御モジュール１３３は、送信周期ｓｔごとに、送信レートに応じた量の送信対象のデータを、通信インタフェース部１０３を介してクライアント装置２００に送信する。
【００７６】
［レート制御テーブル１２２］
図８は、図６、図７に示したレート制御テーブル１２２の一例を説明する図である。レート制御テーブル１２２は、セッションの通信先、送信レート、送信周期ｓｔの項目を有する。送信レートは、単位時間当たりに送信するデータ量を示す。送信周期ｓｔは、図７の送信周期測定モジュール１３２が特定する情報である。
【００７７】
図８の例では、通信のセッション先は、ＩＰ（Internet Protocol：ＩＰ）アドレスとポート番号の組み合わせである。送信レートは、例えば、通信事業者との契約等にしたがって定められる。また、ＩＰアドレスが同一でも、ポート番号に応じて送信レートが異なる場合がある。したがって、図８に示すレート制御テーブル１２２は、ＩＰアドレスとポート番号の組み合わせごとに、送信レートの情報を有する。ただし、この例に限定されるものではなく、通信のセッション先はＩＰアドレスのみを有してもよい。
【００７８】
図８に示すレート制御テーブル１２２は、セッションの通信先「192.168.0.1:80」、「192.168.100.1:8080」の情報を有する。具体的に、通信先「192.168.0.1:80」の送信レートは、値「40 Mbps（Megabits per second：Mbps）」であって、送信周期ｓｔは、値「20 ms（millisecond：ms）」である。また、通信先「192.168.100.1:8080」の送信レートは、値「300 Mbps」であって、送信周期ｓｔは、値「20 ms」である。
【００７９】
送信周期ｓｔは、例えば、通信制御装置１００のハードウェアやソフトウェア等に応じて定まる。したがって、図８に示すように、同一の通信制御装置１００で特定される送信周期ｓｔは、同様の値となる。
【００８０】
［通信制御プログラム１２１の処理の流れ］
図９は、図６、図７に示した通信制御プログラム１２１の処理の流れを説明するフローチャート図である。
【００８１】
Ｓ２１：システムの起動時、通信制御プログラム１２１の送信周期測定モジュール１３２は、送信周期ｓｔを特定する。送信周期ｓｔの特定処理の詳細は、図１０、図１１にしたがって後述する。
【００８２】
システムの起動時は、例えば、通信制御プログラム１２１の起動時や、アプリケーションプログラム１２０の処理の開始時等である。このように、通信制御プログラム１２１は、データの送信処理の前に、予め、送信周期ｓｔを特定する。これにより、データ送信時のオーバーヘッドを低減可能になる。
【００８３】
Ｓ２２：通信制御プログラム１２１のトランスポート処理モジュール１３１は、送信対象のデータ（以下、送信データと称する）があるか否かを判定する。トランスポート処理モジュール１３１は、送信データを検出するまで、工程Ｓ２２の処理を繰り返す。
【００８４】
Ｓ２３：送信データがある場合（Ｓ２２のＹｅｓ）、トランスポート処理モジュール１３１は、アプリケーションプログラム１２０から取得した送信データを読み込む。トランスポート処理モジュール１３１は、例えば、送信データを含む複数のパケットを生成し、通信制御プログラム１２１の送信レート制御モジュール１３３に出力する。
【００８５】
Ｓ２４：送信レート制御モジュール１３３は、送信データを含む複数のパケットについて、工程Ｓ２１で特定した送信周期ｓｔごとに、送信レートに応じた量のデータを送信する。工程Ｓ２４の処理の詳細は、図１２にしたがって後述する。
【００８６】
Ｓ２５：トランスポート処理モジュール１３１は、通信が完了したか否かを判定する。通信が完了していない場合（Ｓ２５のＮｏ）、工程Ｓ２２の処理に遷移し、トランスポート処理モジュール１３１は、送信データの検出を待機する。一方、通信が完了した場合（Ｓ２５のＹｅｓ）、即ち、通信の終了処理が行われた場合、通信制御プログラム１２１は処理を終了する。
【００８７】
［送信周期ｓｔの特定（図９のＳ２１）］
図１０は、図９の工程Ｓ２１の処理を模式的に説明する図である。図９で前述したとおり、送信周期測定モジュール１３２は、工程Ｓ２１の処理として、送信周期ｓｔを特定する。
【００８８】
図１０に示す矢印ｔｔは、時間の経過を示す。また、図中の時刻ｔ１は、送信周期ｓｔを指定して命令を実行した際の開始時刻を、時刻ｔ２は終了時刻を示す。また、時間ｘｔは、開始時刻ｔ１と終了時刻ｔ２の差分（測定時間）を示し、時間ｅｒｘは、差分（測定時間）ｘｔと送信周期ｓｔとの誤差を示す。
【００８９】
図１０の例によると、測定時間ｘｔは送信周期ｓｔより長い。ただし、この例に限定されるものではなく、測定時間ｘｔが送信周期ｓｔより短くなる場合もある。
【００９０】
送信周期測定モジュール１３２は、例えば、誤差ｅｒｘが第１の閾値以下である場合に、指定した送信周期ｓｔを、誤差ｅｒｘが所定の範囲に収まる送信周期として特定する。これにより、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の値より小さく抑えられる送信周期ｓｔを適切に特定できる。
【００９１】
または、送信周期測定モジュール１３２は、誤差ｅｒｘの送信周期ｓｔに対する割合が第２の閾値以下である場合に、指定した送信周期ｓｔを、誤差ｅｒｘが所定の範囲に収まる送信周期として特定する。これにより、送信周期測定モジュール１３２は、誤差ｅｒｘの送信周期ｓｔに対する割合が所定の割合より小さく抑えられる送信周期ｓｔを適切に特定できる。
【００９２】
閾値（第１、第２の閾値）は、例えば、送信レートや許容可能なバースト送信されるデータのサイズ等に基づいて決定される。または、閾値は、データを送信した場合の検証結果等にしたがって決定されてもよい。
【００９３】
誤差ｅｒｘが所定の範囲に収まっていない場合、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まるように、送信周期ｓｔを変更して測定時間ｘｔを測定する。これにより、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを特定する。
【００９４】
図１１は、図９の工程Ｓ２１の処理の詳細を説明するフローチャート図である。図１１の工程Ｓ３１〜Ｓ３４の工程は、図４のフローチャート図の工程Ｓ１１〜Ｓ１４と同様である。したがって、工程Ｓ３１〜Ｓ３４の処理の説明を省略する。
【００９５】
なお、図１１の例では、送信周期測定モジュール１３２は、誤差ｅｒｘの送信周期ｓｔに対する割合が閾値（第２の閾値）以内に収まるか否かを判定することにより、誤差ｅｒｘが所定の範囲内に収まるか否かを判定する。
【００９６】
Ｓ３５：送信周期測定モジュール１３２は、送信周期ｓｔと、終了時刻と開始時刻の差分（測定時間）ｘｔに基づいて、測定誤差を算出する。送信周期測定モジュール１３２は、誤差ｅｒｘの送信周期ｓｔに対する割合を、測定誤差として算出する。例えば、送信周期ｓｔは、値「16 ms」であって、測定時間ｘｔが値「16.5 ms」である場合、測定誤差は、値「0.03 （≒0.5 ms／16 ms）」である。
【００９７】
Ｓ３６：送信周期測定モジュール１３２は、測定誤差が閾値以下であるか否かを判定する。本実施の形態において、閾値（第２の閾値）は例えば、値「0.01」である。
【００９８】
Ｓ３７：測定誤差が閾値を超える場合（Ｓ３６のＮｏ）、送信周期測定モジュール１３２は、送信周期ｓｔを変化させ、工程Ｓ３２〜Ｓ３６の処理を行う。測定誤差「0.03」は閾値「0.01」を超える。したがって、送信周期測定モジュール１３２は、例えば、送信周期ｓｔを値「16 ms」から値「17 ms」に変更する。
【００９９】
例えば、送信周期ｓｔより測定時間ｘｔが長い場合、送信周期測定モジュール１３２は、送信周期ｓｔを前回より長い値に変化させる。一方、送信周期ｓｔより測定時間ｘｔが短い場合、送信周期測定モジュール１３２は、例えば、送信周期ｓｔを前回より短い値に変化させる。
【０１００】
このように、送信周期測定モジュール１３２は、送信周期ｓｔを差分に応じて変化させて実行及び取得を行う。これにより、送信周期測定モジュール１３２は誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを効率的に特定できる。
【０１０１】
ただし、この例に限定されるものではなく、送信周期測定モジュール１３２は、送信周期ｓｔより差分が短い場合に、送信周期ｓｔを前回より長い値に変化させてもよい。これにより、短い時間のタイマ制御の精度が低い場合、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを効率的に特定可能になる。
【０１０２】
Ｓ３８：一方、測定誤差が閾値以内である場合（Ｓ３６のＹｅｓ）、送信周期測定モジュール１３２は、現在の送信周期ｓｔを、誤差ｅｒｘが所定の範囲内に収まる送信周期ｓｔとして特定する。送信周期測定モジュール１３２は、例えば、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔとして、値「20 ms」を特定する。
【０１０３】
Ｓ３９：送信周期測定モジュール１３２は、工程Ｓ３８で特定した送信周期ｓｔを、レート制御テーブル１２２（図８）に記憶する。送信周期測定モジュール１３２は、レート制御テーブル１２２が有する各セッションの通信先に、送信周期「20 ms」ｓｔを記憶する。
【０１０４】
このように、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まるか否かを判定し、誤差ｅｒｘが所定の範囲に収まっていない場合に送信周期ｓｔを変化させて実行及び取得を行い、誤差ｅｒｘが所定の範囲に収まる場合に送信周期ｓｔに決定する。これにより、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔを効率的に特定できる。
【０１０５】
なお、送信周期測定モジュール１３２は、測定誤差が閾値以内である場合であっても（Ｓ３６のＹｅｓ）、送信周期ｓｔを前回より短い値に変更し、工程Ｓ３２〜Ｓ３６の処理を行ってもよい。これにより、送信周期測定モジュール１３２は、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔのうち、より短い送信周期ｓｔを特定できる。送信周期ｓｔが短いことにより、１回の送信周期ｓｔでバースト送信するデータ量が低減する。これにより、送信周期測定モジュール１３２は、パケットの消失の発生を抑制できる。
【０１０６】
また、送信周期測定モジュール１３２は、送信周期ｓｔに上限を設けてもよい。送信周期ｓｔが上限に達した場合、例えば、送信周期測定モジュール１３２は、送信周期ｓｔが上限を超えない範囲で誤差ｅｒｘが最も小さくなる送信周期ｓｔを特定してもよい。
【０１０７】
［送信レートの制御（図９のＳ２４）］
図１２は、図９の工程Ｓ２４の処理の詳細を説明するフローチャート図である。図９で前述したとおり、送信レート制御モジュール１３３は、工程Ｓ２４の処理として、送信周期ｓｔごとに、送信レートに応じた量のデータを送信する。
【０１０８】
Ｓ４１：送信レート制御モジュール１３３は、レート制御テーブル１２２（図８）を参照し、送信データの送信先（セッションの通信先）の送信レートを取得する。例えば、送信先が通信先「192.168.100.1:8080」である場合、送信レート制御モジュール１３３は、送信レート「300 Mbps」を取得する。
【０１０９】
Ｓ４２：送信レート制御モジュール１３３は、レート制御テーブル１２２（図８）を参照し、送信データの送信先の送信周期ｓｔを取得する。例えば、送信先が通信先「192.168.100.1:8080」である場合、送信レート制御モジュール１３３は、送信周期「20 ms」ｓｔを取得する。
【０１１０】
Ｓ４３：送信レート制御モジュール１３３は、送信周期ｓｔ内でバースト送信するデータ（以下、バーストデータと称する）のサイズを算出する。バーストデータは、１回の送信周期ｓｔで送信する、送信レートに応じたデータのサイズである。
【０１１１】
送信レート制御モジュール１３３は、式「送信レート×送信周期」にしたがってバーストデータのサイズを算出する。送信先が通信先「192.168.100.1:8080」である場合、送信レート制御モジュール１３３は、バーストデータサイズ「0.75 MB（MegaByte：MB）（＝300 Mbps×20 ms）」を取得する。
【０１１２】
Ｓ４４：送信レート制御モジュール１３３は、トランスポート処理モジュール１３１から送信データを取得する。つまり、送信レート制御モジュール１３３は、送信データが含まれる複数のパケットを取得する。
【０１１３】
Ｓ４５：送信レート制御モジュール１３３は、送信データを、工程Ｓ４３で算出したバーストデータのサイズ「0.75 MB」にしたがって、複数のバーストデータに分割する。つまり、送信レート制御モジュール１３３は、複数のパケットを、それぞれの合計サイズが値「0.75 MB」となる複数のパケット群（図５の例では、パケット群は６つのパケットを含む）に分割する。
【０１１４】
Ｓ４６：送信レート制御モジュール１３３は、送信周期ｓｔを指定した、レート制御タイマを開始する。
【０１１５】
Ｓ４７：送信レート制御モジュール１３３は、工程Ｓ４５で分割した複数のバーストデータのうち、１つのバーストデータを、通信インタフェース部１０３に送信する。これにより、送信レート制御モジュール１３３は、バーストデータに対応するパケット群を、通信インタフェース部１０３を介して、中継装置３００にバースト送信する。
【０１１６】
Ｓ４８：送信レート制御モジュール１３３は、工程Ｓ４６で開始したレート制御タイマの経過時間が、送信周期ｓｔに達したか否かを判定する。つまり、送信レート制御モジュール１３３は、ｓｌｅｅｐ関数の実行状態から復帰したか否かを判定する。送信周期ｓｔに達していない場合（Ｓ４８のＮｏ）、送信レート制御モジュール１３３は、経過時間が送信周期ｓｔに達するまで、工程Ｓ４８の判定を行う。
【０１１７】
前述したとおり、本実施の形態における送信周期ｓｔは、ｓｌｅｅｐ関数による測定時間ｘｔとの誤差ｅｒｘが所定の範囲に収まる時間である。したがって、送信レート制御モジュール１３３は、送信周期ｓｔを高精度に測定できる。
【０１１８】
Ｓ４９：送信周期ｓｔに達した場合（Ｓ４８のＹｅｓ）、送信レート制御モジュール１３３は、送信データが空になったか否かを判定する。つまり、送信レート制御モジュール１３３は、全てのバーストデータの送信が完了したか否かを判定する。送信が完了していない場合（Ｓ４９のＮｏ）、送信レート制御モジュール１３３は、工程Ｓ４６〜Ｓ４８の処理を行う。一方、送信データが空になった場合（Ｓ４９のＹｅｓ）、送信レート制御モジュール１３３は処理を終了する。
【０１１９】
このように、本実施の形態における通信制御プログラム１２１は、所定の命令に送信周期ｓｔを指定して実行した場合の、実行の開始時刻から終了時刻までの差分と、指定した送信周期ｓｔとの誤差ｅｒｘが所定の範囲に収まる送信周期を取得する。そして、通信制御プログラム１２１は、送信周期ｓｔごとに、送信レートに応じた量のデータを送信する。
【０１２０】
通信制御プログラム１２１は、送信周期ｓｔを精度よく測定できる。このため、通信制御プログラム１２１は、送信周期ｓｔごとに、送信レートに応じた量のデータを送信することで、所望の送信レートを高精度に実現できる。これにより、通信制御プログラム１２１は、中継装置３００のバッファ溢れの発生を抑制でき、パケットの消失の発生を抑制できる。したがって、スループットが向上する。
【０１２１】
また、通信制御プログラム１２１は、特定した送信周期ｓｔにしたがって、データの送信を繰り返し行う。つまり、送信周期ｓｔの特定後は、特定済みの送信周期ｓｔにしたがってデータの送信を行うことにより、送信時のオーバーヘッドを低減できる。
【０１２２】
［第３の実施の形態］
第１、第２の実施の形態の通信制御装置１００は、誤差ｅｒｘが所定の範囲に収まる送信周期ｓｔごとに、送信レートに応じた量のデータを送信する場合を例示した。第３の実施の形態における通信制御装置１００は、送信データを送信する際に、送信周期ｓｔ内で、送信データを複数の分割データに分割し、分割データ間で送信間隔を空けて送信する。これにより、通信制御装置１００は、パケットの消失の発生をさらに抑制できる。
【０１２３】
図１３は、第３の実施の形態の通信制御処理を模式的に説明する図である。図１３において、図５で示したものと同一のものは、同一の符号で示す。図１３に示す通信制御処理ｐｓ２は、図５に示した第１の実施の形態における通信制御処理を示す。一方、図１３に示す通信制御処理ｐｓ３は、第３の実施の形態における通信制御処理を示す。
【０１２４】
第３の実施の形態における通信制御装置１００は、送信周期ｓｔ内で送信するバーストデータを、複数のグループｇｒ１〜ｇｒ３（以下、グループｇｒともいう）に分割する。そして、通信制御装置１００は、各グループｇｒのパケット群（分割データ）を、グループ間で送信間隔ｇｔを空けて送信する。
【０１２５】
図１３の例によると、通信制御装置１００は、バーストデータに対応する６つのパケットｐｋ１〜ｐｋ６を、３つのグループｇｒ１〜ｇｒ３に分割する。同図の例では、各グループｇｒは、２つのパケットｐｋを含む。そして、通信制御装置１００は、送信間隔ｇｔごとにグループｇｒのパケット群を送信する。
【０１２６】
図１３に示すように、第３の実施の形態における通信制御装置１００は、送信レートに応じた量のデータを第１のサイズ（以下、許容バーストサイズと称する）にしたがって複数の分割データに分割し、分割データごとに送信間隔を空けて送信する。許容バーストサイズは、例えば、データをバースト送信した場合に、クライアント装置２００でパケットの消失が発生しないデータのサイズである。
【０１２７】
これにより、通信制御装置１００は、送信周期ｓｔ内でバースト送信する単位データのサイズを低減できる。つまり、通信制御装置１００は、送信周期ｓｔ内の、短い単位時間当たりの送信レートを平滑化できる。これにより、中継装置３００のバッファ溢れの発生を抑制可能になり、パケットの消失の発生が低減する。
【０１２８】
［ハードウェア構成］
第３の実施の形態における通信制御装置１００のハードウェア構成は、第２の実施の形態（図６）と同様である。次に、第３の実施の形態におけるクライアント装置２００（２００ａ、２００ｂ）のハードウェア構成を説明する。なお、図示していないが、中継装置３００は、ハードウェア構成として、ＣＰＵ、有線通信を行う通信インタフェース部、無線通信を行う無線通信部、バッファ領域を有するメモリ等を有する。
【０１２９】
［クライアント装置２００のハードウェア構成］
図１４は、第３の実施の形態におけるクライアント装置２００のハードウェア構成図である。クライアント装置２００は、例えば、ＣＰＵ２０１、メインメモリ２１０や補助記憶装置２１１等を備えるメモリ２０２、通信インタフェース部２０３、無線通信部２０４を有する。各部は、バス２０６を介して相互に接続する。
【０１３０】
ＣＰＵ２０１は、バス２０６を介してメモリ２０２等と接続するとともに、クライアント装置２００全体の制御を行う。通信インタフェース部２０３は、有線通信を介して、他の装置と接続し、データの送受信を行う。通信インタフェース部２０３は、例えば、ＮＩＣである。無線通信部２０４は、アンテナ２０５を介して、中継装置３００とのデータの送受信を行う。
【０１３１】
ＲＡＭ等を示すメインメモリ２１０は、ＣＰＵ２０１が処理を行うデータ等を記憶する。補助記憶装置２１１は、ＣＰＵ２０１が実行するオペレーションシステムのプログラムを格納する領域（図示せず）や、アプリケーションプログラム格納領域２２０、通信制御プログラム格納領域２２１を有する。補助記憶装置２１１は、ＨＤＤ、不揮発性半導体メモリ等を示す。
【０１３２】
アプリケーションプログラム格納領域２２０のアプリケーションプログラム（以下、アプリケーションプログラム２２０と称する）はメインメモリ２１０にロードされる。そして、ＣＰＵ２０１がメインメモリ２１０内にロードされたアプリケーションプログラム２２０を実行することによって、データの送受信を指示するアプリケーションの処理を実現する。
【０１３３】
通信制御プログラム格納領域２２１の通信制御プログラム（以下、通信制御プログラム２２１と称する）はメインメモリ２１０にロードされる。そして、ＣＰＵ２０１がメインメモリ２１０内にロードされた通信制御プログラム２２１を実行することによって、クライアント装置２００の通信制御処理を実現する。
【０１３４】
［ソフトウェアの機能］
図１５は、第３の実施の形態における通信制御装置１００、及び、クライアント装置２００のソフトウェアの機能を示す図である。図１５において、図７、図１４で示したものと同一のものは、同一の符号で示す。
【０１３５】
図１５に示す、通信制御装置１００の通信制御プログラム１２１は、第２の実施の形態（図７）に対して、許容バーストサイズ測定モジュール１３４、及び、バースト管理モジュール１３５を、さらに有する。
【０１３６】
許容バーストサイズ測定モジュール１３４は、複数の測定パケットを所定の送信レートにしたがってクライアント装置２００に送信する。そして、許容バーストサイズ測定モジュール１３４は、クライアント装置２００から許容バーストサイズを取得し、レート制御テーブル１２２ｘに記憶する。
【０１３７】
バースト管理モジュール１３５は、送信レート制御モジュール１３３から、送信周期ｓｔ内で送信する、送信レートに応じた量のデータ（バーストデータ）を取得する。そして、バースト管理モジュール１３５は、バーストデータを許容バーストサイズにしたがって複数の分割データに分割し、分割データ間に送信間隔を空けて送信する。
【０１３８】
第３の実施の形態におけるレート制御テーブル１２２ｘは、第２の実施の形態のレート制御テーブル１２２に対して、許容バーストサイズに関する情報を有する。レート制御テーブル１２２ｘの一例については、図２１にしたがって後述する。
【０１３９】
図１５に示すクライアント装置２００の通信制御プログラム２２１は、トランスポート処理モジュール２３１と、許容バーストサイズ測定モジュール２３２を有する。
【０１４０】
トランスポート処理モジュール２３１は、無線通信部２０４を介して受信したパケットに含まれるデータを、アプリケーションプログラム２２０に出力する。または、トランスポート処理モジュール２３１は、アプリケーションプログラム２２０から受信した送信対象のデータを含むパケットを生成し、無線通信部２０４を介して通信制御装置１００に送信する。
【０１４１】
許容バーストサイズ測定モジュール２３２は、通信制御装置１００から測定パケットを、無線通信部２０４を介して受信する。そして、許容バーストサイズ測定モジュール２３２は、測定パケットの受信結果に基づいて許容バーストサイズを決定し、無線通信部２０４を介して通信制御装置１００に通知する。
【０１４２】
［通信制御プログラム１２１の処理の流れ］
図１６は、図１５に示した、通信制御装置１００の通信制御プログラム１２１の処理の流れを説明するフローチャート図である。工程Ｓ５１の処理は、第２の実施の形態の工程Ｓ２１（図９）の処理と同様である。
【０１４３】
Ｓ５２：許容バーストサイズ測定モジュール１３４は、通信セッションの開始時に、許容バーストサイズの測定処理を行う。また、許容バーストサイズ測定モジュール１３４は、許容バーストサイズをレート制御テーブル１２２ｘに記憶する。工程Ｓ５２の処理の詳細は、図１７〜図２０にしたがって後述する。
【０１４４】
このように、許容バーストサイズ測定モジュール１３４は、クライアント装置２００とのセッションを開始するときに許容バーストサイズを測定する。これにより、許容バーストサイズ測定モジュール１３４は、データの送信時の中継装置３００の負荷状態に基づいて、許容バーストサイズを決定できる。
【０１４５】
Ｓ５３：トランスポート処理モジュール１３１は、送信データがあるか否かを判定する。工程Ｓ５３の処理は、第２の実施の形態における工程Ｓ２２（図９）の処理と同様である。
【０１４６】
Ｓ５４：送信データがある場合（Ｓ５３のＹｅｓ）、トランスポート処理モジュール１３１は、アプリケーションプログラム１２０から取得した送信データを読み込む。工程Ｓ５４の処理は、第２の実施の形態における工程Ｓ２３（図９）の処理と同様である。
【０１４７】
Ｓ５５：送信レート制御モジュール１３３は、送信周期ｓｔごとに、送信レートに応じた量のデータを送信する際に、バースト管理モジュール１３５を呼び出す。バースト管理モジュール１３５は、送信周期ｓｔ内で送信するデータを許容バーストサイズにしたがって複数の分割データに分割し、分割データ間で送信間隔を空けて送信する。工程Ｓ５５の処理の詳細は、図２２、図２３にしたがって後述する。
【０１４８】
Ｓ５６：トランスポート処理モジュール１３１は、通信が完了したか否かを判定する。通信が完了していない場合（Ｓ５６のＮｏ）、工程Ｓ５３に遷移し、トランスポート処理モジュール１３１は送信データの検出を待機する。一方、通信が完了した場合（Ｓ５６のＹｅｓ）、即ち、通信の終了処理が行われた場合、通信制御プログラム１２１は処理を終了する。
【０１４９】
［許容バーストサイズの測定処理の流れ］
図１７は、許容バーストサイズの測定処理（図１６の工程Ｓ５２）のシーケンス図である。図１７は、通信制御装置１００の許容バーストサイズ測定モジュール１３４の処理、及び、クライアント装置２００の許容バーストサイズ測定モジュール２３２の処理を示す。
【０１５０】
以下、通信制御装置１００の許容バーストサイズ測定モジュール１３４を、送信側測定モジュール１３４と称する。また、クライアント装置２００の許容バーストサイズ測定モジュール２３２を、受信側測定モジュール２３２と称する。
【０１５１】
送信側測定モジュール１３４は、測定パケットを送信する際の送信レートを、クライアント装置２００に通知する（ａ１）。受信側測定モジュール２３２は、送信レートを受信したことを示す応答を、送信側測定モジュール１３４に送信する（ａ２）。
【０１５２】
送信側測定モジュール１３４は、複数の測定パケットを、通知した送信レートにしたがって、クライアント装置２００にバースト送信する（ａ３）。受信側測定モジュール２３２は、測定パケットを受信するとともに、複数の測定パケットの受信結果に基づいて、許容バーストサイズを決定する。
【０１５３】
受信側測定モジュール２３２は、決定した許容バーストサイズを、通信制御装置１００に通知する（ａ４）。送信側測定モジュール１３４は、許容バーストサイズと送信バーストサイズ（複数の測定パケットの合計サイズ）とに基づいて、工程ａ３、ａ４を繰り返す（ａ５）。
【０１５４】
図１８は、測定パケットの送受信の一例を説明する図である。図１８の例では、送信側測定モジュール１３４は、１０個の測定パケットＭｐｋを、中継装置３００を介して、クライアント装置２００にバースト送信する（ａ３）。このときの送信レートｘ１は、値「１０個のパケットの合計サイズ／１０個のパケットの送信時間」である。
【０１５５】
図１８の例によると、受信側測定モジュール２３２は、１個目〜５個目のパケットを連続して受信する（ａ３）。一方、点線の矩形で示す、６、７個目のパケットは消失する。また、受信側測定モジュール２３２は、８個目〜１０個目のパケットを受信するものの、８個目〜１０個目のパケットの受信間隔は、１個目〜５個目のパケットを受信間隔に対して長い。
【０１５６】
図１８の例において、１個目〜５個目のパケットの受信レート「１個目〜５個目のパケットの合計サイズ／１個目〜５個目のパケットの受信時間」ｘ２は、送信レートｘ１と同一である。一方、６個目〜１０個目のパケットの受信レート「８個目〜１０個目のパケットの合計サイズ／６個目〜１０個目のパケットの受信時間」ｘ３は、送信レートｘ１より小さい。
【０１５７】
したがって、受信側測定モジュール２３２は、例えば、受信レートと送信レートが一致するパケット（図１８の例では、１個目〜５個目のパケット）の合計サイズを、許容バーストサイズに決定する。または、受信側測定モジュール２３２は、パケットロスの発生前の受信済みパケット（図１８の例では、１個目〜５個目のパケット）の合計サイズを、許容バーストサイズに決定してもよい。
【０１５８】
許容バーストサイズは、中継装置３００のバッファサイズや、バッファの使用状態に応じて変動する。バッファの使用状態は、中継装置３００が接続する他のネットワークの負荷にも依存する。また、中継する中継装置３００が変わる場合もある。
【０１５９】
また、中継装置３００はプロバイダの管理下にあるため、運用担当者が、中継装置３００のバッファサイズを検知できない場合がある。さらに、中継装置３００は他の業務のネットワークでも使用されるため、運用担当者が、中継装置３００のバッファの使用状態を検知することは容易ではない。
【０１６０】
したがって、図１８のように、送信側測定モジュール１３４は、データの送信先のクライアント装置２００におけるパケットの受信状態に基づいて、第１のサイズ（許容バーストサイズ）を決定する。中継装置３００を経由してクライアント装置２００に到達したパケットの受信状態に基づくことにより、送信側測定モジュール１３４は、中継装置３００のバッファサイズやバッファの使用状態に応じた許容バーストサイズを決定できる。
【０１６１】
このように、送信側測定モジュール１３４は、中継装置３００のバッファサイズやバッファの使用状態を検知できない場合であっても、バッファのサイズや仕様状態を考慮した許容バーストサイズを決定できる。これにより、バッファ溢れの発生を適切に抑制することが可能になる。
【０１６２】
具体的に、送信側測定モジュール１３４は、例えば、クライアント装置２００においてパケットロスが発生しないパケット群のサイズに基づいて、許容バーストサイズを決定する。これにより、送信側測定モジュール１３４は、送信周期ｓｔ内でバースト送信するデータのサイズを、クライアント装置２００でパケットの消失が発生し難いサイズに低減できる。
【０１６３】
また、送信側測定モジュール１３４は、例えば、クライアント装置２００に対する送信レートと、クライアント装置２００における受信レートが一致するパケット群のサイズに基づいて、許容バーストサイズを決定する。これにより、送信側測定モジュール１３４は、送信周期ｓｔ内でバースト送信するデータのサイズを、クライアント装置２００で受信レートの低下が生じ難いサイズに低減できる。
【０１６４】
［許容バーストサイズの測定（図１６の工程Ｓ５２）］
図１９は、図１６の工程Ｓ５２の、送信側測定モジュール（許容バーストサイズ測定モジュール）１３４の処理の詳細を説明するフローチャート図である。
【０１６５】
Ｓ６１：送信側測定モジュール１３４は、前回測定時刻から、セッションの通信先に応じた所定期間が経過したか否かを判定する。前回測定時刻は、前回、許容バーストサイズを測定した日付及び時刻である。
【０１６６】
前述したとおり、許容バーストサイズは、経由する中継装置３００のバッファサイズやバッファの使用状態に応じて変動する。したがって、通信制御装置１００は、許容バーストサイズを定期的に測定する。ただし、許容バーストサイズを測定することにより、通信処理のオーバーヘッドが発生する。
【０１６７】
したがって、通信制御装置１００は、例えば、前回測定時間から所定期間が経過した場合に、許容バーストサイズを測定する。これにより、通信制御装置１００は、許容バーストサイズの測定による通信処理のオーバーヘッドの増大を抑制できる。一方、所定期間が経過していない場合、通信制御装置１００は、前回、測定した許容バーストサイズを使用する。
【０１６８】
所定期間は、セッションの通信先ごとに、例えば、経由するネットワークに応じて異なる。例えば、経由するネットワークが共有回線である場合、専用回線である場合に対して、ネットワークの負荷が変化し易い。したがって、共有回線を経由するセッションの通信先の所定期間は、専用回線を経由するセッションの通信先に対して短い。例えば、専用回線を経由するセッションの通信先の所定期間は一日であって、共有回線を経由するセッションの通信先の所定期間は数時間（例えば、３時間）である。
【０１６９】
このように、通信制御装置１００は、所定期間ごとに、許容バーストサイズを測定し直す。このため、通信制御装置１００は、通信先のクライアント装置２００とのセッションが切断された場合であっても、レート制御テーブル１２２ｘの情報を削除せず保持する。このため、前回測定時刻から所定期間が経過していない場合（Ｓ６１のＹｅｓ）、送信側測定モジュール１３４は、処理を終了する。
【０１７０】
Ｓ６２：一方、所定期間が経過した場合（Ｓ６１のＮｏ）、送信側測定モジュール１３４は、複数の測定パケットを送信する際の送信レートをクライアント装置２００に通知する。
【０１７１】
Ｓ６３：送信側測定モジュール１３４は、複数の測定パケットを、工程Ｓ６２で通知した送信レートにしたがって、クライアント装置２００に送信する。
【０１７２】
Ｓ６４：送信側測定モジュール１３４は、クライアント装置２００から、許容バーストサイズを受信する。
【０１７３】
Ｓ６５：送信側測定モジュール１３４は、送信バーストサイズ（複数の測定パケットの合計サイズ）と、受信した許容バーストサイズとが一致するか否かを判定する。
【０１７４】
Ｓ６６：一致する場合（Ｓ６５のＹｅｓ）、送信バーストサイズのデータをバースト送信した場合でも、パケットの消失が発生しないことを示す。つまり、一致する場合は、許容バーストサイズをより大きな値に決定可能な場合である。したがって、送信側測定モジュール１３４は、送信バーストサイズを増加させ、工程Ｓ６３〜Ｓ６５の処理を実行する。送信側測定モジュール１３４は、例えば、送信バーストサイズを２倍の値に増加させる。
【０１７５】
Ｓ６７：一致しない場合（Ｓ６５のＮｏ）、許容バーストサイズが送信バーストサイズより小さいことを示す。したがって、送信側測定モジュール１３４は、レート制御テーブル１２２ｘに、受信した許容バーストサイズを記憶する。
【０１７６】
図２０は、図１６の工程Ｓ５２の、受信側測定モジュール（許容バーストサイズ測定モジュール）２３２の処理の詳細を説明するフローチャート図である。
【０１７７】
Ｓ７１：受信側測定モジュール２３２は、通信制御装置１００から送信レートを受信する。このとき、受信側測定モジュール２３２は、送信レートを受信した旨の応答を、送信側測定モジュール１３４に送信する。
【０１７８】
Ｓ７２：受信側測定モジュール２３２は、通信制御装置１００から、複数の測定パケットを受信する。このとき、受信側測定モジュール２３２は、受信結果に基づいて、複数の測定パケットの受信レートや、パケットロスの発生状態を取得する。
【０１７９】
Ｓ７３：受信側測定モジュール２３２は、測定パケットの受信レートと、工程Ｓ７１で受信した送信レートが一致するサイズを、許容バーストサイズとして決定する。または、受信側測定モジュール２３２は、複数の測定パケットのうち、パケットの消失が発生していない測定パケットのサイズを、許容バーストサイズとして決定してもよい。
【０１８０】
Ｓ７４：受信側測定モジュール２３２は、工程Ｓ７３で決定した許容バーストサイズを、通信制御装置１００に通知する。
【０１８１】
なお、本実施の形態では、受信側測定モジュール２３２が、許容バーストサイズを決定する。ただし、送信側測定モジュール１３４が、許容バーストサイズを決定してもよい。この場合、送信側測定モジュール１３４は、受信側測定モジュール２３２から受信レートやパケットロスの発生状態を取得し、許容バーストサイズを決定する。
【０１８２】
［レート制御テーブル１２２ｘ］
図２１は、図１５で説明したレート制御テーブル１２２ｘの一例を説明する図である。図２１に示すレート制御テーブル１２２ｘは、第２の実施の形態のレート制御テーブル１２２（図８）に対して、許容バーストサイズ、及び、前回測定時刻の情報を有する。
【０１８３】
図２１に示すレート制御テーブル１２２ｘの例によると、セッションの通信先「192.168.0.1:80」の許容バーストサイズは、値「20 KB（KiloByte：KB）」であって、前回測定時刻は時刻「2016/01/28 10:00」である。また、セッションの通信先「192.168.100.1:8080」の許容バーストサイズは、値「30 KB」であって、前回測定時刻は時刻「2016/01/26 19:00」である。
【０１８４】
許容バーストサイズは、経由する中継装置３００に応じて異なる。したがって、図２１に示すレート制御テーブル１２２ｘは、セッションの通信先ごとに異なる許容バーストサイズを有する。
【０１８５】
［送信レートの制御（図１６の工程Ｓ５５）］
図２２は、図１６の工程Ｓ５５の処理の詳細を説明するフローチャート図である。図２２のＳ８１〜Ｓ８６の処理は、図１２で説明したＳ４１〜Ｓ４６の処理と同様である。
【０１８６】
Ｓ８７：レート制御タイマを開始すると、送信レート制御モジュール１３３は、複数のバーストデータのうち、１つのバーストデータを、バースト管理モジュール１３５に送信する。バースト管理モジュール１３５は、バーストデータを許容バーストサイズにしたがって複数の分割データに分割し、分割データごとに送信間隔を空けて送信する。工程Ｓ８７の処理の詳細は、図２３のフローチャート図で後述する。
【０１８７】
Ｓ８８：送信レート制御モジュール１３３は、工程Ｓ８６で開始したレート制御タイマによる経過時間が、送信周期ｓｔに達したか否かを判定する。送信周期ｓｔに達していない場合（Ｓ８８のＮｏ）、送信レート制御モジュール１３３は、レート制御タイマによる経過が送信周期ｓｔに達するまで、工程Ｓ８８の判定を行う。
【０１８８】
Ｓ８９：一方、送信周期ｓｔに達した場合（Ｓ８８のＹｅｓ）、送信レート制御モジュール１３３は、送信データが空になったか否かを判定する。つまり、送信レート制御モジュール１３３は、全てのバーストデータの送信が完了したか否かを判定する。送信が完了していない場合（Ｓ８９のＮｏ）、送信レート制御モジュール１３３は、工程Ｓ８６〜Ｓ８８の処理を行う。一方、送信データが空になった場合（Ｓ８９のＹｅｓ）、送信レート制御モジュール１３３は、処理を終了する。
【０１８９】
［分割データの送信（図２２のＳ８７）］
図２３は、図２２の工程Ｓ８７の処理の詳細を説明するフローチャート図である。バースト管理モジュール１３５は、工程Ｓ８７の処理として、バーストデータを許容バーストサイズにしたがって複数の分割データに分割し、分割データごとに送信間隔を空けて送信する。
【０１９０】
Ｓ９１：バースト管理モジュール１３５は、レート制御テーブル１２２ｘ（図２１）を参照し、送信データの送信先（セッションの通信先）の許容バーストサイズを取得する。データの送信先が通信先「192.168.100.1:8080」である場合、バースト管理モジュール１３５は、許容バーストサイズ「30 KB」を取得する。
【０１９１】
Ｓ９２：バースト管理モジュール１３５は、送信レート制御モジュール１３３から、バーストデータを取得する。
【０１９２】
Ｓ９３：バースト管理モジュール１３５は、ギャップ（以下、送信間隔と称する）（図１３の送信間隔ｇｔ）を算出する。具体的に、バースト管理モジュール１３５は、式「送信周期／分割データの数」にしたがって、送信間隔ｇｔを算出する。また、分割データの数は、式「バーストデータのサイズ／許容バーストサイズ」にしたがって算出される。
【０１９３】
このように、バースト管理モジュール１３５は、分割データの数と送信周期ｓｔとに基づいて、送信間隔ｇｔを決定する。これにより、バースト管理モジュール１３５は、送信周期ｓｔ内で、均等の送信間隔ｇｔごとに分割データをバースト送信できる。
【０１９４】
Ｓ９４：バースト管理モジュール１３５は、バーストデータを、許容バーストサイズ「30 KB」にしたがって、複数の分割データに分割する。つまり、バースト管理モジュール１３５は、バーストデータを、それぞれの合計サイズが値「30 KB」となる複数の分割データ（図１３の例では、３つの分割データ）に分割する。
【０１９５】
Ｓ９５：バースト管理モジュール１３５は、送信間隔ｇｔを指定したギャップタイマを開始する。具体的に、バースト管理モジュール１３５は、送信間隔ｇｔを指定したｓｌｅｅｐ関数を実行する。
【０１９６】
工程Ｓ９５では、ｓｌｅｅｐ関数に、送信周期ｓｔより短い送信間隔ｇｔを指定するため、送信間隔ｇｔの測定時間に誤差が生じる場合がある。ただし、本実施の形態では、送信周期ｓｔを高精度に測定可能であるため、送信周期ｓｔごとに送信レートに応じた量のデータを送信することが可能である。したがって、送信間隔ｇｔに誤差が生じた場合であっても、送信レートを高精度に制御することが可能である。
【０１９７】
Ｓ９６：バースト管理モジュール１３５は、工程Ｓ９４で分割した複数の分割データのうち、１つの分割データを、通信インタフェース部１０３に送信する。これにより、バースト管理モジュール１３５は、分割データが含むパケットを、通信インタフェース部１０３を介して、中継装置３００にバースト送信する。
【０１９８】
Ｓ９７：バースト管理モジュール１３５は、工程Ｓ９５で開始したギャップタイマによる経過時間が、送信間隔ｇｔに達したか否かを判定する。つまり、バースト管理モジュール１３５は、ｓｌｅｅｐ関数による停止状態から復帰したか否かを判定する。送信間隔ｇｔに達していない場合（Ｓ９７のＮｏ）、バースト管理モジュール１３５は、経過時間が送信間隔ｇｔに達するまで、工程Ｓ９７の判定を行う。
【０１９９】
Ｓ９８：送信間隔ｇｔに達した場合（Ｓ９７のＹｅｓ）、バースト管理モジュール１３５は、バーストデータが空になったか否かを判定する。つまり、バースト管理モジュール１３５は、１つのバーストデータの送信が完了したか否かを判定する。送信が完了していない場合（Ｓ９８のＮｏ）、バースト管理モジュール１３５は、工程Ｓ９５〜Ｓ９７の処理を行う。一方、バーストデータが空になった場合（Ｓ９８のＹｅｓ）、バースト管理モジュール１３５は処理を終了する。
【０２００】
このように、第３の実施の形態における通信制御装置１００は、送信周期ｓｔ内で送信するバーストデータを、許容バーストサイズにしたがって複数の分割データに分割し、分割データごとに送信間隔ｇｔを空けて送信する。これにより、通信制御装置１００は、送信周期ｓｔ内でバースト送信する単位データのサイズを低減でき、中継装置３００のバッファ溢れの発生を抑制可能になる。
【０２０１】
次に、図２４、図２５にしたがって、送信周期ｓｔ内で、バーストデータを分割した分割データ間で送信間隔を空けて送信する場合の送信レートの変移とを説明する。
【０２０２】
図２４は、送信周期ｓｔごとにバーストデータを送信する場合の送信レートの変移を表す図である。図２４の横軸は時間の経過を示し、縦軸は値「10 ms」単位の送信レート（Mbps）を示す。同図は、送信周期ｓｔ「20 ms」であって、送信レート「300 Mbps」である場合の送信レートを示す。同図に示すように、送信周期ｓｔごとにバーストデータをバースト送信するときの、送信レートの振幅は大きい。
【０２０３】
図２５は、送信周期ｓｔごとにバーストデータを分割して送信する場合の送信レートの変移を表す図である。図２５の縦軸、及び、横軸は、図２４と同様である。図２５は、図２４と同様にして、送信周期ｓｔ「20 ms」であって、送信レート「300 Mbps」である場合の送信レートを示す。また、同図における許容バーストサイズは、値「30 KB」である。
【０２０４】
送信周期ｓｔ内で分割データごとに送信間隔を空けて送信する場合、図２４の例に対して、バースト送信する単位データのサイズが低減する。このため、図２４の例に対して、値「10 ms」単位の送信レートの振幅が低減し、送信レートが平滑化される。これにより、中継装置３００のバッファ溢れの発生を抑制可能になる。したがって、パケットの消失の発生度合いを低減可能になり、スループットが改善する。
【０２０５】
なお、図２４における平均スループットは、値「76 Mbps」である。これに対し、図２５における平均のスループットは、値「253 Mbps」である。このように、バーストデータを分割して送信することによって、パケットの消失の発生が低減するため、スループットが３倍に向上する。
【０２０６】
なお、通信制御装置１００は、バーストデータを、許容バーストサイズより小さいサイズ（例えば、20 KB）の分割データに分割し、工程Ｓ９３（図２３）で算出した送信間隔より短い間隔ごとに送信してもよい。即ち、バーストデータを分割するデータサイズが、データの送信先のクライアント装置２００におけるパケットの受信状態に基づいて決定されるサイズより小さく、送信間隔が、分割データの数と送信周期とに基づいて決定される時間より短くてもよい。
【０２０７】
これにより、通信制御装置１００は、送信周期ｓｔ内で、許容バーストサイズ（例えば、30 KB）より小さいサイズ（例えば、20 KB）の分割データを、より短い送信間隔ごとにバースト送信する。例えば、通信制御装置１００は、時間「0」を指定してｓｌｅｅｐ関数を実行することにより、短い送信間隔を挿入できる。これにより、通信制御装置１００は、送信周期ｓｔ内でバースト送信する単位データのサイズをさらに低減でき、バッファ溢れの発生をより効率的に抑制可能になる。
【０２０８】
［第４の実施の形態例］
第１〜第３の実施の形態では、通信制御装置１００が、システムの起動時に、送信周期ｓｔを測定する場合を例示した。これに対し、第４の実施の形態における通信制御装置１００は、予め送信周期ｓｔを特定し、システムの起動時に特定済みの送信周期ｓｔを取得する。これにより、通信制御装置１００は、システムの起動時のオーバーヘッドを小さくできる。
【０２０９】
また、第３の実施の形態では、通信制御装置１００が、セッションの開始時に、許容バーストサイズの測定処理を行う場合を例示した。これに対し、第４の実施の形態の通信制御装置１００は、セッションの終了時に、許容バーストサイズの測定処理を行う。これにより、通信制御装置１００は、セッション開始時の許容バーストサイズの測定処理のオーバーヘッドを小さくできる。
【０２１０】
第４の実施の形態における通信制御装置１００、中継装置３００、及び、クライアント装置２００のハードウェア構成は、第３の実施の形態と同様である。また、通信制御装置１００、及び、クライアント装置２００のソフトウェアブロックも、第３の実施の形態と同様である。
【０２１１】
図２６は、第４の実施の形態における通信制御装置１００の通信制御プログラム１２１の処理を説明するフローチャート図である。例えば、通信制御装置１００は、オペレーションシステムごとに、または、通信制御装置１００ごとに、特定済みの送信周期ｓｔを有する。
【０２１２】
Ｓ１０１：システムの起動時に、送信周期測定モジュール１３２は、通信制御装置自体、または、通信制御装置１００のオペレーションシステムに対応する送信周期ｓｔを取得し、レート制御テーブル１２２ｘに記憶する。レート制御テーブル１２２ｘは、第３の実施の形態と同様である。
【０２１３】
このように、送信周期測定モジュール１３２は、システムの起動時に、送信周期ｓｔの特定処理を省略でき、特定処理によるオーバーヘッドを低減できる。工程Ｓ１０２〜工程Ｓ１０５の処理は、図１６の工程Ｓ５３〜Ｓ５６と同様である。
【０２１４】
Ｓ１０６：そして、通信が完了した場合（Ｓ１０５のＹｅｓ）、即ち、通信の終了処理が行われた場合、許容バーストサイズ測定モジュール１３４は、許容バーストサイズの測定処理を行う。工程Ｓ１０６の処理の詳細は、図１６の工程Ｓ５２で説明したとおりである。許容バーストサイズの測定処理を終了すると、通信制御プログラム１２１は処理を終了する。
【０２１５】
このように、許容バーストサイズ測定モジュール１３４は、受信装置（クライアント装置）２００との通信を終了するとき、第１のデータサイズ（許容バーストサイズ）を決定する。これにより、許容バーストサイズ測定モジュール１３４は、データ送信時のオーバーヘッドを低減し、スループットをさらに向上できる。
【０２１６】
［別の実施の形態］
なお、上記の実施の形態では、ＴＣＰにしたがって、データをクライアント装置２００に送信する場合を例示した。ただし、この例に限定されるものではない。通信制御装置１００は、ＵＤＰ（User Datagram Protocol）にしたがって、データをクライアント装置２００に送信する場合についても、送信レートの高精度な制御を実現できる。これにより、通信制御装置１００は、スループットを向上できる。
【０２１７】
以上の実施の形態をまとめると、次の付記のとおりである。
【０２１８】
（付記１）
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、
処理をコンピュータに実行させる通信制御プログラム。
【０２１９】
（付記２）
付記１において、さらに、
前記送信周期ごとに、送信レートに応じた量のデータを送信する、
通信制御プログラム。
【０２２０】
（付記３）
付記１において、
前記特定は、前記誤差が前記所定の範囲に収まるか否かを判定し、前記誤差が前記所定の範囲に収まっていない場合に前記送信周期を前記変化させて前記実行及び前記取得を行い、前記誤差が前記所定の範囲に収まる場合に前記送信周期に決定する、
通信制御プログラム。
【０２２１】
（付記４）
付記１において、
前記特定は、前記送信周期を前記差分に応じて変化させて前記実行及び前記取得を行う、
通信制御プログラム。
【０２２２】
（付記５）
付記１において、
前記特定は、前記誤差が第１の閾値以下である場合に、前記指定した送信周期を、前記誤差が前記所定の範囲に収まる送信周期として特定する、
通信制御プログラム。
【０２２３】
（付記６）
付記１において、
前記特定は、前記誤差の前記指定した送信周期に対する割合が第２の閾値以下である場合に、前記指定した送信周期を、前記誤差が前記所定の範囲に収まる送信周期として特定する、
通信制御プログラム。
【０２２４】
（付記７）
付記２において、
前記送信は、特定した前記送信周期に基づいて、前記送信を繰り返す、
通信制御プログラム。
【０２２５】
（付記８）
付記１において、
前記所定の命令は、指定された時間、所定の処理を行う命令である、
通信制御プログラム。
【０２２６】
（付記９）
付記２において、
前記送信は、前記送信レートに応じた量のデータを第１のサイズにしたがって複数の分割データに分割し、分割データごとに送信間隔を空けて送信する、
通信制御プログラム。
【０２２７】
（付記１０）
付記９において、
前記送信は、前記データの送信先の受信装置におけるパケットの受信状態に基づいて、前記第１のサイズを決定する、
通信制御プログラム。
【０２２８】
（付記１１）
付記１０において、
前記パケットの受信状態は、パケットロスが発生しないパケット群のサイズである、
通信制御プログラム。
【０２２９】
（付記１２）
付記１０において、
前記パケットの受信状態は、前記受信装置に対する送信レートと、前記受信装置における受信レートが一致するパケット群のサイズである、
通信制御プログラム。
【０２３０】
（付記１３）
付記１０において、
前記送信は、前記受信装置との通信を開始するとき、または、前記通信を終了するときに、前記第１のサイズを決定する、
通信制御プログラム。
【０２３１】
（付記１４）
付記９において、
前記送信は、前記分割データの数と前記送信周期とに基づいて、前記送信間隔を決定する、
通信制御プログラム。
【０２３２】
（付記１５）
付記９において、
前記第１のサイズは、前記データの送信先の受信装置におけるパケットの受信状態に基づいて決定されるサイズより小さく、
前記送信間隔は、前記分割データの数と前記送信周期とに基づいて決定される時間より短い、
通信制御プログラム。
【０２３３】
（付記１６）
所定の命令に送信周期を指定して実行する際の、前記実行の開始時刻から前記実行の終了時刻までの差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を取得し、
前記送信周期ごとに、送信レートに応じた量のデータを送信する、
処理をコンピュータに実行させる通信制御プログラム。
【０２３４】
（付記１７）
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得し、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する、
通信制御方法。
【０２３５】
（付記１８）
所定の命令に送信周期を指定して実行するとともに、前記実行を開始した開始時刻、及び、前記実行から復帰した終了時刻を取得する取得部と、
前記送信周期を変化させて前記実行及び前記取得を行い、前記終了時刻と前記開始時刻の差分と、指定した前記送信周期との誤差が所定の範囲に収まる送信周期を特定する特定部と、
を有する通信制御装置。
【符号の説明】
【０２３６】
１００（１００ａ、１００ｂ）：通信制御装置、１０１：ＣＰＵ、１０２：メモリ、１０３：通信インタフェース部、１０６：バス、１１０：メインメモリ、１１１：補助記憶装置、１２０：アプリケーションプログラム、１２１：通信制御プログラム、１２２：レート制御テーブル、２００（２００ａ、２００ｂ）：クライアント装置
【図１】
2017224995.tif 000003
【図２】
2017224995.tif 000004
【図３】
2017224995.tif 000005
【図４】
2017224995.tif 000006
【図５】
2017224995.tif 000007
【図６】
2017224995.tif 000008
【図７】
2017224995.tif 000009
【図８】
2017224995.tif 000010
【図９】
2017224995.tif 000011
【図１０】
2017224995.tif 000012
【図１１】
2017224995.tif 000013
【図１２】
2017224995.tif 000014
【図１３】
2017224995.tif 000015
【図１４】
2017224995.tif 000016
【図１５】
2017224995.tif 000017
【図１６】
2017224995.tif 000018
【図１７】
2017224995.tif 000019
【図１８】
2017224995.tif 000020
【図１９】
2017224995.tif 000021
【図２０】
2017224995.tif 000022
【図２１】
2017224995.tif 000023
【図２２】
2017224995.tif 000024
【図２３】
2017224995.tif 000025
【図２４】
2017224995.tif 000026
【図２５】
2017224995.tif 000027
【図２６】
2017224995.tif 000028