(57)【要約】【課題】一般的な通信プロトコルに含まれる情報のみを用いて、パケット廃棄率を求めることを課題とする。【解決手段】  送信端末、通信回線、および受信端末からなるネットワークにおいて、  前記送信端末は送信パケットにパケットの順序を示す番号を付加して送信し、前記受信端末は受信済みのパケットの番号を確認応答として返信する形式のプロトコルを用いるシステムであって、  前記受信端末が不連続なデータを受信した場合に、その部分のみを受信したことを通知する部分的確認応答を用いるシステムであって、  送信端末において、送信パケット数ならびに、確認応答および部分的確認応答の情報を用いて、パケット廃棄率を求める方法。【選択図】  図１
2014155080.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続される通信装置であって、
他の通信装置に前記ネットワークを介してパケットを送信する送信部と、
前記他の通信装置から、前記送信部より送信されたパケットに対する選択的確認応答の情報と確認応答の情報とを含む確認応答パケットを、前記ネットワークを介して受信する受信部と、
前記送信部より送信されたパケットの数である送信パケット数を求めるパケットカウント部と、
前記送信パケット数と前記確認応答及び前記選択的確認応答の情報とに基づいて、所定期間における前記送信部から送信されたパケットの廃棄率を求める廃棄率測定部と、を有することを特徴とする通信装置。
【請求項２】
請求項１に記載の通信装置であって、
前記パケットカウント部は、前記確認応答及び前記選択的確認応答の情報に基づいて、前記送信部から送信されたパケットのうち再送要求されたパケットの数である再送要求パケット数を求め、
前記廃棄率測定部は、前記送信パケット数と前記再送要求パケット数とに基づいて、前記廃棄率を求めること、を特徴とする通信装置。
【請求項３】
請求項１に記載の通信装置であって、
前記パケットカウント部は、前記受信部が受信した確認応答パケットの数である確認応答パケット数、及び、前記受信部が受信した確認応答パケットのうち、前記選択的確認応答の情報が該確認応答パケットの直前に受信した確認応答パケットの前記選択的確認応答の情報と一致する前記確認応答パケットの数である重複パケット数、を求め、
前記廃棄率測定部は、前記送信パケット数と前記確認応答パケット数と前記重複パケット数とに基づいて、前記廃棄率を求めること、を特徴とする通信装置。
【請求項４】
請求項１に記載の通信装置であって、
前記廃棄率測定部は、前記廃棄率の高さに応じて前記廃棄率の求め方を変更すること、を特徴とする通信装置。
【請求項５】
請求項１に記載の通信装置であって、
前記パケットカウント部は、前記受信部が受信した確認応答パケットの数である確認応答パケット数と、前記確認応答及び前記選択的確認応答の情報に基づいて前記送信部から送信されたパケットのうち再送要求されたパケットの数である再送要求パケット数と、を求め、
前記廃棄率測定部は、前記送信パケット数と、前記再送要求パケット数と、前記確認応答パケット数との関係に応じて、前記廃棄率の求め方を変更すること、を特徴とする通信装置。
【請求項６】
請求項５に記載の通信装置であって、
前記廃棄率測定部は、前記送信パケット数が前記確認応答パケット数と前記再送要求パケット数との合計よりも小さい場合、前記送信パケット数と前記再送要求パケット数とに基づいて、前記廃棄率を求める
こと、を特徴とする通信装置。
【請求項７】
請求項５に記載の通信装置であって、
前記パケットカウント部は、前記受信部が受信した確認応答パケットのうち、前記選択的確認応答の情報が該確認応答パケットの直前に受信した確認応答パケットの前記選択的確認応答の情報と一致する前記確認応答パケットの数である重複パケット数を求め、
前記廃棄率測定部は、前記送信パケット数が前記確認応答パケット数と前記再送要求パケット数との合計よりも大きい場合、前記送信パケット数と前記確認応答パケット数と前記重複パケット数とに基づいて、前記廃棄率を求めること、を特徴とする通信装置。
【請求項８】
請求項１に記載の通信装置であって、
前記パケットカウント部は、確認応答パケットに含まれる前記確認応答及び前記選択的確認応答の情報と、該確認応答パケットの直前に前記受信部が受信した確認応答パケットに含まれる前記確認応答及び前記選択的確認応答の情報との差分から、前記他の通信装置が受信したパケットの数である受信パケット数を求め、
前記廃棄率測定部は、前記送信パケット数と前記受信パケット数とに基づいて前記廃棄率を求めること、を特徴とする通信装置。
【請求項９】
請求項１に記載の通信装置であって、
前記廃棄率の変化に応じて、パケットを前記他の通信装置に送信するための帯域を制御する帯域制御部と、を更に有し、
前記送信部は、前記制御された帯域に従ってパケットを送信すること、を特徴とする通信装置。
【請求項１０】
通信装置からネットワークに送出されたパケットの廃棄率を測定するパケット廃棄率測定方法であって、
前記通信装置から前記ネットワークに送出されたパケットの数である送信パケット数を求め、
前記送信パケット数と、前記通信装置が前記ネットワークを介して受信した確認応答パケットに含まれる確認応答及び前記選択的確認応答の情報と、に基づいて、所定期間における前記通信装置から前記ネットワークに送出されたパケットの廃棄率を求めること、を特徴とするパケット廃棄率測定方法。
【請求項１１】
請求項１０に記載のパケット廃棄率測定方法であって、
前記確認応答及び前記選択的確認応答の情報に基づいて、前記ネットワークに送出されたパケットのうち再送要求されたパケットの数である再送要求パケット数を求め、
前記送信パケット数と前記再送要求パケット数とに基づいて、前記廃棄率を求めること、を特徴とするパケット廃棄率測定方法。
【請求項１２】
請求項１０に記載のパケット廃棄率測定方法であって、
前記通信装置が受信した確認応答パケットの数である確認応答パケット数、及び、前記通信装置が受信した確認応答パケットのうち、前記選択的確認応答の情報が該確認応答パケットの直前に受信した確認応答パケットの前記選択的確認応答の情報と一致する確認応答パケットの数である重複パケット数を求め、
前記送信パケット数、前記確認応答パケット数、及び、前記重複パケット数に基づいて、前記廃棄率を求めること、を特徴とするパケット廃棄率測定方法。
【請求項１３】
請求項１０に記載のパケット廃棄率測定方法であって、
前記廃棄率の高さに応じて前記廃棄率の求め方を変更すること、を特徴とするパケット廃棄率測定方法。
【請求項１４】
請求項１０に記載のパケット廃棄率測定方法であって、
前記通信装置が受信した確認応答パケットの数である確認応答パケット数と、前記確認応答及び前記選択的確認応答の情報に基づいて前記通信装置から送信されたパケットのうち再送要求されたパケットの数である再送要求パケット数と、を求め、
前記送信パケット数と、前記再送要求パケット数と、前記確認応答パケット数との関係に応じて、前記廃棄率の求め方を変更すること、を特徴とする廃棄率測定方法。
【請求項１５】
請求項１０に記載のパケット廃棄率測定方法であって、
前記廃棄率の変化に応じて、パケットを前記通信装置から前記ネットワークに送信するための帯域を制御し、
前記制御された帯域に従って前記通信装置がパケットを送信すること、を特徴とするパケット廃棄率測定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パケット通信方法および装置に関する。
【背景技術】
【０００２】
クラウドコンピューティング、通称クラウドでは、利用者は、利用者が存在する拠点ではなく外部のデータセンタの計算機資源を使用する。データもデータセンタに置かれるため、利用者の拠点とデータセンタ間でデータのやり取りが頻発することとなる。
【０００３】
データセンタの所在地は世界中に広がっており、常に同一国内にあるとは限らない。例えば、海外のデータセンタの方が、データセンタの利用料が安価である場合があり、海外のデータセンタも積極的に利用されている。
【０００４】
海外のデータセンタを利用する場合、データの転送が低速になる場合がある。海外との通信では、パケットが送信されてから応答が返されるまでの時間であるRound Trip Time (RTT)が大きい。その場合、通常の通信方式では通信速度が遅くなるという問題があった。
【０００５】
この問題に対して、特許文献１では、RTTと関係なく送信データ量を制御することにより、高速な通信を実現している。この方式では、パケット廃棄率の変化を観測することにより、送信データ量を制御している。また、本方式において、パケット廃棄率の測定には、この方式に対応している送信装置と受信装置との間で送受信されるＮＡＣＫ（Negative ACKnowledgement）等の情報が用いられる。
【０００６】
また、特許文献２では、パケット廃棄率の測定方法として、品質測定用のパケットを利用している。まず、受信プローブが、送信プローブから受信した品質測定用パケットにパケット受信カウンタを付与して送信プローブに返信する。続いて、送信プローブが、受信した品質測定用パケットから受信パケット数を抽出し、全ての品質測定用パケットを受信した後、パケット送信カウンタとパケット受信カウンタとの差分、および抽出されたパケット受信カウンタとパケット返信カウンタとの差分を求め、パケット損失率（パケット廃棄率）を算出している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】ＷＯ２０１２／０６６８２４
【特許文献２】特開２００８−８５９０６号公報
【非特許文献】
【０００８】
【非特許文献１】IETF RFC 1122 “Requirements for Internet Hosts -- Communication Layers” http://tools.ietf.org/html/rfc1122
【非特許文献２】IETF RFC 2018 “TCP Selective Acknowledgment Options” http://tools.ietf.org/html/rfc2018
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１では、パケット廃棄率の変化を観測することにより、送信データ量を制御することで、高速な通信を実現している。しかし、送信側及び受信側の双方の通信端末が、データの受信確認にＮＡＣＫを用いる等、特許文献１の通信方式に対応している必要がある。しかし、すべての通信端末が、この通信方式に対応しているわけではないため、例えば、非特許文献１や非特許文献２のような一般的な通信方式を用いる端末との通信も発生する。従って、特許文献１の通信方式に対応していない端末との通信において、パケット廃棄率の変化に基づいた送信データ量の制御を行うためには、一般的な通信方式で得られる情報を用いて、パケット廃棄率を測定する必要がある。
【００１０】
また、特許文献２のパケット廃棄率の測定方法では、パケットに特殊な情報を埋め込む必要があるため、送信端末、受信端末の双方が当該方式に対応している必要がある。一方で通信相手が一般的なシステムであった場合、このような情報が埋め込まれることはないため、正確な廃棄率の測定は困難である。
【００１１】
そこで、本発明は、一般的な通信プロトコルに含まれる情報のみを用いて、パケット廃棄率を求めることを目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するために、本発明の一つの観点から、ネットワークに接続される通信装置が提供される。当該通信装置は、他の通信装置にネットワークを介してパケットを送信する送信部と、他の通信装置から、送信部より送信されたパケットに対する選択的確認応答の情報と確認応答の情報とを含む確認応答パケットを、ネットワークを介して受信する受信部と、送信部より送信されたパケットの数である送信パケット数を求めるパケットカウント部と、送信パケット数と確認応答及び選択的確認応答の情報とに基づいて、所定期間における送信部から送信されたパケットの廃棄率を求める廃棄率測定部と、を有する。
【００１３】
より好ましくは、パケットカウント部は、確認応答及び選択的確認応答の情報に基づいて、送信部から送信されたパケットのうち再送要求されたパケットの数である再送要求パケット数を求め、廃棄率測定部は、送信パケット数と再送要求パケット数とに基づいて、前記廃棄率を求める。
【００１４】
また、パケットカウント部は、受信部が受信した確認応答パケットの数である確認応答パケット数、及び、受信部が受信した確認応答パケットのうち、選択的確認応答の情報が該確認応答パケットの直前に受信した確認応答パケットの選択的確認応答の情報と一致する確認応答パケットの数である重複パケット数、を求め、廃棄率測定部は、送信パケット数と確認応答パケット数と重複パケット数とに基づいて、前記廃棄率を求める。
【００１５】
さらに好ましくは、廃棄率測定部は、廃棄率の高さに応じて廃棄率の求め方を変更する。
【００１６】
本発明の別の観点によれば、通信装置からネットワークに送出されたパケットの廃棄率を測定するパケット廃棄率測定方法が提供される。当該パケット廃棄率測定方法は、通信装置からネットワークに送出されたパケットの数である送信パケット数を求め、送信パケット数と、通信装置がネットワークを介して受信した確認応答パケットに含まれる確認応答及び前記選択的確認応答の情報と、に基づいて、所定期間における通信装置からネットワークに送出されたパケットの廃棄率を求める。
【００１７】
より好ましくは、確認応答及び選択的確認応答の情報に基づいて、ネットワークに送出されたパケットのうち再送要求されたパケットの数である再送要求パケット数を求め、送信パケット数と再送要求パケット数とに基づいて、廃棄率を求める。
【００１８】
また、通信装置が受信した確認応答パケットの数である確認応答パケット数、及び、通信装置が受信した確認応答パケットのうち、選択的確認応答の情報が該確認応答パケットの直前に受信した確認応答パケットの選択的確認応答の情報と一致する確認応答パケットの数である重複パケット数を求め、送信パケット数、確認応答パケット数、及び、重複パケット数に基づいて、廃棄率を求める。
【００１９】
さらに好ましくは、廃棄率の高さに応じて廃棄率の求め方を変更する。
【発明の効果】
【００２０】
本発明によれば、一般的な通信プロトコルを用いる場合であっても、正確なパケット廃棄率の測定が可能となる。
【図面の簡単な説明】
【００２１】
【図１】本発明における送信端末の機能ブロック図である。
【図２】本発明の第１の実施例における送信端末のハードウェア構成図である。
【図３】本発明の第１の実施例における送信端末の機能ブロック図である。
【図４】本発明の第１の実施例における通信シーケンスの例である。
【図５】SACKのパケットフォーマットである。
【図６】本発明の第１の実施例におけるパケットカウント部のフローチャートである。
【図７】本発明におけるプロキシ装置のハードウェア構成図である。
【図８】本発明におけるプロキシ装置の機能ブロック図である。
【図９】本発明の第２の実施例における通信シーケンスである。
【図１０】本発明の第２の実施例における送信端末の機能ブロック図である。
【図１１】本発明の第２の実施例におけるパケットカウント部のフローチャートである。
【図１２】本発明の第３の実施例における廃棄率計算部のフローチャートである。
【図１３】本発明の第３の実施例におけるパケットカウント部のフローチャートである。
【図１４】本発明の第４の実施例における送信端末の機能ブロック図である。
【図１５】本発明の第４の実施例におけるパケットカウント部のフローチャートである。
【図１６】本発明の第５の実施例における送信制御部の機能ブロック図である。
【図１７】本発明の第５の実施例における送信制御部のフローチャートである。
【発明を実施するための形態】
【実施例１】
【００２２】
図２は本発明の第１の実施例のシステム構成図および送信端末１におけるハードウェア構成図である。送信端末１は少なくともネットワークインターフェース（以下NIF）１０、プログラムおよびデータを一時的に記憶しデータの読み書きが行われる主記憶２５、プログラムおよびデータを長期的に保存し必要に応じて主記憶２５へロードするデータ格納装置２６、主記憶２５上のプログラムを実行し主記憶２５上のデータを処理し結果を主記憶２５へ書き込む処理装置２７、およびそれらを相互に接続しデータを転送するシステムバス２８からなる。主記憶２５は独自TCP機能３、アプリケーションプログラム１８、アプリケーションデータ１９などを記憶する。アプリケーションプログラム１８はアプリケーションデータ１９を用いて処理装置２７で実行され、独自TCP機能３を用いて送信データを制御する。独自TCP機能３は前述の送信データをNIF１０に送り、NIF１０がWAN４に前述の送信データを送信する。なお図２では独自TCP機能３がすべてソフトウェアにより構成されている例を示したが、独自TCP機能３の一部またはすべてを処理装置２７またはNIF１０に実装し、これを用いることも可能である。
【００２３】
図３は本発明の第１の実施例の送信端末１におけるデータの送受信及びパケット廃棄率測定機能３に関する機能ブロック図である。送信端末は、NIF１０、アプリケーションプログラム１８および独自TCP機能３からなる。独自TCP機能３はさらに、NIF１０よりWAN４にデータを送信する送信部１１、送信部１１から送信されるデータ量や順序を制御する送信制御部１７、アプリケーションプログラム１８から送信されるデータを、一時的にバッファリングするとともにパケット廃棄が起こった時に再送するために保持し、必要なデータを送信部へ渡す送信バッファ１２、WAN４からNIF１０に届いたデータを受信する受信部１３、受信部１３が受信したデータの順序等の整合性を確認しアプリケーションプログラム１８へ渡す受信バッファ１４、パケットカウント部１５、および廃棄率計算部１６からなる。
【００２４】
また、送信パケット数はパケットカウント部のsndカウンタ２０にてカウントされる。受信された確認応答(Acknowledgement: ACK)およびACKに付随する部分的確認応答(Selective Acknowledgement: SACK)の情報はパケットカウント部１５にて解析され、再送要求されたパケット数（廃棄されたパケット数）がrtsカウンタ２１にてカウントされる。
【００２５】
この値をもとに、廃棄率計算部１６は廃棄率を、送信パケット数snd及び再送要求されたパケット数rtsを用いて、loss_ratio = rts / sndとして計算する。この計算は任意の時間間隔にて行われ、計算後はsndカウンタ２０およびrtsカウンタ２１の値が0に戻される。廃棄率の計算結果は送信制御部１１に渡され、送信データ量が調整される。
【００２６】
別の計算方法として、ACKパケット数ackは正しく受信されたパケット数を示すため、廃棄率は正しく受信された確率を1から引いた値として、loss_ratio = 1 - ack / sndとして計算することもできる。しかし、RFC 1122（非特許文献１）によれば、ACKパケットは間引いて送信することができるため、ACKパケットが間引かれて送信されている場合はこの計算方法は必ずしも正確な値とならない。
【００２７】
図４は本発明の第１の実施例における通信シーケンスの例である。ここではTCPの使用を想定するが、確認応答を用いる方式であればその限りではない。送信端末１はシーケンス番号「600」のパケットを送信する（１０１）。受信端末２はパケットが正しく受信されたため、確認応答(ACK)として、次に受信すべきシーケンス番号としてACK番号「700」を送信端末１に通知する（１０９）。
【００２８】
送信端末１は前記ACKが返ってくるまでにシーケンス番号「700」のパケット（１０２）および「800」のパケット（１０３）を送信しており、これらも受信端末２により正しく受信される。ここで、受信端末２はRFC 1122に規定されるDelayed ACKを用いており、ACKを間引いて送信する。そのため、シーケンス番号「700」のパケットを受信してもACKは送信せず、シーケンス番号「800」のパケットを受信するとACK番号「900」を送信する（１１０）。シーケンス番号「900」のパケット（１０４）および「1000」のパケット（１０５）に関しても同様に、受信端末２はACK番号「1000」のみを送信する（１１１）。
【００２９】
続くシーケンス番号「1100」のパケット（１０６）がネットワーク中で破棄されたとする。このパケットは受信端末２には受信されないこととなる。さらに後続のシーケンス番号「1200」のパケット（１０７）が正しく受信され、受信端末２の保持するパケットに歯抜けが生じる。このときRFC 2018（非特許文献１）によれば、受信端末２は、部分的な確認応答であるSACKを送信する。SACKはACKに付随する情報であり、受信端末２が保持しているパケットのうち、不連続になっている部分の始端と終端を示す。ここでは、ACK番号「1100」に加えて、SACKブロック「1200-1300」が送信端末１に通知される（１１２）。
【００３０】
続いて受信端末１がシーケンス番号「1300」のパケット（１０８）を受信すると、ACK番号「1100」SACKブロック「1200-1400」が送信端末１に通知される（１１３）。送信端末１はこのSACKより、ネットワークで破棄されたパケットを知ることができ、その部分のみを再送する。
【００３１】
図５はSACKのパケットフォーマットである。SACKはTCPヘッダ２０１のオプションフィールド２０２に付加され、何もしないことを示すNOP (No Operation)２０３を挟んで、種別２０４、長さ２０５に続いて第１ブロックの始端(SACK Left Edge: SLE)２０６と終端(SACK Right Edge: SRE)２０７を指定する。複数のブロックを通知する場合は、同様にそれ以降のブロックの始端（２０８，２１０，２１２）と終端（２０９，２１１，２１３）を指定する。オプション長の制限により、最大で４ブロックを送ることができる。複数のパケットが廃棄された場合は、複数のSACKブロックが通知されることとなる。過去に通知済みのSACKブロックも、最新の４つが通知される。
【００３２】
SACKが発生した後、続くパケットが正しく受信されると、前記SACKブロックの終端が増加する。一方で続くパケットが廃棄されると、前記SACKブロックに加えて別のSACKブロックが新たに通知される。これを新規SACKブロックと呼ぶこととする。逆に言えば、新規SACKブロックが通知された場合、廃棄が発生したことが分かる。具体的には、新規SACKブロックが通知された時、その始端の値から、それまでに通知されたACKまたはSACKブロックの終端のうち最も近いものとの差が廃棄されたセグメント数となる。廃棄されたパケット数は前記セグメント数をパケットサイズで割った値となる。
【００３３】
図６は本発明の第１の実施例におけるパケットカウント部における処理のフローチャートである。パケットカウント部は新規SACKブロックを受信すると（３０１）、前述した方法により廃棄パケット数を計算し、rtsをカウントアップする（３０２）。
【００３４】
本実施例では送信端末１に独自TCP機能３が内蔵される例を示したが、送信端末１に独自TCP機能３を実装できない場合、図7のように送信端末１と同一のLocal Area Network (LAN)４６内に独自TCP機能３を含むプロキシ装置５を設置し、利用することができる。図7はプロキシ装置５のハードウェア構成図である。送信端末１に独自TCP機能３を含む場合との違いは、送信端末１と接続するためにLAN４６用のNIF４０が追加されている点である。図7においても、独自TCP機能３がすべてソフトウェアにより構成されている例を示したが、独自TCP機能３の一部またはすべてを処理装置２７またはNIF１０に実装し、これを用いることも可能である。
【００３５】
前述のプロキシ装置の機能ブロック図を図８に示す。このプロキシ装置５にはLAN側NIF４０、送信端末１と通信を行うための一般TCP機能６およびWAN４と接続するNIF１０、WAN４を介して受信端末２と通信を行う独自TCP機能３、ならびに、独自TCP機能３と一般TCP機能６のバッファ間でデータを転送するプロキシ２９も含まれる。
【００３６】
本実施例および以降の実施例において、説明の簡略化のため送信端末１内に独自TCP機能３が内蔵される場合のみを説明するが、プロキシ装置を用いる場合も、独自TCP機能３に各実施例と同様のものを用いれば、同様の効果が得られる。
【実施例２】
【００３７】
第２の実施例では、パケット廃棄率が高く、SACKブロックが大量に発生している場合を想定している。このとき、受信端末２が新規パケットを受信中にさらなるパケット廃棄が発生すると、新たなSACKブロックが発生することとなる。しかし、一般的な実装では、SACKブロックの記憶領域には容量の制限があり、一定の個数で限界を迎える。その場合の動作は２通り考えられ、受信端末２がACKを返さない場合と、SACK付きのACKを返すが全てのSACKブロックが変化しない場合である。
【００３８】
また、前述のSACKブロック数が限界となっているとき一部のパケットが再送され、SACKブロック数が一定数を下回った場合、それまでに送られた新規パケットは、前述のSACKブロック数が限界となっているため破棄されるが、その後に送られた新規パケットは、新たなSACKブロックが作成可能な状態となっているため受信され、新規SACKブロックが発生する。このとき、実施例１の方法では、rtsとして計算される値が非常に大きくなる。一定間隔で計算を行う場合には、前回区間で発生した廃棄が今回区間でのrtsに計上されてしまい、rtsがsndを上回る可能性がある。よって正確な廃棄率の測定が行われない。
【００３９】
図９は本発明の第２の実施例における通信シーケンスである。受信端末２がSACK付きのACKを返すが、全てのSACKブロックが変化しない場合を示している。送信端末１が受信端末２にシーケンス番号「600」のパケット（１２１）を送信しているが、これ以前のパケット送信ですでに大量の廃棄が発生しており、受信端末２はACK番号「100」SACK番号「400-500, …」を送信端末１に通知していたとする。また、シーケンス番号「600」のパケット（１２１）を受信した時点で受信端末２の廃棄記憶領域が限界に達したとする。受信端末２はACK番号「100」SACK番号「600-700, 400-500, …」を送信端末１に通知する（１２８）。
【００４０】
その間に、送信端末１はシーケンス番号「700」のパケットを送信する（１２２）。このパケットがネットワーク中で廃棄される。また、送信端末１はシーケンス番号「800」のパケットを送信し（１２３）、これは受信端末２に届く。本来なら新たなSACKブロックが生成されるが、SACKブロックの記憶領域には容量の制限があるため、受信端末２は新たなSACKブロックを保持することができず、直前のACKパケットと同様に、ACK番号「100」SACK番号「600-700, 400-500, …」を送信端末１に通知する（１２９）。シーケンス番号「900」のパケット（１２４）に対しても等しいACKおよびSACKを返す（１３０）。以降、シーケンス番号「2900」までのパケットを送信し、すべて受信端末２にて破棄されたとする。
【００４１】
その後、送信端末１がシーケンス番号「500」のパケットを再送する（１２５）。これによりSACKブロックの「400-500」および「600-700」がつながり、新たに「400-700」となるので、これを通知する（１３１）。受信端末２が保持するSACKブロック数が減少するため、新たなパケットを受信することが可能となる。
【００４２】
ここで、送信端末１が新たなパケット「3000」を送信する（１２６）。これを受信端末２が受信し、新たなSACKブロック「3000-3100」が通知される（１３２）。シーケンス番号「3100」のパケット（１２７）も正しく受信され、SACK番号「3000-3200」が返される（１３３）。
【００４３】
ここで、図９のようにsndのカウント区間（１３４）およびrtsのカウント区間（１３５）をRTTごとに設定する。このとき、snd = 3となるが、新しく受信されたSACKの値より、rts = (3000 - 700)/100 = 23となり、実施例１の方式では廃棄率の計算値が1を超えてしまう。しかし他の区間で同様に計算すると、snd = 3となるが、新たなSACKブロックが通知されないためrts = 0となり、受信端末が受信していないにもかかわらず廃棄率を0と計算してしまう。
【００４４】
これに対応するため、第２の実施例では、図１０のような機能ブロック図で表される構成をとる。実施例１との差は、パケットカウント部１５のカウンタから、再送要求数をカウントするrtsカウンタ２１が無くなり、ACKパケット数をカウントするackカウンタ２２、SACKブロックの情報が完全に重複したACKパケット数をカウントするsack.dupカウンタ２３、ならびに前回のACKパケットにおけるSACKブロックを記憶する記憶部２４が、新たにパケットカウント部１５に追加されている点である。記憶部２４は第一〜第四ブロックの始端(SLE1〜4)３０，３２，３４，３６、第一〜第四ブロックの終端(SRE1〜4)３１，３３，３５，３７を記憶する。
【００４５】
図１１は本発明の第２の実施例におけるパケットカウント部１５のフローチャートである。ACKを受信（３１１）するたびにackを1増加し（３１２）、SACK付きパケットであれば（３１３）、記憶部２４から一つ前に受信したSACKの値を読み出し（３１４）、SACKの値が一つ前に受信したSACKの値とすべて等しければ（３１５）sack.dupを1増加する（３１６）。そうでなければ、SACKブロックの値を前回SACKブロックに記録して（３１７）先頭に戻る。
【００４６】
この結果をもとに、廃棄率計算部１６は廃棄率を計算する。廃棄率は正しく受信された確率を1から引いた値として求める。ただし記憶容量の制限により受信端末で破棄されたパケットは、送っても受信されないパケットであるため、正しく受信されたパケット数から除外する。よって、廃棄率はloss_ratio = 1 - (ack - sack.dup) / sndとして計算する。本計算式はACKを返さない場合と、SACK付きのACKを返すが全てのSACKブロックが変化しない場合の双方に対応している。
【実施例３】
【００４７】
実施例１の方法が高廃棄の場合に適さないことは実施例２中に記した。一方で実施例２の方法は低廃棄の場合に適さない。なぜなら、RFC 1122によれば、ACKパケットは間引いて送信することができるが、実施例２に記載の方法は、ACKパケット数を用いて廃棄率を求めるため、ACKパケットを間引いてしまうと正確な値を求めることができなくなるためである。
【００４８】
よって、低廃棄時又は高廃棄時のどちらであっても、廃棄率を正確に測定するには、これらの式を切り替えて用いることが有効である。本来、送信パケット数snd、ACKパケット数ackおよび再送要求パケット数rtsの間にはsnd = ack + rtsなる関係が成立するはずである。よって、例えば、この関係をもとに計算式の切り替えを行う。
【００４９】
図１２は本発明の第３の実施例における廃棄率計算部１６のフローチャートである。廃棄率の計算はRTTごとに行う（４０１）。低廃棄の場合、RFC 1122によりACKパケットが間引かれ、snd > ack + rtsとなる。よってsnd > ack + rtsの場合（４０２）は実施例１と同様に廃棄率をloss_ratio = rts / sndとして計算する（４０３）。一方高廃棄時は、ACKが間引かれることがない一方で、rtsの値がsndよりも大きくなる場合があるので、snd <= ack + rtsとなる。この場合は実施例２と同様にloss_ratio = 1 - (ack - sack.dup) / sndとして計算する（４０４）。
【００５０】
図１は本発明の第３の実施例における機能ブロック図である。実施例２との差は、パケットカウント部１５に、rtsのカウンタ２１が追加されている点である。
【００５１】
図１３は本発明の第３の実施例におけるパケットカウント部１５のフローチャートである。これは実施例１および実施例２のフローチャートを組み合わせたものである。ACKを受信（３１１）するたびにackを1増加し（３１２）、SACK付きパケットであれば（３１３）、記憶部２４から一つ前に受信したSACKの値を読み出し（３１４）、SACKの値が一つ前に受信したSACKの値とすべて等しければ（３１５）sack.dupを1増加する（３１６）。そうでなければ、新規SACKブロックであるかどうかを判断し（３０１）、新規SACKブロックであれば、「SACKされなかった、つまり受信確認されなかったセグメント数÷パケット長」により廃棄パケット数を計算し、rtsをカウントアップする（３０２）。SACKブロックの値を記憶部２４に記録して（３１７）先頭に戻る。
【実施例４】
【００５２】
前記実施例１〜３よりも統一的な方法で正確に廃棄率を測定する方法として、ACKまたはSACKにより新規に受信確認されたセグメント数を数える方法がある。この場合の機能ブロック図を図１４に示す。実施例１〜３との差は、パケットカウント部１５のカウンタが、sndカウンタ２０および実際にACKまたはSACKされたパケット数をカウントするack.realカウンタ２５となっている点である。また、前回のSACKブロックを記憶する記憶部２４から構成される。
【００５３】
図１５は本発明の第４の実施例におけるパケットカウント部１５のフローチャートである。パケットカウント部１５はACKを受信（３１１）するたびACK番号が進んだかどうかを判断し（３２１）、進んでいない場合は記憶部２４から一つ前に受信したSACKの値を読み出し（３１４）、SACKブロックのうち始端の番号が小さくなるか、終端の番号が大きくなるか、あるいは2つ以上のブロックがつながっていないかを判断する（３２２）。ACKまたはSACKに変化が見られた場合は、そのセグメント数を計算してパケット長で割り、新規に受信端末２に受信されたパケット数を計算する（３２３）。この値をack.realに計上する（３２４）。SACKブロックの値を記憶部２４に記録して先頭に戻る（３１７）。
【００５４】
廃棄率計算部１６は、廃棄率をloss_ratio = 1 - ack.real / sndとして計算する。
【００５５】
この方法では、実施例１〜３よりも統一的な方法で正確に廃棄率を測定することができるため、送信端末１の計算能力に余裕がある場合は、この方式が有効である。
【実施例５】
【００５６】
（上記の廃棄率測定方法を用いて帯域制御方法）
本実施例では、実施例１〜４のいずれかにより求めた廃棄率を用いて、送信帯域を制御する方法を示す。また、本実施例の方法は、独自TCP機能３が送信端末１に内蔵される場合でも、プロキシ装置５を用いる場合でも適用可能である。
【００５７】
図１６は送信制御部１７の機能ブロック図である。本実施例における送信制御はトークンバケツアルゴリズムによって行われる。トークンバケツアルゴリズムでは、トークンバケツに単位時間当たり決められた量のトークンが蓄積されていき、これが送信パケット長に達するとパケットを送信することができる。パケットを送信すると、パケット長分のトークンがトークンバケツから減らされる。
【００５８】
そのため、送信制御部１７はトークンバケツ３２９およびタイマ３３０を持ち、また、トークンの計算に必要な値を記憶する記憶部３３２およびトークンを計算するトークン更新部３３１を持つ。記憶部には廃棄率計算部１６により計算された廃棄率を保持するloss_ratio記憶部３３３、トークンが更新される以前のloss_ratio値を記憶するold_loss_ratio記憶部３３４、次回のトークン更新時刻の基準となる時刻を記憶する基準時刻記憶部３３５、現在のトークンの値を記憶するtoken記憶部３３６、トークンが更新される以前のtokenの値を記憶するold_token記憶部３３７、tokenの値をold_tokenに移す時に一時的に記憶しておくtmp_token記憶部３３８、およびトークンが更新される以前のACK番号を記憶するold_ack_seg記憶部３３９からなる。
【００５９】
図１７は送信制御部１７の動作を示すフローチャートである。まずタイマ３３０にて、現在時刻と基準時刻との差が、あらかじめ決められたインターバルより大きいかどうか判断する（３４０）。インターバルとして、計測されたRTT等を用いてもよい。現在時刻と基準時刻との差がインターバルよりも大きい場合はloss_ratioに廃棄率計算部１６から取得した廃棄率を保存する（３４１）。また、tmp_tokenにtokenの値を退避させる（３４２）。
【００６０】
次にACK未確認データの先頭シーケンス番号が変化しているか調べる（３４３）。変化していた場合はバッファに未送信データがあるかどうかチェックし（３４４）、未送信データがある場合にはtokenをACK受信量に設定する。
【００６１】
３４３にてシーケンス番号が進んでいた場合は、あらかじめ決められた1以上の定数Kに対してold_loss_ratioのK倍がloss_ratioよりも大きいか調べる（３４８）。大きかった場合は、tokenをold_tokenよりも小さくなるよう、rtsに基づいて減少させる。例えば、token ← old_token - rtsとする（３４９）。３４８でold_loss_ratioのK倍がloss_ratioよりも小さかった場合はtokenを任意の量だけ増加させる（３５０）。
【００６２】
３４５、３４９、３５０の後、loss_ratioをold_loss_ratioに、tmp_tokenをold_tokenに、および現在のACK番号をold_ack_segに代入し（３４６）、基準時刻の更新（３４７）およびトークンバケツ３２９の更新（３４８）を行う。
【符号の説明】
【００６３】
１    送信端末
２    受信端末
３    独自TCP機能
４    WAN
５    プロキシ装置
６    一般TCP機能
１０  NIF
１１  送信部
１２  送信バッファ
１３  受信部
１４  受信バッファ
１５  パケットカウント部
１６  廃棄率計算部
１７  送信制御部
２０  送信パケット数カウンタ
２１  再送要求パケット数カウンタ
２２  確認応答パケット数カウンタ
２３  重複部分的確認応答パケット数カウンタ
２４  記憶部
２５  実際に受信されたパケット数カウンタ
２９  プロキシ
４０  LAN側NIF
４１  LAN側受信部
４２  LAN側受信バッファ
４３  LAN側送信部
４４  LAN側送信バッファ
４５  LAN側制御部
４６  LAN
【図１】
2014155080.tif 000003
【図２】
2014155080.tif 000004
【図３】
2014155080.tif 000005
【図４】
2014155080.tif 000006
【図５】
2014155080.tif 000007
【図６】
2014155080.tif 000008
【図７】
2014155080.tif 000009
【図８】
2014155080.tif 000010
【図９】
2014155080.tif 000011
【図１０】
2014155080.tif 000012
【図１１】
2014155080.tif 000013
【図１２】
2014155080.tif 000014
【図１３】
2014155080.tif 000015
【図１４】
2014155080.tif 000016
【図１５】
2014155080.tif 000017
【図１６】
2014155080.tif 000018
【図１７】
2014155080.tif 000019