以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のパケット抽出装置を示す図である。第1の実施の形態の情報処理システムは、パケット抽出装置1、送信元装置2、宛先装置3およびアクセスポイント4を含む。パケット抽出装置1、送信元装置2およびアクセスポイント4は、ネットワーク5に接続されている。送信元装置2および宛先装置3は、例えばコンピュータなどの情報処理装置である。アクセスポイント4は、例えば無線基地局である。また、ネットワーク5は有線ネットワークである。宛先装置3とアクセスポイント4との間の区間は無線区間である。送信元装置2および宛先装置3は、アクセスポイント4およびネットワーク5を介してデータ通信を行える。送信元装置2と宛先装置3との間の通信プロトコルには、TCP/IPが用いられる。
パケット抽出装置1は、ネットワーク5を経由して送受信されるパケットを収集し、収集したパケットに基づいて通信品質の監視を行う。例えば、パケット抽出装置1は、ネットワーク5においてパケットを中継する中継装置やタップに接続される。中継装置やタップは、送信元装置2および宛先装置3の間で送受信されるパケットを複製して、パケット抽出装置1にも送信する。パケット抽出装置1は、当該複製されたパケットを受信することで、パケットの収集を行える。
パケット抽出装置1が収集するパケットには、送信元装置2が宛先装置3に対して送信するデータパケット、および、宛先装置3が送信元装置2に対して送信する受信確認応答パケット(ACKパケット)が含まれる。パケット抽出装置1は、宛先装置や送信元装置が複数ある場合でも、パケットに含まれる送信元装置2のIPアドレスおよび宛先装置3のIPアドレスに基づいて送信元装置2と宛先装置3とで送受信されるパケットを区別できる。IPアドレスに加え、パケットに含まれるポート番号の組み合わせも考慮することで、両装置で実行されるアプリケーションの組み合わせを識別することもできる。送信元装置2および宛先装置3の間で、アプリケーションの当該組み合わせにより専有される論理的な通信路をコネクションと称することがある。
パケット抽出装置1は、送信元装置2により送信されたデータパケットの受信時刻および当該データパケットに対して宛先装置3により送信されたACKパケットの受信時刻に基づいて往復遅延時間(RTT)を計測する。パケット抽出装置1は、送信元装置2および宛先装置3の通信品質の評価に、計測したRTTを用いる。パケット抽出装置1は、パケットに含まれるTCPヘッダのシーケンス番号やデータ長に基づいて、1または複数のデータパケットに対応するACKパケットを特定できる。
ここで、ACKパケットによる応答の方法として遅延ACKが用いられることがある。具体的には、ある期間(例えば、通信の開始直後の期間など)では、宛先装置3は、遅延ACKではなく通常のACK応答(1つのデータパケットの受信に対して返されるACK応答)を返し、別の期間では、遅延ACKによるACK応答を返す場合がある。その場合、パケット抽出装置1により収集されたACKパケットには、次のものが含まれる。
第1には、遅延ACKを用いていない期間のACKパケット(1つのデータパケットに対し1つのACKパケットが応答されたもの)である(第1のケースのACKパケットと称する)。第2には、遅延ACKを用いている期間において、2以上の所定数のデータパケットの受信に対して応答されたACKパケットである。第3には、遅延ACKを用いている期間において、データパケットの受信が所定数に達する前にタイムアウトして応答されたACKパケットである(第3のケースのACKパケットと称する)。第3のケースのACKパケットには、1つのデータパケットの受信後に、タイムアウトして応答された1つのACKパケットも含まれることになる。
このため、パケット抽出装置1が、TCPヘッダのシーケンス番号およびデータ長により、1つのデータパケットに対して応答された1つのACKパケットを特定すると、第1および第3のケースのACKパケットの両方を特定する可能性がある。したがって、パケット抽出装置1が、収集したパケットから、単純に1つのデータパケットに対して返された1つのACKパケットを抽出してRTTを計算すると、RTTにタイムアウトの影響が含まれてしまい、RTTの算出精度が悪化するおそれがある。遅延ACKのタイムアウトは、宛先装置3における待機時間に起因するものであり、ネットワークの伝送路における遅延とは無関係の要因だからである。すなわち、ネットワークの伝送路を要因とする遅延を監視するには、遅延ACKのタイムアウト分を含まないRTTの計測を行うことが好ましい。
そこで、パケット抽出装置1は、次のようにRTTの算出に用いるACKパケットの情報を抽出する。パケット抽出装置1は、記憶部1a,1bおよび演算部1cを有する。
記憶部1a,1bは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性記憶装置でもよい。記憶部1a,1bは、1つの揮発性記憶装置または不揮発性記憶装置に設けられた2つの記憶領域により実現されてもよい。演算部1cは、例えば、プロセッサを含む。プロセッサは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)でもよいし、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路でもよい。また、プロセッサは、複数のプロセッサの集合(マルチプロセッサ)でもよい。プロセッサは、例えば、記憶部1aに記憶されたプログラムを実行するものでもよい。
記憶部1aは、送信元装置2から宛先装置3へ送られたデータパケットに含まれるシーケンス番号とデータパケットを受信した時刻とを対応付けて記憶する。記憶部1bは、宛先装置3から送信元装置2へ返されたACKパケットのACK番号、ウィンドウサイズおよびACKパケットを受信した時刻を対応付けて記憶する。
演算部1cは、送信元装置2から宛先装置3へ送られたデータパケットを受信すると、当該データパケットに含まれるシーケンス番号とデータパケットの受信時刻とを対応付けて記憶部1aに格納する。例えば、演算部1cは、データパケット6を受信すると、データパケット6に含まれるシーケンス番号(Seq)“200”とデータパケット6の受信時刻とを対応付けて記憶部1aに格納する。データパケット6のTCPデータ長(Len)は、“10”であるとする。演算部1cは、データパケット7を受信すると、データパケット7に含まれるシーケンス番号“210”とデータパケット7の受信時刻とを対応付けて記憶部1aに格納する。
演算部1cは、宛先装置3から送信元装置2へ返されたACKパケットを受信すると、当該ACKパケットのACK番号、ウィンドウサイズおよびACKパケットの受信時刻を対応付けて記憶部1bに格納する。ここで、ウィンドウサイズは、送信元装置2が、宛先装置3からのACKパケットを待たずに送信可能なデータサイズである。宛先装置3は、ACKパケットにウィンドウサイズの設定値を含めて送信元装置2へ送信する。ウィンドウサイズは、RWIN(Receive WINdow size)とも呼ばれる。例えば、演算部1cは、ACKパケット8を受信すると、ACKパケット8に含まれるACK番号(ACK)“210”、ウィンドウサイズ(WS)“100”およびACKパケット8の受信時刻を対応付けて記憶部1bに格納する。演算部1cは、ACKパケット9を受信すると、ACKパケット9に含まれるACK番号“220”、ウィンドウサイズ“150”およびACKパケット9の受信時刻を対応付けて記憶部1bに格納する。
演算部1cは、記憶部1a,1bを参照して、取得したACKパケットのうち、第1ACKパケットが1つの第1データパケットに対して返されたACKパケットであることを判定する。ここで、あるデータパケットのシーケンス番号と当該データパケットのサイズとの和は、当該データパケットに対するACKパケットのACK番号に一致する。このため、例えば、演算部1cは、取得したデータパケットのうち、シーケンス番号にサイズを加算した値が第1ACKパケットのACK番号に一致するデータパケットを検索し、当該データパケットを第1ACKパケットに対応する第1データパケットと判定する。すなわち、第1ACKパケットは第1データパケットに対する応答である。
このとき、第1データパケットのシーケンス番号に一致するACK番号である第2ACKパケットがあれば、第1ACKパケットは1つの第1データパケットに対して返されたACKパケットであると考えられる。第1ACKパケットのACK番号は第2ACKパケットのACK番号に対して、1つの第1データパケットのサイズ分だけ加算されていることになるからである。第1ACKパケットとのACK番号の差が、第1データパケットのサイズに一致する第2ACKパケットがある場合に、第1ACKパケットは1つの第1データパケットに対して返されたACKパケットであるということもできる。
例えば、ACKパケット9に着目するとき、データパケット7のシーケンス番号“210”とサイズ“10”とを加算した値“220”は、ACKパケット9のACK番号“220”に一致する。よって、ACKパケット9(第1ACKパケットに相当)に対応するデータパケットは、データパケット7(第1データパケットに相当)である。そして、演算部1cは、データパケット7のシーケンス番号“210”に一致するACK番号“210”であるACKパケット8(第2ACKパケットに相当)を特定する。あるいは、演算部1cは、ACKパケット9とのACK番号の差がデータパケット7のサイズ“10”に一致するACKパケットとして、ACKパケット8を特定してもよい。ACKパケット8が存在するので、ACKパケット9は、1つのデータパケット7に対して返されたACKパケットである。
演算部1cは、第1ACKパケットが1つのデータパケットに対して返されたACKパケットであるときに、第1ACKパケットの直前に取得した第2ACKパケットに含まれるウィンドウサイズと第1ACKパケットに含まれるウィンドウサイズとに基づいて、第1ACKパケットの受信時刻でRTTを算出可能か否かを判定する。例えば、上記のように宛先装置3がアクセスポイント4と無線通信を行う場合、第1ACKパケットに含まれるウィンドウサイズが第2ACKパケットに含まれるウィンドウサイズ以上のときに第1ACKパケットの受信時刻でRTTを算出可能と判定する。一方、演算部1cは、第1ACKパケットに含まれるウィンドウサイズが第2ACKパケットに含まれるウィンドウサイズ未満のときに当該第1ACKパケットの受信時刻でRTTを算出しないと判定する。RTT算出可否の判定にウィンドウサイズを用いる理由は次の通りである。
無線通信を行う宛先装置3では、最初は小さなウィンドウサイズを使用して、徐々にウィンドウサイズを大きくするよう制御することがある。無線区間は、有線区間に比べて低速かつ不安定なことがあり、通信速度の立ち上がりを比較的緩やかにすることで、無線区間で利用可能な通信量に比べて送信元装置2が過剰にデータパケットを送信するのを抑制するためである。また、無線区間は有線区間に比べて通信速度が小さく、データパケット6,7が宛先装置3に順次到着したときの到着時刻の間隔は、データパケット6,7がアクセスポイント4に順次到着したときの到着時刻の間隔よりも大きくなる。このため、ウィンドウサイズが比較的小さい段階で(ウィンドウサイズを大きくできるにも関わらず)遅延ACKを使用すると、宛先装置3で次のデータパケットの到着をタイムアウト時間まで待機することによってACK応答までの遅延が増加したときに、逆にネットワークの利用効率が悪くなるおそれがある。
したがって、ウィンドウサイズを大きくできるときには、遅延ACKを用いるよりも、1つのデータパケットに対して1つのACKパケットを応答する方がネットワークの利用効率がよいと考えられる。このような理由から、宛先装置3は、ウィンドウサイズを大きくできる期間では、遅延ACKを用いずに、1つのデータパケットに対して1つのACKパケットを応答することがある。よって、第1ACKパケットが1つのデータパケットに対して返されたACKパケットであり、かつ、第1ACKパケットに含まれるウィンドウサイズが第2ACKパケットに含まれるウィンドウサイズ以上のとき、第1ACKパケットは遅延ACKによるものではないと推定できる。
より具体的には、ACKパケット9(第1ACKパケットに相当)に含まれるウィンドウサイズ“150”は、ACKパケット8(第2ACKパケットに相当)に含まれるウィンドウサイズ“100”よりも大きい。この場合、ACKパケット9は、遅延ACKによるACK応答ではないと判断できる。よって、演算部1cは、ACKパケット9の受信時刻でRTTを算出可能であると判定する。
演算部1cは、第1ACKパケットの受信時刻でRTTを算出可能な場合、当該受信時刻により算出されたRTTを出力する。例えば、演算部1cは、データパケット7の受信時刻とACKパケット9の受信時刻との差をRTTとして算出し、出力する。図1では、送信元装置2がデータパケット7を送信した時刻とACKパケット9を受信した時刻との差(送信元装置2における時間差)をRTTとして示している。パケット抽出装置1がネットワーク5における送信元装置2の近傍に設けられているとき、送信元装置2における当該時間差と、パケット抽出装置1が計測するRTTとは、ほぼ一致すると考えてよい。
このように、パケット抽出装置1は、収集したACKパケットのウィンドウサイズに基づく判定を行うことで、1つのデータパケットに対して応答されたACKパケットの中から、遅延ACKによるACKパケット以外のACKパケットを抽出できる。これにより、1つのデータパケットに対して応答されたACKパケットの中からRTTの算出に利用可能なパケットを抽出できる。
また、パケット抽出装置1は、遅延ACKによるタイムアウトの影響を含むACKパケットを用いずにRTTを算出することで、RTTの計測精度を向上できる。RTTは、ネットワーク品質を示す指標として用いられる。したがって、RTT計測精度が向上することで、ネットワーク品質をより正確に推定可能となる。
更に、遅延ACKが常に利用されていることが明らかであれば、例えば、特開2009−303089号公報の方法を用いて、遅延ACKのタイムアウトの影響を受けないようRTTを計測することも考えられる。具体的には、遅延ACKで2つのデータに対して1つのACKパケットが返される場合、2つのデータに対して返されたACKパケットのみを用いてRTTを計測し、1つのデータパケットに対して返されたACKパケットのRTTを計測しないようにする。しかし、宛先装置3のように、遅延ACKの利用/非利用を切り替える装置に対してこの方法を適用すると、収集したパケットから遅延ACK非利用時のRTTを計測できなくなってしまう。
これに対し、パケット抽出装置1によれば、宛先装置3のように遅延ACKの利用/非利用を切り替える装置に対しても、遅延ACK非利用のときのRTTを、収集したパケットから計測できるようになり、RTTの計測機会を増やせる。その結果、RTTの変動を詳細に把握可能となり、ネットワークの監視をより詳細に行えるようになる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムの例を示す図である。第2の実施の形態の情報処理システムは、計測装置100、サーバ200および端末装置300,400を含む。サーバ200と端末装置300とは、ネットワーク10,20および基地局30を介して通信可能である。サーバ200と端末装置400とは、ネットワーク10,20およびルータ40を介して通信可能である。ネットワーク10は、例えばLAN(Local Area Network)である。ネットワーク20は、例えば、WAN(Wide Area Network)やインターネットなどである。
ネットワーク10は、ネットワーク20と接続されている。サーバ200は、ネットワーク10に接続されている。ネットワーク10には、タップ11が設けられている。タップ11は、計測装置100と接続されている。タップ11は、パケットを中継するとともに、中継するパケットを複製して計測装置100に送信する。所定のポートを通過するパケットを複製して他のポート(計測装置100が接続されたポート)からも出力する機能(ポートミラーリング機能と称することがある)を備えたスイッチなどを、タップ11の代わりに用いてもよい。
ネットワーク20は、基地局30およびルータ40と接続されている。ネットワーク20と基地局30との間には、移動通信用のネットワークが介在してもよい。ネットワーク20とルータ40との間には、ネットワーク10,20以外のネットワーク(LANやWANなど)が介在してもよい。
基地局30は、サーバ200と端末装置300との間の通信を中継する。基地局30と端末装置300との間の通信には、例えばHSDPA(High-Speed Downlink Packet Access)やLTE(Long Term Evolution)などが用いられる。ルータ40は、サーバ200と端末装置400との間の通信を中継する。基地局30と端末装置300との間の区間は、無線区間である。それ以外の装置間の区間はイーサネット(登録商標)による有線区間である。第2の実施の形態の情報処理システムのうち、サーバ200により近い側を上流側、端末装置300,400により近い側を下流側と称することがある。
計測装置100は、タップ11から受信したパケットを記憶し、解析するコンピュータである。計測装置100は、例えば、サーバ200に近い上流側でパッシブ計測(サーバとエンド端末との間で送受信される信号を観察し、その振る舞いからネットワークの品質などの指標を得る手法)を行う。計測装置100は、受信したパケットに基づいてRTTを計測し、ネットワークにおける通信品質の劣化の検出や通信品質の改善に役立てる。計測装置100は、第1の実施の形態で例示したパケット抽出装置1の一例である。
サーバ200は、端末装置300,400に所定のサービスを提供するサーバコンピュータである。端末装置300は、ユーザによって利用される、携帯電話機、スマートフォンまたはタブレット装置などの無線端末装置である。端末装置400は、ユーザによって利用されるクライアントコンピュータなどの端末装置である。サーバ200と端末装置300,400との間の通信にはTCP/IPが用いられる。
ここで、サーバ200が、ある端末装置からのACKパケットの応答を待たずに、当該端末装置に対して送信できるデータのサイズはウィンドウサイズと呼ばれ、当該端末装置300,400からサーバ200へ通知される。ウィンドウサイズは、ネットワーク利用効率に影響する。サーバ200と端末装置400との間のウィンドウサイズとネットワーク利用効率との関係を例示する。
図3は、ウィンドウサイズとネットワーク利用効率との関係の例を示す図である。なお、図3の例では、遅延ACK(Delayed ACK)を用いない場合を例示している。例えば、有線ネットワークのように比較的高速な伝送路では、ウィンドウサイズ(図中、WS(Window Sizeの略)と表記することがある)が大きいほど、ネットワーク利用効率は良くなる傾向にある。ウィンドウサイズが大きいほど、サーバ200が次のデータパケットを送信するまでに待機する平均の時間が低減するからである。ここで、ACKパケットとの対比が分かり易いよう、データパケットをDATAパケットと表記することがある。
例えば、ウィンドウサイズが1MSS(Maximum Segment Size)である場合(MSSの1倍)を考える。MSSは、1つのTCPセグメントに対して許容される最大のペイロードサイズである。この場合、サーバ200は、1つのDATAパケット(図中、DATAと表記することがある)を端末装置400に送信する。端末装置400は、当該1つのDATAパケットを受信すると、ACKパケットをサーバ200に送信する。サーバ200は、当該ACKパケット(図中、ACKと表記することがある)を受信すると、サーバ200は、次のDATAパケットを送信する。
一方、例えば、ウィンドウサイズが4MSS(MSSの4倍)であれば、サーバ200は、端末装置400からのACKパケットを待たずに4つのDATAパケットを送信できることになる。同様に、例えば、ウィンドウサイズが8MSS(MSSの8倍)であれば、サーバ200は、端末装置400からACKパケットを待たずに8つのDATAパケットを送信できることになる。
ただし、端末装置400が1つのDATAパケットを受信した後、直ちにACKパケットをサーバ200に返すと、現ウィンドウサイズよりも小さなウィンドウサイズをACKパケットに含めて応答する可能性がある。ACKパケットの送信時に、端末装置400で未処理のDATAパケットが端末装置400のバッファに残っている可能性があるためである。
そこで、遅延ACKが用いられる。端末装置400によるACK送信を遅らせることで、処理を終えていないDATAパケットが減少した状態(バッファの残容量が増えた状態)でACK送信でき、現ウィンドウサイズよりも小さなウィンドウサイズが指定される可能性を低減できるからである。また、ネットワーク10,20に流れるACKパケットの数も減らせる。
図4は、遅延ACKの例を示す図である。図4(A)は、複数のDATAパケットに対して、1つのACKパケットが返される場合を例示している。特に、図4(A)は、一例として、2つのDATAパケットに対して1つのACKパケットが返される場合である。サーバ200は、2つのDATAパケットを端末装置400に順次送信する。端末装置400は、2つのDATAパケットを順次受信する。端末装置400は、2つ目のDATAパケットを受信すると、ACKパケットをサーバ200に送信する。この場合、1つ目のDATAパケットが端末装置400に到着した時刻と2つ目のDATAパケットが端末装置400に到着した時刻との間の時間間隔が、端末装置400における遅延t1となる。
図4(B)は、タイムアウトして1つのACKパケットが返される場合を例示している。サーバ200は、1つのDATAパケットを端末装置400に送信する。端末装置400は、当該1つのDATAパケットを受信する。図4(B)の場合、端末装置400は、1つのDATAパケットを受信した後、2つ目のDATAパケットを受信しないまま、タイムアウト時間が経過したことを検出する。すると、端末装置400は、ACKパケットをサーバ200に送信する。この場合、タイムアウト時間が端末装置400における遅延t2となる。1つのDATAパケットに対して応答されたACKパケットを抽出してRTTを計算すると、遅延t2がRTTの計算結果に反映されてしまう。
遅延t2は、端末装置400における待機時間に起因するものであり、ネットワーク10,20における伝送路(スイッチなどを含む)とは無関係の要因である。このため、図4(B)のACKパケットで計測されるRTTは、ネットワークの監視用途には不適切である。
図4までは端末装置400について説明したが、端末装置300についても同様のことがいえる。ここで、端末装置400のように有線ネットワークに接続され、比較的高速に通信できる場合には、遅延ACKが主に用いられる。このため、サーバ200と端末装置400との間の通信に対しては、例えば、特開2009−303089号公報の方法を用いて、図4(A)に示す2つ目のDATAパケットとACKパケットとを抽出してRTTを計測することが考えられる。こうすれば、図4(B)の遅延ACKのタイムアウトの影響をRTTに含めなくて済む。
しかし、無線通信を行う端末(例えば、端末装置300)の場合、1つのコネクションの通信において、遅延ACKを利用しないこともあるし、遅延ACKを利用することもある。このため、特開2009−303089号公報の方法を用いて、サーバ200と端末装置300との間の通信におけるRTTを計測すると、RTTの計測機会が減少するおそれがある。具体的には、RTTを計測できない期間が生じたり、計測されるRTTのサンプル数が低減したりするおそれがある。すると、通信の監視を行えない期間が生じたり、RTTの計測精度が悪化したりする可能性がある。具体的には次の通りである。
図5は、RTTの例を示す図である。図5では、サーバ200と端末装置300との間の通信におけるRTTを例示する。図5(A)は、単純に1つのDATAパケットに対して返されたACKパケットに着目したときのRTTの計算結果の例である。計測装置100は、1つのACKパケットに対し、当該ACKパケットの受信時刻と当該ACKパケットに対応するDATAパケットの受信時刻とを用いて、1つのRTTを計算できる。
図5(A)の横軸は、パケット番号である。パケット番号は、端末装置300からのACKパケットが計測装置100に到着した順序を便宜的に示す番号であり、時間に相当すると考えてもよい。パケット番号が小さいACKパケットほど先に送信され、パケット番号が大きいACKパケットほど後に送信されたことを示す。図5(A)の縦軸はRTT(秒)である。
例えば、計算結果G1は、RTTの計算結果のうち、遅延ACKによるタイムアウト分を含まないものを示す。計算結果G2は、RTTの計算結果のうち、遅延ACKによるタイムアウト分を含むものを示す。計算結果G2は、遅延ACKのタイムアウト分を含むため、計算結果G1よりもRTTの値が大きく計算されてしまう。
図5(B)は、端末装置300が送信したACKパケットのACK番号の差とRTTとの関係の例である。図5(B)の横軸はパケット番号である。図5(B)の縦軸は、ACK番号の差(バイト)およびRTT(秒)である。
ACK番号の差は、端末装置300が順番に送信した2つのACKパケットに含まれるACK番号の差である。ACK番号の差は、当該2つのACKパケットのうち、1番目に到着したACKパケットと2番目に到着したACKパケットとの間にサーバ200が送信したデータのサイズ(TCPのペイロードサイズの合計)に相当する。
例えば、サーバ200が送信する1つのDATAパケットのMSSは、1394バイトである。この場合、ACK番号の差が1394バイトであれば、2つのACKパケットのうち、2番目に到着したACKパケットは、1つのDATAパケットに対して返されたACKパケットということになる。また、例えば、ACK番号の差が2788バイト(1394バイトの2倍)であれば、2番目に到着したACKパケットは、2つのDATAパケットに対して返されたACKパケットということになる。
図5(B)を参照すると、RTTの系列H1の期間と、RTTの系列H2の期間とで、ACK番号の差が異なっている。具体的には、系列H1の期間では、ACK番号の差が1394バイトである。系列H2の期間では、ACK番号の差が2788バイトである。すなわち、端末装置300によるACK応答の制御では、1つのDATAパケットに対してACKパケットを応答する期間もあるし、2つのDATAパケットに対してACKパケットを応答する期間(遅延ACKを用いる期間)もあることを示唆する。
このため、前述のように、特開2009−303089号公報の方法を用いて、サーバ200と端末装置300との間の通信におけるRTTを計測すると、RTTを計測できない期間(系列H1の期間)が生じ得る。すなわち、系列H1で示されるRTTを計測できないおそれがある。また、計測されるRTTのサンプル数が低減し、RTTの計測精度が悪化し得る。
ここで、遅延ACKのタイムアウト値が固定であれば、タイムアウト値に応じた遅延を含むACKパケットのRTTから、タイムアウト値を除去して、RTT(補正されたRTT)を計算することも考えられる。ところが、タイムアウト値は固定ではなく(例えば、OSなどのソフトウェアによって異なることもある)、当該タイムアウトの影響を除去してRTTを計測することは容易でない。
そこで、計測装置100は、サーバ200と端末装置300との間の通信におけるRTTをより詳細に計測可能にする機能を提供する。
図6は、計測装置のハードウェア例を示す図である。計測装置100は、プロセッサ101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、読み取り装置106および通信インタフェース107を有する。各ユニットは計測装置100のバスに接続されている。
プロセッサ101は、計測装置100の情報処理を制御する。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、計測装置100の主記憶装置である。RAM102は、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
HDD103は、計測装置100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、OSのプログラム、アプリケーションプログラム、および各種データを記憶する。計測装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、プロセッサ101からの命令に従って、計測装置100に接続されたディスプレイ12に画像を出力する。ディスプレイ12としては、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部105は、計測装置100に接続された入力デバイス13から入力信号を取得し、プロセッサ101に出力する。入力デバイス13としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
読み取り装置106は、記録媒体14に記録されたプログラムやデータを読み取る装置である。記録媒体14として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体14として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。読み取り装置106は、例えば、プロセッサ101からの命令に従って、記録媒体14から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
通信インタフェース107は、所定のケーブルを用いてタップ11に接続されている。通信インタフェース107は、サーバ200と端末装置300との間で送受信されるパケットやサーバ200と端末装置400との間で送受信されるパケットをタップ11から受信する。
サーバ200や端末装置300,400も計測装置100と同様のユニットを用いて実現できる。なお、ディスプレイ12や入力デバイス13を計測装置100に外付けするものとして例示したが、計測装置100、サーバ200および端末装置300,400は、ディスプレイや入力デバイスの少なくとも何れかを備えてもよい。また、端末装置300は、通信インタフェースとして、基地局30と通信する無線部を有する。
図7は、計測装置のソフトウェア例を示す図である。計測装置100は、記憶部110、受信部120、分類部130、DATAパケット処理部140、ACKパケット処理部150およびRTT算出部160を有する。記憶部110は、RAM102やHDD103に確保された記憶領域を用いて実現され得る。受信部120、分類部130、DATAパケット処理部140、ACKパケット処理部150およびRTT算出部160は、RAM102に記憶された所定のプログラムがプロセッサ101により実行されることで実現され得る。
記憶部110は、収集されたパケットの情報を記憶する。記憶部110は、収集されたパケットの情報に基づいて計算されたRTTの情報を記憶する。
受信部120は、タップ11から送信されたパケットを受信する。受信するパケットには、サーバ200が端末装置300に送信したDATAパケットや、端末装置300がサーバ200に送信したACKパケットが含まれる。
分類部130は、受信部120が受信したパケットを分類する。具体的には、分類部130は、パケットに含まれるヘッダ情報に基づき、解析対象となるパケットを抽出する。分類部130は、抽出したパケットのIPヘッダにおける送信元IPアドレスおよび宛先IPアドレスの組と、TCPヘッダにおける送信元ポート番号および宛先ポート番号の組とによりコネクションを特定する。例えば、記憶部110には、監視対象とするサーバ200および端末装置300,400のIPアドレスの情報が予め格納されている。また、記憶部110には、監視対象とする各アプリケーションが用いるポート番号の情報が予め格納されている。
分類部130は、解析対象のパケットにおけるTCPのペイロードサイズ(単にTCPペイロードサイズということがある)が0でないとき、当該パケットをDATAパケットであると判定し、当該DATAパケットの処理をDATAパケット処理部140に委譲する。分類部130は、TCPペイロードサイズが0のときに、当該パケットをACKパケットであると判定し、当該ACKパケットの処理をACKパケット処理部150に委譲する。
DATAパケット処理部140は、DATAパケットに対する処理を行う。DATAパケット処理部140は、記録部141を有する。記録部141は、DATAパケットの情報を、当該DATAパケットの受信時刻に対応付けて、記憶部110に格納する。DATAパケットの情報には、シーケンス番号とTCPペイロードサイズとが含まれる。
ACKパケット処理部150は、ACKパケットに対する処理を行う。ACKパケット処理部150は、記録部151、解析部152およびWS比較部153を有する。
記録部151は、ACKパケットの情報を、当該ACKパケットの受信時刻に対応付けて、記憶部110に格納する。ACKパケットの情報には、ACK番号とウィンドウサイズとが含まれる。
解析部152は、記憶部110に記憶されたDATAパケットおよびACKパケットの情報に基づいて、1つのDATAパケットに対して応答されたACKパケットを抽出する。解析部152は、第1のACKパケットのACK番号と第1のACKパケットよりも1つ前に受信した第2のACKパケットのACK番号との差分を求める。解析部152は、当該差分が、第1のACKパケットに対応するDATAパケットのサイズと同じであるときに、第1のパケットが1つのDATAパケットに対して応答されたACKパケットであると判定する。
WS比較部153は、1つのDATAパケットに対して応答された第1のACKパケットの第1のウィンドウサイズと、第1のACKパケットよりも1つ前に受信した第2のACKパケットの第2のウィンドウサイズとを比較する。WS比較部153は、当該比較結果に応じて、第1のACKパケットをRTTの計算に利用するか否かを判定する。
具体的には、WS比較部153は、第1のウィンドウサイズが、第2のウィンドウサイズ以上のときに、第1のACKパケットをRTTの計算に利用すると判定する。WS比較部153は、第1のウィンドウサイズが、第2のウィンドウサイズ未満のときに、第1のACKパケットをRTTの計算に利用しないと判定する。
RTT算出部160は、WS比較部153により、RTTの計算に利用すると判定されたACKパケットを用いて、RTTを算出する。具体的には、RTT算出部160は、当該ACKパケットの受信時刻と当該ACKパケットに対応するDATAパケットの受信時刻との差を、RTTとして算出する。RTT算出部160は、RTTの計算結果を出力する。例えば、RTT算出部160は、RTTの計算結果の情報を記憶部110に格納する。RTT算出部160は、RTTの計算結果をディスプレイ12に表示させてもよい。
図8は、ヘッダの例を示す図である。図8(A)はイーサネットヘッダの例である。図8(B)はIPヘッダの例である。図8(C)はTCPヘッダの例である。分類部130は、受信したパケットにおいて、イーサネットヘッダのタイプフィールドが“0800”であればIPv4(IP version 4)であり、IPヘッダのプロトコルフィールドが“6”であればTCPであると判定する。
また、分類部130は、IPヘッダに含まれる送信元/宛先IPアドレスと、TCPヘッダに含まれる送信元ポート番号/宛先ポート番号の組み合わせによって、コネクションを分類する。更に、TCPヘッダには、シーケンス番号、ACK番号およびウィンドウサイズなどの値が格納されるフィールドも含まれる。更に、TCPヘッダのコードビットのフィールドは、ACK番号に有効な値が格納されていることを示すACKフラグを含む。
なお、図8(B)ではIPv4のヘッダを例示したが、計測装置100は、IPv6のヘッダでも以降に示すIPv4と同様の制御を行える(例えば、IPv6ヘッダであっても送信元/宛先IPアドレスや上位プロトコルを識別する情報が含まれる)。
ところで、WS比較部153は、ウィンドウサイズに基づいて、RTTの計算に用いるACKパケットを判定するものとしたが、その理由は次の通りである。
図9は、有線端末の通信例を示す図である。図9は、サーバ200と端末装置400との通信例である。図9(A)は、遅延ACK未使用の場合を例示する。図9(B)は、遅延ACK使用の場合を例示する。図3でも述べたように、有線の伝送路は、無線の伝送路に比べて高速な通信が可能であり、通信開始当初から比較的大きなウィンドウサイズが用いられる。このため、遅延ACK未使用の場合、すぐにデータ処理を行えずに、端末装置400からサーバ200へ通知されるウィンドウサイズが減少していくおそれがある(図9(A))。図9(A)では、ウィンドウサイズ(WS)がWS=3,2,1,0と徐々に減少していく例を示している。
そこで、端末装置400は、遅延ACKを使用することで、データ処理を行ってからACK応答できる可能性が高まる。その結果、端末装置400からサーバ200へ通知されるウィンドウサイズが減少することを抑えられる(図9(B))。図9(B)では、2つのDATAパケットに対して1つのACKを応答することで、ウィンドウサイズ(WS)をWS=4,4と維持される例を示している。
このように、サーバ200と端末装置400との間の通信では、遅延ACKを用いる方が、1つのDATAパケットに対してACK応答するよりも効率がよい。
図10は、無線端末の通信例を示す図である。図10は、サーバ200と端末装置300との通信例である。図10(A)は、遅延ACK未使用の場合を例示する。図10(B)は、遅延ACK使用の場合を例示する。端末装置300では、例えば、端末装置300で実行されるOSにより、通信開始当初は小さなウィンドウサイズを使用し、徐々にウィンドウサイズを大きくするよう制御することがある。無線区間は、有線区間に比べて低速かつ不安定なことがあり、通信速度の立ち上がりを比較的緩やかにすることで、無線区間で利用可能な通信量に比べてサーバ200が過剰にDATAパケットを送信するのを抑制するためである。また、無線区間は、有線区間に比べて通信速度が小さく、複数のDATAパケットが端末装置300に順次到着したときの到着時刻の間隔は、当該複数のDATAパケットが基地局30に順次到着したときの到着時刻の間隔よりも大きくなる。このため、ウィンドウサイズが比較的小さい段階で(ウィンドウサイズを大きくできるにも関わらず)遅延ACKを使用すると、端末装置300で次のDATAパケットをタイムアウト時間まで待機することによって遅延が増加したときに、逆にネットワークの利用効率が悪くなるおそれがある(図10(B))。ここで、図10(B)の時間t3は、タイムアウトによる遅延分を示す。
したがって、ウィンドウサイズを大きくできるときには、遅延ACKを用いるよりも、1つのDATAパケットに対してACKパケットを応答する方がネットワークの利用効率がよいと考えられる。このような理由から、端末装置300は、ウィンドウサイズを大きくできる期間では、遅延ACKを用いずに、1つのDATAパケットに対してACKパケットを応答することがある(図10(A))。図10(A)では、端末装置300がサーバ200に対して、1つのDATAパケットを受信するたびにACKパケットを応答し、かつ、通知するウィンドウサイズ(WS)をWS=4,5,6,7,8と徐々に大きくしていく例を示している。
図11は、ウィンドウサイズの時間変化の例を示す図である。系列Kは、端末装置300がサーバ200に通知するウィンドウサイズの時間変化を示している。横軸はパケット番号である(前述のように時間に相当すると考えてよい)。系列Kに対する縦軸はバイトである(系列Kには、100000、200000、300000、400000、500000という目盛が対応する)。期間T1は、遅延ACKが用いられていない期間である。期間T1に続く期間T2は、遅延ACKが用いられている期間である。
図11のグラフでは、ACKパケットに対して計測されたRTTの例および1つ前のACKパケットとのACK番号の差の例も示されている。RTTに対する縦軸は、秒である。ACK番号の差に対する縦軸は、バイトである(ACK番号の差には、1394、2788、4182、5576、6970、8364という目盛が対応する)。
系列Kによれば、端末装置300のACK応答では、遅延ACKを用いずに、1つのDATAパケットに対してACKパケットを返す期間T1において、ウィンドウサイズを徐々に大きくしていくという特色が見られる。遅延ACKが用いられる期間T2では、ウィンドウサイズの変化はほとんど見られない。
計測装置100は、期間T1における、端末装置300のACK応答制御の特色を利用することで、1つのデータに対して応答されたACKパケットのうち、遅延ACKによるACKパケット以外のACKパケットを抽出する。
図12は、パケットテーブルの例を示す図である。パケットテーブル111は、計測装置100によって収集されるパケットの情報である。パケットテーブル111は、記憶部110に格納される。パケットテーブル111は、No.,TIME,SA(Source Address)、SP(Source Port)、DA(Destination Address)、DP(Destination Port)、Protocol、TCP LEN(Lengthの略)、IP LEN、seq(sequenceの略)、next seq、ack、RTTおよびWSの項目を含む。
No.の項目には、レコードを識別する番号が登録される。TIMEの項目には、該当のレコードに対応するパケットを受信した時刻が登録される。例えば、TIMEの項目には、年月日日時分秒の情報が登録されてもよい。SAの項目には、送信元IPアドレスが登録される。SPの項目には、送信元ポート番号が登録される。DAの項目には、宛先IPアドレスが登録される。DPの項目には、宛先ポート番号が登録される。Protocolの項目には、プロトコルの種別(例えば、TCPなど)が登録される。TCP LENの項目には、TCPペイロードサイズが登録される。IP LENの項目には、IPパケットのサイズが登録される。seqの項目には、シーケンス番号が登録される。next seqの項目には、ネクストシーケンス番号が登録される。ネクストシーケンス番号は、シーケンス番号にTCPペイロードサイズを加算した値となる。ackの項目には、ACK番号が登録される。RTTの項目には、RTTの計算結果が登録される。WSの項目には、ウィンドウサイズが登録される。なお、パケットテーブル111のうち、設定なしの欄には、ハイフン記号“−”を表記している。
ここで、IPアドレス“IP1”は、サーバ200のIPアドレスである。IPアドレス“IP2”は、端末装置300のIPアドレスである。ポート番号“a”は、サーバ200が端末装置300との通信に用いるポート番号である。ポート番号“b”は、端末装置300がサーバ200との通信に用いるポート番号である。
例えば、パケットテーブル111には、No.“9”、TIME“13:20:01.317465”、SA“IP1”、SP“a”、DA“IP2”、DP“b”、Protocol“TCP”、TCP LEN“1394”、IP LEN“1434”、seq“4183”、next seq“5577”、ack“479”、RTT“−”、WS“15744”という情報が登録される。このレコードは、サーバ200から端末装置300に対して送信されたDATAパケットに関する情報である。
また、パケットテーブル111には、No.“12”、TIME“13:20:01.314492”、SA“IP2”、SP“b”、DA“IP1”、DP“a”、Protocol“TCP”、TCP LEN“0”、IP LEN“40”、seq“479”、next seq“−”、ack“1395”、RTT“0.05354”、WS“17536”という情報が登録される。このレコードは、端末装置300からサーバ200に対して送信されたACKパケットに関する情報である。
図13は、パケットテーブルの例(続き)を示す図である。このように、記録部141,151は、DATAパケットおよびACKパケットの情報を、パケットテーブル111に記録する。ここで、以下の説明では、パケットテーブル111において、No.“X”(Xは任意の番号)のレコードで示されるパケットを指して、単に、No.Xのパケットというように表記することがある。
パケットテーブル111の例によれば、No.32のACKパケットに対応するDATAパケットは、No.15のDATAパケットであることが分かる。なぜなら、No.32のACKパケットのACK番号“11153”が、No.15のDATAパケットのネクストシーケンス番号“11153”(=当該DATAパケットのシーケンス番号“9759”+TCPペイロードサイズ“1394”)に一致するからである。
また、No.32のACKパケットは、No.15の1つのDATAパケットに対して応答されたものであることが分かる。なぜなら、No.32のACKパケットのACK番号“11153”と、No.32のACKパケットよりも1つ前に受信したNo.30のACKパケットのACK番号“9759”との差“11153−9759=1394”が、No.15のDATAパケットのTCPペイロードサイズ“1394”に一致するからである。
同様にして、あるACKパケットが複数のDATAパケットに対して応答されたものであることも判定できる。具体的には、着目するACKパケットのACK番号と、当該ACKパケットよりも1つ前のACKパケットのACK番号との差が、1つ前のACKパケットに対応するDATAパケットよりも後で、着目するACKパケットに対応するDATAパケットまでの複数個のDATAパケットのTCPペイロードサイズの合計に一致していれば、着目するACKパケットは複数個のDATAパケットに対して応答されたものであると判定できる。より具体的には、例えば、一連のDATAパケットのTCPペイロードサイズが“1394”である場合を考える。この場合、着目するACKパケットのACK番号と、当該ACKパケットよりも1つ前のACKパケットのACK番号との差が、“1394”のN倍(Nは2以上の整数)であれば、着目するACKパケットは、遅延ACKによりN個のDATAパケットに対して応答されたものであると判定できる。
更に、パケットテーブル111の例によれば、No.32のACKパケットにおけるウィンドウサイズ“38016”は、1つ前に受信したNo.30のACKパケットのウィンドウサイズ“35072”より大きいことも分かる。
図14は、出力例を示す図である。例えば、RTT算出部160は、1つのコネクションに対して1分間に計測したRTTの平均値を、RTTの計測結果として出力する。RTT算出部160は、図14の内容をディスプレイ12に表示させてもよい。ここで、図14の出力例において、各行の左側に付した番号は行番号である。
例えば、1行目は、出力日時“2013/7/16 13:21:00”である。2行目は、サーバ200のIPアドレス“IP1”である。3行目は、サーバ200が端末装置300との通信に用いるポート番号“a”である。4行目は、端末装置300のIPアドレス“IP2”である。5行目は、端末装置300がサーバ200との通信に用いるポート番号“b”である。6行目は、通信の開始日時“2013/7/16 13:20:12”である。7行目は、通信の終了日時“2013/7/16/ 13:20:44”である。図14の出力例によれば、RTTを得るための計測を2013年7月16日13時20分00秒から2013年7月16日13時20分59秒の1分間に行ったことになる。
8行目は、サーバ200が端末装置300に送信したDATAパケットに関するRTTの計測回数“221”である。9行目は、サーバ200が端末装置300に送信したDATAパケットに関するRTTの平均値“118387”である。ここで、図14の出力例では、RTTの単位はマイクロ秒である。10行目は、サーバ200が端末装置300に送信したRTTの標準偏差“50202”である。11行目は、サーバ200が端末装置300に送信したRTTの最小値“37070”である。12行目は、サーバ200が端末装置300に送信したRTTの最大値“254796”である。
13行目は、端末装置300がサーバ200に送信したDATAパケットに関するRTTの計測回数“2”である。14行目は、端末装置300がサーバ200に送信したDATAパケットに関するRTTの平均値“34”である。15行目は、端末装置300がサーバ200に送信したDATAパケットに関するRTTの標準偏差“2”である。16行目は、端末装置300がサーバ200に送信したDATAパケットに関するRTTの最小値“32”である。17行目は、端末装置300がサーバ200に送信したDATAパケットに関するRTTの最大値“36”である。
1分間に複数回計測されたRTTの平均を、RTTの計測結果として出力する例を示したが、ユーザは、平均化する単位を任意に決定可能である。例えば、RTT算出部160は、5分間や10分間など他の期間内に複数回計測されたRTTの平均を、RTTの計測結果として出力してもよい。RTT算出部160は、1つのACKパケットを単位にRTTを出力してもよいし、所定数回計測されたRTTの平均を、RTTの計測結果として出力してもよい。
次に、計測装置100によるRTTの計測の手順を説明する。
図15は、RTTの計測例を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。
(S11)受信部120は、タップ11からパケットを受信する。
(S12)分類部130は、受信したパケットに含まれるIPヘッダのプロトコルフィールドを参照して、受信したパケットのプロトコルの種別がTCPであるか否かを判定する。TCPである場合、処理をステップS13に進める。TCPでない場合、処理をステップS11に進める(受信したパケットを破棄してもよい)。IPヘッダのプロトコルフィールドが“6”であれば、TCPである。
(S13)分類部130は、受信したパケットをコネクション毎に分類する。具体的には、送信元/宛先IPアドレスと送信元/宛先ポート番号との組が同じであるパケット同士が同一コネクションのパケットである。
(S14)分類部130は、受信したパケットがDATAパケットであるか否かを判定する。DATAパケットである場合、処理をステップS15に進める。DATAパケットでない場合、処理をステップS16に進める。具体的には、分類部130は、受信したパケットにおけるTCPペイロードサイズが0でないときにDATAパケットであると判定する。
(S15)記録部141は、受信したDATAパケットの情報をパケットテーブル111に記録する。前述のように、記録されるDATAパケットの情報は、受信時刻、シーケンス番号、TCPペイロードサイズなどの情報を含む。そして、処理をステップS11に進める。
(S16)分類部130は、受信したパケットがACKパケットであるか否かを判定する。ACKパケットである場合、処理をステップS17に進める。ACKパケットでない場合、処理をステップS11に進める(受信したパケットを破棄してもよい)。例えば、分類部130は、TCPヘッダのACKフラグがオンであり、かつ、TCPペイロードサイズが0であるパケットをACKパケットであると判定する。
(S17)記録部151は、受信したACKパケットの情報をパケットテーブル111に記録する。前述のように、記録されるACKパケットの情報は、受信時刻、ACK番号、ウィンドウサイズの情報を含む。そして、処理をステップS18に進める。なお、記録部141,151は、ステップS13で分類されたコネクション毎に個別にパケットテーブルを作成してもよい。
(S18)解析部152は、今回受信した1つのACKパケットが、遅延ACKにより複数のDATAパケットに対して応答されたもの(複数DATA−1ACK)であるか否かを判定する。複数DATA−1ACKのACKパケットである場合、処理をステップS20に進める。複数DATA−1ACKのACKパケットでない、すなわち、今回受信した1つのACKパケットが1つのDATAパケットに対して応答されたもの(1DATA−1ACK)である場合、処理をステップS19に進める。解析部152は、図13で例示したように、パケットテーブル111に記録された情報に基づいて、ステップS18の判定を行える。具体的には、解析部152は、今回受信したACKパケットのACK番号と1つ前のACKパケットのACK番号との差、および、両ACKパケットの間に受信されたDATAパケットのTCPペイロードサイズとを比較する。ACK番号の差がTCPペイロードサイズに等しければ、1DATA−1ACKのACKパケットである。ACK番号の差がTCPペイロードサイズのN倍(Nは2以上の整数)であれば、複数DATA−1ACKのACKパケットである。
(S19)WS比較部153は、今回受信したACKパケット(現在のACKパケット)のウィンドウサイズ(WS)が、1つ前のACKパケットのウィンドウサイズ(WS)以上か否かを判定する。現ACKパケットのWSが1つ前のACKパケットのWS以上の場合、今回受信したACKパケットをRTTの計算に利用すると決定し、処理をステップS20に進める。現ACKパケットのWSが1つ前のACPパケットのWS未満の場合、今回受信したACKパケットをRTTの計算に利用しないと決定し、処理をステップS11に進める。WS比較部153は、図13で例示したように、パケットテーブル111に記録された、今回受信したACKパケットのウィンドウサイズと1つ前のACKパケットのウィンドウサイズとを比較することで、ステップS19の判定を行える。
(S20)RTT算出部160は、今回受信したACKパケットを用いてRTTを計算する。ステップS18により、遅延ACKによる複数DATA−1ACKのACKパケットであると判定されている場合、該当の複数のDATAパケットのうち、最後のDATAパケットの受信時刻と今回のACKパケットの受信時刻との差をRTTとする。この方法について、例えば、前述の特開2009−303089号公報が参考になる。例えば、2DATA−1ACKのACKパケット(2つのDATAパケットに対して応答された1つのACKパケット)であれば、2番目のDATAパケットの受信時刻と当該ACKパケットの受信時刻との差をRTTとする。ステップS18,S19により、1DATA−1ACKのACKパケットであり、かつ、ウィンドウサイズが1つ前のACKパケットのウィンドウサイズ以上と判定されている場合、今回のACKパケットの受信時刻と、当該ACKパケットに対応するDATAパケットの受信時刻との差をRTTとする。RTT算出部160は、今回受信したACKパケットの受信時刻に対応付けて、計算したRTTをパケットテーブル111に登録する(当該ACKパケットのレコードにRTTの計測値が登録される)。RTT算出部160は、今回受信したACKパケットを用いて計算したRTTを、ディスプレイ12に出力してもよい。すなわち、RTT算出部160は、ディスプレイ12に当該RTTを表示させることで、今回計算したRTTをユーザに提示してもよい。
(S21)RTT算出部160は、RTTの集計期間が終了したか否かを判定する。集計期間が終了した場合、処理を終了する。集計期間が終了していない場合、処理をステップS11に進める。RTT算出部160は、パケットテーブル111に記録されたRTTに基づいて、集計期間におけるRTTの計測結果を出力する。例えば、1分間に複数回計測したRTTの平均を計測結果として出力してもよい。この場合、例えば、5分間計測したのであれば、最初の1分間、次の1分間、・・・というように、RTTの5つの平均値を計測結果として出力する。RTT算出部160は、例えば図14で例示した内容を、ユーザが特定のアプリケーションを用いて参照可能なデータとして、記憶部110に出力してもよい。あるいは、RTT算出部160は、ディスプレイ12に当該内容を出力して表示させてもよい。
ここで、計測装置100は、RTTの計測を開始する旨のユーザによる入力を受け付けて、図15の手順を開始してもよい。その際、計測装置100は、監視対象とするコネクションを指定する情報を当該入力とともに受け付けてもよい。その場合、ステップS20において、RTT算出部160は、指定されたコネクションに対してRTTが算出されることになる。また、ステップS21において、RTT算出部160は、指定されたコネクションが終了した場合に、RTTの集計期間が終了したと判定してもよい。
更に、ステップS19では、RTT算出部160は、現在のACKパケットのウィンドウサイズ(現WS)が1つ前のACKパケットのウィンドウサイズ(1つ前のWS)よりも大きいときに現ACKパケットをRTTの計算対象とし、現WSが1つ前のWS以下のときにRTTの計算対象としないと判定してもよい。
図16は、RTTの計測結果の例を示す図である。パケットテーブル111にRTTの計算結果が登録されることは、図12,図13でも例示した。パケットテーブル111aは、パケットテーブル111のうちRTTの計算に利用されたACKパケットのレコードを抜粋して例示している。また、パケットテーブル111aには、ACK差の項目を追記している。ACK差は、1つ前のACKパケットとのACK番号の差を示す。
例えば、No.30のACKパケットのレコードには、RTTの項目に“0.03978”秒という情報が登録されている。これは、パケットテーブル111におけるNo.14のDATAパケットの受信時刻“13:20:01.314598”と、No.30のACKパケットの受信時刻“13:20:01.354380”との時間差である。ただし、RTTは、小数点第6位で四捨五入した結果である(以下も同様)。
No.32のACKパケットのレコードには、RTTの項目に“0.04877”秒という情報が登録されている。これは、パケットテーブル111におけるNo.15のDATAパケットの受信時刻“13:20:01.314612”と、No.32のACKパケットの受信時刻“13:20:01.363385”との時間差である。
No.33のACKパケットのレコードには、RTTの項目に“0.04879”秒という情報が登録されている。これは、パケットテーブル111におけるNo.16のDATAパケットの受信時刻“13:20:01.314618”と、No.33のACKパケットの受信時刻“13:20:01.363403”との時間差である。
それ以外のNo.44までの各ACKパケットのレコードも同様にRTTの値が登録されている。ここで、パケットテーブル111aにおける、No.23,24,30,・・・,44の各ACKパケットのレコードでは、ACK差が何れも“1394”である。ACK差“1394”は、DATAパケットにおけるTCPペイロードサイズの1倍に一致する。したがって、No.23,24,30,・・・,44の各ACKパケットは、1つのDATAパケットに対して応答されたACKパケットである。
一方、パケットテーブル111aで例示されるNo.517,548,552,・・・,559のACKパケットのレコードでは、ACK差が何れも“2788”である。ACK差“2788”は、DATAパケットにおけるTCPペイロードサイズの2倍に一致する。したがって、No.517,548,552,・・・,559の各ACKパケットは、2つのDATAパケットに対して応答された1つのACKパケットである。計測装置100は、図15のステップS20で例示した方法により、2つのDATAパケットに対して応答された1つのACKパケットを用いてRTTを計測可能である。
このようにして、計測装置100は、1つのDATAパケットに対して応答された1つのACKパケットを抽出し、そのうち遅延ACKによるものではないACKパケットを選別して、RTTを計算する。また、複数のDATAパケットに対して応答された1つのACKパケットを特定した場合には、当該複数のDATAパケットのうち最後のDATAパケットと、当該ACKパケットとの受信時刻によりRTTを計算する。
これにより、サーバ200と端末装置300との通信において、遅延ACKが使用されない期間(図11の期間T1)、および、遅延ACKが使用される期間(図11の期間T2)の両方に対して、遅延ACKのタイムアウトの影響を軽減してRTTの計測を行える。例えば、特開2009−303089号公報の方法のみでは、RTTの計測機会が期間T2のみに限られてしまい、RTTの計測機会が減少してしまう。一方、計測装置100によれば、RTTの計測機会を増やせる。よって、RTTの変動などを各期間において詳細に把握することが可能となる。また、計測機会が増えることで、計測されるRTTのサンプル数も増えるので、RTTの計測に対する統計的な精度を向上させることができる。
上記の説明では、主に、サーバ200と端末装置300との通信におけるRTTの計測を例示した。一方、端末装置400も、ACK応答の制御において端末装置300と同様の挙動が見られる場合も、計測装置100の機能を用いることができる。すなわち、端末装置400も遅延ACK非利用期間と遅延ACK利用期間があり、遅延ACK非利用期間でウィンドウサイズを大きくしていく場合は、計測装置100によりRTT算出用のACKパケットを抽出することで、RTTの計測機会の減少を抑えられる。
なお、第1の実施の形態の情報処理は、演算部1cにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体14に記録できる。
例えば、プログラムを記録した記録媒体14を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体14に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) 送信元装置から宛先装置へ送られたデータパケットに含まれるシーケンス番号、前記データパケットのサイズおよび前記データパケットを受信した時刻を対応付けて記憶する第1記憶部と、
前記宛先装置から前記送信元装置へ返されたACKパケットのACK番号、ウィンドウサイズおよび前記ACKパケットを受信した時刻を対応付けて記憶する第2記憶部と、
前記第1記億部と前記第2記憶部を参照し、第1ACKパケットが1つの第1データパケットに対応するACKパケットであるときに、前記第1ACKパケットに含まれるウィンドウサイズと前記第1ACKパケットの直前に取得した第2ACKパケットのウィンドウサイズとに基づいて、前記第1ACKパケットの受信時刻で往復遅延時間を算出可能か否かを判定し、算出可能な場合、当該受信時刻により算出された往復遅延時間を出力する演算部と、
を有するパケット抽出装置。
(付記2) 前記演算部は、前記第1ACKパケットに含まれるウィンドウサイズが前記第2ACKパケットに含まれるウィンドウサイズ以上の場合に、前記第1ACKパケットの受信時刻で往復遅延時間を算出可能と判定する、付記1記載のパケット抽出装置。
(付記3) 前記演算部は、シーケンス番号にサイズを加算した値が前記第1ACKパケットのACK番号に一致するデータパケットを前記第1データパケットと判定し、前記第1データパケットのシーケンス番号に一致するACK番号の前記第2ACKパケットがある場合、前記第1ACKパケットが1つの前記第1データパケットに対応するACKパケットであると判定する、付記1または2記載のパケット抽出装置。
(付記4) 前記演算部は、前記第1ACKパケットよりも前に受信したACKパケットのうち、前記第1ACKパケットとの前記ACK番号の差が、前記第1データパケットのサイズに一致するACKパケットを前記第2ACKパケットと特定する、付記1乃至3の何れか1つに記載のパケット抽出装置。
(付記5) 前記演算部は、前記第1データパケットの受信時刻と前記第1ACKパケットの受信時刻とに基づいて、往復遅延時間を算出する、付記1乃至4の何れか1つに記載のパケット抽出装置。
(付記6) 前記演算部は、前記第1ACKパケットが複数のデータパケットに対して応答されたACKパケットであるときは、ウィンドウサイズに関わらず前記第1ACKパケットの受信時刻により算出された往復遅延時間を出力する、付記1乃至5の何れか1つに記載のパケット抽出装置。
(付記7) 前記送信元装置は、有線ネットワークに接続され、
前記宛先装置は、前記有線ネットワークに接続されたアクセスポイントと無線通信し、前記アクセスポイントを介して前記送信元装置と通信し、
前記第1および前記第2記憶部に記憶される前記データパケットおよび前記ACKパケットの情報は、前記有線ネットワークで収集された情報である、
付記1乃至6の何れか1つに記載のパケット抽出装置。
(付記8) コンピュータに、
送信元装置から宛先装置へ送られるデータパケットを受信し、受信した前記データパケットに含まれるシーケンス番号、前記データパケットのサイズおよび受信時刻を対応付けて第1記憶部に蓄積し、
前記宛先装置から前記送信元装置へ返されるACKパケットを受信し、受信した前記ACKパケットのACK番号、ウィンドウサイズおよび受信時刻を対応付けて第2記憶部に蓄積し、
受信した第1ACKパケットが1つの第1データパケットに対応するACKパケットであるときに、前記第1ACKパケットに含まれるウィンドウサイズと前記第1ACKパケットの直前に取得した第2ACKパケットのウィンドウサイズとに基づいて、前記第1ACKパケットの受信時刻で往復遅延時間を算出可能か否かを判定し、算出可能な場合、当該受信時刻により算出された往復遅延時間を出力する、
処理を実行させるパケット抽出プログラム。
(付記9) コンピュータが、
送信元装置から宛先装置へ送られるデータパケットを受信し、受信した前記データパケットに含まれるシーケンス番号、前記データパケットのサイズおよび受信時刻を対応付けて第1記憶部に蓄積し、
前記宛先装置から前記送信元装置へ返されるACKパケットを受信し、受信した前記ACKパケットのACK番号、ウィンドウサイズおよび受信時刻を対応付けて第2記憶部に蓄積し、
受信した第1ACKパケットが1つの第1データパケットに対応するACKパケットであるときに、前記第1ACKパケットに含まれるウィンドウサイズと前記第1ACKパケットの直前に取得した第2ACKパケットのウィンドウサイズとに基づいて、前記第1ACKパケットの受信時刻で往復遅延時間を算出可能か否かを判定し、算出可能な場合、当該受信時刻により算出された往復遅延時間を出力する、
パケット抽出方法。