以下に、本願の開示するパケット解析プログラム、パケット解析装置およびパケット解析方法の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
[実施例に係るパケット解析装置の構成]
図1は、実施例に係るパケット解析装置の機能構成を示す図である。図1に示すように、パケット解析装置1は、端末3と端末4との間で通信されるパケットを、SW2を介して取得し、パッシブにネットワーク帯域を診断する。実施例では、端末3,4は、TCP(Transmission Control Protocol)を用いた通信を行うものとする。
ここで、TCPの通信機能の特性の一例について説明する。端末3がデータのパケットの送信端末であり、端末4がデータのパケットの受信端末であるとする。受信端末4がデータのパケットを受け取った場合に、そのデータのシーケンス番号とデータサイズから次に送られてくる予定のデータのシーケンス番号をACKの確認応答番号に設定したうえで、ACKを送信端末3に伝達する。送信端末3は、ACKを受信し、受信したACKの確認応答番号を確認することで、次のデータのパケットを送信する。
ところが、送信端末3は、データのパケットを1パケットずつ受信、確認および送信を行うと通信効率が悪い。そこで、TCPでは、「ウィンドウ制御」が行われる。ウィンドウ制御とは、送信端末3が、データのパケットを1パケットずつ受信、確認および送信するのではなく、複数のデータのパケットを連続で送信する。すなわち、送信端末3は、複数のデータのパケットをウィンドウサイズと呼ばれる単位で管理し、ACKの確認応答番号を待つことなく、データのパケットを連続で送信する。このウィンドウ制御により通信効率が改善される。なお、ウィンドウ制御によって連続で送信されるデータのパケットのことを「連続パケット」というものとする。
しかしながら、送信端末3が、1度の大量のデータのパケットを送信してしまうと、ネットワークで輻輳が発生する可能性や、受信端末4の通信インタフェースでバッファのオーバフローが発生する可能性がある。そこで、受信端末4がオーバフローしないように、TCPの通信では、連続パケットの量を制限するフロー制御を行う。フロー制御では、一例として、受信端末4は、自端末がオーバフローしない空のバッファ量を示すRWIN(Receiver WINdowsize)を送信端末3に伝える。また、別の一例として、フロー制御では、輻輳が発生しないように徐々に連続で送信するパケット量を増加させ、輻輳が発生した場合に連続パケットの量を減少させる。フロー制御が行われることで、通信の確実性や正確性が保たれる。例えば、フロー制御では、送信端末3の制御量を示すSWIN(Sender WINdowsize)と、RWINの最小値をウィンドウサイズとして、連続パケットの量を制限する。
このようなTCPの通信機能におけるフロー制御の特性を利用して、パケット解析装置1は、キャプチャしたパケットの中から、フロー制御の影響を受けたパケットを特定し、特定したパケットを除いて、連続パケットのみを用いてネットワーク帯域を診断する。「パケットをキャプチャする」とは、ネットワーク上で流れるトラヒックのパケットを取得することを意味する。
パケット解析装置1は、記憶部11および制御部12を有する。
記憶部11は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)等の不揮発性の半導体メモリ素子等の記憶装置に対応する。記憶部11は、コネクション管理テーブル111、解析情報テーブル112および統計情報テーブル117を有する。解析情報テーブル112には、ステータステーブル113、帯域解析テーブル114、DATAテーブル115およびACKテーブル116が含まれる。
コネクション管理テーブル111は、コネクション毎に、送信元および宛先の通信情報を管理する。コネクション管理テーブル111は、キャプチャされたパケットのコネクションを検索する際に用いられる。
解析情報テーブル112は、解析情報を記憶する。解析情報テーブル112は、ネットワーク帯域が診断される際に用いられる。解析情報テーブル112には、ステータステーブル113、帯域解析テーブル114、DATAテーブル115およびACKテーブル116が含まれる。ステータステーブル113は、コネクション毎の各種ステータスを記憶する。帯域解析テーブル114は、連続パケットの個数分について、キャプチャのタイミング間の間隔を記憶する。帯域解析テーブル114は、コネクション毎にテーブルを有する。DATAテーブル115は、データのパケットがキャプチャされる際に、データのパケットのインデックス番号、到着時刻およびパケット長を記憶する。DATAテーブル115は、コネクション毎にテーブルを有する。ACKテーブル116は、ACKが取得される際に、到着時刻やACKに対応するデータのパケットのインデックス番号を記憶する。ACKテーブル116は、コネクション毎にテーブルを有する。
統計情報テーブル117は、統計情報を記憶する。統計情報テーブル117は、ネットワーク帯域の診断の最終的な統計を記憶する。なお、記憶部11の各種テーブルのデータ構造は、後述する。
制御部12は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部12は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路の電子回路に対応する。または、制御部12は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路に対応する。さらに、制御部12は、出力インタフェース121、通信インタフェース122、コネクション管理部123、連続パケット抽出部124および帯域推定部125を有する。
出力インタフェース121は、出力装置5とのインタフェースである。例えば、出力インタフェース121は、統計情報テーブル117に記憶された統計情報を編集し、出力装置5に出力する。
通信インタフェース122は、端末3と端末4との間で通信されるパケットを、SW2を介してキャプチャする。通信インタフェース122は、キャプチャしたパケットをコネクション管理部123に引き渡す。
コネクション管理部123は、キャプチャされたパケットのコネクションを管理する。例えば、コネクション管理部123は、コネクション管理テーブル111を参照し、キャプチャしたパケットと同じコネクション情報のパケットを、以前にキャプチャしたか否かを判定する。コネクション管理部123は、以前にキャプチャしていないと判定した場合、今回キャプチャしたパケットのコネクション情報をコネクション管理テーブル111に追加する。また、コネクション管理部123は、以前にキャプチャしていると判定した場合、何もしない。コネクション情報には、例えば、送信元のIPアドレス、送信元のポート番号、宛先のIPアドレスおよび宛先のポート番号が含まれる。
連続パケット抽出部124は、ACKのパケットとデータのパケットとの対応関係を解析して、連続パケットを抽出する。そして、連続パケット抽出部124は、連続パケットの個数を特定する。例えば、連続パケット抽出部124は、データのパケットのシーケンス番号およびパケット長と、ACKのパケットの確認応答番号とから、ACKのパケットとデータのパケットとの対応付けを行う。そして、連続パケット抽出部124は、端末3から送信された何個のデータのパケットに対して端末4がACKのパケットを返信するのかを特定する。すなわち、連続パケット抽出部124は、連続パケットの個数を特定する。なお、連続パケット抽出部124は、コネクション管理テーブル111および解析情報テーブル112を用いて連続パケットを抽出する。また、連続パケット抽出部124の詳細については後述する。
帯域推定部125は、ネットワークの帯域を推定する。例えば、帯域推定部125は、連続パケット抽出部124によって抽出された連続パケットのうち、フロー制御の影響を受けたデータのパケットを判断する。すなわち、帯域推定部125は、ACKのパケットに対応したデータのパケットを基準にして、連続パケットの個数分毎に別々に帯域を計測し、帯域解析テーブル114に解析データとして保持する。そして、帯域推定部125は、解析データ毎に平均帯域を算出し、平均帯域の大小関係を比較することによりフロー制御の影響を受けたデータのパケットを特定する。基本的な帯域の計測法(Bandwidth)は、以下の式(1)で表される。
Bandwidth(Mbps)=8×パケットサイズ/パケット間の間隔・・・式(1)
ここで、フロー制御の影響を受けたデータのパケットは、輻輳を抑制するためにACKを待ってから送信されるので、連続パケットに比較して、平均帯域は小さくなる。フロー制御の影響を受けたデータのパケットは、連続パケットに比較して、パケット間の間隔が大きくなるからである。したがって、帯域推定部125は、解析データのうち、平均帯域が最小値になった解析データを、フロー制御の影響を受けたデータのパケット群の解析データと特定する。そして、帯域推定部125は、特定した解析データを除去し、残った解析データを用いてネットワーク帯域を診断する。残った解析データは、フロー制御の影響を受けていない連続パケットのパケット群の解析データとなる。なお、帯域推定部125は、解析情報テーブル112および統計情報テーブル117を用いて帯域を推定する。また、帯域推定部125の詳細については後述する。
次に、実施例に係るパケット解析装置1の処理の具体例について、図2を参照して説明する。図2は、実施例に係るパケット解析装置の処理の具体例を示す図である。図2に示すように、連続パケット抽出部124は、端末3から送信された何個のデータのパケットに対して端末4がACKのパケットを返信するのかを特定する。すなわち、連続パケット抽出部124は、連続パケットの個数を特定する。ここでは、連続パケットの個数は、2個と特定される。
そして、帯域推定部125は、ACKのパケットに対応したデータのパケットを基準にして、連続パケットの個数分毎に別々に帯域を計測する。ここでは、連続パケットが2個であるので、<1>および<2>毎にパケット間の間隔およびパケットサイズが加算される。そして、帯域推定部125は、<1>で算出されたパケットサイズと<1>で算出されたパケット間の間隔を、式(1)に代入して、<1>の平均帯域を算出する。また、帯域推定部125は、<2>で算出されたパケットのサイズと<2>で算出されたパケット間の間隔を、式(1)に代入して、<2>の平均帯域を算出する。
そして、帯域推定部125は、平均帯域の大小関係を比較することによりフロー制御の影響を受けたデータのパケットを特定する。ここでは、<2>のパケット間の間隔の方が<1>のパケット間の間隔より大きいので、<2>の平均帯域が<1>の平均帯域より小さくなる。したがって、<2>の平均帯域の解析データが、フロー制御の影響を受けた、データのパケット群の解析データと特定される。
そして、帯域推定部125は、特定したパケット群の解析データを除去し、残った解析データを用いてネットワーク帯域を診断する。すなわち、帯域推定部125は、<2>の解析データを除去し、残った<1>の解析データから算出される平均帯域を、ネットワーク帯域として推定する。
このように、帯域推定部125は、帯域の推定に不適切なパケットを特定することが可能となる。この結果、帯域推定部125は、特定した不適切なパケットを除去して正確な帯域を計測することができる。
[テーブルのデータ構造]
パケット解析装置1で用いられる各種テーブルのデータ構造を、図3〜図8を参照して説明する。図3は、コネクション管理テーブルのデータ構造の一例を示す図である。図4は、ステータステーブルのデータ構造の一例を示す図である。図5は、帯域解析テーブルのデータ構造の一例を示す図である。図6は、DATAテーブルのデータ構造の一例を示す図である。図7は、ACKテーブルのデータ構造の一例を示す図である。図8は、統計情報テーブルのデータ構造の一例を示す図である。
図3に示すように、コネクション管理テーブル111は、Src.IP111b、Src.Port111c、Dst.IP111dおよびDst.Port111eをConn.ID111aに対応付けて記憶する。Conn.ID111aは、コネクション毎に付けられるインデックス番号である。Src.ID111bは、送信元のIPアドレスである。Src.Port111cは、TCPにおける送信元のポート番号である。Dst.IP111dは、宛先のIPアドレスである。Dst.Port111eは、宛先のTCPにおける宛先のポート番号である。
一例として、Conn.ID111aが「0」である場合に、Src.IP111bとして「10.25.100.100」、Src.Port111cとして「80」と記憶している。Dst.IP111dとして「10.25.200.100」、Dst,Port111eとして「200」と記憶している。
図4に示すように、ステータステーブル113は、Status113b、Start.ID113c、Num.Stream113dおよびEx.RWIN113eをConn.ID113aに対応付けて記憶する。加えて、ステータステーブル113は、Now.Data.ID113fおよびNow.Ack.ID113gをConn.ID113aに対応付けて記憶する。Conn.ID113aは、コネクション毎に付けられるインデックス番号である。Status113bは、帯域計測の際の現在のステータスである。Status113bには、例えば、初期値であることを示す「INIT」、帯域計測で用いられるデータパケットの情報を設定中であることを示す「SET_ID」、帯域計測中であることを示す「MEASURE」が設定される。Start.ID113cは、帯域計測を開始するデータパケットのIDである。Num.Stream113dは、連続パケットの個数である。Ex.RWIN113eは、受信端末4がオーバフローしない空のバッファ量である。Ex.RWIN113eには、前回のRWINが設定される。Now.Data.ID113fは、現在のデータパケットのIDである。Now.Ack.ID113gは、現在のACKパケットのIDである。
一例として、Conn.ID113aが「0」である場合に、Status113bとして「MEASURE」、Start.ID113cとして「2」、Num.Stream113dとして「2」と記憶している。Ex.RWIN113eとして「65700」、Now.Data.ID113fとして「3」、Now.Ack.ID113gとして「2」と記憶している。
図5に示すように、帯域解析テーブル114は、Conn.ID114a、BW.ID114b、Size114cおよびTime.Gap114dを対応付けて記憶する。なお、帯域解析テーブル114は、Conn.ID114a毎にテーブルを有している。Conn.ID114aは、コネクション毎に付けられるインデックス番号である。BW.ID114bは、各テーブル内のインデックス番号である。BW.ID114bには、ステータステーブル113のNum.Stream113dで示される連続パケットの個数分のインデックス番号が設定される。Size114cは、計測されたパケットサイズの合計である。Time.Gap114dは、計測されたパケット間の到着時刻間隔の合計である。
一例として、Conn.ID114aが「0」であってBW.ID114bが「0」である場合に、Size114cとして「3000」、Time.Gap114dとして「240」と記憶している。また、Conn.ID114aが「0」であってBW.ID114bが「1」である場合に、Size114cとして「3000」、Time.Gap114dとして「1320」と記憶している。
図6に示すように、DATAテーブル115は、Conn.ID115a、Data.ID115b、Seq115c、Len115dおよびTime115eを対応付けて記憶する。なお、DATAテーブル115は、Conn.ID115a毎にテーブルを有している。Conn.ID115aは、コネクション毎に付けられるインデックス番号である。Data.ID115bは、データパケットのインデックス番号である。Seq115cは、データパケットのシーケンス番号である。Len115dは、データパケットのパケット長である。Time115eは、データパケットのパケット解析装置1への到着時刻である。
一例として、Conn.ID115aが「0」であってData.ID115bが「0」である場合に、Seq115cとして「1500」、Len115dとして「1500」、Time115eとして「1000」と記憶している。また、Conn.ID115aが「0」であってData.ID115bが「1」である場合に、Seq115cとして「3000」、Len115dとして「1500」、Time115eとして「1120」と記憶している。
図7に示すように、ACKテーブル116は、Conn.ID116a、Ack.ID116b、Ack116c、Time116dおよびData.ID116eを対応付けて記憶する。なお、ACKテーブル116は、Conn.ID116a毎にテーブルを有している。Conn.ID116aは、コネクション毎に付けられるインデックス番号である。Ack.ID116bは、ACKパケットのインデックス番号である。Ack116cは、ACKパケットのACK番号(確認応答番号)である。すなわち、Ack116cには、次に送られてくる予定のデータパケットのシーケンス番号が設定される。Time116dは、ACKパケットのパケット解析装置1への到着時刻である。Data.ID116eは、ACKに対応するデータパケットのインデックス番号(Data.ID)である。すなわち、Data.ID116eは、Ack.ID116bで示されるACKパケットに対応するデータパケットであることを意味する。
一例として、Conn.ID116aが「0」であってAck.ID116bが「0」である場合に、Ack116cとして「3000」、Time116dとして「3000」、Data.ID116eとして「0」と記憶している。Conn.ID116aが「0」であってAck.ID116bが「1」である場合に、Ack116cとして「6000」、Time116dとして「3240」、Data.ID116eとして「2」と記憶している。
図8に示すように、統計情報テーブル117は、Size117bおよびTime.Gap117cをConn.ID117aに対応付けて記憶する。Conn.ID117aは、コネクション毎に付けられるインデックス番号である。Size117bは、計測された連続パケットのパケットサイズの合計である。Time.Gap117cは、計測された連続パケットにおけるパケット間の到着時刻間隔の合計である。
一例として、Conn.ID117aが「0」である場合に、Size117bとして「3000」、Time.Gap117cとして「240」と記憶している。
[パケット解析処理のフローチャート]
次に、実施例に係るパケット解析処理のフローチャートを、図9A〜図9Dを参照して説明する。図9Aは、コネクション管理部の処理のフローチャートを示す図である。図9Bは、データパケット受信時の処理のフローチャートを示す図である。図9Cは、ACKパケット受信時の処理のフローチャートを示す図である。図9Dは、連続パケット判定処理のフローチャートを示す図である。なお、フローチャートでは、データパケットを「DATA」と記載し、ACKパケットを「ACK」と記載する。
図9Aに示すように、コネクション管理部123は、パケットを受信したか否かを判定する(ステップS1)。パケットを受信していないと判定した場合(ステップS1;No)、コネクション管理部123は、パケットを受信するまで、判定処理を繰り返す。
一方、パケットを受信したと判定した場合(ステップS1;Yes)、コネクション管理部123は、受信したパケットのヘッダ情報を抽出する(ステップS1A)。例えば、コネクション管理部123は、IPヘッダから、送信元のIPアドレスおよび宛先のIPアドレスを抽出する。コネクション管理部123は、TCPヘッダから、送信元のポート番号、宛先のポート番号、シーケンス番号、ACK番号(確認応答番号)、パケット長、RWINおよびFINフラグを抽出する。なお、FINフラグとは、コネクションの解放用のパケットであるか否かを示すフラグのことをいう。FINフラグには、一例として、コネクションの解放用のパケットである場合「ON」が設定され、コネクションの解放用のパケットでない場合「OFF」が設定される。
そして、コネクション管理部123は、コネクション管理テーブル111に記憶された情報から、今回受信したコネクション情報に対応するレコードを検索する(ステップS2)。ここでいうコネクション情報とは、送信元のIPアドレス、送信元のポート番号、宛先のIPアドレスおよび宛先のポート番号である。例えば、コネクション管理部123は、コネクション情報を検索条件として、コネクション管理テーブル111から該当するレコードを検索する。なお、送信元の情報と宛先の情報とが入れ替わった場合であっても、同じコネクションであることとする。
そして、コネクション管理部123は、検索の結果、コネクション情報が未登録であるか否かを判定する(ステップS3)。コネクション情報が未登録でないと判定した場合(ステップS3;No)、コネクション管理部123は、ステップS5に移行する。
一方、コネクション情報が未登録であると判定した場合(ステップS3;Yes)、コネクション管理部123は、コネクション情報を、コネクション管理テーブル111に登録する(ステップS4)。例えば、コネクション管理部123は、新たなコネクションID(Conn.ID111a)に対して、送信元のIPアドレス(Src.ID111b)およびポート番号(Src.Port111c)を追加する。加えて、コネクション管理部123は、同じレコードに、宛先のIPアドレス(Dst.IP111d)およびポート番号(Dst.Port111e)を追加する。そして、コネクション管理部123は、ステップS5に移行する。
ステップS5では、コネクション管理部123は、受信されたパケットがコネクション解放用のパケットであるか否かを判定する(ステップS5)。例えば、コネクション管理部123は、受信されたパケットのFINフラグを参照し、FINフラグが「ON」であるか否かを判定する。
受信されたパケットがコネクション解放用のパケットであると判定した場合(ステップS5;Yes)、すなわち、FINフラグが「ON」である場合、コネクション管理部123は、連続パケット判定処理を実行する(ステップS7)。連続パケット判定処理の詳細については後述する。そして、コネクション管理部123は、コネクション情報に関わる全ての情報をコネクション管理テーブル111および解析情報テーブル112から削除する(ステップS8)。具体的には、コネクション管理部123は、コネクションID(Conn.ID)が同じレコードを、コネクション管理テーブル111および解析情報テーブル112から削除する。そして、コネクション管理部123は、ステップS1に移行する。
一方、受信されたパケットがコネクション解放用のパケットでないと判定した場合(ステップS5;No)、すなわち、FINフラグが「ON」でない場合、コネクション管理部123は、当該パケットがDATAであるか否かを判定する(ステップS6)。例えば、コネクション管理部123は、TCPヘッダのパケット長を参照し、パケット長が0ならば、ACKと判定し、パケット長が0より大きければ、DATAと判定する。
当該パケットがDATAであると判定した場合(ステップS6;Yes)、コネクション管理部123は、データパケット受信時の処理へ移行すべく、ステップS9に移行する。一方、当該パケットがDATAでないと判定した場合(ステップS6;No)、すなわち当該パケットがACKである場合、コネクション管理部123は、ACKパケット受信時の処理へ移行すべく、ステップS12に移行する。
[データパケット受信時の処理のフローチャート]
図9Bに示すように、ステップS9では、コネクション管理部123は、ステータステーブル113のステータス(Status113b)が「SET_ID」であるか否かを判定する(ステップS9)。「SET_ID」とは、帯域計測で用いられるDATAの情報を設定中であることを示す。ステータスが「SET_ID」であると判定した場合(ステップS9;Yes)、コネクション管理部123は、ステータステーブル113のStart.ID113cに、現在のDATAのID(Data.ID)を登録する(ステップS10)。そして、コネクション管理部123は、ステップS11に移行する。
一方、ステータスが「SET_ID」でないと判定した場合(ステップS9;No)、コネクション管理部123は、ステップS11に移行する。
ステップS11では、コネクション管理部123は、同じコネクションID(Conn.ID115a)に対応するDATAテーブル115を更新する(ステップS11)。更新する情報は、例えば、現在のDATAのID(Data.ID115a)、シーケンス番号(Seq115c)、パケット長(Len115d)およびDATAの観測点への到着時刻(Time115e)である。観測点とは、パケット解析装置1のことを意味する。また、コネクション管理部123は、ステータステーブル113のNow.Data.ID113fに現在のDATAのIDを更新する。そして、コネクション管理部123は、次のパケットの到着を待つべく、ステップS1に移行する。
[ACKパケット受信時の処理のフローチャート]
図9Cに示すように、ステップS12では、コネクション管理部123は、同じコネクションID(Conn.ID115a)に対応するACKテーブル116を更新する(ステップS12)。更新する情報は、例えば、現在のACKのID(Ack.ID116b)、ACK番号(Ack116c)、ACKの観測点への到着時刻(Time116d)である。観測点とは、パケット解析装置1のことを意味する。また、コネクション管理部123は、ステータステーブル113のNow.Ack.ID113fに現在のACKのIDを更新し、Ex.RWIN113eにTCPヘッダのRWINの値を更新する。
続いて、コネクション管理部123は、RWINが変化したか、またはDATAのパケットロスが検出されたか否かを判定する(ステップS13)。RWINが変化したかまたはDATAのパケットロスが検出されたと判定した場合(ステップS13;Yes)、コネクション管理部123は、連続パケット判定処理(ステップS29)に移行する。
一方、RWINが変化しなかった且つDATAのパケットロスが検出されなかったと判定した場合(ステップS13;No)、連続パケット抽出部124は、ACKとDATAの対応付けを行う(ステップS14)。例えば、連続パケット抽出部124は、DATAテーブル115およびACKテーブル116から、以下の式(2)を満たすDATAのIDを検索する。
DATAテーブル[Data.ID].Seq+DATAテーブル[Data.ID].Len=ACKテーブル[Now.Ack.ID].Ack・・・式(2)
ACKの確認応答番号(Ack116c)には、次に送られてくる予定のDATAのシーケンス番号(直近のDATAのシーケンス番号(Seq115c)+パケット長(Len115d))が設定されているからである。
そして、連続パケット抽出部124は、DATAテーブルに、対応するDATAのIDがあるかどうかを判定する(ステップS15)。対応するDATAのIDがないと判定した場合(ステップS15;No)、連続パケット抽出部124は、連続パケット判定処理(ステップS29)に移行する。
一方、対応するDATAのIDがあると判定した場合(ステップS15;Yes)、連続パケット抽出部124は、ACKとDATAの対応付けができたので、ACKテーブル116のData.ID116eに対応するDATAのIDを記録する。そして、連続パケット抽出部124は、帯域計測を開始してから何個目のACKであるかを判定する(ステップS16)。
帯域計測を開始してから1個目のACKであると判定した場合(ステップS16;1個目)、連続パケット抽出部124は、次のパケットの到着を待つべく、ステップS1に移行する。一方、帯域計測を開始してから2個目のACKであると判定した場合(ステップS16;2個目)、連続パケット抽出部124は、何個のDATAに対してACKを返しているかを特定し、特定したDATA/ACK比をステータステーブル113に登録する(ステップS17)。例えば、連続パケット抽出部124は、ACKテーブル116から、以下の式(3)を満たすDATA/ACK比、すなわちACKに対するDATAの個数(Num.Stream)を特定する。
Num.Stream=ACKテーブル[Now.Ack.ID].Data.ID−ACKテーブル[Now.Ack.ID−1].Data.ID・・・式(3)
現在のACKのIDに対応するDATAのIDと、前回のACKのIDに対応するDATAのIDとの差分が、DATA/ACK比となるからである。そして、連続パケット抽出部124は、特定したDATA/ACK比を、ステータステーブル113のNum.Stream113dに登録する。
そして、帯域推定部125は、DATA/ACK比が1以外であるか否かを判定する(ステップS19)。DATA/ACK比が1以外であると判定した場合(ステップS19;Yes)、帯域推定部125は、帯域解析テーブル114を構築する(ステップS21)。例えば、帯域推定部125は、帯域解析テーブル114のレコードをDATA/ACK比の数分だけ作成する。そして、帯域推定部125は、次のパケットの到着を待つべく、ステップS1に移行する。
一方、DATA/ACK比が1以外でないと判定した場合(ステップS19;No)、帯域推定部125は、連続パケットは送信されないので、ACKテーブル116の、該当するコネクションIDに対応するレコードをリセットする(ステップS22)。そして、帯域推定部125は、ACKテーブル116の1レコード目に、今回受信されたACKの情報を更新する(ステップS23)。そして、帯域推定部125は、次のパケットの到着を待つべく、ステップS1に移行する。
一方、帯域計測を開始してから2個目以降のACKであると判定した場合(ステップS16;2個目以降)、連続パケット抽出部124は、何個のDATAに対してACKを返しているかを特定し、特定したDATA/ACK比を登録する(ステップS18)。特定方法および登録方法は、ステップS17の処理と同一であるので、その説明は省略する。
そして、帯域推定部125は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであるか否かを判定する(ステップS20)。前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じでないと判定した場合(ステップS20;No)、帯域推定部125は、連続パケット判定処理(ステップS29)に移行する。
前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであると判定した場合(ステップS20;Yes)、帯域推定部125は、ステータステーブル113のステータス(Status113b)を判定する(ステップS24)。
ステータスが「INIT」であると判定した場合(ステップS24;INIT)、帯域推定部125は、ステータステーブル113のステータスを「SET_ID」に変更する(ステップS25)。そして、帯域推定部125は、次のパケットの到着を待つべく、ステップS1に移行する。
ステータスが「SET_ID」であると判定した場合(ステップS24;SET_ID)、帯域推定部125は、ACKに対応するDATAがステータステーブル113のStart.ID113c以降のDATAであるか否かを判定する(ステップS26)。ACKに対応するDATAが、連続パケットの送信パターンが安定した後のDATAであるか否かが判定される。ACKに対応するDATAがStart.ID113c以降のDATAでないと判定した場合(ステップS26;No)、帯域推定部125は、連続パケットの送信パターンが安定していないと判断し、次のパケットの到着を待つべく、ステップS1に移行する。
一方、ACKに対応するDATAがStart.ID113c以降のDATAであると判定した場合(ステップS26;Yes)、帯域推定部125は、ステータステーブル113のステータスを「MEASURE」に変更する(ステップS27)。そして、帯域推定部125は、ステップS28に移行する。
ステータスが「MEASURE」であると判定した場合(ステップS24;MEASURE)、帯域推定部125は、ステップS28に移行する。ステップS28では、帯域推定部125は、DATA/ACK比の個数毎に帯域を計測する(ステップS28)。例えば、帯域推定部125は、ACKに対応するDATAの帯域データを、帯域解析テーブル114のBW.ID114bの1個目のIDに対応するパケット長(Size114c)およびパケット間の到着時刻間隔(Time.Gap114d)に加算する。ここでいう帯域データは、ACKに対応するDATAのパケット長および当該DATAと1個前のDATAとの間のパケット間の到着時刻間隔を意味する。そして、帯域推定部125は、ACKに対応するDATAの1個前のDATAの帯域データを、帯域解析テーブル114のBW.ID114bの2個目のIDに対応するパケット長(Size114c)およびパケット間の到着時刻間隔(Time.Gap114d)に加算する。なお、DATA/ACK比が3であれば、帯域推定部125は、さらに、ACKに対応するDATAの2個前のDATAの帯域データを、3個目のIDに対応するパケット長(Size114c)およびパケット間の到着時刻間隔(Time.Gap114d)に加算する。そして、帯域推定部125は、次のパケットの到着を待つべく、ステップS1に移行する。
ステップS29では、連続パケット判定処理が実行された後、帯域推定部125は、次のパケットの到着を待つべく、ステップS1に移行する。
[連続パケット判定処理のフローチャート]
図9Dに示すように、帯域推定部125は、別々に統計した帯域で一番帯域の狭い解析データを、フロー制御の影響を受けたものとしてフィルタする(ステップS30)。例えば、帯域推定部125は、以下の式(4)により、帯域が一番狭い解析データをフロー制御の影響を受けたパケット群に対応する解析データであると特定する。なお、式(4)では、連続パケットの個数分のインデックス番号であるBW.IDをiとする。
argmini(帯域解析テーブル[i].Size/帯域解析テーブル[i].Time.Gap)・・・式(4)
帯域が一番狭い解析データは、iに対応するSize114c、Time.Gap114dを指す。
そして、帯域推定部125は、フィルタされた後残った解析データを統計情報テーブル117へ加算する(ステップS31)。例えば、帯域推定部125は、帯域解析テーブル114の式(4)により特定された解析データを除去する。そして、帯域推定部125は、残った解析データのSize114cを統計情報テーブル117のSize117bに加算し、当該解析データのTime.Gap114dを統計情報テーブル117のTime.Gap117cに加算する。
そして、帯域推定部125は、解析情報をリセットする(ステップS32)。例えば、帯域推定部125は、解析情報テーブル112のステータステーブル113と、帯域解析テーブル114およびACKテーブル116の該当するコネクションIDに対応するレコードをリセットする。
そして、帯域推定部125は、ACKテーブル116の1レコード目に、今回受信されたACKの情報を更新する(ステップS33)。そして、帯域推定部125は、連続パケット判定処理を終了する。
[連続パケットの個数を特定する場合の処理のシーケンス]
次に、連続パケットの個数を特定する場合の処理のシーケンスを、各種テーブル内のデータの内容を用いながら説明する。図10は、連続パケットの個数を特定する場合の処理のシーケンスを示す図である。なお、以下では、図14A〜図14Eに示される解析情報テーブル112内の各種テーブルを用いながら説明する。なお、シーケンスでは、データパケットを「DATAパケット」と記載し、ACKパケットを「ACKパケット」と記載する。また、コネクションIDが、「0」であるとする。
ステップS101では、パケット解析装置1は、端末3から送信されたDATAパケットD0を受信する。DATAパケットD0には、シーケンス番号(Seq)が「1」と設定され、パケット長(Len)が「1500」と設定されている。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットであるので、パケット解析装置1は、以前に同じコネクションのパケットを受信していないと判定し、コネクション管理テーブル111に今回のパケットのコネクション情報を登録する。また、DATAパケットD0のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が1500であり0より大きいので、パケット解析装置1は、DATAであると判定する。
そして、パケット解析装置1は、ステータステーブル113のステータス(Status113b)を参照する。ここでは、ステータステーブル113には、Status113bとして「INIT」が設定されている(図14A、S101参照)。そこで、パケット解析装置1は、DATAテーブル115に、コネクションID「0」に対応する情報を追加する。ここでは、DATAテーブル115には、Data.ID115bとして「0」、Seq115cとして「1」、Len115dとして「1500」、Time115eとして「100」が設定される(図14A、S101参照)。なお、Time115eは、DATAパケットD0の到着時刻である。また、パケット解析装置1は、ステータステーブル113のNow.Data.ID113fに現在のDATAパケットD0のIDである「0」を更新する(図14A、S101参照)。そして、ステップS101の処理が終了する。
ステップS102では、パケット解析装置1は、端末4から送信されたACKパケットA0を受信する。ACKパケットA0には、ACK番号(Ack)が「1501」と設定され、RWIN(Rwin)が「65700」と設定されている。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットでないので、パケット解析装置1は、以前に同じコネクションのパケットを受信したと判定する。また、ACKパケットA0のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が0であるので、パケット解析装置1は、ACKであると判定する。
そして、パケット解析装置1は、ACKテーブル116に、コネクションID「0」に対応する情報を追加する。ここでは、ACKテーブル116には、Ack.ID116bとして「0」、Ack116cとして「1501」、Time116dとして「300」が設定される(図14B、S102参照)。なお、Time116dは、ACKパケットA0の到着時刻である。
そして、パケット解析装置1は、式(2)を用いて、ACKパケットA0とDATAパケットの対応付けを行う。ここでは、現在のACKパケットのIDは「0」であるので、ACKテーブル[0].Ack116cとして「1501」が抽出される(図14B、S102参照)。DATAテーブル115のData.ID115bが「0」であるとき、DATAテーブル[0].Seq115cとして「1」、DATAテーブル[0].Len115dとして「1500」が抽出される(図14B、S102参照)。すると、パケット解析装置1は、Data.IDが「0」であるとき、式(2)を満たし、ACKパケットA0とDATAパケットD0の対応付けができたので、ACKテーブル116のData.ID116eに対応するDATAパケットのIDである「0」を記録する(図14B、S102参照)。そして、ACKパケットA1は1個目のACKであるので、ステップS102の処理が終了する。
ステップS103では、パケット解析装置1は、端末3から送信されたDATAパケットD1を受信する。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットでないので、パケット解析装置1は、以前に同じコネクションのパケットを受信したと判定する。また、DATAパケットD1のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が1500であり0より大きいので、パケット解析装置1は、DATAであると判定する。
そして、パケット解析装置1は、ステータステーブル113のステータス(Status113b)を参照する。ここでは、ステータステーブル113には、Status113bとして「INIT」が設定されている(図14C、S103参照)。そこで、パケット解析装置1は、DATAテーブル115に、コネクションID「0」に対応する情報を追加する。ここでは、DATAテーブル115には、Data.ID115bとして「1」、Seq115cとして「1501」、Len115dとして「1500」、Time115eとして「500」が設定される(図14C、S103参照)。なお、Time115eは、DATAパケットD1の到着時刻である。また、パケット解析装置1は、ステータステーブル113のNow.Data.ID113fに現在のDATAパケットD1のIDである「1」を更新する(図14C、S103参照)。そして、ステップS103の処理が終了する。
ステップS104では、パケット解析装置1は、端末3から送信されたDATAパケットD2を受信する。パケット解析装置1は、ステップS103と同様に、DATAパケットD2の情報を、DATAテーブル115およびステータステーブル113に記録する(図14D、S104参照)。そして、ステップS104の処理が終了する。
ステップS105では、パケット解析装置1は、端末4から送信されたACKパケットA1を受信する。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットでないので、パケット解析装置1は、以前に同じコネクションのパケットを受信したと判定する。また、ACKパケットA1のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が0であるので、パケット解析装置1は、ACKであると判定する。
そして、パケット解析装置1は、ACKテーブル116に、コネクションID「0」に対応する情報を追加する。ここでは、ACKテーブル116には、Ack.ID116bとして「1」、Ack116cとして「4501」、Time116dとして「800」が設定される(図14E、S105参照)。なお、Time116dは、ACKパケットA1の到着時刻である。
そして、パケット解析装置1は、式(2)を用いて、ACKパケットA1とDATAパケットの対応付けを行う。ここでは、現在のACKパケットのIDは「1」であるので、ACKテーブル[1].Ack116cとして「4501」が抽出される(図14E、S105参照)。DATAテーブル115のData.ID115bが「2」であるとき、DATAテーブル[2].Seq115cとして「3001」、DATAテーブル[2].Len115dとして「1500」が抽出される(図14D、S104参照)。すると、パケット解析装置1は、Data.IDが「2」であるとき、式(2)を満たし、ACKパケットA1とDATAパケットD2の対応付けができたので、ACKテーブル116のData.ID116eに対応するDATAパケットのIDである「2」を記録する(図14E、S105参照)。
そして、ACKパケットA1は2個目のACKであるので、パケット解析装置1は、式(3)を用いて、何個のDATAパケットに対してACKを返しているかを示すDATA/ACK比を特定する。ここでは、現在のACKパケットA1のIDが「1」であり、ACKテーブル116から、ACKパケットA1に対応するDATAパケットのIDは「2」である(図14E、S105参照)。また、前回のACKパケットA0のIDが「0」であり、ACKテーブル116から、ACKパケットA0に対応するDATAパケットのIDは「0」である(図14D、S104参照)。すると、パケット解析装置1は、式(3)を用いて、「2」個のDATAパケットに対してACKを返していることを特定する。すなわち、DATA/ACK比が「2」である。つまり、連続パケットの個数は「2」である。そこで、パケット解析装置1は、DATA/ACK比である「2」を、ステータステーブル113のNum.Stream113dに登録する(図14E、S105参照)。
そして、パケット解析装置1は、帯域解析テーブル114を構築する。ここでは、パケット解析装置1は、帯域解析テーブル114のレコードを、DATA/ACK比である「2」個分だけ構築する(図14E、S105参照)。そして、ステップS105の処理が終了する。
[連続パケットを特定する場合の処理のシーケンス]
引き続き、連続パケットを特定する場合の処理のシーケンスを、各種テーブル内のデータの内容を用いながら説明する。図11は、連続パケットを特定する場合の処理のシーケンスを示す図である。なお、以下では、図15A〜図15Fに示される解析情報テーブル112内の各種テーブルを用いながら説明する。なお、シーケンスでは、データパケットを「DATAパケット」と記載し、ACKパケットを「ACKパケット」と記載する。また、コネクションIDが、「0」であるとする。
ステップS106では、パケット解析装置1は、端末3から送信されたDATAパケットD3を受信する。パケット解析装置1は、ステップS103と同様に、DATAパケットD3の情報を、DATAテーブル115およびステータステーブル113に記録する(図15A、S106参照)。そして、ステップS106の処理が終了する。
ステップS107では、パケット解析装置1は、端末3から送信されたDATAパケットD4を受信する。パケット解析装置1は、ステップS103と同様に、DATAパケットD4の情報を、DATAテーブル115およびステータステーブル113に記録する(図15B、S107参照)。そして、ステップS107の処理が終了する。
ステップS108では、パケット解析装置1は、端末4から送信されたACKパケットA2を受信する。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットでないので、パケット解析装置1は、以前に同じコネクションのパケットを受信したと判定する。また、ACKパケットA2のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が0であるので、パケット解析装置1は、ACKであると判定する。
そして、パケット解析装置1は、ACKテーブル116に、コネクションID「0」に対応する情報を追加する。ここでは、ACKテーブル116には、Ack.ID116bとして「2」、Ack116cとして「7501」、Time116dとして「1300」が設定される(図15C、S108参照)。なお、Time116dは、ACKパケットA2の到着時刻である。
そして、パケット解析装置1は、式(2)を用いて、ACKパケットA2とDATAパケットの対応付けを行う。ここでは、現在のACKパケットのIDは「2」であるので、ACKテーブル[2].Ack116cとして「7501」が抽出される(図15C、S108参照)。DATAテーブル115のData.ID115bが「4」であるとき、DATAテーブル[4].Seq115cとして「6001」、DATAテーブル[4].Len115dとして「1500」が抽出される(図15C、S108参照)。すると、パケット解析装置1は、Data.IDが「4」であるとき、式(2)を満たし、ACKパケットA2とDATAパケットD4の対応付けができたので、ACKテーブル116のData.ID116eに対応するDATAパケットのIDである「4」を記録する(図15C、S108参照)。
そして、ACKパケットA3は3個目のACKであるので、パケット解析装置1は、式(3)を用いて、何個のDATAパケットに対してACKを返しているかを示すDATA/ACK比を特定する。ここでは、現在のACKパケットA2のIDが「2」であり、ACKテーブル116から、ACKパケットA2に対応するDATAパケットのIDは「4」である(図15C、S108参照)。また、前回のACKパケットA1のIDが「1」であり、ACKテーブル116から、ACKパケットA1に対応するDATAパケットのIDは「2」である(図15C、S108参照)。すると、パケット解析装置1は、式(3)を用いて、「2」個のDATAパケットに対してACKを返していることを特定する。すなわち、DATA/ACK比が「2」である。つまり、連続パケットの個数は「2」である。そこで、パケット解析装置1は、DATA/ACK比である「2」を、ステータステーブル113のNum.Stream113dに登録する(図15C、S108参照)。
そして、パケット解析装置1は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであるか否かを判定する。ここでは、前回登録したDATA/ACK比が「2」であり、今回登録したDATA/ACK比は「2」であるので、同じであると判定される。つまり、送信パターンが同じであると判断される。そこで、パケット解析装置1は、ステータステーブル113のStatus113bを、「INIT」から「SET_ID」に変更する(図15C、S108参照)。そして、ステップS108の処理が終了する。
ステップS109では、パケット解析装置1は、端末3から送信されたDATAパケットD5を受信する。パケット解析装置1は、ステータステーブル113のStatus113bが「SET_ID」であるので、Start.ID113cに、現在のDATAのIDであるNow.Data.ID113fを設定する(図15D、S109参照)。そして、パケット解析装置1は、ステップS103と同様に、DATAパケットD5の情報を、DATAテーブル115およびステータステーブル113に記録する(図15D、S109参照)。そして、ステップS109の処理が終了する。
ステップS110では、パケット解析装置1は、端末3から送信されたDATAパケットD6を受信する。パケット解析装置1は、ステップS109と同様に、DATAパケットD6の情報を、DATAテーブル115およびステータステーブル113に記録する(図15E、S110参照)。そして、ステップS110の処理が終了する。
ステップS111では、パケット解析装置1は、端末4から送信されたACKパケットA3を受信する。すると、パケット解析装置1は、コネクション管理テーブル111を参照して、以前に同じコネクションのパケットを受信したか否かを判定する。ここでは、今回が初めてのパケットでないので、パケット解析装置1は、以前に同じコネクションのパケットを受信したと判定する。また、ACKパケットA3のTCPヘッダのFINフラグがOFFであるとすると、さらに、パケット解析装置1は、受信したパケットがDATAであるか否かを判定する。ここでは、受信したパケットにおけるTCPヘッダのパケット長(Len)が0であるので、パケット解析装置1は、ACKであると判定する。
そして、パケット解析装置1は、ACKテーブル116に、コネクションID「0」に対応する情報を追加する。ここでは、ACKテーブル116には、Ack.ID116bとして「3」、Ack116cとして「10501」、Time116dとして「1800」が設定される(図15F、S111参照)。なお、Time116dは、ACKパケットA3の到着時刻である。
そして、パケット解析装置1は、式(2)を用いて、ACKパケットA3とDATAパケットの対応付けを行う。ここでは、現在のACKパケットのIDは「3」であるので、ACKテーブル[3].Ack116cとして「10501」が抽出される(図15F、S111参照)。DATAテーブル115のData.ID115bが「6」であるとき、DATAテーブル[6].Seq115cとして「9001」、DATAテーブル[6].Len115dとして「1500」が抽出される(図15F、S111参照)。すると、パケット解析装置1は、Data.IDが「6」であるとき、式(2)を満たし、ACKパケットA3とDATAパケットD6の対応付けができたので、ACKテーブル116のData.ID116eに対応するDATAパケットのIDである「6」を記録する(図15F、S111参照)。
そして、ACKパケットA4は4個目のACKであるので、パケット解析装置1は、式(3)を用いて、何個のDATAパケットに対してACKを返しているかを示すDATA/ACK比を特定する。ここでは、ステップS108と同様、パケット解析装置1は、式(3)を用いて、「2」個のDATAパケットに対してACKを返していることを特定する。すなわち、DATA/ACK比が「2」である。つまり、連続パケットの個数は「2」である。そこで、パケット解析装置1は、DATA/ACK比である「2」を、ステータステーブル113のNum.Stream113dに登録する(図15F、S111参照)。
そして、パケット解析装置1は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであるか否かを判定する。ここでは、前回登録したDATA/ACK比が「2」であり、今回登録したDATA/ACK比は「2」であるので、同じであると判定される。つまり、送信パターンが同じであると判断される。
そして、パケット解析装置1は、ステータステーブル113のStatus113bが「SET_ID」であるので、ACKに対応するDATAがステータステーブル113のStart.ID113c以降のDATAであるか否かを判定する。ここでは、ACKパケットA3に対応するDATAパケットD6のIDが「6」であり、Start.ID113cが「5」であるので、ACKパケットA4に対応するDATAパケットD6がStart.ID113c以降のDATAパケットであると判定される。すなわち、ACKパケットA3に対応するDATAパケットD6は、連続パケットの送信パターンが安定した後のDATAパケットであると判断される。そこで、パケット解析装置1は、ステータステーブル113のStatus113bを、「SET_ID」から「MEASURE」に変更する(図15F、S111参照)。
そして、パケット解析装置1は、DATA/ACK比の個数毎に帯域を計測する。ここでは、パケット解析装置1は、ACKパケットA3に対応するDATAパケットD6のパケット長を、帯域解析テーブル114のBW.ID114bの「0」に対応するパケット長(Size114c)に加算する。そして、パケット解析装置1は、ACKパケットA3に対応するDATAパケットD6とDATAパケットD5とのパケット間の到着時刻間隔を、帯域解析テーブル114のBW.ID114bの「0」に対応する到着時刻間隔(Time.Gap114d)に加算する(図15F、S111、t1参照)。また、パケット解析装置1は、DATAパケットD6の1つ前のDATAパケットD5のパケット長を、帯域解析テーブル114のBW.ID114bの「1」に対応するパケット長(Size114c)に加算する。そして、パケット解析装置1は、DATAパケットD5とDATAパケットD4とのパケット間の到着時刻間隔を、帯域解析テーブル114のBW.ID114bの「0」に対応する到着時刻間隔(Time.Gap114d)に加算する(図15F、S111、t2参照)。そして、ステップS111の処理が終了する。
以降、パケット解析装置1は、同様に、連続パケットの送信パターンが安定している限り、帯域解析テーブル114に帯域データをそれぞれ加算していく。その後、パケット解析装置1は、例えば、受信したパケットのTCPヘッダのFINフラグがONである場合に、解析情報をリセットする。このとき、パケット解析装置1は、フロー制御の影響を受けた解析データを除外し、残った解析データを統計情報テーブル117へ加算する。なお、解析情報をリセットするときは、FINフラグがONであった場合に限らず、例えば、RWINに変化があった場合やDATA/ACK比に変化があった場合もある。
[リセットする処理のシーケンス]
そこで、DATA/ACK比に変化があった場合にリセットする処理のシーケンスを、図12を参照して説明する。図12は、リセットする処理のシーケンスを示す図である。なお、以下では、図16A〜図16Fに示される解析情報テーブル112内の各種テーブルを用いながら説明する。なお、シーケンスでは、データパケットを「DATAパケット」と記載し、ACKパケットを「ACKパケット」と記載する。また、コネクションIDが、「0」であるとする。
ステップS112では、パケット解析装置1は、端末3から送信されたDATAパケットD7を受信する。パケット解析装置1は、ステップS109と同様に、DATAパケットD7の情報を、DATAテーブル115およびステータステーブル113に記録する(図16A、S112参照)。そして、ステップS112の処理が終了する。
ステップS113では、パケット解析装置1は、端末3から送信されたDATAパケットD8を受信する。パケット解析装置1は、ステップS110と同様に、DATAパケットD8の情報を、DATAテーブル115およびステータステーブル113に記録する(図16B、S113参照)。そして、ステップS113の処理が終了する。
ステップS114では、パケット解析装置1は、端末4から送信されたACKパケットA4を受信する。パケット解析装置1は、ステップS111と同様に、ACKパケットA4の情報およびACKパケットA4に対応するDATAパケットD8のIDの情報をACKテーブル116に記録する(図16C、S114参照)。また、パケット解析装置1は、ステップS111と同様に、DATA/ACK比の個数毎に帯域を計測し、それぞれ帯域解析テーブル114に記録する(図16C、S114参照)。そして、ステップS114の処理が終了する。
ステップS115では、パケット解析装置1は、端末3から送信されたDATAパケットD9を受信する。パケット解析装置1は、ステップS109と同様に、DATAパケットD9の情報を、DATAテーブル115およびステータステーブル113に記録する(図16D、S115参照)。そして、ステップS115の処理が終了する。
ステップS116では、パケット解析装置1は、端末3から送信されたDATAパケットD10を受信する。パケット解析装置1は、ステップS110と同様に、DATAパケットD10の情報を、DATAテーブル115およびステータステーブル113に記録する(図16E、S116参照)。そして、ステップS116の処理が終了する。
ステップS117では、パケット解析装置1は、端末4から送信されたACKパケットA5を受信する。パケット解析装置1は、ステップS111と同様に、式(3)を用いて、何個のDATAパケットに対してACKを返しているかを示すDATA/ACK比を特定する。ここでは、パケット解析装置1は、ACKパケットA5に対応するDATAパケットがD9であり、式(3)を用いて、「1」個のDATAパケットに対してACKを返していることを特定する。すなわち、DATA/ACK比が「1」である。
そして、パケット解析装置1は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回のDATA/ACK比とが同じであるか否かを判定する。ここでは、前回登録したDATA/ACK比が「2」であり、今回のDATA/ACK比は「1」であるので、同じでないと判定される。つまり、送信パターンが変化したと判断される。
そこで、パケット解析装置1は、過去の連続パケットの情報のみを統計情報テーブル117に加算して、解析情報テーブル112をリセットする。すなわち、パケット解析装置1は、式(4)を用いて、帯域が一番狭い解析データをフロー制御の影響を受けたパケット群に対応する解析データであると特定する。ここでは、BW.IDが「0」である場合、帯域解析テーブル[0].Size/帯域解析テーブル[0].Time.Gapは3000/200(=15)である(図16E、帯域解析テーブル114を参照)。BW.IDが「1」である場合、帯域解析テーブル[1].Size/帯域解析テーブル[1].Time.Gapは3000/800(=3.75)である(図16E、帯域解析テーブル114を参照)。したがって、BW.ID「1」に対応する解析データが、帯域が一番狭い解析データであり、フロー制御の影響を受けたパケット群に対応する解析データであると考えられる。パケット解析装置1は、BW.ID「1」に対応する解析データを除去して、残りの解析データのSize114cおよびTime.Gap114dを統計情報テーブル117にそれぞれ加算する(図16F、統計情報テーブル117を参照)。
そして、パケット解析装置1は、解析情報テーブル112のステータステーブル113、帯域解析テーブル114、ACKテーブル116をリセットする。その後、パケット解析装置1は、今回受信したACKパケットA5の情報をリセット処理したACKテーブル116に再度登録する(図16F、ACKテーブル116を参照)。そして、ステップS117の処理が終了する。
[連続パケットの送信パターンが安定していない場合の処理のシーケンス]
次に、連続パケットの送信パターンが安定していない場合の処理のシーケンスを、図13を参照して説明する。図13は、連続パケットの送信パターンが安定していない場合の処理のシーケンスを示す図である。なお、以下では、図17A〜図17Cに示される解析情報テーブル112内の各種テーブルを用いながら説明する。なお、シーケンスでは、データパケットを「DATAパケット」と記載し、ACKパケットを「ACKパケット」と記載する。また、コネクションIDが、「0」であるとする。
DATAパケットD12〜D14が、端末3から送信されたとする。
ステップS118では、パケット解析装置1は、端末4から送信されたACKパケットA7を受信する。パケット解析装置1は、ステップS111と同様に、ACKパケットA7の情報およびACKパケットA7に対応するDATAパケットD12のIDの情報をACKテーブル116に記録する(図17A、S118参照)。また、パケット解析装置1は、ステップS108と同様に、DATA/ACK比を特定する。ここでは、パケット解析装置1は、「2」個のDATAパケットに対してACKを返していることを特定するとする。そこで、パケット解析装置1は、DATA/ACK比である「2」を、ステータステーブル113のNum.Stream113dに登録する(図17A、S118参照)。そして、パケット解析装置1は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであるとする。すると、パケット解析装置1は、ステータステーブル113のStatus113bを、「INIT」から「SET_ID」に変更する(図17A、S118参照)。そして、ステップS118の処理が終了する。
ステップS119では、パケット解析装置1は、端末3から送信されたDATAパケットD15を受信する。パケット解析装置1は、ステータステーブル113のStatus113bが「SET_ID」であるので、Start.ID113cに、現在のDATAのIDであるNow.Data.ID113fを設定する(図17B、S119参照)。そして、パケット解析装置1は、ステップS109と同様に、DATAパケットD15の情報を、DATAテーブル115およびステータステーブル113に記録する(図17B、S119参照)。そして、ステップS119の処理が終了する。
ステップS120では、パケット解析装置1は、端末4から送信されたACKパケットA8を受信する。パケット解析装置1は、ステップS111と同様に、ACKパケットA8の情報およびACKパケットA8に対応するDATAパケットD14のIDの情報をACKテーブル116に記録する(図17C、S120参照)。また、パケット解析装置1は、ステップS111と同様に、DATA/ACK比を特定する。ここでは、パケット解析装置1は、「2」個のDATAパケットに対してACKを返していることを特定するとする。そこで、パケット解析装置1は、DATA/ACK比である「2」を、ステータステーブル113のNum.Stream113dに登録する(図17C、S120参照)。そして、パケット解析装置1は、ステータステーブル113のNum.Stream113dに対して、前回登録したDATA/ACK比と今回登録したDATA/ACK比とが同じであるとする。
そして、パケット解析装置1は、ステータステーブル113のStatus113bが「SET_ID」であるので、ACKに対応するDATAがステータステーブル113のStart.ID113c以降のDATAであるか否かを判定する。ここでは、ACKパケットA8に対応するDATAパケットD14のIDが「14」であり、Start.ID113cが「15」であるので、ACKパケットA8に対応するDATAパケットD14がStart.ID113c以降のDATAパケットでないと判定される。すなわち、ACKパケットA8に対応するDATAパケットD14は、連続パケットの送信パターンが安定した後のDATAパケットでないと判断される。そこで、パケット解析装置1は、何もしないで、ステップS120の処理が終了する。
[パケット解析処理の帯域計測の一例]
次に、実施例に係るパケット解析処理の帯域計測の一例を、図18Aを参照して説明する。図18Aは、実施例に係るパケット解析処理の帯域計測の一例を示す図である。なお、連続パケット抽出部124によって特定された連続パケットの個数は、2個であるとする。また、各<1>について、帯域解析テーブル114のBW.ID114bの「0」に対応するSize114cおよびTime.Gap114dに加算される解析データであるとする。各<2>について、帯域解析テーブル114のBW.ID114bの「1」に対応するSize114cおよびTime.Gap114dに加算される解析データであるとする。
図18Aに示すように、パケット解析装置1は、<1>に対するDATAパケットのパケット長およびパケット間の到着時刻間隔を加算する。ここでは、DATAパケットのパケット長を1500とすると、パケット長の合計は、1500×4である。<1>のDATAパケット間の到着時刻間隔を120とすると、パケット間の到着時刻間隔の合計は、120×4である。したがって、<1>の帯域は、以下の式(5)で表される。
<1>の帯域=8×(1500×4)/(120×4)=100.00[Mbps]・・・式(5)
また、パケット解析装置1は、<2>に対するDATAパケットのパケット長およびパケット間の到着時刻間隔を加算する。ここでは、DATAパケットのパケット長を1500とすると、パケット長の合計は、1500×3である。<2>のDATAパケット間の到着時刻間隔をそれぞれ240、1200、240とすると、パケット間の到着時刻間隔の合計は、1200+240×2である。したがって、<2>の帯域は、以下の式(6)で表される。
<2>の帯域=8×(1500×3)/(1200+240×2)=21.23[Mbps]・・・式(6)
したがって、パケット解析装置1は、帯域が一番狭い解析データを、フロー制御の影響を受けたパケット群に対応する解析データであるとしてフィルタする。ここでは、パケット解析装置1は、<2>を除去する。そして、パケット解析装置1は、残った<1>の帯域をネットワークの帯域として推定する。すなわち、推定帯域は、100.00[Mbps]である。
図18Bは、従来の帯域計測の一例を示す図である。図18Bに示すように、帯域は、全てのDATAパケットを用いて計測される。帯域は、以下の式(7)で表される。
帯域=8×(1500×7)/(120×4+240×2+1200)=38.89[Mbps]・・・式(7)
すなわち、推定帯域は、38.39[Mbps]である。
そうすると、パケット解析装置1は、フロー制御の影響を受けたパケット群を除去して、除去した残りのパケット群を用いて帯域を推定するので、全てのパケットを用いて計測する方法に比べて、正確な帯域を測定することができる。
[パケット解析処理の帯域計測の別の一例]
次に、実施例に係るパケット解析処理の帯域計測の別の一例を、図19Aを参照して説明する。図19Aは、実施例に係るパケット解析処理の帯域計測の別の一例を示す図である。図19Aでは、クロストラヒックがある場合の帯域計測である。クロストラヒックとは、ネットワークに流れている他のトラヒックのことをいう。なお、連続パケット抽出部124によって特定された連続パケットの個数は、2個であるとする。また、各<1>について、帯域解析テーブル114のBW.ID114bの「0」に対応するSize114cおよびTime.Gap114dに加算される解析データであるとする。各<2>について、帯域解析テーブル114のBW.ID114bの「1」に対応するSize114cおよびTime.Gap114dに加算される解析データであるとする。
図19Aに示すように、パケット解析装置1は、<1>に対するDATAパケットのパケット長およびパケット間の到着時刻間隔を加算する。ここでは、DATAパケットのパケット長を1500とすると、パケット長の合計は、1500×4である。<1>のDATAパケット間の到着時刻間隔を600、60、120、120とすると、パケット間の到着時刻間隔の合計は、120×2+60+600である。したがって、<1>の帯域は、以下の式(8)で表される。
<1>の帯域=8×(1500×4)/(120×2+60+600)=53.33[Mbps]・・・式(8)
また、パケット解析装置1は、<2>に対するDATAパケットのパケット長およびパケット間の到着時刻間隔を加算する。ここでは、DATAパケットのパケット長を1500とすると、パケット長の合計は、1500×3である。<2>のDATAパケット間の到着時刻間隔をそれぞれ60、720、240とすると、パケット間の到着時刻間隔の合計は、60+720+240である。したがって、<2>の帯域は、以下の式(9)で表される。
<2>の帯域=8×(1500×3)/(60+720+240)=35.29[Mbps]・・・式(9)
したがって、パケット解析装置1は、帯域が一番狭い解析データを、フロー制御の影響を受けたパケット群に対応する解析データであるとしてフィルタする。ここでは、パケット解析装置1は、<2>を除去する。そして、パケット解析装置1は、残った<1>の帯域をネットワークの帯域として推定する。すなわち、推定帯域は、53.33[Mbps]である。
図19Bは、従来の帯域計測の別の一例を示す図である。図19Bに示すように、帯域は、クロストラヒックに相当する部分等を閾値により除去した全てのDATAパケットを用いて計測される。帯域は、以下の式(10)で表される。
帯域=8×(1500×4)/(120×2+60×2)=133.33[Mbps]・・・式(10)
すなわち、推定帯域は、133.33[Mbps]である。本来、可用帯域は、クロストラヒックがあると狭くなるはずであるが、推定帯域は逆に広く見積もってしまう。
そうすると、パケット解析装置1は、フロー制御の影響を受けたパケット群を除去して、除去した残りのパケット群を用いて帯域を推定するので、閾値により除去した全てのパケットを用いて計測する方法に比べて、正確な帯域を測定することができる。
[実施例の効果]
上記実施例によれば、パケット解析装置1は、端末3と端末4との間で通信されるパケットを端末3と端末4の間のネットワークのいずれかの地点で取得する。そして、パケット解析装置1は、端末4から端末3へ送信された第1のACKの取得から第1のACKの次のACKである第2のACKの取得までの間に取得された、端末3から端末4へ送信された複数のデータパケットの取得タイミング、および隣接する2つのデータパケットの取得タイミング間の間隔に基づいて、取得タイミング間の間隔の中でより大きい間隔を生成するデータパケットを特定する。かかる構成によれば、パケット解析装置1は、データパケットの取得タイミング間の間隔の中でより大きい間隔を生成するデータパケットを特定することで、フロー制御の影響を受けたデータパケットを特定できる。すなわち、パケット解析装置1は、帯域の計測に不適切なデータパケットを特定できる。ひいては、パケット解析装置1は、特定した不適切なデータパケットを除去して正確な帯域を計測することを可能にする。
また、上記実施例によれば、パケット解析装置1は、第1のACKに対応するデータパケットの識別番号と第2のACKに対応するデータパケットの識別番号との差分から連続するデータパケットの個数を特定する。そして、パケット解析装置1は、特定した個数分の取得タイミング間の間隔の中でより大きい間隔を生成するデータパケットを特定する。かかる構成によれば、パケット解析装置1は、端末の送信タイミングと観測地点の受信タイミングのズレがあっても、連続するデータパケットを特定することができる。
また、上記実施例によれば、パケット解析装置1は、端末3と端末4との間の通信が途中で変化した場合に、既に取得された複数のデータパケットの取得タイミングおよび取得タイミング間の間隔をリセットする。かかる構成によれば、パケット解析装置1は、通信が途中で変化した際の情報をリセットすることで、帯域の計測からはずすことができ、フロー制御の影響を受けたデータパケットを誤って特定することを防止できる。
[その他]
なお、実施例では、帯域推定部125は、連続パケットの個数が2個の場合の帯域を推定した。しかしながら、帯域推定部125は、連続パケットの個数が3個の場合であっても良いし、4個以上の場合であっても良い。かかる場合に、帯域推定部125は、連続パケットの個数分毎に別々に帯域を計測し、帯域解析テーブル114に解析データとして保持する。そして、帯域推定部125は、別々に計測した帯域で一番帯域の狭い解析データを、フロー制御を受けたものとしてフィルタする。そして、帯域推定部125は、フィルタされた後残った複数の解析データを統計情報テーブル117へ加算する。その後、帯域推定部125は、加算された結果のパケット長およびパケット間の到着時刻間隔を用いて、ネットワーク帯域を推定すれば良い。
また、パケット解析装置1は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記したコネクション管理部123、連続パケット抽出部124および帯域推定部125などの各機能を搭載することによって実現することができる。
また、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、通信インタフェース122とコネクション管理部123とを1個の部として統合しても良い。一方、帯域推定部125を、連続パケットの個数分毎に別々に帯域を計測する計測部と、別々に計測された各帯域からフロー制御の影響を受けた方の帯域を特定する影響特定部を分散しても良い。また、コネクション管理テーブル111、解析情報テーブル112および統計情報テーブル117をパケット解析装置1の外部装置としてネットワーク経由で接続するようにしても良い。
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図1に示したパケット解析装置1と同様の機能を実現するパケット解析プログラムを実行するコンピュータの一例を説明する。図20は、パケット解析プログラムを実行するコンピュータの一例を示す図である。
図20に示すように、コンピュータ200は、各種演算処理を実行するCPU203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209を制御する表示制御部207とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信制御部217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD205を有する。そして、メモリ201、CPU203、HDD205、表示制御部207、ドライブ装置213、入力装置215、通信制御部217は、バス219で接続されている。
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、パケット解析プログラム205aおよびパケット解析関連情報205bを記憶する。
CPU203は、パケット解析プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスは、パケット解析装置1の各機能部に対応する。パケット解析関連情報205bは、コネクション管理テーブル111、解析情報テーブル112、統計情報テーブル117に対応する。そして、例えばリムーバブルディスク211が、パケット解析プログラム205aなどの各情報を記憶する。
なお、パケット解析プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらからパケット解析プログラム205aを読み出して実行するようにしても良い。