(57)【要約】【課題】送信装置の送信処理性能に依ることなく送信装置の送信バッファサイズの最大値を推定すること。【解決手段】送信装置３００から送信されたデータパケットを受信して、その受信データを受信バッファ１２に格納し、受信データが処理され受信バッファ１２が空になった後に、受信データに対するＡＣＫ応答を送信装置３００に送信し、受信データのシーケンス番号とＡＣＫ応答の確認応答番号との差から送信装置３００の送信バッファサイズを計算し、以前に計算した送信バッファサイズと比較して最大値を送信装置３００の送信バッファサイズとする。【選択図】図１
2014027444.tif 000002
【特許請求の範囲】
【請求項１】
送信装置から送信されたデータパケットを受信して、その受信データを受信バッファに格納するデータ受信手段と、
前記受信データが処理され前記受信バッファが空になった後に、前記受信データに対する確認応答を前記送信装置に送信するデータ送信手段と、
前記受信データに関する制御データ又は前記受信バッファの使用状況に基づいて前記送信装置の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を前記送信装置の送信バッファサイズとするバッファサイズ推定手段と、
を有することを特徴とする送信バッファサイズ推定装置。
【請求項２】
前記バッファサイズ推定手段は、
前記受信データのシーケンス番号と前記確認応答の確認応答番号との差から前記送信バッファサイズの推定値を計算することを特徴とする請求項１記載の送信バッファサイズ推定装置。
【請求項３】
前記バッファサイズ推定手段は、
前記受信バッファに格納された前記受信データのバッファ使用量から前記送信バッファサイズの推定値を計算することを特徴とする請求項１記載の送信バッファサイズ推定装置。
【請求項４】
前記データパケットは、
前記確認応答を送信してから次の確認応答を送信するまでの間に受信した１つ以上のセグメントであることを特徴とする請求項１乃至３のいずれかに記載の送信バッファサイズ推定装置。
【請求項５】
コンピュータにより、
送信装置から送信されたデータパケットを受信して、その受信データを受信バッファに格納するデータ受信ステップと、
前記受信データが処理され前記受信バッファが空になった後に、前記受信データに対する確認応答を前記送信装置に送信するデータ送信ステップと、
前記受信データに関する制御データ又は前記受信バッファの使用状況に基づいて前記送信装置の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を前記送信装置の送信バッファサイズとするバッファサイズ推定ステップと、
を有することを特徴とする送信バッファサイズ推定方法。
【請求項６】
請求項５記載の送信バッファサイズ推定方法をコンピュータに実行させることを特徴とする送信バッファサイズ推定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ送信装置の送信バッファサイズを推定する技術に関する。
【背景技術】
【０００２】
インターネット等の通信ネットワーク上に配備されたコンピュータは、クライアント側からの要求に応じてデータを送信する送信装置と、その要求を行いサーバ側から返信されたデータを受信する受信装置とに大きく分類される。
【０００３】
それら各装置は通信によってデータ転送を実現するが、データ転送時に通信速度が遅くなる事象が発生する場合がある。その事象の原因は様々であるが、その１つとして送信装置の送信バッファ容量が不足することにより、装置間のデータ転送効率が低下することが考えられる。
【０００４】
しかし、送信バッファサイズは送信装置で独自に決定される通常未開示の値であるため、それを知るには通信先である送信装置の機器仕様や割当容量を調査する必要があることから、受信装置でその実値を取得することは困難である。
【０００５】
これについて特許文献１の従来技術によれば、送信装置からのデータに対して受信応答を積極的に行わないことにより、再送信されるデータに基づき送信装置の再送バッファの最大容量を推定する技術を開示している。
【０００６】
つまり、送信装置から送信されたデータに対してＡＣＫ応答を返信しないこととし、そのデータを送信装置の再送バッファにあえて蓄積させる。その後、再送タイマーが満了すると、その再送バッファに蓄積されたデータが再送されることから、その再送数を測定することにより再送バッファサイズを推定している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−６１５３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、送信装置の送信処理において、時間の経過に伴い送信データ量を徐々に増加させるアルゴリズムが適用されている場合には、特許文献１の従来技術を利用したとしても、その送信装置の送信バッファサイズを正確に推定することはできない。
【０００９】
すなわち、例えばスロースタートアルゴリズムによれば、送信するセグメント数が徐々に増加してその後再送タイマーが満了した場合には、通信ネットワークで輻輳が発生したと判断して送信データ量を減少させてしまうため（図６参照）、これにより再送バッファに格納されるデータ量が抑制されることから、その時点で使用している再送バッファサイズの推定は可能であるが、実際に割り当てられている又は機器仕様上の再送バッファサイズを推定することは困難である。
【００１０】
本発明は、上記のような問題点を鑑みてなされたものであり、送信装置の送信処理性能に依ることなく送信装置の送信バッファサイズの最大値を推定することを課題とする。
【課題を解決するための手段】
【００１１】
請求項１記載の送信バッファサイズ推定装置は、送信装置から送信されたデータパケットを受信して、その受信データを受信バッファに格納するデータ受信手段と、前記受信データが処理され前記受信バッファが空になった後に、前記受信データに対する確認応答を前記送信装置に送信するデータ送信手段と、前記受信データに関する制御データ又は前記受信バッファの使用状況に基づいて前記送信装置の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を前記送信装置の送信バッファサイズとするバッファサイズ推定手段と、を有することを特徴とする。
【００１２】
本発明によれば、送信装置から送信されたデータパケットを受信して、その受信データを受信バッファに格納し、受信データが処理され受信バッファが空になった後に、受信データに対する確認応答を送信装置に送信し、受信データに関する制御データ又は受信バッファの使用状況に基づいて送信装置の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を送信装置の送信バッファサイズとするため、送信装置から送信されるデータサイズを常に最大にさせることから、送信装置の送信処理性能に依ることなく送信装置の送信バッファサイズの最大値を推定することができる。
【００１３】
請求項２記載の送信バッファサイズ推定装置は、請求項１記載の送信バッファサイズ推定装置において、前記バッファサイズ推定手段は、前記受信データのシーケンス番号と前記確認応答の確認応答番号との差から前記送信バッファサイズの推定値を計算することを特徴とする。
【００１４】
請求項３記載の送信バッファサイズ推定装置は、請求項１記載の送信バッファサイズ推定装置において、前記バッファサイズ推定手段は、前記受信バッファに格納された前記受信データのバッファ使用量から前記送信バッファサイズの推定値を計算することを特徴とする。
【００１５】
請求項４記載の送信バッファサイズ推定装置は、請求項１乃至３のいずれかに記載の送信バッファサイズ推定装置において、前記データパケットは、前記確認応答を送信してから次の確認応答を送信するまでの間に受信した１つ以上のセグメントであることを特徴とする。
【００１６】
請求項５記載の送信バッファサイズ推定方法は、コンピュータにより、送信装置から送信されたデータパケットを受信して、その受信データを受信バッファに格納するデータ受信ステップと、前記受信データが処理され前記受信バッファが空になった後に、前記受信データに対する確認応答を前記送信装置に送信するデータ送信ステップと、前記受信データに関する制御データ又は前記受信バッファの使用状況に基づいて前記送信装置の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を前記送信装置の送信バッファサイズとするバッファサイズ推定ステップと、を有することを特徴とする。
【００１７】
請求項６記載の送信バッファサイズ推定プログラムは、請求項５記載の送信バッファサイズ推定方法をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、送信装置の送信処理性能に依ることなく送信装置の送信バッファサイズの最大値を推定することができる。
【図面の簡単な説明】
【００１９】
【図１】受信装置の機能ブロック構成を示す図である。
【図２】受信装置の処理フローを示す図である。
【図３】図２の処理フローの参考図である。
【図４】受信装置の処理フローを示す図である。
【図５】図４の処理フローの参考図である。
【図６】従来技術の説明図である。
【発明を実施するための形態】
【００２０】
以下、本発明を実施する一実施の形態について図面を用いて説明する。但し、本発明は多くの異なる様態で実施することが可能であり、本実施の形態の記載内容に限定して解釈すべきではない。
【００２１】
第１の実施の形態では、送信装置と受信装置との間で通信されるデータパケットのＴＣＰヘッダ情報（制御データ）を利用し、第２の実施の形態では、受信装置の受信バッファの使用状況を用いて、送信装置の送信バッファサイズを推定する方法について説明する。
【００２２】
〔第１の実施の形態〕
第１の実施の形態では、例として、シーケンス番号と確認応答番号の差から送信バッファサイズを推定する方法について説明する。
【００２３】
最初に、コンピュータ間の一般的な通信フロー制御技術について説明する。通信ネットワークに接続された２つのコンピュータ間でデータ通信を行う場合、クライアント側の受信装置からサーバ側の送信装置へデータ転送要求が行われ、それを契機に送信装置から受信装置へデータ転送処理が開始される。
【００２４】
受信装置は、転送対象データのセグメントを受信すると直ちにＡＣＫ応答を返信し、送信装置は、そのＡＣＫ応答を受信した後、受信装置の受信バッファサイズに応じて次セグメントを送信する。
【００２５】
ここでいう受信バッファサイズとは受信バッファの使用量や使用率であり、送信装置は、その使用状況に応じて送信予定のセグメント数を変更する。例えば、受信バッファサイズの最大値が５０００バイトであっても、１０００バイトを使用中であれば４０００バイト分を最大値として次セグメントを送信する。
【００２６】
そして、送信装置において、送信予定のセグメントを示すウィンドウを後位置のセグメントに順次シフトさせながら上記送信処理を繰り返し行うことにより、コンピュータ間のデータ通信を実現する。
【００２７】
このようなフロー制御はスライディングウィンドウ方式と一般に称され、ＴＣＰ（Transmission Control Protocol）等のコネクション型プロトコルで通常用いられている。以下用いる送信装置は、そのようなＴＣＰを実装しているものとする。
【００２８】
また、その送信装置は、データ送信処理時にスロースタートアルゴリズムを用いるものとする。スロースタートアルゴリズムとは、送信するデータ量を徐々に増加させて送信処理を行うアルゴリズムである。ＡＣＫ応答を受信するうちは一度に送信するセグメント数を次第に増加させていくことにより、コンピュータ間のデータ通信を実現する。
【００２９】
従って、本実施の形態に係る送信装置は、スライディングウィンドウ方式及びスロースタートアルゴリズムを用いて送信処理を行うことから、例えば、最初にセグメントを１つ送信し、ＡＣＫ応答を受信した場合に次セグメントを２つ送信する。ここで、１つのセグメントサイズを１０００バイトとすると、現時点で受信バッファサイズの最大値である５０００バイトのうち３０００バイトが使用されているため、残りの２０００バイトを最大値として次の送信処理を実行することになる。
【００３０】
一方、そのような送信装置に対し、その送信装置からのデータを受信する受信装置は、送信装置の送信バッファサイズを推定する送信バッファサイズ推定機能を有し、図１に示すような複数の機能部を備えている。図１は、受信装置（送信バッファサイズ推定装置）の機能ブロック構成を示す図である。
【００３１】
この受信装置１００は、インターネットや社内ＬＡＮ（Local Area Network）等の通信ネットワーク５００を介して送信装置３００に通信可能に接続されており、データ受信部１１と、受信バッファ１２と、データ情報取得部１３と、メモリ１４と、データ送信部１５と、バッファサイズ推定部１６とを主に備えている。以下、各機能部について説明する。
【００３２】
データ受信部１１は、通信ネットワーク５００を通じて送信装置３００から送信されたデータパケットを受信し、その受信データを受信バッファ１２に格納する機能を有している。
【００３３】
データ情報取得部１３は、受信データのシーケンス番号を取得し、更にその受信に対して行ったＡＣＫ応答の確認応答番号を取得して、メモリ１４に記憶させる機能を有している。
【００３４】
データ送信部１５は、送信装置３００から送信されるデータサイズを常に最大にするため、受信バッファ１２の使用量又は使用率がゼロになった後、すなわち、受信バッファ１２が空になった後に、受信データに対してＡＣＫ応答（確認応答）を行う機能を有している。
【００３５】
バッファサイズ推定部１６は、メモリ１４内のシーケンス番号と確認応答番号の差から送信装置３００の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を送信装置３００の送信バッファサイズとする機能を有している。
【００３６】
このような受信装置１００は、メモリ等の記憶手段、ＣＰＵ等の計算・制御手段、モニタ等の表示手段を備えたコンピュータで実現可能である。また、受信装置１００で行う処理はプログラムによって実行可能である。
【００３７】
尚、図１には本発明の説明上必要と考えられる特徴的な機能部を主に明記しているが、受信装置がコンピュータとして本来具備する既存機能、例えば受信バッファ１２のデータを処理して削除する機能等も当然に備えている。
【００３８】
次に、図２及び図３を参照しながら、受信装置１００の動作について説明する。図２は、受信装置の処理フローを示す図である。図３は、その処理フローの参考図である。尚、送信バッファサイズを確実に推定するため、受信バッファ１２の容量（受信バッファサイズ）は、送信バッファサイズに比べて十分に大きいものとする。
【００３９】
最初に、受信装置１００から送信装置３００へのデータ転送要求を契機に、受信装置１００と送信装置３００との間で３ウェイハンドシェイクが行われ、セグメントサイズの最大値（ＭＳＳ：Maximum Segment Size）が決定された後に、セッションが確立する。例えば、ＭＳＳは１０００バイトと決定される。
【００４０】
次に、受信装置１００のデータ受信部１１は、通信ネットワーク５００を通じて送信装置３００から送信されたパケットを受信し（ステップＳ１０１）、そのパケットの種別がｆｉｎパケットであるか（Ｙｅｓ）否か（Ｎｏ）を判定する（ステップＳ１０２）。
【００４１】
ステップＳ１０２の判定結果がＮｏの場合、セッション確立後にはデータ転送処理を終了しない場合主にｓｙｎパケットを受信することから、データ受信部１１は、そのｓｙｎパケット内のセグメントを受信バッファ１２に格納する（ステップＳ１０３）。
【００４２】
続いて、データ受信部１１は、ｓｙｎパケットの受信が継続しているか（Ｙｅｓ）否か（Ｎｏ）を判定し（ステップＳ１０４）、Ｙｅｓの場合にはステップＳ１０３に戻って受信中の次セグメントを受信バッファ１２に格納する。
【００４３】
一方、ステップＳ１０４の判定結果がＮｏの場合、データ情報取得部１３は、受信したセグメントのシーケンス番号ＳＥＱ＃（Sequence Number）を取得してメモリ１４に記憶させる（ステップＳ１０５）。
【００４４】
シーケンス番号とは、データ転送が最初の場合には送信装置３００により任意に、受信装置１００からＡＣＫ応答を受信した場合にはそれに応じて付与される番号であり、パケットのＴＣＰヘッダから取得することができる。
【００４５】
スロースタートアルゴリズムにより、例えば、シーケンス番号ＳＥＱ＃＝１のセグメントのみを当初受信した場合には、そのＳＥＱ＃＝１のみをメモリ１４に記憶させる。
【００４６】
次に、受信バッファ１２内のセグメントに対して受信装置１００によるデータ処理が終了した後に（ステップＳ１０６）、データ情報取得部１３は、その受信バッファ１２の使用量又は使用率がゼロ、すなわち、受信バッファ１２が空であるか（Ｙｅｓ）否か（Ｎｏ）を判定する（ステップＳ１０７）。
【００４７】
尚、ここでいうデータ処理とは、受信バッファ内のセグメントを任意処理するとともに受信バッファ１２から削除する処理であり、受信バッファに空き容量を作るためにコンピュータとしての受信装置１００によって一般的に実行される処理である。
【００４８】
次に、ステップＳ１０７の判定結果がＹｅｓの場合、データ情報取得部１３は、メモリ１４に記憶された全シーケンス番号ＳＥＱ＃を取得して比較することにより最小の番号ｍを算出する（ステップＳ１０８）。
【００４９】
上記例によれば、ＳＥＱ＃＝１のみがメモリ１４に記憶されているので、その場合には比較を行うことなく、ｍ＝１とする。尚、ステップＳ１０７の判定結果がＮｏの場合には、ステップＳ１０５に戻り、受信した次セグメントのシーケンス番号ＳＥＱ＃を取得してメモリ１４に記憶させる。
【００５０】
次に、データ情報取得部１３は、送信装置３００から送信されたセグメントのデータ転送が正常に終了した旨を送信装置３００に応答するため、ＡＣＫ応答を返信するようにデータ送信部１５に命令し、データ送信部１５は、確認応答番号ＡＣＫ＃（Acknowledgement Number）を付与してＡＣＫ応答を送信装置３００に送信する（ステップＳ１０９）。
【００５１】
上記例によれば、シーケンス番号ＳＥＱ＃＝１のセグメントのみを受信し、ＭＳＳ＝１０００であるため、次に１００１番からのデータを必要とすることから、確認応答番号ＡＣＫ＃＝１００１を付与したＡＣＫ応答を送信する。
【００５２】
ここで、従来であればセグメント受信後直ちにＡＣＫ応答を送信している。また、特許文献１の従来技術であれば、ＡＣＫ応答を行うことなく再送タイマーを利用してバッファサイズを推定している。
【００５３】
これに対し本実施の形態では、ＡＣＫ応答の送信をあえて遅らせ、受信バッファ１２が空になった後にＡＣＫ応答を行うようにしている。前述したように、送信装置３００は受信装置１００の受信バッファサイズ（受信バッファ１２の使用量や使用率）に応じてセグメント数を調整して送信することから、受信バッファ１２を空にした後にＡＣＫ応答を行うことにより、送信装置３００から送信されるセグメント数を常に最大にすることができる。
【００５４】
仮に、受信バッファサイズの最大値が１００００バイトであれば、送信装置３００は、常にその１００００バイトを最大値として全ての送信処理を行うことができる。それゆえ、後段のバッファサイズ推定部１６において、送信装置３００の送信バッファサイズの最大値を正確に計算することが可能となる。
【００５５】
次に、データ情報取得部１３は、ステップＳ１０９で送信装置３００に送信されたＡＣＫ応答の確認応答番号ＡＣＫ＃を取得してメモリ１４に記憶させる（ステップＳ１１０）。上記例によれば、確認応答番号ＡＣＫ＃＝１００１であることから、そのＡＣＫ＃＝１００１をメモリ１４に記憶させる。
【００５６】
次に、データ情報取得部１３は、メモリ１４に記憶された全ての確認応答番号ＡＣＫ＃を取得して比較することにより最大の番号Ｍを算出する（ステップＳ１１１）。上記例によれば、確認応答番号としてＡＣＫ＃＝１００１のみがメモリ１４に記憶されているので、その場合には比較を行うことなく、Ｍ＝１００１とする。
【００５７】
次に、バッファサイズ推定部１６が、最小の番号ｍと最大の番号Ｍとの差を計算し、送信バッファサイズの現在値Ｂｕｆｆｅｒ１（＝Ｍ−ｍ）とする（ステップＳ１１２）。上記例によれば、ｍ＝１，Ｍ＝１００１と計算されているので、Ｂｕｆｆｅｒ１＝１０００と計算される。
【００５８】
次に、バッファサイズ推定部１６は、送信バッファサイズの現在値Ｂｕｆｆｅｒ１と以前に求めた送信バッファサイズの前回計算値Ｂｕｆｆｅｒ２とを比較し、送信バッファサイズの最大値Ｂｕｆｆｅｒ３（＝Ｍａｘ｛Ｂｕｆｆｅｒ１、Ｂｕｆｆｅｒ２｝）を計算する（ステップＳ１１３）。Ｂｕｆｆｅｒ２の初期値が０と設定されている場合、上記例によれば、Ｂｕｆｆｅｒ３＝１０００と計算される。
【００５９】
次に、バッファサイズ推定部１６は、送信バッファサイズの最大値Ｂｕｆｆｅｒ３を前回計算値Ｂｕｆｆｅｒ２とする（ステップＳ１１４）。上記例によれば、Ｂｕｆｆｅｒ２＝１０００と計算される。
【００６０】
次に、バッファサイズ推定部１６は、メモリ１４からシーケンス番号及び確認応答番号を削除するとともに、送信バッファサイズの現在値Ｂｕｆｆｅｒ１と最大値Ｂｕｆｆｅｒ３をクリアする（ステップＳ１１５）。
【００６１】
以降、ステップＳ１０２の判定結果がＹｅｓになるまで、上記ステップＳ１０１〜ステップＳ１１５の推定処理を繰り返し実行する。
【００６２】
例えば、その推定処理が２回目において、シーケンス番号ＳＥＱ＃＝１００１，２００１のセグメント（確認応答番号ＡＣＫ＃＝１００１のＡＣＫ応答を送信して次の確認応答番号ＡＣＫ＃＝２００１，３００１の各ＡＣＫ応答を送信するまでの間に受信した２つのセグメント）を受信した場合には、ｍ＝１００１と計算され、確認応答番号ＡＣＫ＃＝２００１，３００１となることからＭ＝３００１と計算され、Ｂｕｆｆｅｒ１＝３００１−１００１＝２０００、Ｂｕｆｆｅｒ３＝Ｍａｘ｛２０００，１０００｝＝２０００＝Ｂｕｆｆｅｒ２と計算される。
【００６３】
更に、その推定処理が３回目において、シーケンス番号ＳＥＱ＃＝３００１，４００１，５００１，６００１のセグメント（確認応答番号ＡＣＫ＃＝２００１，３００１の各ＡＣＫ応答を送信して次の確認応答番号ＡＣＫ＃＝４００１，５００１，６００１，７００１の各ＡＣＫ応答を送信するまでの間に受信した４つのセグメント）を受信した場合には、ｍ＝３００１と計算され、確認応答番号ＡＣＫ＃＝４００１，５００１，６００１，７００１となることからＭ＝７００１と計算され、Ｂｕｆｆｅｒ１＝７００１−３００１＝４０００、Ｂｕｆｆｅｒ３＝Ｍａｘ｛４０００，２０００｝＝４０００＝Ｂｕｆｆｅｒ２と計算される。
【００６４】
その後、全セグメントの転送処理が終了し、ｆｉｎパケットを受信した場合には、前回計算値Ｂｕｆｆｅｒ２を送信装置３００の送信バッファサイズの推定結果とし、送信装置３００とのセッションを切断する（ステップＳ１１６）。
【００６５】
本実施の形態によれば、送信装置３００から送信されたデータパケットを受信して、その受信データを受信バッファ１２に格納し、受信データが処理され受信バッファ１２が空になった後に、受信データに対するＡＣＫ応答を送信装置３００に送信し、受信データのシーケンス番号とＡＣＫ応答の確認応答番号との差から送信装置３００の送信バッファサイズを計算し、以前に計算した送信バッファサイズと比較して最大値を送信装置３００の送信バッファサイズとするので、送信装置３００から送信されるセグメント数を常に最大にさせることから、送信装置３００の送信処理性能に依ることなく、たとえ送信処理時にスロースタートアルゴリズムを用いる送信装置３００であっても、その送信装置３００の送信バッファサイズの最大値を推定することができる。
【００６６】
これにより、送信装置３００の送信バッファの容量不足による通信速度低下を遠隔地で把握できることから、例えば、送信装置３００の管理者により、その推定結果に応じて送信装置３００の送信バッファサイズを適正値に修正・拡張等調整することや、特定相手との通信時にのみ送信バッファの制限容量を解放して通信の高速化を図ることが可能となる。後述する第２の実施の形態についても同様である。
【００６７】
また、特許文献１の従来技術の場合、送信バッファサイズの推定時間は送信装置３００の再送タイマーに左右されてしまう。一方、本実施の形態の場合には、その推定時間に大きく影響するＡＣＫ応答の遅延は送信装置３００ではなく受信装置１００に依るため、他装置の影響を受けることのない推定時間を提供できる。後述する第２の実施の形態についても同様である。
【００６８】
尚、本実施の形態では、送信バッファサイズを計算する際にシーケンス番号と確認応答番号の差を利用したが、ＴＣＰヘッダ情報内のデータ欄に含まれるデータのサイズをそのまま送信バッファサイズとして利用してもよい。
【００６９】
また、本実施の形態では、スロースタートアルゴリズムを用いて送信処理を行う場合を例としたが、過去に計算した送信バッファサイズと比較して最大値を計算すれば送信装置３００の送信バッファサイズを推定できることから、そのようなアルゴリズムに限定されることなく、任意のアルゴリズムを持つ送信装置３００を推定対象とすることが可能である。後述する第２の実施の形態についても同様である。
【００７０】
〔第２の実施の形態〕
第２の実施の形態では、例として、受信バッファのバッファ使用量から送信バッファサイズを推定する方法について説明する。本実施の形態に係る受信装置１００は、第１の実施の形態と同様の機能部により構成される（図１参照）。以下、各機能部について説明する。
【００７１】
データ受信部１１は、通信ネットワーク５００を通じて送信装置３００から送信されたデータパケットを受信し、その受信データを受信バッファ１２に格納する機能を有している。
【００７２】
データ情報取得部１３は、受信データに使用された受信バッファ１２のバッファ使用量を取得して、メモリ１４に記憶させる機能を有している。
【００７３】
データ送信部１５は、送信装置３００から送信されるデータサイズを常に最大にするため、受信バッファ１２の使用量又は使用率がゼロになった後、すなわち、受信バッファ１２が空になった後に、受信データに対してＡＣＫ応答を行う機能を有している。
【００７４】
バッファサイズ推定部１６は、メモリ１４内のバッファ使用量から送信装置３００の送信バッファサイズの推定値を計算し、以前に計算した推定値と比較して最大値を送信装置３００の送信バッファサイズとする機能を有している。
【００７５】
次に、図４及び図５を参照しながら、受信装置１００の動作について説明する。図４は、受信装置の処理フローを示す図である。図５は、その処理フローの関連参考図である。
【００７６】
最初に、受信装置１００から送信装置３００へのデータ転送要求を契機に、受信装置１００と送信装置３００との間で３ウェイハンドシェイクが行われ、セッションが確立する。例えば、ＭＳＳは１０００バイトと決定される。
【００７７】
次に、受信装置１００のデータ受信部１１は、通信ネットワーク５００を通じて送信装置３００から送信されたパケットを受信し（ステップＳ２０１）、そのパケットの種別がｆｉｎパケットであるか（Ｙｅｓ）否か（Ｎｏ）を判定する（ステップＳ２０２）。
【００７８】
ステップＳ２０２の判定結果がＮｏの場合、セッション確立後にはデータ転送処理を終了しない場合主にｓｙｎパケットを受信することから、データ受信部１１は、そのｓｙｎパケット内のセグメントを受信バッファ１２に格納する（ステップＳ２０３）。
【００７９】
続いて、データ受信部１１は、ｓｙｎパケットの受信が継続しているか（Ｙｅｓ）否か（Ｎｏ）を判定し（ステップＳ２０４）、Ｙｅｓの場合にはステップＳ２０３に戻って受信中の次セグメントを受信バッファ１２に格納する。
【００８０】
一方、ステップＳ２０４の判定結果がＮｏの場合、データ情報取得部１３は、受信バッファ１２に格納されたセグメントのバッファ使用量ＵＢＳ（Used Buffer Size）を取得してメモリ１４に記憶させる（ステップＳ２０５）。
【００８１】
スロースタートアルゴリズムにより、例えば、１つのセグメントのみを当初受信して受信バッファ１２に格納している場合には、ＭＳＳが１０００バイトであることより受信バッファ１２のバッファ使用量は１０００バイトと計算し、ＵＢＳ＝１０００のみをメモリ１４に記憶させる。
【００８２】
次に、受信バッファ１２内のセグメントに対して受信装置１００によるデータ処理が終了した後に（ステップＳ２０６）、データ情報取得部１３は、その受信バッファ１２の使用量又は使用率がゼロ、すなわち、受信バッファ１２が空であるか（Ｙｅｓ）否か（Ｎｏ）を判定する（ステップＳ２０７）。
【００８３】
次に、ステップＳ２０７の判定結果がＹｅｓの場合、データ情報取得部１３は、送信装置３００から送信されたセグメントのデータ転送が正常に終了した旨を送信装置３００に応答するため、ＡＣＫ応答を返信するようにデータ送信部１５に命令し、データ送信部１５は、確認応答番号ＡＣＫ＃を付与してＡＣＫ応答を送信装置３００に送信する（ステップＳ２０８）。尚、受信バッファ１２が空になった後にＡＣＫ応答することの作用効果については、第１の実施の形態を参照されたい。
【００８４】
次に、バッファサイズ推定部１６が、メモリ１４からバッファ使用量を取得して送信バッファサイズの現在値Ｂｕｆｆｅｒ１とする（ステップＳ２０９）。上記例によれば、ＵＢＳ＝１０００なので、Ｂｕｆｆｅｒ１＝１０００と計算される。
【００８５】
次に、バッファサイズ推定部１６は、送信バッファサイズの現在値Ｂｕｆｆｅｒ１と以前に求めた送信バッファサイズの前回計算値Ｂｕｆｆｅｒ２とを比較し、送信バッファサイズの最大値Ｂｕｆｆｅｒ３（＝Ｍａｘ｛Ｂｕｆｆｅｒ１、Ｂｕｆｆｅｒ２｝）を計算する（ステップＳ２１０）。Ｂｕｆｆｅｒ２の初期値が０と設定されている場合、上記例によれば、Ｂｕｆｆｅｒ３＝１０００と計算される。
【００８６】
次に、バッファサイズ推定部１６は、送信バッファサイズの最大値Ｂｕｆｆｅｒ３を前回計算値Ｂｕｆｆｅｒ２とする（ステップＳ２１１）。上記例によれば、Ｂｕｆｆｅｒ２＝１０００と計算される。
【００８７】
次に、バッファサイズ推定部１６は、メモリ１４からバッファ使用量を削除するとともに、送信バッファサイズの現在値Ｂｕｆｆｅｒ１と最大値Ｂｕｆｆｅｒ３をクリアする（ステップＳ２１２）。
【００８８】
以降、ステップＳ２０２の判定結果がＹｅｓになるまで、上記ステップＳ２０１〜ステップＳ２１２の推定処理を繰り返し実行する。
【００８９】
例えば、その推定処理が２回目において、２つのセグメントを受信した場合には、ＵＢＳ＝２０００と計算され、Ｂｕｆｆｅｒ１＝２０００、Ｂｕｆｆｅｒ３＝Ｍａｘ｛２０００，１０００｝＝２０００＝Ｂｕｆｆｅｒ２と計算される。
【００９０】
例えば、その推定処理が３回目において、４つのセグメントを受信した場合には、ＵＢＳ＝４０００と計算され、Ｂｕｆｆｅｒ１＝４０００、Ｂｕｆｆｅｒ３＝Ｍａｘ｛４０００，２０００｝＝４０００＝Ｂｕｆｆｅｒ２と計算される。
【００９１】
その後、全セグメントの転送処理が終了し、ｆｉｎパケットを受信した場合には、前回計算値Ｂｕｆｆｅｒ２を送信装置３００の送信バッファサイズの推定結果とし、送信装置３００とのセッションを切断する（ステップＳ２１３）。
【００９２】
本実施の形態によれば、送信装置３００から送信されたデータパケットを受信して、その受信データを受信バッファ１２に格納し、受信データが処理され受信バッファ１２が空になった後に、受信データに対するＡＣＫ応答を送信装置３００に送信し、受信バッファ１２に格納されたセグメントのバッファ使用量から送信装置３００の送信バッファサイズを計算し、以前に計算した送信バッファサイズと比較して最大値を送信装置３００の送信バッファサイズとするので、送信装置３００から送信されるセグメント数を常に最大にさせることから、送信装置３００の送信処理性能に依ることなく、たとえ送信処理時にスロースタートアルゴリズムを用いる送信装置３００であっても、その送信装置３００の送信バッファサイズの最大値を推定することができる。
【００９３】
尚、本実施の形態では、受信バッファ１２のバッファ使用量から送信バッファサイズを推定したが、受信装置１００は自機内の受信バッファ１２の最大サイズを把握していることから、バッファ使用率を用いてその使用量を計算するようにしてもよい。
【符号の説明】
【００９４】
１００…受信装置
１１…データ受信部
１２…受信バッファ
１３…データ情報取得部
１４…メモリ
１５…データ送信部
１６…バッファサイズ推定部
３００…送信装置
５００…通信ネットワーク
Ｓ１０１〜Ｓ１１６、Ｓ２０１〜Ｓ２１３…ステップ
【図１】
2014027444.tif 000003
【図２】
2014027444.tif 000004
【図３】
2014027444.tif 000005
【図４】
2014027444.tif 000006
【図５】
2014027444.tif 000007
【図６】
2014027444.tif 000008