(57)【要約】【課題】データ送信におけるスループットを高める。【解決手段】送信装置は、ネットワークを介して受信装置にデータを送信する送信部と、前記受信装置から前記ネットワークを介して受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信する受信部と、前記送信部から送信されるデータに関する帯域を制御する送信帯域制御部と、前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記送信帯域制御部により制御されている帯域を抑制する、送信帯域抑制部と、前記データサイズと前記受信ウィンドウサイズとに基づいて前記送信帯域抑制部の有効／無効を切り替える、切替制御部と、を含む。【選択図】図４
2015133669.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続される送信装置であって、
前記ネットワークを介して受信装置にデータを送信する送信部と、
前記受信装置から前記ネットワークを介して受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信する受信部と、
前記送信部から送信されるデータに関する帯域を制御する送信帯域制御部と、
前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記送信帯域制御部により制御されている帯域を抑制する、送信帯域抑制部と、
前記データサイズと前記受信ウィンドウサイズとに基づいて前記送信帯域抑制部の有効／無効を切り替える、切替制御部と、を含む、送信装置。
【請求項２】
請求項１に記載の送信装置であって、
前記切替制御部は、前記データサイズが、前記上限値以下の閾値以上であるか否かに基づいて、前記送信帯域抑制部を有効から無効に切り替えるか否か判定する、送信装置。
【請求項３】
請求項２に記載の送信装置であって、
前記切替制御部は、前記データサイズが前記閾値以上である状態が所定時間継続しているか否かに基づいて、前記送信帯域抑制部を有効から無効に切り替えるか否か判定する、送信装置。
【請求項４】
請求項１に記載の送信装置であって、
前記切替制御部は、前記受信ウィンドウサイズの変化が閾値より小さいか否かに基づいて、前記送信帯域抑制部を有効から無効に切り替えるか否か判定する、送信装置。
【請求項５】
請求項１に記載の送信装置であって、
前記切替制御部は、前記送信部から送信されたデータの廃棄率の変化が閾値より小さいか否かに基づいて、前記送信帯域抑制部を有効から無効に切り替えるか否か判定する、送信装置。
【請求項６】
請求項１に記載の送信装置であって、
前記切替制御部は、前記送信部から送信されたデータの平均廃棄率が閾値より小さいか否かに基づいて、前記送信帯域抑制部を有効から無効に切り替えるか否か判定する、送信装置。
【請求項７】
請求項２に記載の送信装置であって、
前記切替制御部は、前記データサイズが前記閾値より小さいか否かに基づいて、前記送信帯域抑制部を無効から有効に切り替えるか否か判定する、送信装置。
【請求項８】
請求項７に記載の送信装置であって、
前記切替制御部は、前記データサイズが前記閾値より小さい状態が所定時間継続している場合に、前記送信帯域抑制部を無効から有効に切り替えるか否か判定する、送信装置。
【請求項９】
請求項１に記載の送信装置であって、
前記切替制御部は、前記受信ウィンドウサイズの変化が閾値以上である場合に、前記送信帯域抑制部を無効から有効に切り替える、送信装置。
【請求項１０】
請求項１に記載の送信装置であって、
前記切替制御部は、前記送信部から送信されたデータの廃棄率の変化が閾値以上である場合に、前記送信帯域抑制部を無効から有効に切り替える、送信装置。
【請求項１１】
請求項１に記載の送信装置であって、
前記切替制御部は、前記送信部から送信されたデータの平均廃棄率が閾値以上である場合に、前記送信帯域抑制部を無効から有効に切り替える、送信装置。
【請求項１２】
請求項１に記載の送信装置であって、
前記送信帯域制御部は、前記送信部から送信されたデータの廃棄率から決定されるトークンに応じて前記帯域を制御する、送信装置。
【請求項１３】
ネットワークに接続される送信装置の制御方法であって、
前記ネットワークを介して受信装置にデータを送信し、
前記受信装置から前記ネットワークを介して受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信し、
前記送信装置から送信されるデータに関する帯域を制御し、
前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記制御されている帯域を抑制し、
前記データサイズと前記受信ウィンドウサイズとに基づいて、前記帯域の抑制の有／無を切り替える、送信装置の制御方法。
【請求項１４】
インタフェースと、処理装置と、主記憶とを含む送信装置において、前記処理装置に前記送信装置の制御処理を実行させるプログラムであって、
前記インタフェースから受信装置にデータを送信し、
前記インタフェースを介して、前記受信装置から受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信し、
前記インタフェースから送信されるデータに関する帯域を制御し、
前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記制御されている帯域を抑制し、
前記データサイズと前記受信ウィンドウサイズとに基づいて、前記帯域の抑制の有／無を切り替える、処理を前記処理装置に実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信帯域の制御に関する。
【背景技術】
【０００２】
インターネット回線の高速化により、クラウドコンピューティングが普及している。クラウドコンピューティングは、インターネットを経由して、大量のデータをデータセンタとユーザとの間でやり取りする。例えばデータセンタが外国に設置してあるケースでは、長距離のネットワーク上でデータをやり取りすることとなる。長距離のネットワークは、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋｓ（ＷＡＮ）と呼ばれる。
【０００３】
インターネットでは、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）通信が広く用いられている。ＴＣＰ通信は、受信計算機が受信したデータに対する確認応答（ＡＣＫ）を送信計算機へ返信することを特徴とする。また、ＴＣＰ通信では、受信計算機が送信計算機へ、ＡＣＫと一緒に受信ウィンドウサイズ（ＲＷＩＮ）と呼ばれる数値を通知する。
【０００４】
送信計算機は、インフライトデータサイズ（ｉｎｆｌｉｇｈｔ）と呼ばれる送信済みかつＡＣＫを受信していないデータのサイズが、ＲＷＩＮを超えない範囲でデータを送信する。そのため、データが送信されてから応答が返されるまでの時間であるＲｏｕｎｄ  Ｔｒｉｐ  Ｔｉｍｅ（ＲＴＴ）時間中に、ｉｎｆｌｉｇｈｔが最大でＲＷＩＮに制限される。このため、送信帯域が最大でＲＷＩＮ／ＲＴＴに制限されてしまう。
【０００５】
本技術分野の背景技術として、特開２０１２−９５１９０号公報（特許文献１）がある。「受信側通信装置との間の経路が広帯域及び高遅延環境であるか否かを判定し、広帯域及び高遅延環境であると判定された場合に、前記送信ウィンドウサイズが前記受信ウィンドウサイズを超えない第１のウィンドウサイズとされる第１の状態を、前記送信ウィンドウサイズが前記受信ウィンドウサイズを超える第２のウィンドウサイズとされる第２の状態へ切り替え、前記第２の状態で前記受信ウィンドウサイズを超えた送信量の前記パケットを送信する」ことが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−９５１９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１の方式は、広帯域及び高遅延環境であると判定された場合に、バースト的に輻輳ウィンドウサイズがＲＷＩＮに達したとき、送信帯域がＲＷＩＮを超えるように帯域制御を行う可能性がある。送信帯域がＲＷＩＮを超えると、パケット廃棄が発生しなければスループットを高まるが、受信計算機のバッファ溢れによりパケット廃棄が発生するとスループットが落ちる。
【課題を解決するための手段】
【０００８】
本願発明の一態様は、ネットワークに接続される送信装置であって、前記ネットワークを介して受信装置にデータを送信する送信部と、前記受信装置から前記ネットワークを介して受信確認及び受信ウィンドウサイズの情報を含む確認応答データを受信する受信部と、前記送信部から送信されるデータに関する帯域を制御する送信帯域制御部と、前記送信されるデータのうち前記受信装置から確認応答を受信していないデータのデータサイズが、前記受信ウィンドウサイズから決まる上限値以下になるように、前記送信帯域制御部により制御されている帯域を抑制する、送信帯域抑制部と、前記データサイズと前記受信ウィンドウサイズとに基づいて前記送信帯域抑制部の有効／無効を切り替える、切替制御部と、を含む。
【発明の効果】
【０００９】
本発明の一態様によれば、データ送信におけるスループットを高めることができる。
【図面の簡単な説明】
【００１０】
【図１】実施例１における通信装置を含むネットワークシステムの構成図である。
【図２】実施例１における通信装置のハードウェア構成図である。
【図３】ＴＣＰのパケットフォーマットである。
【図４】実施例１における通信装置の機能ブロック図である。
【図５】実施例１における独自ＴＣＰの動作概念を示すフローチャートである。
【図６】実施例１における独自ＴＣＰの状態テーブルの例である。
【図７】実施例１における独自ＴＣＰの送信帯域制御部の機能ブロック図である。
【図８】実施例１における独自ＴＣＰの送信帯域制御部の動作を示すフローチャートである。
【図９】実施例１における廃棄率計算部の機能ブロック図である。
【図１０】実施例１における廃棄率計算部の動作を示すフローチャートである。
【図１１】実施例１における送信帯域抑制部の機能ブロック図である。
【図１２】実施例１における送信帯域抑制部に用いられるステートマシンの状態遷移図である。
【図１３】実施例１における送信帯域抑制部に用いられるステートマシンの動作を示すフローチャートである。
【図１４】実施例１における送信帯域抑制機能切替部の動作を示すフローチャートである。
【図１５】実施例１における送信帯域抑制機能有効時及び送信帯域抑制機能無効時における通信シーケンスの比較図である。
【図１６】実施例２における送信計算機を含むネットワークシステムの構成図である。
【図１７】実施例２における送信計算機のハードウェア構成図である。
【図１８】実施例２における送信計算機の機能ブロック図である。
【図１９】実施例３における仮想通信装置を含むネットワークシステムの構成図である。
【図２０】実施例３における仮想通信装置を含むサーバのハードウェア構成図である。
【図２１】実施例３における仮想通信装置を含むサーバの機能ブロック図である。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成については同一の参照符号が付されている。
【実施例１】
【００１２】
実施例１は、基本的な一例を記載する。図１は、本実施例の通信装置１００を含むネットワークシステムの構成図を示す。通信装置１００はＬＡＮ１１０とＷＡＮ１２０を接続する通信回線上に設置される。ＬＡＮ１３０とＬＡＮ１４０はＷＡＮ１２０を介して通信装置１００に接続される。
【００１３】
複数の計算機１１１、１１２はＬＡＮ１１０を介して通信装置１００に接続される。複数の計算機１３１、１３２、１３３はＬＡＮ１３０に接続される。計算機１４１はＬＡＮ１４０に接続される。また、ＷＡＮ１２０は、ＬＡＮと比べると長い拠点間を結ぶネットワークや、拠点間での通信の遅延が大きいネットワークを含む。
【００１４】
以下においては、ＯＳＩ参照モデルのトランスポート層にあたる伝送制御プロトコルであるＴｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ（ＴＣＰ）に基づく通信を例として説明する。本実施例で説明する通信制御は、ＴＣＰ通信に好適であるが、他の通信方式にも適用することができ、データの送信装置及び受信装置は計算機でなくてもよい。
【００１５】
通信装置１００は、例えばＬＡＮ１１０に接続された計算機１１１がＷＡＮ１２０を経由して計算機１３１にＴＣＰ通信によってデータを送信するとき、通信装置１００の備える独自ＴＣＰ機能によってデータ送信の帯域制御を行う。独自ＴＣＰによる送信帯域制御は、受信計算機が送信計算機へ通知するＲＷＩＮ以上に、受信計算機がデータを受信可能な場合、ＲＷＩＮに制限されない送信帯域制御を行うことによってデータ送信を高速化する。
【００１６】
以下、独自ＴＣＰ機能による送信帯域制御に関する例を詳細に説明する。なお、計算機、通信装置及びネットワークの数は、図示の数に限定されず任意である。計算機は、サーバ、プロキシ装置、情報処理装置、端末、携帯型情報処理端末、スマートフォンやタブレット等を含む。計算機間の通信は、クライアントサーバ間のデータ転送や、情報処理装置間のファイル転送、リモートアクセスの画面転送等を含む。ネットワークは帯域保証されるネットワークでも帯域保証されないネットワークでもよい。
【００１７】
図２は、本実施例の通信装置１００のハードウェア構成例を示す。通信装置１００は、主記憶２３０、二次記憶２４０、処理装置２２０、ネットワークインターフェース（ＮＩＦ）２５０、ＮＩＦ２６０、及びそれらを相互接続しデータを転送するシステムバス２１０を含む。
【００１８】
主記憶２３０は、プログラム及びデータを一時的に記憶しデータの読み書きを行う。二次記憶２４０は、プログラム及びデータを長期的に保存し必要に応じて主記憶２３０へロードする。処理装置２２０は、主記憶２３０上のプログラムを実行し主記憶２３０上のデータを処理し結果を主記憶２３０へ書き込む。
【００１９】
主記憶２３０は、標準ＴＣＰ機能２３１、独自ＴＣＰ機能２３２、プロキシ機能２３３などのプログラムを記憶する。標準ＴＣＰ機能２３１は、プロキシ機能２３３から受け取ったデータをＮＩＦ２５０からＬＡＮ１１０へと送信し、ＬＡＮ１１０からＮＩＦ２５０を経由して受信したデータをプロキシ機能２３３へ渡す。
【００２０】
独自ＴＣＰ機能２３２は、プロキシ機能２３３から受け取ったデータをＮＩＦ２６０からＷＡＮ１２０へと送信し、ＷＡＮ１２０からＮＩＦ２６０を経由して受信したデータをプロキシ機能２３３へ渡す。プロキシ機能２３３は、標準ＴＣＰ機能２３１から受け取ったデータを独自ＴＣＰ機能２３２へ渡し、独自ＴＣＰ機能２３２から受け取ったデータを標準ＴＣＰ機能２３１へ渡す。
【００２１】
例えば、計算機１１１が、計算機１３１へデータが送信するとする。計算機１１１から通信装置１００までの経路であるＬＡＮ１１０上では、計算機１１１が標準ＴＣＰによって送信帯域を制御する。通信装置１００から計算機１３１への経路であるＷＡＮ１２０及びＬＡＮ１３０上では、通信装置１００が独自ＴＣＰによって送信帯域を制御する。計算機１３１が通知するＲＷＩＮが小さい場合でも、計算機１３１がより多くのデータを受信可能である場合、通信装置１００の独自ＴＣＰによる送信帯域制御によって、広い通信帯域が得られる。
【００２２】
図２は、処理装置２２０、主記憶２３０、二次記憶２４０、ＮＩＦ２５０、ＮＩＦ２６０がひとつのシステムバス２１０を介して接続されている例を示す。複数のシステムバスを介して接続されていたり、システムバスを介さずに直接接続されていたりしてもよい。図示した数とは異なる数の、処理装置、主記憶、二次記憶、ＮＩＦが実装されていてもよい。
【００２３】
図２は、標準ＴＣＰ機能２３１、独自ＴＣＰ機能２３２、プロキシ機能２３３が全てソフトウェアにより構成されている例を示す。これら機能の一部又は全ては、処理装置２２０、ＮＩＦ２５０、及びＮＩＦ２６０のうちの一つ又は複数要素に実装されてもよい。ＮＩＦ２５０、２６０は、一つの物理的なＮＩＦに実装された論理的なＮＩＦでもよい。
【００２４】
図３には通信装置１００が送受信するパケットのフォーマット図を表す。パケットは、ＭＡＣヘッダ９１０、ＩＰヘッダ９２０、ＴＣＰヘッダ９３０、ＴＣＰオプションヘッダ９４０、ペイロード９６０を含む。
【００２５】
ＭＡＣヘッダ９１０は、宛先ＭＡＣアドレスを表すＤＭＡＣ９１１と、送信元ＭＡＣアドレスを表すＳＭＡＣ９１２と、ＭＡＣフレームタイプを表すＴｙｐｅ９１３を含む。ＩＰヘッダ９２０は、ＭＡＣヘッダ９１０を除くパケット長を表すＩＰ  ｌｅｎｇｔｈ９２１と、プロトコル番号を表すｐｒｏｔｏｃｏｌ９２２と、送信元ＩＰアドレスを表すＳＩＰ９２３と、宛先ＩＰアドレスを表すＤＩＰ９２４を含む。
【００２６】
ＴＣＰヘッダ９３０は、送信元ポート番号を表すｓｒｃ．ｐｏｒｔ９３１と、宛先ポート番号を表すｄｓｔ．ｐｏｒｔ９３２と、送信シーケンス番号を表すＳＥＱ９３３と、受信シーケンス番号を表すＡＣＫ９３４と、ＴＣＰフラグ番号を表すｆｌａｇ９３５と、ＴＣＰのヘッダ長を表すｔｃｐ  ｈｌｅｎ９３６と、ＲＷＩＮを送信計算機へ通知するｗｉｎ＿ｓｉｚｅ９３７を含む。
【００２７】
ＴＣＰオプションヘッダ９４０は、オプション種別を表すｏｐｔｉｏｎ  ｋｉｎｄ９４１と、オプション長を表すｏｐｔｉｏｎ  ｌｅｎｇｔｈ９４２と、受信できたかデータ箇所の位置を送信計算機に通知するために用いられるｌｅｆｔ＿ｅｄｇｅ＿１〜４（９４３、９４５、９４７、９４９）、ｒｉｇｈｔ＿ｅｄｇｅ＿１〜４（９４４、９４６、９４８、９５０）を含む。
【００２８】
例えば、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）オプションは、ＴＣＰ通信を開始するときに自装置の受信可能なＭＳＳのサイズを対向装置に通知するために用いられる。ＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）オプションは、ＴＣＰ通信を開始するときに、自装置がＳＡＣＫオプションに対応可能であることを対向装置に通知するために用いられる。ＳＡＣＫオプションは、さらに、通信中に廃棄が検出されたときに部分的に受信できた箇所を対向装置に通知するために用いられる。
【００２９】
タイムスタンプオプションは、通信中の自装置の受信時刻を対向装置に通知するために用いられる。ウィンドウスケールオプションは、ｗｉｎ＿ｓｉｚｅ９３７で通知する値を左シフトするビット数を対向装置に通知することで、対向装置に通知可能なＲＷＩＮの最大値を大きくするために用いられる。このように、ＴＣＰオプションは、通信開始時及び通信中に自装置の対応可能な機能や情報を対向装置に伝えるために用いられる。
【００３０】
図４は本実施例の通信装置１００の機能ブロック構成例の詳細を示す。通信装置１００は、標準ＴＣＰ機能２３１、独自ＴＣＰ機能２３２、プロキシ機能２３３、ＮＩＦ２５０、ＮＩＦ２６０を含む。
【００３１】
プロキシ機能２３３は、標準ＴＣＰ機能２３１のバッファ３０１、３０２と独自ＴＣＰ機能２３２のバッファ３１１、３１２と間で、データを転送する。プロキシ機能２３３は、通信装置１００を通過するＴＣＰ通信において、標準ＴＣＰ機能２３１と独自ＴＣＰ機能２３２とを用いる。
【００３２】
具体的には、プロキシ機能２３３は、ＬＡＮ１１０とＮＩＦ２５０との通信において標準ＴＣＰ機能２３１を用いる。ＷＡＮ１２０とＮＩＦ２６０との間の通信において独自ＴＣＰ機能２３２を用いる。これにより、ＬＡＮ１１０上で標準ＴＣＰによって帯域が制御されているＴＣＰ通信を、ＷＡＮ１２０では独自ＴＣＰによって帯域が制御されるように、帯域制御モードを変換する。
【００３３】
標準ＴＣＰ機能２３１は、受信バッファ３０１、送信バッファ３０２、受信部３０３、送信部３０４、標準ＴＣＰ送信帯域制御部３０５を含む。受信バッファ３０１は、受信部３０３が受信したデータの順序の整合性等を確認しプロキシ機能２３３へ渡す。送信バッファ３０２は、プロキシ機能２３３から送信されるデータを一時的にバッファリングするとともにパケット廃棄が起こったときに再送するために保持し、必要なデータを送信部３０４へ渡す。
【００３４】
受信部３０３は、ＬＡＮ１１０からＮＩＦ２５０に届いたデータを受信する。送信部３０４は、標準ＴＣＰ送信帯域制御部３０５に従ってＮＩＦ２５０よりＬＡＮ１１０にデータを送信する。標準ＴＣＰ送信帯域制御部３０５は、ＩＥＴＦ  ＲＦＣ７９３に記載のアルゴリズムによって送信部３０４がデータを送信する帯域を制御する。
【００３５】
独自ＴＣＰ機能２３２は、受信バッファ３１１、送信バッファ３１２、受信部３１３、送信部３１４、独自ＴＣＰ制御部３１５を含む。受信バッファ３１１は、受信部３１３が受信したデータの順序等の整合性を確認しプロキシ機能２３３へ渡す。送信バッファ３１２は、プロキシ機能２３３から送信されるデータを一時的にバッファリングするとともにパケット廃棄が起こったときに再送するために保持し、必要なデータを送信部３１４へ渡す。
【００３６】
受信部３１３は、ＷＡＮ１２０からＮＩＦ２６０に届いたデータを受信する。送信部３１４は、独自ＴＣＰ制御部３１５に従ってＮＩＦ２６０よりＷＡＮ１２０にデータを送信する。独自ＴＣＰ制御部３１５は、送信部３１４がデータを送信する帯域を制御する。
【００３７】
独自ＴＣＰ制御部３１５は、独自ＴＣＰ送信帯域制御部３２１、廃棄率計算部３２２、送信帯域抑制制御部３２３、状態テーブル３２４を含む。状態テーブル３２４は、独自ＴＣＰ機能を実行するのに必要な値を格納する。独自ＴＣＰ送信帯域制御部３２１は、受信部３１３から受け取ったデータ及び廃棄率計算部３２２から受け取った廃棄率をもとに、送信部３１４がデータを送信する速度を計算する。
【００３８】
廃棄率計算部３２２は、受信部３１３から受け取ったデータをもとに送信部３１４から送信されたパケットの廃棄率を計算する。送信帯域抑制制御部３２３は、受信部３１３から受け取ったデータ及び廃棄率計算部３２２から受け取った廃棄率をもとに、送信部３１４から送信されるデータの帯域を制御する。
【００３９】
送信帯域抑制制御部３２３の送信帯域抑制機能が有効な場合、当該機能は、ｉｎｆｌｉｇｈｔが受信部３１３から受け取ったＲＷＩＮのδ倍より大きくならないように、帯域を制御する。ｉｎｆｌｉｇｈｔは、送信部３１４から送信されるデータのうち受信部３１３からＡＣＫパケットを受け取っていないデータのサイズである。δの値については後述する。
【００４０】
図５は本実施例の通信装置１００に含まれる独自ＴＣＰ制御部３１５の動作概要を示すフローチャートである。通信装置１００は、送信帯域抑制機能を有効にすることで受信計算機のバッファ溢れを防ぐ。さらに、送信帯域抑制機能を無効にすることで、受信計算機が通知するＲＷＩＮに送信帯域が制限されることを防ぐ。
【００４１】
通信装置１００は、通信中に送信帯域抑制機能の有効／無効を切り替えることでデータ送信を高速化する。送信帯域抑制機能を無効にしなくてもＲＷＩＮに送信帯域が制限されない場合は、受信計算機のバッファ溢れを防ぐことによって通信帯域の低下を抑えるため、送信帯域抑制機能を有効にする。
【００４２】
受信計算機のバッファが溢れておらず、送信帯域がＲＷＩＮによって制限されているときは、さらに送信帯域を広げるために送信帯域抑制機能を無効にする。この切替えを動的に行うことによって、受信計算機及びネットワークの状況に応じたデータ通信の高速化を実現する。
【００４３】
図５を参照して、通信装置１００の動作の概要を説明する。詳細については後述する。通信装置１００の起動時（Ｓ１００）、独自ＴＣＰ制御部３１５は、送信帯域抑制機能を有効化した状態で開始する（Ｓ１０１）。受信計算機のオペレーティングシステムはＲＷＩＮを動的に変化させることがあるため、送信帯域抑制機能を無効にしなくても、ＲＷＩＮが拡大することで送信帯域を拡大する可能性があるからである。送信帯域抑制機能を維持することで、受信計算機のバッファ溢れをより確実に防げる。
【００４４】
独自ＴＣＰ制御部３１５は、送信帯域がＲＷＩＮで制限されているかどうか判定し続ける。ＲＷＩＮが送信帯域を制限していると判定すると（Ｓ１０２）、独自ＴＣＰ制御部３１５は、送信帯域抑制機能を無効化することで、送信帯域をＲＷＩＮに制限されないようにする（Ｓ１０３）。
【００４５】
送信帯域抑制機能の無効化（Ｓ１０３）後、独自ＴＣＰ制御部３１５は、送信帯域抑制機能の無効化が適切かどうか判定し続ける（Ｓ１０４）。ステップＳ１０４で送信帯域抑制機能を無効にすることが不適切だと判定する条件は次の通りである。
【００４６】
（１）独自ＴＣＰ制御部３１５は、送信帯域抑制機能を無効にしているときにネットワークの輻輳を検出した場合、送信帯域抑制機能を無効にすることは不適切だと判定する。これにより、ＲＷＩＮに送信帯域を制限されている他の標準ＴＣＰ通信との通信帯域の公平性を保つ。
【００４７】
（２）独自ＴＣＰ制御部３１５は、受信計算機のバッファ溢れを検出した場合、送信帯域抑制機能を無効にすることは不適切だと判定する。送信帯域抑制機能を有効にすることで、受信計算機のバッファ溢れを防ぐことができる。
【００４８】
（３）独自ＴＣＰ制御部３１５は、送信帯域抑制機能を有効にしても無効にしても長い時間でみた送信帯域が大きく変わらない場合、送信帯域抑制機能は有効にすることが適切であり、無効にすることは不適切だと判定する。送信帯域抑制機能を有効とすることで、受信計算機のバッファ溢れを未然に防ぐことができる。
【００４９】
以上の判定基準により送信帯域抑制機能の無効化が不適切だと判定された場合（Ｓ１０４：Ｎｏ）、独自ＴＣＰ制御部３１５は、送信帯域抑制機能を有効化する（Ｓ１０１）。送信帯域抑制機能を無効化することが不適切であると判定する条件として３つの条件をあげたが、独自ＴＣＰ制御部３１５は、全ての条件をそれぞれ用いてもよいし、一部の条件のみを用いてもよい。また、他の条件を使用してもよい。
【００５０】
図６は状態テーブル３２４の例を示す。状態テーブル３２４は、例えばＴＣＰコネクションごとの状態を記録するためのｎ個のエントリ４００を有する。各エントリ４００が含む情報の例は以下の通りである。
【００５１】
ｌｏｓｓ＿ｒａｔｉｏ４０１は、廃棄率計算部３２２が計算した最新の廃棄率である。ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２は、廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１が更新される際に廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１の値が格納される旧廃棄率である。ａｖｅ＿ｌｏｓｓ＿ｒａｔｉｏ４０３は、廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１のＭ回分の移動平均値を示す平均廃棄率である。Ｍの値については後述する。
【００５２】
ｔｏｋｅｎ４０４は、現在のトークンバケット内のトークンを示す。ｏｌｄ＿ｔｏｋｅｎ４０５は、トークンバケット内のトークンが更新される前のトークンｔｏｋｅｎ４０４の値を示す旧トークンである。ｔｍｐ＿ｔｏｋｅｎ４０６は、トークンｔｏｋｅｎ４０４の値を旧トークンｏｌｄ  ｔｏｋｅｎ４０５に移すときに一時的に記憶しておく一時トークンである。
【００５３】
ｌｅｆｔ＿ｓｅｎｄ＿ｓｅｇ４０７は、送信バッファ３１２内において、送信済みかつＡＣＫ受信済みデータへのポインタを示す左端ポインタである。ｒｉｇｈｔ＿ｓｅｎｄ＿ｓｅｇ４０８は、送信バッファ３１２内において、送信済みかつＡＣＫを受信していないデータへのポインタを示す右端ポインタである。ｏｌｄ＿ａｃｋ＿ｓｅｇ４０９は、トークンｔｏｋｅｎ４０４が更新される直前のＡＣＫパケットのＡＣＫ番号を記憶する旧ＡＣＫ番号である。ｍｓｓ４１０は、通信中のＴＣＰセッションにおける最大のペイロードサイズを示す最大セグメントサイズである。
【００５４】
ＲＷＮＤ４１１は、受信部３１３から受け取った最新のＡＣＫパケットに含まれるＲＷＩＮを示す。基準時刻Ａ４１２は、次回のトークン更新時刻の基準となる時刻を記憶する。基準時刻は、例えば、トークンバケットの更新時刻である。基準時刻Ｂ４１３は、ｉｎｆｌｉｇｈｔがＲＷＩＮのα倍以上となった最近の時刻を記憶する。αの値については後述する。ｒｔｓ４１４は、再送要求されたパケット数を保存するカウンタである。
【００５５】
図７は、独自ＴＣＰ送信帯域制御部３２１の機能ブロック構成例を示す。本実施例における独自ＴＣＰ送信帯域制御部３２１は、トークンバケットアルゴリズムを使用する。トークンバケットアルゴリズムは、トークンバケットにトークンを蓄積する。トークンバケット内のトークンが送信パケット長以上である場合、トークンバケットアルゴリズムは、当該パケットを送信する。
【００５６】
トークンバケットアルゴリズムは、パケットを送信すると、パケット長分のトークンをトークンバケットから減らす。独自ＴＣＰ送信帯域制御部３２１は、タイマ５０１、トークンバケット５０３、トークンを計算するトークン更新部５０２を含み、本実施例のトークンバケットアルゴリズムを実現する。独自ＴＣＰ送信帯域制御部３２１により、送信帯域抑制機能が無効状態である場合でも、適切に帯域制御を行うことができる。
【００５７】
図８は独自ＴＣＰ送信帯域制御部３２１の動作例を示すフローチャートである。本実施例のトークンバケットアルゴリズムは、インターバル経過毎に、廃棄率に応じてトークンバケット内のトークンを増減する。これにより廃棄率を低減する。独自ＴＣＰ送信帯域制御部３２１は、下記帯域制御と異なるアルゴリズムで送信帯域を制御してもよい。
【００５８】
独自ＴＣＰ送信帯域制御部３２１は、処理開始（Ｓ２００）の後、タイマ５０１にて、現在時刻を監視する（Ｓ２０１）。具体的には、独自ＴＣＰ送信帯域制御部３２１は、現在時刻と基準時刻Ａ４１２との差が、所定のインターバル以上かどうか判定する。インターバルとして、計測されたＲＴＴを用いてもよい。
【００５９】
現在時刻と基準時刻Ａ４１２との差がインターバル以上である場合（Ｓ２０１：Ｙｅｓ）、独自ＴＣＰ送信帯域制御部３２１は、廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１に廃棄率計算部３２２から取得した廃棄率を格納する（Ｓ２０２）。また、独自ＴＣＰ送信帯域制御部３２１は、一時トークンｔｍｐ＿ｔｏｋｅｎ４０６に、トークンｔｏｋｅｎ４０４の値を退避させる（Ｓ２０３）。
【００６０】
次に、独自ＴＣＰ送信帯域制御部３２１は、左端ポインタｌｅｆｔ＿ｓｅｎｄ＿ｓｅｇ４０７の値が変化しているかをチェックする（Ｓ２０４）。その値が変化していない場合（Ｓ２０４：Ｙｅｓ）、独自ＴＣＰ送信帯域制御部３２１は、送信バッファ３１２に未送信データがあるかどうかチェックする（Ｓ２０５）。
【００６１】
未送信データがない場合（Ｓ２０５：Ｎｏ）、独自ＴＣＰ送信帯域制御部３２１は、ステップＳ２０１に戻る。未送信データがある場合（Ｓ２０５：Ｙｅｓ）、独自ＴＣＰ送信帯域制御部３２１は、トークンｔｏｋｅｎ４０４の値を基準時刻A412以降のＡＣＫ受信量（現在のＡＣＫ番号−ｏｌｄ＿ａｃｋ＿ｓｅｇ４０９）に設定する（Ｓ２０７）。
【００６２】
ステップＳ２０４において、ｌｅｆｔ＿ｓｅｎｄ＿ｓｅｇ４０７の値が進んでいた場合（Ｓ２０４：Ｎｏ）、独自ＴＣＰ送信帯域制御部３２１は、旧廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２のＫ倍が廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１以上か判定する（Ｓ２０６）。Ｋは、所定の定数又は変数である。Ｋは、１以上又は１未満の値であり、一例において１である。
【００６３】
旧廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２のＫ倍が廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１より小さい場合（Ｓ２０６：Ｎｏ）、独自ＴＣＰ送信帯域制御部３２１は、トークンｔｏｋｅｎ４０４を、旧トークンｏｌｄ  ｔｏｋｅｎ４０５よりも小さくなるよう、カウンタｒｔｓ４１４に基づいて減少させる。例えば、ｔｏｋｅｎ４０４を、（ｏｌｄ  ｔｏｋｅｎ４０５−ｒｔｓ４１４）に変化させる（Ｓ２０８）。
【００６４】
旧廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２のＫ倍が廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１以上である場合（Ｓ２０６：Ｙｅｓ）、独自ＴＣＰ送信帯域制御部３２１は、ｔｏｋｅｎ４０４を所定量だけ増加させる（Ｓ２０９）。増加量は定数又は変数である。
【００６５】
ステップＳ２０７、Ｓ２０８、Ｓ２０９の後、独自ＴＣＰ送信帯域制御部３２１は、廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１を旧廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２に、一時トークンｔｍｐ＿ｔｏｋｅｎ４０６を旧トークンｏｌｄ  ｔｏｋｅｎ４０５に、現在のＡＣＫ番号を旧ＡＣＫ番号ｏｌｄ＿ａｃｋ＿ｓｅｇ４０９に代入する（Ｓ２１０）。さらに、独自ＴＣＰ送信帯域制御部３２１は、基準時刻Ａ４１２を更新する（Ｓ２１１）。独自ＴＣＰ送信帯域制御部３２１は、基準時刻Ａ４１２を例えば現在時刻に更新する。更新後時刻は、他の時刻でもよい。独自ＴＣＰ送信帯域制御部３２１は、更新したｔｏｋｅｎ４０４の値に、トークンバケットを更新する（Ｓ２１２）。なお、独自ＴＣＰ送信帯域制御部３２１は、上記方法と異なる方法で送信帯域を制御してもよい。
【００６６】
図９は廃棄率計算部３２２の機能ブロック構成例を示す。以下に説明する構成及び方法は廃棄率計算の一例であって、他の構成及び方法により廃棄率を計算してもよい。廃棄率計算部３２２は、パケットカウント部７１０、計算部７２０を含む。パケットカウント部７１０は、カウンタｓｎｄ７１１、カウンタａｃｋ．ｒｅａｌ７１２、記憶部７３０を含む。カウンタｓｎｄ７１１は、送信部３１４より送信されたパケット数をカウントする。カウンタａｃｋ．ｒｅａｌ７１２は、ＡＣＫ又はＳＡＣＫされたパケット数をカウントする。記憶部７３０は、前回のＳＡＣＫブロックを記憶する。
【００６７】
記憶部７３０において、ＳＬＥ１  ７３１は、ＳＡＣＫオプションフィールドの第一ブロック始端（ＳＡＣＫ  Ｌｅｆｔ  Ｅｄｇｅ：ＳＬＥ）を表す。ＳＲＥ１  ７３５は、終端（ＳＡＣＫ  Ｒｉｇｈｔ  Ｅｄｇｅ：  ＳＲＥ）を表す。ＳＬＥ２  ７３２、ＳＬＥ３  ７３３、ＳＬＥ４  ７３４は、それぞれ、第二、第三、第四ブロックの始端を表す。ＳＲＥ２  ７３６、ＳＲＥ３  ７３７、ＳＲＥ４  ７３８は、それぞれ、第二、第三、第四ブロックの終端を表す。
【００６８】
図１０は廃棄率計算部３２２の動作例を示すフローチャートである。処理開始（Ｓ３００）の後、パケットカウント部７１０は、ＡＣＫパケットを受信（Ｓ３０１）するたびに、ＡＣＫ番号が進んだかどうかを判定する（Ｓ３０２）。ＡＣＫ番号が進んでいない場合（Ｓ３０２：Ｎｏ）、パケットカウント部７１０は、記憶部７３０からひとつ前に受信したＳＡＣＫの値（ＳＬＥ１−４、ＳＲＥ１−４）を読み出す（Ｓ３０３）。
【００６９】
パケットカウント部７１０は、ＳＡＣＫの値に変化があるか判定する（Ｓ３０４）。具体的には、パケットカウント部７１０は、ＳＡＣＫブロックのうち終端の番号が小さくなるか、終端の番号が大きくなるか、あるいは２つ以上のブロックが繋がっていないかを判定する。
【００７０】
ＡＣＫ番号又はＳＡＣＫの値に変化がみられた場合（Ｓ３０２：Ｙｅｓ、Ｓ３０４：Ｙｅｓ）、パケットカウント部７１０は、変化分のセグメント数を計算して最大セグメントサイズｍｓｓ４１０で割り、新規に受信計算機に受信されたパケット数を計算する（Ｓ３０５）。パケットカウント部７１０は、この値をカウンタａｃｋ．ｒｅａｌ７１２に加算する（Ｓ３０６）。パケットカウント部７１０は、ＳＡＣＫブロックの値を記憶部７３０に格納して（Ｓ３０７）、先頭に戻る。計算部７２０は、廃棄率ｌｏｓｓ  ｒａｔｉｏ４０１を、（１−ａｃｋ．ｒｅａｌ７１２／ｓｎｄ７１１）により算出する。
【００７１】
図１１は送信帯域抑制制御部３２３の機能ブロック構成例を示す。送信帯域抑制制御部３２３は、平均廃棄率計算部９０１、ステートマシン９０２、送信帯域抑制機能切替部９０３、送信帯域抑制部９０４、カウンタｃｎｔ９０５を含む。ステートマシン９０２及び送信帯域抑制機能切替部９０３は、切替制御部の一例を構成する。
【００７２】
平均廃棄率計算部９０１は、廃棄率計算部３２２がインターバルごとに計算した廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１のＭ回に渡る移動平均ａｖｅ＿ｌｏｓｓ＿ｒａｔｉｏ４０３を計算する。ステートマシン９０２は、受信部３１３及び廃棄率計算部３２２から受けとった情報をもとに動作する。Ｍは固定値でもよく、可変値でもよい。例えば、平均廃棄率計算部９０１は、ＭをＲＴＴと反比例に変化させてもよい。
【００７３】
送信帯域抑制機能切替部９０３は、平均廃棄率計算部９０１が計算した平均廃棄率ａｖｅ＿ｌｏｓｓ＿ｒａｔｉｏ４０３及びステートマシン９０２の状態をもとに、送信帯域抑制機能の有効とするか無効とするかを判定する。本例において、送信帯域抑制機能の無効／有効は、送信帯域抑制部９０４をバイパスするか否かにより制御されるが、他の方法を使用してもよい。
【００７４】
送信帯域抑制機能が無効である場合、送信帯域抑制部９０４は、独自ＴＣＰ送信帯域制御部３２１が計算した制御帯域を送信部３１４に制御帯域として伝達する。独自ＴＣＰ送信帯域制御部３２１が計算した制御帯域は、本例におけるトークンバケット５０３のトークン量に相当する。送信帯域抑制機能が有効である場合、送信帯域抑制部９０４は、独自ＴＣＰ送信帯域制御部３２１が計算した制御帯域と、ｉｎｆｌｉｇｈｔがＲＷＩＮのδ倍と等しくなる帯域のうち、小さい方の帯域を送信部３１４に制御帯域として伝達する。
【００７５】
カウンタｃｎｔ９０５は、ステートマシン９０２の制御に利用される。δは、例えば、１以下の、固定値又は可変値である。例えば、送信帯域抑制部９０４は、δを廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１に反比例に変化させてもよい。
【００７６】
図１２はステートマシン９０２の状態遷移図である。ステートマシン９０２は、矢印の始点から終点に遷移し得る。ステートマシン９０２は、４つの状態をとる。状態１００３において、送信帯域抑制機能切替部９０３は、送信帯域抑制機能を無効にすることが許可されている。
【００７７】
状態１０００において、ＲＷＩＮが送信帯域を制限していないと判定されているか、又は送信帯域抑制機能を無効にすることが不適切だと判定されていて、送信帯域抑制機能が有効にされている。状態１００１において、ＲＷＩＮが送信帯域を制限していると判定されており、送信帯域抑制機能が有効にされている。状態１００２において、ＲＷＩＮが変化しているときに、送信帯域抑制機能が一時的に有効にされている。
【００７８】
図１３はステートマシン９０２の動作を示すフローチャートである。これを用いてステートマシン９０２の状態遷移について説明する。通信装置１００の起動（Ｓ４００）後、ステートマシン９０２は状態１０００から開始する（Ｓ４０１）。
【００７９】
ステートマシン９０２は、廃棄率計算部３２２が計算した廃棄率の変化率が閾値以上であるか判定する（Ｓ４０２）。具体的には、ステートマシン９０２は、廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１が、前回の廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２のγ倍以上であるか判定する。
【００８０】
廃棄率の変化率が閾値以上である場合（Ｓ４０２：Ｙｅｓ）、ステートマシン９０２は、ネットワークが輻輳してパケット廃棄が発生したか、受信計算機のバッファが溢れてパケット廃棄が発生したために廃棄率が上昇したと判定する。図５を参照して説明したように、ネットワークの輻輳又はバッファ溢れが検出された場合、送信帯域抑制機能を無効にすることは不適切である（判定条件（１）及び（２））。従って、ステートマシン９０２は、状態１０００に遷移し（Ｓ４０６）、ステップＳ４０２に戻る。
【００８１】
廃棄率計算部３２２が計算した廃棄率ｌｏｓｓ＿ｒａｔｉｏ４０１が前回の廃棄率ｏｌｄ＿ｌｏｓｓ＿ｒａｔｉｏ４０２のγ倍よりも小さい場合（Ｓ４０２：Ｎｏ）、ステートマシン９０２は、ＲＷＩＮが送信帯域を制限しているか判定する（Ｓ４０３）。具体的には、ステートマシン９０２は、ｉｎｆｌｉｇｈｔとＲＷＩＮのα倍とを比較する。
【００８２】
ｉｎｆｌｉｇｈｔがＲＷＩＮのα倍よりも小さい場合、ステートマシン９０２は、ＲＷＩＮが送信帯域を制限していないと判定し（Ｓ４０３：Ｎｏ）、カウンタｃｎｔ９０５に１を加える（Ｓ４０４）。カウンタｃｎｔ９０５が閾値Ｎ以上である場合（Ｓ４０５：Ｙｅｓ）、ステートマシン９０２は状態１０００に遷移し（Ｓ４０６）、ステップＳ４０２に戻る。カウンタｃｎｔ９０５が閾値Ｎよりも小さい場合（Ｓ４０５：Ｎｏ）、ステートマシン９０２は、ステップＳ４０２に戻る。
【００８３】
ｉｎｆｌｉｇｈｔがＲＷＩＮのα倍以上である場合、ステートマシン９０２は、ＲＷＩＮが送信帯域を制限していると判定し（Ｓ４０３：Ｙｅｓ）、ステートマシン９０２は、カウンタｃｎｔ９０５に０を代入する（Ｓ４０７）。送信帯域抑制機能が有効になった後、規定条件が満たされた場合に送信帯域抑制機能を無効にするため、αは、０より大きく、δ以下の値である。
【００８４】
現在の状態が状態１００３である場合（Ｓ４０８：Ｙｅｓ）、ステートマシン９０２は、ＲＷＩＮの増減が閾値以上であるか判定する（Ｓ４０９）。具体的には、ステートマシン９０２は、前回のＲＷＩＮから現在のＲＷＩＮへの増加量又は減少量（以下増減量と呼ぶ）が、前回のＲＷＩＮのＺ％以上であるか判定する。
【００８５】
ＲＷＩＮの増減量がＺ％以上である場合（Ｓ４０９：Ｙｅｓ）、ステートマシン９０２は、状態１００２に遷移し（Ｓ４１０）、ステップＳ４０２に戻る。増減量がＺ％未満である場合（Ｓ４０９：Ｎｏ）、ステートマシン９０２は、ステップＳ４０２に戻る。なお、ステートマシン９０２は、ＲＷＩＮの増加量又は減少量の一方の変化量のみを参照してもよく、増加量と減少量で異なる閾値を使用してもよい。
【００８６】
現在の状態が状態１００３でない場合（Ｓ４０８：Ｎｏ）、ステートマシン９０２は、現在の状態が状態１０００か判定する（Ｓ４１１）。現在の状態が状態１０００であれば（Ｓ４１１：Ｙｅｓ）、ステートマシン９０２は、状態１００１に遷移し、現在時刻を基準時刻Ｂに記録し（Ｓ４１２）、１１０２に戻る。
【００８７】
現在の状態が状態１０００でない場合（Ｓ４１１：Ｎｏ）、ステートマシン９０２は、現在の状態が、状態１００２であるか判定する（Ｓ４１３）。現在の状態が、状態１００２であれば（Ｓ４１３：Ｙｅｓ）、ステートマシン９０２は、前回のＲＷＩＮから現在のＲＷＩＮへの増減量が、前回のＲＷＩＮのＺ％以上であるか判定する（Ｓ４１４）。
【００８８】
ＲＷＩＮの増減量がＺ％以上である場合（Ｓ４１４：Ｙｅｓ）、ステートマシン９０２は、ステップＳ４０２に戻る。増減量がＺ％未満である場合（Ｓ４１４：Ｎｏ）、ステートマシン９０２は、状態１００３に遷移し（Ｓ４１６）、ステップＳ４０２に戻る。
【００８９】
現在の状態が状態１００２でなければ（Ｓ４１３：Ｎｏ）、ステートマシン９０２は、基準時刻Ｂ４１３から時間βが経過しているか判定する（Ｓ４１５）。経過していれば（Ｓ４１５：Ｙｅｓ）、ステートマシン９０２は、状態１００３に遷移し（Ｓ４１６）、ステップＳ４０２に戻る。経過していなければ（Ｓ４１５：Ｎｏ）、ステートマシン９０２は、ステップＳ４０２に戻る。
【００９０】
図５を参照して説明したように、送信帯域抑制機能を有効にしても無効にしても長い時間でみた送信帯域が大きく変わらない場合、送信帯域抑制機能は有効にすることが適切である（条件（３））。ＲＷＩＮによる送信帯域抑制期間が短い場合、送信帯域抑制機能を有効とすることで、受信計算機のバッファ溢れを未然に防ぐことが有効である。基準時刻Ｂ４１３から時間βが経過していることが状態１００３に遷移することの条件に含まれることで、ＲＷＩＮによる送信帯域抑制期間が短い場合に、送信帯域抑制機能が無効になることを避ける。
【００９１】
上記α、β、γ、Ｎ、Ｚは固定値でもよいし、変化してもよい。例えば、これらの値は、ＲＴＴや廃棄率に応じて変化してもよい。
【００９２】
ステートマシン９０２は、ＲＷＩＮの変化についての判定（Ｓ４０９、Ｓ４１４）を、受信計算機のオペレーティングシステムがＲＷＩＮを変更中か否か判定するために行う。ＲＷＩＮが増加している場合、受信計算機のバッファサイズが拡大中の可能性がある。その場合、送信帯域がＲＷＩＮに制限されなくなる可能性があるため、送信帯域抑制機能切替部９０３は、ＲＷＩＮが一定になるまで送信帯域抑制機能を一時的に有効にする。また、ＲＷＩＮが減少している場合、バッファ溢れの可能性が増加するため、送信帯域抑制機能を一時的に有効にする。
【００９３】
ステートマシン９０２は、基準時刻Ｂ４１３から時間βが経過しているかの判定（Ｓ４１５）を、ＲＷＩＮが継続的に送信帯域を制限している状態であるか、一時的にｉｎｆｌｉｇｈｔがＲＷＩＮのα倍を超えた状態であるかを判定するために行う。基準時刻Ｂ４１３から時間βが経過した場合、ステートマシン９０２は、ＲＷＩＮが送信帯域を制限している状態であると判定する。一時的な状態による誤判定の可能性を低減する。
【００９４】
ステップＳ４０５においてカウンタｃｎｔ９０５が閾値Ｎよりも大きい場合に、ステートマシン９０２は、状態１０００に遷移する（Ｓ４０６）。これは、ｉｎｆｌｉｇｈｔが一時的にＲＷＩＮのα倍よりも下回った場合に状態１０００に遷移せず、継続的に下回った場合に状態１０００に遷移するためである。一時的な状態による誤判定の可能性を低減する。
【００９５】
図１４は、送信帯域抑制機能切替部９０３の動作例を示すフローチャートである。処理開始後（Ｓ５００）、送信帯域抑制機能切替部９０３は、ステートマシン９０２が状態１００３かどうか判定する（Ｓ５０１）。ステートマシン９０２が状態１００３でない場合（Ｓ５０１：Ｎｏ）、送信帯域抑制機能切替部９０３は、送信帯域抑制機能を有効にする（Ｓ５０４）。その後、送信帯域抑制機能切替部９０３は、ステートマシン９０２の状態を判定するステップＳ５０１に戻る。
【００９６】
ステートマシン９０２が状態１００３である場合（Ｓ５０１：Ｙｅｓ）、ａｖｅ＿ｌｏｓｓ＿ｒａｔｉｏ４０３がｘ％以上であれば（Ｓ５０２：Ｙｅｓ）、送信帯域抑制機能切替部９０３は、送信帯域抑制機能を有効にする（１２０４）。その後、送信帯域抑制機能切替部９０３は、ステートマシン９０２の状態を判定するステップＳ５０１に戻る。
【００９７】
ａｖｅ＿ｌｏｓｓ＿ｒａｔｉｏ４０３がｘ％未満であれば（Ｓ５０２：Ｎｏ）、送信帯域抑制機能切替部９０３は、送信帯域抑制機能を無効にする（Ｓ５０３）。ｘは固定の値でもよいし、ＲＴＴや廃棄率に応じて動的に変化してもよい。
【００９８】
図１３及び図１４に示す送信帯域抑制機能の制御において、いくつかのステップを省略してもよい。例えば、廃棄率の変化率、ＲＷＩＮＤの変化量、基準時刻Ｂからの経過時間、平均廃棄率等についての判定を省略してもよい。
【００９９】
図１５は送信帯域抑制機能有効時及び送信帯域抑制機能無効時における通信シーケンスの比較図である。ここでは、受信計算機６２０は、常に送信計算機６００にＲＷＩＮ＝４３８０を通知し、また送信計算機６００は、常にペイロードサイズが１４６０のパケットを送信する場合を例として説明する。
【０１００】
送信帯域抑制機能有効時において、送信計算機６００は、ＡＣＫを受信する前にパケットを３つまで送信することができる（パケット６０１〜６０３）。受信計算機６２０は３つのパケット６０１〜６０３を受信後、対応するＡＣＫパケット６２１〜６２３を送信計算機６００へ返す。送信計算機６００はＡＣＫパケット６２１〜６２３を受信後、再び送信を開始する（６０４〜６０６）。このように、送信計算機６００は、送信帯域抑制機能有効時、ＲＴＴ中に最大でＲＷＩＮまでしかデータを送信することができない。
【０１０１】
送信帯域抑制機能無効時において、送信計算機６００は、パケット６４１〜６４３を送信し、ｉｎｆｌｉｇｈｔがＲＷＩＮに到達してもさらにパケットを送信することができる（パケット６４４〜６４７）。その結果、送信計算機６００は、ＲＴＴ中にＲＷＩＮ以上のデータを送信することができる。これにより、ＲＷＩＮの大きさに依らず、受信計算機の受信バッファやＮＩＣのバッファが受信可能な限り送信帯域を大きくすることができる。
【０１０２】
なお、図１５は、ＭＳＳが１４６０、受信計算機が送信計算機へ通知するＲＷＩＮが常に４３８０である例を示しているが、ＭＳＳ及びＲＷＩＮは任意の値でよく、それらの値が通信中に値が変化してもよい。
【０１０３】
本実施例によれば、送信帯域を高めることが可能なときに受信ウィンドウサイズを超えて送信し、受信ウィンドウサイズを超えて送信すると送信帯域を落とす可能性があるときに受信ウィンドウサイズを超えずに送信することができ、スループットを高めることができる。なお、上記例は、ＴＣＰ通信における送信帯域制御の例であるが、本発明の送信帯域制御を他の通信プロトコルに適用することができる。
【実施例２】
【０１０４】
実施例１は、独自ＴＣＰ機能がプロキシ装置として実装される例を示した。本実施例は、独自ＴＣＰ機能がオペレーティングシステムのＴＣＰ機能として送信計算機に組み込まれる例を説明する。特に断りのない限り、実施例１と同様の構成のものには同じ符号を付し、説明を省略する。
【０１０５】
図１６は、実施例２における送信計算機８００を含むネットワークシステムの構成例を示す。送信計算機８００は、ＬＡＮ１１０に接続される。実施例１との違いは、経路上に標準ＴＣＰと独自ＴＣＰの機能を有する通信装置１００を設置するのではなく、送信計算機８００が独自ＴＣＰによって、計算機１１２、１３１、１３２、１３３、１４１へデータの送信を開始する点である。
【０１０６】
図１７は、実施例２における送信計算機８００のハードウェア構成図の例を示す。図１８は、実施例２における送信計算機８００の機能ブロック構成例を示す。アプリケーション８０１は、独自ＴＣＰ機能２３２とデータの受渡しを行い、独自ＴＣＰ機能２３２がＮＩＦ２６０を通してＬＡＮ１１０とデータのやり取りを行う。
【０１０７】
ここでは、独自ＴＣＰ機能が送信計算機のオペレーティングシステムに組み込まれる例を挙げたが、ユーザランドのアプリケーションとして独自ＴＣＰ機能を実装し、同じ又は他のアプリケーションから独自ＴＣＰ機能を利用する形で、送信計算機に独自ＴＣＰ機能を組み込んでもよい。
【実施例３】
【０１０８】
本実施例は、独自ＴＣＰ機能が組み込まれるプロキシ装置が仮想通信装置として実装される例を示す。特に断りのない限り、実施例１と同様の構成のものには同じ符号を付し、説明を省略する。
【０１０９】
図１９は、実施例３における仮想通信装置８１０〜８１３を含むネットワークシステムの構成図を示す。仮想化基盤８３０は、サーバ８５０〜８５２がソフトウェアリソース（仮想計算機、仮想ネットワーク等)を共有する形で稼働する。仮想通信装置８１０〜８１３、仮想計算機８３１〜８３３、及び仮想ネットワーク８０５は、仮想化基盤８３０上で稼働する。サーバ８５０〜８５２を含め、以下の説明において仮想との明示がない構成要素は、実構成要素である。
【０１１０】
サーバ８５０〜８５２は、ＬＡＮ１１０に接続される。仮想計算機８３１〜８３３及び仮想通信装置８１０〜８１３は仮想ネットワーク８０５に接続される。仮想通信装置８１０〜８１３は、直接又は仮想ネットワーク８０５を経由してＬＡＮ１１０にも接続される。仮想ネットワーク８０５は、接続される計算機や通信装置を１つのネットワークとして接続してもよいし、ＶＬＡＮ等の機能を用いて、論理的に複数のネットワークとし、接続される計算機や通信装置を区切ってもよい。
【０１１１】
ここで、仮想通信装置８１０は標準ＴＣＰ通信を独自ＴＣＰ通信へ変換するプロキシ装置である。仮想通信装置８１１〜８１３は、仮想通信装置８１０と同一の機能を持つプロキシ装置でもよいし、ファイヤウォールやロードバランサなどの他の機能を持つ通信装置でもよい。
【０１１２】
例えば仮想計算機８３１が計算機１３１へとＴＣＰ通信によってデータを送信するとき、仮想計算機８３１から送信するデータは、標準ＴＣＰによって帯域制御されて仮想ネットワーク８０５を経由して仮想通信装置８１０に届き、仮想通信装置８１０からは独自ＴＣＰによって帯域制御されて計算機１３１へと送信される。
【０１１３】
図１９においては３台のサーバ８５０〜８５２が仮想化基盤８３０のソフトウェアリソースを共有している場合を例として図示しているが、任意の台数のサーバで仮想化基盤８３０を共有してもよいし、１台のサーバで仮想化基盤８３０を稼働させてもよい。
【０１１４】
図２０は実施例３における仮想通信装置８１０を含むサーバ８５０のハードウェア構成図の例を示す。主記憶２３０は、仮想化基盤機能８６１、仮想計算機機能８６２〜８６４、仮想通信装置機能８６５〜８６８、及び仮想ネットワーク機能８６９を実現するプログラムを格納している。処理装置２２０がこれらプログラムに従って動作することで、仮想化基盤８３０、仮想計算機８３３、仮想ネットワーク８０５、及び仮想通信装置８１０が実現される。他のサーバ８５１、８５２も同様の構成を有していてよい。
【０１１５】
図２１はサーバ８５０の機能ブロック図の例である。仮想通信装置８１０と実施例１の通信装置１００の違いは、ＮＩＦとして仮想ＮＩＦ８７１及び仮想ＮＩＦ８７２の仮想ＮＩＦを備える点、仮想ＮＩＦ８７１が仮想ネットワーク機能８６９に接続される点である。仮想ＮＩＦ８７１、８７２は、仮想通信装置機能８６５内のプログラムモジュールである。
【０１１６】
図２１は、仮想ＮＩＦ８７１が仮想ネットワーク機能８６９に接続される例を示す、仮想ＮＩＦ８７１は、仮想計算機機能８６２〜８６４に直接接続されてもよい。図２１は、仮想ＮＩＦ８７２がＮＩＦ２６０と直接接続される例を示すが、仮想ネットワーク機能８６９を経由して接続してもよい。
【０１１７】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。  また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【符号の説明】
【０１１８】
１００  通信装置
３１３  受信部
３１４  送信部
３２１  独自ＴＣＰ送信帯域制御部
３２２  廃棄率計算部
３２３  送信帯域抑制制御部
９０３  送信帯域抑制機能切替部
９０４  送信帯域抑制部
【図１】
2015133669.tif 000003
【図２】
2015133669.tif 000004
【図３】
2015133669.tif 000005
【図４】
2015133669.tif 000006
【図５】
2015133669.tif 000007
【図６】
2015133669.tif 000008
【図７】
2015133669.tif 000009
【図８】
2015133669.tif 000010
【図９】
2015133669.tif 000011
【図１０】
2015133669.tif 000012
【図１１】
2015133669.tif 000013
【図１２】
2015133669.tif 000014
【図１３】
2015133669.tif 000015
【図１４】
2015133669.tif 000016
【図１５】
2015133669.tif 000017
【図１６】
2015133669.tif 000018
【図１７】
2015133669.tif 000019
【図１８】
2015133669.tif 000020
【図１９】
2015133669.tif 000021
【図２０】
2015133669.tif 000022
【図２１】
2015133669.tif 000023