(57)【特許請求の範囲】
【請求項１】
ネットワークを介してコンテンツデータを配信するコンテンツデータの配信サーバと、該配信サーバから受信したコンテンツデータを受信する端末からなるシステムにおいて、該受信端末における各時刻のコンテンツデータの受信データ量の推定を行うコンテンツ受信量推定装置であって、
前記ネットワークを介して前記配信サーバから送信されたデータパケットと、前記端末から受信を確認するために送信された受信確認応答パケットのパケット情報を取得し、取得した時刻情報とともに記憶手段に格納するパケット情報取得手段と、
前記記憶手段に格納された前記パケット情報の受信時刻、データ１バイト毎に１ずつ増えていくシーケンス番号、受信確認応答番号及びパケットサイズに加えて、取得可能な場合には、部分受信が確認された範囲の始点と終点のシーケンス番号である部分受信確認応答番号を用いて、前記端末が各時刻に受信したコンテンツデータ量を推定する受信量推定手段と、
を有し、
前記受信量推定手段は、
連続して受信したパケットのシーケンス番号から受信した最大のバイト数を減算した値から１減算して差分を求め、該差分によりパケットが時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定し、各状態に応じてパケットの情報を該記憶手段に格納し、最終的に再送パケットを判定するために到着したパケットのデータ量を該記憶手段から読み出して時系列に出力する手段と、
前記コンテンツデータの送受信が完了した後に、前記記憶手段に格納された前記パケット情報の受信時刻、前記シーケンス番号、前記パケットサイズを用いて、最終のシーケンス番号と前記配信サーバから送信されたシーケンス番号を比較し、最終のシーケンス番号の方が大きい場合に、該シーケンス番号、パケットの到着時刻及びバイト量を受信量記憶手段に格納する処理をすべてのシーケンス番号について行い、最後に、該受信量記憶手段に格納されたデータを受信時刻の新しい順に並び替えて出力する手段と、
を含むことを特徴とするコンテンツ受信量推定装置。
【請求項２】
ネットワークを介してコンテンツデータを配信するコンテンツデータの配信サーバと、該配信サーバから受信したコンテンツデータを受信する端末からなるシステムにおいて、該受信端末における各時刻のコンテンツデータの受信データ量の推定を行うコンテンツ受信量推定装置であって、
前記ネットワークを介して前記配信サーバから送信されたデータパケットを取得し、取得した時刻情報とともに記憶手段に格納するパケット情報取得手段と、
前記記憶手段に格納された前記パケット情報の受信時刻、データ１バイト毎に１ずつ増えていくシーケンス番号、パケットサイズを用いて、前記端末が各時刻に受信したコンテンツデータ量を推定する受信量推定手段と、
を有し、
前記受信量推定手段は、
連続して受信したパケットのシーケンス番号から受信した最大のバイト数を減算した値から１減算して差分を求め、該差分によりパケットが時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定し、各状態に応じてパケットの情報を該記憶手段に格納し、最終的に再送パケットを判定するために到着したパケットのデータ量を該記憶手段から読み出して時系列に出力する手段と、
前記コンテンツデータの送受信が完了した後に、前記記憶手段に格納された前記パケット情報の受信時刻、前記シーケンス番号、前記パケットサイズを用いて、最終のシーケンス番号と前記配信サーバから送信されたシーケンス番号を比較し、最終のシーケンス番号の方が大きい場合に、該シーケンス番号、パケットの到着時刻及びバイト量を受信量記憶手段に格納する処理をすべてのシーケンス番号について行い、最後に、該受信量記憶手段に格納されたデータを受信時刻の新しい順に並び替えて出力する手段と、
を含むことを特徴とするコンテンツ受信量推定装置。
【請求項３】
ネットワークを介してコンテンツデータを配信するコンテンツデータの配信サーバと、該配信サーバから受信したコンテンツデータを受信する端末からなるシステムにおいて、該受信端末における各時刻のコンテンツデータの受信データ量の推定を行うコンテンツ受信量推定装置であって、
前記ネットワークを介して前記配信サーバから送信されたデータパケットと、前記端末から受信を確認するために送信された受信確認応答パケットのパケット情報を取得し、取得した時刻情報とともに記憶手段に格納するパケット情報取得手段と、
前記記憶手段に格納された前記パケット情報の受信時刻、データ１バイト毎に１ずつ増えていくシーケンス番号、受信確認応答番号及びパケットサイズに加えて、取得可能な場合には、部分受信確認応答番号を用いて、前記端末が各時刻に受信したコンテンツデータ量を推定する受信量推定手段と、
前記パケット情報取得手段よりサーバ側のネットワークにおけるパケット廃棄率及び該パケット情報取得手段より前記端末側のネットワークにおけるパケット廃棄率を推定し、出力するパケット廃棄率推定手段と、
を有し、
前記受信量推定手段は、
連続して受信したパケットのシーケンス番号から受信した最大のバイト数を減算した値から１減算して差分を求め、該差分によりパケットが時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定し、各状態に応じてパケットの情報を該記憶手段に格納し、最終的に再送パケットを判定するために到着したパケットのデータ量を該記憶手段から読み出して時系列に出力する手段と、
前記コンテンツデータの送受信が完了した後に、前記記憶手段に格納された前記パケット情報の受信時刻、前記シーケンス番号、前記パケットサイズを用いて、最終のシーケンス番号と前記配信サーバから送信されたシーケンス番号を比較し、最終のシーケンス番号の方が大きい場合に、該シーケンス番号、パケットの到着時刻及びバイト量を受信量記憶手段に格納する処理をすべてのシーケンス番号について行い、最後に、該受信量記憶手段に格納されたデータを受信時刻の新しい順に並び替えて出力する手段と、
を含むことを特徴とするコンテンツ受信量推定装置。
【請求項４】
ネットワークを介してコンテンツデータを配信するコンテンツデータの配信サーバと、該配信サーバから受信したコンテンツデータを受信する端末からなるシステムにおいて、該受信端末における各時刻のコンテンツデータの受信データ量の推定を行うコンテンツ受信量推定装置であって、
前記ネットワークを介して前記配信サーバから送信されたデータパケットを取得し、取得した時刻情報とともに記憶手段に格納するパケット情報取得手段と、
前記記憶手段に格納された前記パケット情報の受信時刻、データ１バイト毎に１ずつ増えていくシーケンス番号、パケットサイズを用いて、前記端末が各時刻に受信したコンテンツデータ量を推定する受信量推定手段と、
前記パケット情報取得手段よりサーバ側のネットワークにおけるパケット廃棄率及び該パケット情報取得手段より前記端末側のネットワークにおけるパケット廃棄率を求めるパケット廃棄率推定手段と、を有し、
前記受信量推定手段は、
連続して受信したパケットのシーケンス番号から受信した最大のバイト数を減算した値から１減算して差分を求め、該差分によりパケットが時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定し、各状態に応じてパケットの情報を該記憶手段に格納し、最終的に再送パケットを判定するために到着したパケットのデータ量を該記憶手段から読み出して時系列に出力する手段と、
前記コンテンツデータの送受信が完了した後に、前記記憶手段に格納された前記パケット情報の受信時刻、前記シーケンス番号、前記パケットサイズを用いて、最終のシーケンス番号と前記配信サーバから送信されたシーケンス番号を比較し、最終のシーケンス番号の方が大きい場合に、該シーケンス番号、パケットの到着時刻及びバイト量を受信量記憶手段に格納する処理をすべてのシーケンス番号について行い、最後に、該受信量記憶手段に格納されたデータを受信時刻の新しい順に並び替えて出力する手段と、
を含む
ことを特徴とするコンテンツ受信量推定装置。
【請求項５】
コンピュータを、
請求項１乃至４のいずれか１項に記載のコンテンツ受信量推定装置の各手段として機能させるためのコンテンツ受信量推定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツ受信量推定装置及びプログラムに係り、特に、ネットワークを介してコンテンツデータを配信するシステムにおいて、時系列に従い、端末側が受信したデータ量を推定するためのコンテンツ受信量推定装置及びプログラムに関する。
【背景技術】
【０００２】
近年のネットワーク技術の進展に伴い、様々なデータをネットワークを介して送受信するストリームデータを扱うアプリケーションが登場している。特に、映像系サービスの普及は目覚しく、VoDやストリームデータを扱うアプリケーションが登場している。特に、映像系サービスの普及は目覚しく、VoDやストリーミングサービス等様々な種類のアプリケーションが登場した。しかし、これらのストリームデータを扱うアプリケーションでは、一般に、受信したデータを再生バッファに蓄積し、ある一定量のバッファが蓄積された後に再生バッファからデータを逐次的に取り出し、再生するという挙動をとることが多い。
【０００３】
こういったアプリケーションでは、再生バッファから途切れることない場合にユーザの体感品質を高めることができる。反対に、再生バッファが頻繁に枯渇し、渡されるデータが連続的ではなくなると、ユーザの体感品質を低下させる。
【０００４】
このような状況に鑑み、受信端末内の再生プログラムの外部から再生バッファの状態を推定し、再生バッファからのデータの読み出し状況がどのようになっているかを推定することは、ユーザ体感品質の評価にとって重要な要素となる。
【０００５】
一方、再生バッファの状態を推定するためには、サーバから送信されたデータがいつ、どのくらい到着し、再生バッファに蓄積されたかを適切に評価することが重要である。
【０００６】
サーバからのデータ転送時に、用いられるプロトコルとして、UDP（User Datagram Protocol）とTCP(Transmission Control Protocol)の両者が用いられる。各転送プロトコルは以下の特徴を持つ。
【０００７】
UDPは、送信側から任意のデータレートでデータを送出できる反面、転送経路上でのパケット損失の検知、再送をアプリケーションから行わなければならない。UDPでは、パケットの順序逆転や損失等について関しないプロトコルであるため、データ受信量は再送パケット等を除き、原則として到達したパケットの累積量で決定される。
【０００８】
一方、TCPでは、各データパケットがクライアントに到着しているかの受信確認を行い、未着のパケットの再送制御やウィンドウ制御による送信レート制御を持つプロトコルであり、上位のアプリケーションからは、パケットの順序逆転やパケット損失等を気にせず扱うことが可能となる(例えば、非特許文献1参照)。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】RFC793: Transmission control Protocol.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、TCPを用いてデータ通信を行うフローに対して、パケットレイヤの情報のみを用いて、順序逆転や損失による再送パケット等の情報を再構成し、アプリケーションに渡されるデータ受信量の時系列を推定することは困難であった。そのため、データ配信サーバからの送信データに対する受信端末上でのデータ受信状況、及び、再生バッファへの蓄積／再生バッファからの読み出しの状況について、再生装置の外部からパケットレイヤの情報のみを用いて適切に把握し、再生バッファの状態を時系列に沿って推定することは困難であった。
【００１１】
本発明は、上記の点に鑑みなされたもので、データパケット及びACKパケット、または、データパケットを適切に処理することで、端末における受信バイト量の推定を行うことが可能なコンテンツ受信量推定装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記の課題を解決するため、本発明は、ネットワークを介してコンテンツデータを配信するコンテンツデータの配信サーバと、該配信サーバから受信したコンテンツデータを受信する端末からなるシステムにおいて、該受信端末における各時刻のコンテンツデータの受信データ量の推定を行うコンテンツ受信量推定装置であって、
前記ネットワークを介して前記配信サーバから送信されたデータパケットと、前記端末から受信を確認するために送信された受信確認応答パケットのパケット情報を取得し、取得した時刻情報とともに記憶手段に格納するパケット情報取得手段と、
前記記憶手段に格納された前記パケット情報の受信時刻、データ１バイト毎に１ずつ増えていくシーケンス番号、受信確認応答番号及びパケットサイズに加えて、取得可能な場合には、部分受信が確認された範囲の始点と終点のシーケンス番号である部分受信確認応答番号を用いて、前記端末が各時刻に受信したコンテンツデータ量を推定する受信量推定手段と、
を有し、
前記受信量推定手段は、
連続して受信したパケットのシーケンス番号から受信した最大のバイト数を減算した値から１減算して差分を求め、該差分によりパケットが時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定し、各状態に応じてパケットの情報を該記憶手段に格納し、最終的に再送パケットを判定するために到着したパケットのデータ量を該記憶手段から読み出して時系列に出力する手段と、
前記コンテンツデータの送受信が完了した後に、前記記憶手段に格納された前記パケット情報の受信時刻、前記シーケンス番号、前記パケットサイズを用いて、最終のシーケンス番号と前記配信サーバから送信されたシーケンス番号を比較し、最終のシーケンス番号の方が大きい場合に、該シーケンス番号、パケットの到着時刻及びバイト量を受信量記憶手段に格納する処理をすべてのシーケンス番号について行い、最後に、該受信量記憶手段に格納されたデータを受信時刻の新しい順に並び替えて出力する手段と、
を含む。
【発明の効果】
【００１３】
本発明によれば、パケット情報の一部から、前回のパケット取得時におけるデータ範囲の最大値と新たに取得したパケットのデータ範囲の差分をとることにより、時系列に正常に受信している状態か、未達のパケットがある状態か、パケットロスがある状態かを判定することにより、その状態に応じてパケット取得時刻におけるコンテンツデータ量を求めるため、受信側において正常に受信できた受信量を出力することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施の形態におけるシステム構成図である。
【図２】本発明の一実施の形態におけるコンテンツ受信量推定装置の構成図である。
【図３】本発明の一実施の形態における記憶部の構成図である。
【図４】本発明の一実施の形態におけるパケット到着リストの更新例である。
【図５】本発明の第１の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【図６】本発明の第1の実施の形態におけるギャップリストＧの例である。
【図７】本発明の第２の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【図８】本発明の第３の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【図９】本発明の第４の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【図１０】本発明の第５の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【発明を実施するための形態】
【００１５】
以下図面と共に、本発明の実施の形態を説明する。
【００１６】
本発明では、TCPフローのパケット情報から、データ受信量の時系列を推定する。
【００１７】
具体的には、データパケット、ACKパケットを対象として、パケットレイヤの情報である順序逆縁や損失による再送パケット等の情報を再構成し、処理することで、受信端末側のアプリケーションに渡されるデータ受信量を時系列に沿って推定する。
【００１８】
図１は、本発明の一実施の形態におけるシステム構成を示す。
【００１９】
本発明は、ネットワーク３０を介してコンテンツデータを配信するコンテンツデータの配信サーバ１０と配信サーバ１０からコンテンツデータを受信する受信端末２０と、配信サーバ１０と受信端末２０からネットワーク３０を介してデータパケット、ACKパケットを取得してデータ受信量を推定するコンテンツ受信量推定装置１００から構成される。
【００２０】
図２は、本発明の一実施の形態におけるコンテンツ受信量推定装置の構成を示す。
【００２１】
同図に示すコンテンツ受信量推定装置１００は、パケット情報取得部１１０、記憶部１２０、受信量推定部１３０、パケット廃棄率推定部１４０を有する。
【００２２】
パケット情報取得部１１０は、ネットワーク３０を介して送受信されるパケット情報を取得し、記憶部１２０に格納する。
【００２３】
記憶部１２０は、パケット情報取得部１１０で取得したパケット情報を格納する。記憶部の構成を図３に示す。記憶部１２０には、ギャップリストＧ１２１，パケット到着リストＲ１２２，受信確認リストＳ１２３、パケットデータ記憶部１２４、パケットカウンタ１２５、パケット通過時刻記録部１２６、受信量記録部１２７の各領域がある。
【００２４】
ギャップリストＧ１２１は、データパケットが連続してない場合に、抜けた番号等を記録する。パケット到着リストＲ１２２は、再送パケットを判定するために到着したパケットを記録する。パケット到着リストの例を図４に示す。受信確認リストＳ１２３は、ACKパケットの重複を検知するためのものである。パケットデータ記憶部１２４には、パケット情報としては、各パケットをパケット情報取得部１１０で受信した時刻、シーケンス番号、受信確認応答番号、パケットサイズ、部分受信確認応答番号等がある。受信量記録部１２７は、パケット系列から受信バイト数を推定するために使用する。
【００２５】
受信量推定部１３０は、記憶部１２０からパケット情報を読み出して、受信端末２０において各時刻に受信したコンテンツデータ量を推定する。
【００２６】
パケット廃棄率推定部１４０は、配信サーバ１０側のネットワークにおけるパケット廃棄率及び受信端末２０側のネットワークにおけるパケット廃棄率を推定する。
【００２７】
TCPでは、配信サーバ１０から送られるデータパケットと、クライアント(受信端末)２０から送られる受信確認応答のACKパケットがある。データパケットはパケットヘッダにシーケンス番号が記録されており、当該パケットが送信したいデータのどこに該当するのかを示すオフセット情報相当となる。
【００２８】
また、ACKパケットでは、受信したパケットのシーケンス番号に、受信端末２０がこれまでに連続して受信したデータのバイト数に1byteを足した値を加算し、受信確認応答として報告する。
【００２９】
データパケットは、通信の状態によって再送されることがある。再送は、
１．データパケットがクライアントに到着する前に廃棄された；
２．ACKパケットがサーバに到着する前に廃棄された；
の２通りのケースが考えられる。
【００３０】
また、パケット情報を取得する箇所の上部・下部の損失可能性を考慮すると、
ａ．データパケットはパケット情報取得部１１０を通過したが、クライアント到着前に廃棄された；
ｂ．データパケットはパケット情報取得部１１０の通過前に廃棄された；
ｃ．ACKパケットはパケット情報取得部１１０を通過したが、サーバ到着前に廃棄された；
ｄ．ACKパケットはパケット情報取得部１１０の通過前に廃棄された；
の４通りが考えられ、各廃棄パターンにおいてパケットの再送が発生する可能性がある。
【００３１】
パケットロス推定部１３０は、パケット情報取得部１１０で観測されるデータパケットとACKパケットを突合させることによって、パケット情報を取得する箇所の上部・下部の損失可能性について、上記ｂまたはｄの場合には、パケット情報取得部１１０を通過したパケットは廃棄されないため、高い精度でデータの受信量を判定することができる。一方、上記ａ，ｃの場合には、誤差の要因となる。
【００３２】
そのため、重複して送信されるデータパケットや、受信確認応答されたパケットや、部分受信確認応答が有効であればその情報も活用することでより受信量の時系列を精度よく出力することができる。
【００３３】
以下に、各実施の形態を説明する。
【００３４】
［第１の実施の形態］
図２の構成に基づいて説明する。なお、本実施の形態では、配信サーバ１０から送信されたデータパケットと受信端末２０から受信を確認するために送信された受信確認応答パケット（ACKパケット）を用いて受信量を推定する場合について説明する。
【００３５】
パケット情報取得部１１０において、配信サーバ１０及び受信端末２０から送信されるデータパケットまたはACKケットを取得すると、以下の処理を行う。
【００３６】
図５は、本発明の第１の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【００３７】
ステップ１０１）  まず、パケット情報取得部１１０は、パケットを取得すると、取得したパケットの情報を記憶部１２のパケットデータ記憶部１２４に記録する。取得したパケットがデータパケットである場合は、ステップ１０２に移行し、ACKパケットである場合は、ステップ１２１に移行する。
【００３８】
ステップ１０２）受信量推定部１３０は、メモリ（図示せず）に格納されているこれまでに連続して受信できたデータ範囲の最大値（latest_data）と、ステップ１０１で新たに取得したパケットのデータ範囲の先頭のバイト数の差分（パケット間の差分gap）を求める。具体的には、当該パケットのシーケンス番号seq_noから受信した最大のバイト数latest_dataを減算し、１を引いた値（gap=seq_no−latest_data−1）として計算する。
【００３９】
上記の差分gapが０である場合はパケットが連続していることを表し、gap＞0であれば、パケットは連続しておらず、当該gapの値がパケットのシーケンスが離れている範囲を示す。gap＜０であれば、パケットロスが発生し、当該パケットが再送された状態を示す。
【００４０】
また、latest_dataはそれまでに連続して受信できたデータの最大の大きさである。これまでのすべてのパケットが抜けなく受信していれば、latest_data=seq_no+length（パケット長）となる。また、直前のパケットが廃棄された等の理由で不達の場合は、latest_dataは不達前のパケットのseq_noとlengthで更新されたままとなる。
【００４１】
ステップ１０３）受信量推定部１３０は、記憶部１２０内のパケット到着リストR１２２に、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値
seq_no+(length−１)
を終点とする範囲に対して、当該パケット到着時刻を記録する。すでに前記範囲が記録されている場合には、該当する範囲を重複がないように縮小または削除の更新をした上でデータを追加する。これはTCP再送制御により、重複パケットになる場合であり、例えば、ACKパケットがネットワーク中で廃棄された場合に、同一データパケットが再送されることを考慮している。再送パケットが送られる際、元のデータパケットのパケットサイズが異なることがあるため、例えば、時刻ｔ1に１００〜２００バイト受信し、時刻t２に３０１〜４００バイト受信し、時刻t3に１５０〜３００バイトを受信した場合、ｔ３受信後に以下のようにサイズを縮小してもよい。
【００４２】
ｔ１    １００〜１４９バイト
ｔ２    １５０〜３００バイト
ｔ３    ３０１〜４００バイト
ステップ１０４）  さらに、受信量推定部１３０は、パケットカウンタN１２５(初期値0)を１増加させる。
【００４３】
ステップ１０５）受信量推定部１３０は、パケット間の差分gapが0の場合は、ステップ１０６に移行し、gap＞0の場合はステップ１０７に移行し、gap＜0の場合はステップ１０８に移行する。
【００４４】
ステップ１０６）  メモリ(図示せず)の受信した最大のバイト数latest_dataを、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加算した値（latest_data=seq_no+(length−1)）に更新する。
【００４５】
ステップ１０７）  あるパケットの到着前にロスや順序逆転等で受信端末２０に未達のパケットがある状態を示す、パケット間の差分gapが正の場合（gap＞0）には、ギャップリストG１２１に、受信した最大のバイト数latest_data+1を始点とし、当該パケットのシーケンス番号seq_noから1を引いた値を終点とした範囲を追加する。受信した最大バイト数latest_dataが1500であり、当該パケットのシーケンス番号seq_noが2000であるとき、図６のように更新される。
【００４６】
ステップ１０８）  パケットロスが発生し、当該パケットが再送された状態を示す、パケット間の差分gapが負（gap＜0）であり、かつ、当該パケットのシーケンス番号seq_noがギャップリストG１２１に含まれている場合は、ステップ１０９に移行し、そうでない場合はステップ１１０に移行する。
【００４７】
ステップ１０９）  ギャップリストG１２１から、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲を削除する。
【００４８】
ステップ１１０）  パケットロスが発生し、当該パケットが再送対象になっており、上記のステップ１０９の処理を通ったが、下流で再びロスとなった場合、つまり、パケット間の差分gapが負（gap<0）であり、かつ、当該パケットのシーケンス番号seq_noがギャップリストG１２１に含まれていない場合であり、かつ、当該パケットのシーケンス番号seq_noが、これまでに受信確認されたACKパケットの最大のシーケンス番号latest_ack_noよりも大きい場合は、ステップ１１１に移行し、そうでない場合は、処理を終了する。
【００４９】
ステップ１１１）  当該パケットのシーケンス番号seq_noが、記憶部１２０内の受信確認リストS１２３に含まれていない場合、当該パケットは再送パケットであると判断し、ステップ１０４で増加させたパケットカウンタNを1減少させ（Ｎ＝Ｎ−１）、再送パケットをロス率の計算から除外してもよい。
【００５０】
ステップ１２１）  ステップ１０１において、受信量推定部１３０は、パケットデータ記憶部１２４を参照し、取得したパケットがACKパケット(端末から配信サーバへ送信)の場合は、受信確認リストＳ１２３のこれまでに受信確認されたACKパケットの最大のシーケンス番号latest_ack_noを当該ACKパケットの受信確認番号から1減算した値とし更新する。
【００５１】
ステップ１２２）  当該ACKパケットにselective ACK(SACK） が含まれている場合には、ステップ１２３に移行し、含まれていない場合は当該処理を終了する。
【００５２】
ステップ１２３）  部分受信確認された範囲（始点と終点のシーケンス番号）を受信確認リストS１２３に追加する。
【００５３】
ステップ１２４）  パケット到着リストR１２２から、これまでに受信確認された最大のシーケンス番号latest_ack_no以下の範囲にあるすべてのデータが到着したとみなし、パケット到着リストＲ１２２中の各データの通過時刻が記録されていない場合は、ステップ１２５に移行し、記録されている場合は当該処理を終了する。
【００５４】
ステップ１２５）  当該ACKパケットが到着を確認したデータの通過時刻として、パケット到着リストＲ１２２に記録する。
【００５５】
また、パケット到着リストＲ１２２の到着時刻を、記録されているデータパケットの通過時刻と当該ACKパケットの平均値とし、前記端末とのネットワーク遅延を簡易に補正してもよい。
【００５６】
なお、パケットロス率推定部１４０のパケットロス率の計算は、パケットロスが発生した上記のステップ１０８、ステップ１１１において行ってもよいし、一連のフローが終了した後で行ってもよい。
【００５７】
各パケットの取得時に上記の手続きを踏むことにより、データパケットおよびACKパケットを用いて受信量推定を行う。具体的には、最終的なパケット到着リストＲ１２２の内容を出力する。
【００５８】
［第２の実施の形態］
本実施の形態では、データパケットを用いて推定を行う例を説明する。
【００５９】
図７は、本発明の第２の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【００６０】
以下、図２、図３の構成に基づいて説明する。
【００６１】
パケット情報取得部１１０において、配信サーバ１０から送信されるデータパケット取得し、パケットデータ記憶部１２４に格納し、以下の処理を行う。
【００６２】
ステップ２０１）  パケット情報取得部１１０において、取得したパケットがデータパケットの場合には、ステップ２０２に移行し、それ以外のパケットである場合には、当該処理はスルーする。
【００６３】
ステップ２０２）  パケット情報取得部１１０は、配信サーバ１０から送信されたデータパケットをパケットデータ記憶部１２４に格納し、受信量推定部１３０は、ギャップリストG１２１のこれまでに連続して受信できたデータ範囲の最大値と、パケットデータ記憶部１２４の次に新たに取得したパケットのデータ範囲の先頭のバイト数との差分（パケット間の差分gap）を求める。具体的には、差分gapは、パケットデータ記憶部１２４に格納されている新たに取得したパケットのシーケンス番号seq_noからメモリ(図示せず)に格納されている受信した最大のバイト数latest_dataを減算し、１を引いた値（gap＝seq_no−latest_data−1）として計算する。
【００６４】
ステップ２０３）  また、受信量推定部１３０は、パケット到着リストR１２２に、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲に対して、当該パケット到着時刻を記録する。例えば、シーケンス番号が1000byteで、パケット長が500byteのパケットを時刻t1に受信したとするとき、始点が1000byte、終点が1500byteの範囲に対して対応する時刻t1をパケット到着リストR１２２に記録する。すでに前記範囲が記録されている場合には、該当する範囲を重複がないように縮小または削除の更新をしたうえでデータをパケット到着リストＲ１２２に追加する。
【００６５】
ステップ２０４）  受信量推定部１３０は、さらにパケットカウンタN(初期値0)を１増加させる。
【００６６】
ステップ２０５）  ステップ２０２で求められたパケット間の差分gapが0の場合は、ステップ２０６に移行し、gap＞0の場合はステップ２０７に移行し、gap＜0の場合はステップ２０８に移行する。
【００６７】
ステップ２０６）  受信量推定部１３０は、受信した最大のバイト数latest_dataを、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加算した値に更新する（latest_data=seq_no+(length−１)。
【００６８】
ステップ２０７）  受信量推定部１３０は、gap＞0の場合は、ギャップリストG１２１に、受信した最大のバイト数latest_data+1を始点とし、当該パケットのシーケンス番号seq_noから1を引いた値を終点とした範囲を追加する。例えば、latest_dataを1500byteとし、受信した当該パケットのシーケンス番号が2000byteであった場合には、始点が1501byte，終点が1999byteの範囲をギャップリストG１２１に記録する。
【００６９】
ステップ２０８）  受信量推定部１３０は、パケット間の差分gapが負であり、かつ、当該パケットのシーケンス番号seq_noがギャップリストGに含まれている場合は、ステップ２０９に移行し、シーケンス番号seq_noがギャップリストＧ１２１に含まれていない場合はステップ２１０に移行する。
【００７０】
ステップ２０９）  受信量推定部１３０は、ギャップリストG１２１から、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲を削除する。
【００７１】
ステップ２１０）  受信量推定部１３０は、パケット間の差分gapが負であり、かつ、当該パケットのシーケンス番号seq_noがギャップリストG１２１に含まれていない場合、当該パケットは再送パケットであると判断し、ステップ２０４で増加させたパケットカウンタＮを1減少させ（Ｎ＝Ｎ−１）、再送パケットをロス率の計算から除外してもよい。
【００７２】
なお、パケットロス率推定部１４０のパケットロス率の計算は、パケットロスが発生した上記のステップ２０８、ステップ２１０において行ってもよいし、一連のフローが終了した後で行ってもよい。
【００７３】
各パケットの取得時に上記の手続きを踏むことにより、データパケットを用いた受信量推定として、最終的なパケット到着リストＲ１２２の値を出力する。
【００７４】
［第３の実施の形態］
本実施の形態では、パケット情報取得部１１０において、配信サーバ１０から送信されるデータパケット及び受信端末２０から送信されるACKパケットを取得して受信量の推定を行う場合を説明する。
【００７５】
ステップ３０１）  パケット情報取得部１１０は、取得したパケットのデータをパケットデータ記憶部１２４に格納する。取得したパケットがデータパケットであれば、ステップ３０２に移行し、ACKパケットであれば、ステップ３２１に移行する。
【００７６】
ステップ３０２）  受信量推定部１３０は、メモリ（図示せず）に格納されている、これまでに連続して受信できたデータ範囲の最大値と、次に新たに取得したパケットのデータ範囲の先頭のバイト数の差分（パケット間の差分gap）を求める。gapは、当該パケットのシーケンス番号seq_noから受信した最大のバイト数latest_dataを減算し、1を引いた値として計算する。
【００７７】
ステップ３０３）  また、受信料推定部１３０は、パケット到着リストR１２２に、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲に対して、当該パケット到着時刻を記録する。すでに前記範囲が記録されている場合には、該当する範囲を重複がないように縮小または削除の更新をしたうえでデータを追加する。
【００７８】
ステップ３０４）  さらにパケットカウンタN(初期値0)を1増加させる（Ｎ＝Ｎ＋１）。
【００７９】
ステップ３０５）  パケット間の差分gapが0の場合はステップ３０６に移行し、gap＞0の場合はステップ３０７に移行し、gap＜0の場合はステップ３０８に移行する。
【００８０】
ステップ３０６）  gap=0の場合は、受信した最大のバイト数latest_dataを、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加算した値に更新する。
【００８１】
ステップ３０７）  パケット間の差分がgap＞０の場合、ギャップリストＧ１２１に、受信した最大のバイト数latest_data+1を始点とし、当該パケットのシーケンス番号seq_noから1を引いた値を終点とした範囲を追加する。
【００８２】
ステップ３０８）  パケット間の差分がgap＜０であり、かつ、当該パケットのシーケンス番号seq_noがギャップリストGに含まれている場合は、ステップ３０９に移行し、含まれていない場合はステップ３１０に移行する。
【００８３】
ステップ３０９）  上流のネットワークで起きたパケットロスのカウンタloss_Aを1パケット増加させ、ギャップリストG１２１から、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲を削除する。
【００８４】
ステップ３１０）  パケット間の差分gapが負であり（gap＜0）、かつ、当該パケットのシーケンス番号seq_noがギャップリストG１２１に含まれていない場合であり、かつ、当該パケットのシーケンス番号seq_noが、これまでに受信確認された最大のシーケンス番号latest_ack_noよりも大きい場合は、ステップ３１１に移行する。それ以外は処理を行わない。この状況は、パケットロスが発生し、再送対象となっており、ステップ３０９の処理を行ったが、下流のネットワークで再びパケットロスとなった場合である。
【００８５】
ステップ３１１）  当該パケットのシーケンス番号seq_noが受信確認リストS１２３に含まれていない場合、下流のネットワークのパケットロスカウンタloss_Bを1パケット増加させる。また、当該パケットは再送パケットであると判断し、ステップ３０４で増加させたパケットカウンタを1減少させ、再送パケットをロス率の計算から除外してもよい。
【００８６】
ステップ３２１）  また、取得したパケットがACKパケット(端末から配信サーバへ送信)の場合は、受信量推定部１３０は、これまでに受信確認された最大のシーケンス番号latest_ack_noを当該ACKパケットの受信確認番号から1減算した値とし更新する。
【００８７】
ステップ３２２）  当該ACKパケットにSACKが含まれている場合には、ステップ３２３に移行し、含まれていない場合は、処理を終了する。
【００８８】
ステップ３２３）  受信量推定部１３０は、部分受信確認された範囲（始点と終点のシーケンス番号）を受信確認リストS１２３に追加する。
【００８９】
ステップ３２４）  パケット到着リストR１２２から、これまでに受信確認された最大のシーケンス番号latest_ack_no以下の範囲にあるすべてのデータが到着したとみなし、パケット到着リストR１２２中の各データの通過時刻が記録されていない場合は、ステップ３２５に移行する。
【００９０】
ステップ３２５）  当該ACKパケットが到着を確認したデータの到着時刻としてパケット到着リストＲ１２２に記録する。 
上記のパケットロス率は、各々以下で与えられる。パケットロス率推定部１４０は、上記のステップ３０９において、パケット情報取得部１１０よりサーバ側のネットワークにおけるパケットロス率を、カウンタloss_AをパケットカウントNで割った値とし、パケット情報取得部１４０より端末側のネットワークにおけるパケットロス率は、ステップ３１１において、loss_BをパケットカウントNで割った値とする。
【００９１】
なお、パケットロス率推定部１４０のパケットロス率の計算は、パケットロスが発生した上記のステップ３０９、ステップ３１１において行ってもよいし、一連のフローが終了した後で行ってもよい。
【００９２】
各パケットの取得時に上記の手続きを踏むことにより、データパケット及びACKパケットを用いた受信量推定として、最終的なパケット到着リストＲ１２２の値を出力する。
【００９３】
［第４の実施の形態］
本実施の形態では、パケット情報取得部１１０において、配信サーバ１０から送信されるデータパケットを用いて受信量を推定する場合を説明する。
【００９４】
図９は、本発明の第４の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【００９５】
ステップ４０１）  パケット情報取得部１１０は、取得したパケット情報が配信サーバ１０から取得したデータパケットの場合には、ステップ４０２に移行し、その他のパケットの場合は当該処理をスルーする。
【００９６】
ステップ４０２）  受信量推定部１３０は、メモリ(図示せず)に格納されているこれまでに連続して受信できたデータ範囲の最大値と、新たに取得したパケットのデータ範囲の先頭のバイト数の差分（gap）を計算する。パケット間の差分gapは、当該パケットのシーケンス番号seq_noから受信した最大のバイト数latest_dataを減算し、1を引いた値として計算する。
【００９７】
ステップ４０３）  また、パケット到着リストR１２２に、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲に対して、当該パケット到着時刻を記録する。すでに前記範囲が記録されている場合には、該当する範囲を重複がないように縮小または削除の更新をしたうえでデータを追加する。
【００９８】
ステップ４０４）  さらにパケットカウンタN(初期値0)を1増加させる。
【００９９】
ステップ４０５）  パケット間の差分gapが0の場合は、ステップ４０６に移行し、gap＞０の場合は、ステップ４０７に移行し、gap＜０の場合は、ステップ４０８に移行する。
【０１００】
ステップ４０６）  gap=0の場合は、受信した最大のバイト数latest_dataを、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加算した値に更新する。
【０１０１】
ステップ４０７）  gap＞0の場合、ギャップリストGに、受信した最大のバイト数latest_data+1を始点とし、当該パケットのシーケンス番号seq_noから1を引いた値を終点とした範囲を追加する。
【０１０２】
ステップ４０８）  gap＜０の場合、当該パケットのシーケンス番号seq_noがギャップリストG１２１に含まれている場合はステップ４０９に移行し、含まれていない場合は、ステップ４１０に移行する。
【０１０３】
ステップ４０９）  ギャップリストＧ１２１に含まれている場合は、loss_Aを1パケット増加させ、ギャップリストG１２１から、当該パケットのシーケンス番号seq_noを始点とし、当該パケットのシーケンス番号seq_noに当該パケットのパケット長lengthから1減算した値を加えた値を終点とする範囲をから削除する。
【０１０４】
ステップ４１０）  ギャップリストＧ１２１に含まれていない場合は、loss_Bを1パケット増加させる．また、当該パケットは再送パケットであると判断し、手順1で増加させたパケットカウンタNを1減少させ、再送パケットをロス率の計算から除外してもよい。
【０１０５】
パケットロス率は、パケットロス率推定部１４０により各々以下で与えられる。パケット情報取得部１１０よりサーバ側のネットワークにおけるパケットロス率は、loss_AをパケットカウンタNで割った値とし、パケット情報取得部より端末側のネットワークにおけるパケットロス率は、loss_BをパケットカウンタNで割った値で算出する。各パケットロス率は、パケット情報取得の都度、値を更新してもよいし、フローの完了後に出力してもよい。
【０１０６】
各パケットの取得時に上記の手続きを踏むことにより、データパケット及びACKパケットを用いた受信量推定として、最終的なパケット到着リストＲ１２２の値とパケットロス率推定部１４０で求められたパケットロス率を出力する。
【０１０７】
［第５の実施の形態］
上記の第１〜第４の実施の形態では、各パケットの状態を保持し、多くのメモリを使用するため、本実施の形態では、フローの終了後に省メモリで動作可能な受信量の推定方法を述べる。
【０１０８】
以下の説明では、パケット情報取得部１１０において、配信サーバ１０から送信された、i番目のデータパケットの通過時刻t_iおよびシーケンス番号x_iを取得し記憶部１２０の、パケット通過時刻記録部１２６に格納する。ここで、シーケンス番号とは、TCPコネクションの開始時の値をもとにした相対値を指す。
【０１０９】
図１０は、本発明の第５の実施の形態におけるコンテンツ受信量推定装置の動作のフローチャートである。
【０１１０】
ステップ５０１）  パケット情報取得部１１０において、データパケットを取得した場合は、以下の処理を行い、それ以外のパケットを取得した場合は当該処理をスルーする。
【０１１１】
ステップ５０２）  パケット情報取得部１１０は、データパケットを取得すると、パケットの通信時刻及びシーケンス番号をパケット通過時刻記録部１２６に記録する。
【０１１２】
ステップ５０３）  フローが終了するまで上記の処理を繰り返し、フローが終了すればステップ５０４に移行する。
【０１１３】
ステップ５０４）  フローの終了後、受信量推定部１３０は、パケット通過時刻記録部１２６に格納されている最大のシーケンス番号を取得する。その後、パケット通過時刻記録部の時刻が新しい順に以下の処理を行う。
【０１１４】
フローの最大のシーケンス番号をメモリ(図示せず)内の変数last_seqの初期値とする。フローのシーケンス番号が、32ビットの最大値（0xFFFFFFFF）に達し、０に戻り、繰り返し使用されている際には、前後のパケットのシーケンス番号をもとに、繰り返し使用されているかを判断し、新たに使用されていない番号を割り当てる。以下の処理において、シーケンス番号は、この新たに割り当てた循環していない番号を指すものとする。
【０１１５】
ステップ５０５）  受信量推定部１３０は、パケット通過時刻記録部１２６からパケットの情報を読み出す。
【０１１６】
ステップ５０６）  読み出した当該パケットのシーケンス番号seq_iとlast_seqと比較し、last_seqがseq_iより大きい場合は、ステップ５０７に移行する。そうでない場合は、当該処理を終了する。
【０１１７】
ステップ５０７)  当該パケットの到着時刻、シーケンス番号及びバイト量を受信量記録部１２７に格納する。
【０１１８】
ステップ５０８）  フロー最大のシーケンス番号last_seqをseq_iに更新する。
【０１１９】
ステップ５０９）  全パケットの処理が完了するまでステップ５０５以降の処理を繰り返す。
【０１２０】
ステップ５１０）  最後に、受信量記録部１２７に格納されたデータを時系列順に並び変えて（格納時と逆順にする）、受信量推定の結果を出力する。
【０１２１】
上記の図２に示すコンテンツ受信量推定装置の構成要素の動作をプログラムとして構築し、コンテンツ受信量推定装置として利用されるコンピュータにインストールして実行させる、または、ネットワークを介して流通させることが可能である。
【０１２２】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【０１２３】
１０  配信サーバ
２０  受信端末
１００  コンテンツ受信量推定装置
１１０  パケット情報取得部
１２０  記憶部
１３０  受信量推定部
１４０  パケットロス率推定部
【図１】
0005696032.tif 000002
【図２】
0005696032.tif 000003
【図３】
0005696032.tif 000004
【図４】
0005696032.tif 000005
【図５】
0005696032.tif 000006
【図６】
0005696032.tif 000007
【図７】
0005696032.tif 000008
【図８】
0005696032.tif 000009
【図９】
0005696032.tif 000010
【図１０】
0005696032.tif 000011