以下、実施形態について、図面を参照しながら詳細に説明する。まず、実施形態の概要について図1を参照して説明する。次に、図2〜6を参照して、実施形態における、より具体的な動作シーケンスについて説明する。その後、装置の構成について図7〜8を参照して説明し、データの具体例について図9〜10を参照して説明する。さらに、図11〜14のフローチャートを参照して、実施形態のネットワーク監視装置が行う処理について説明する。最後に、他の実施形態についても説明する。
図1は、データパケットの再送と、キャプチャ過程でのデータパケットと確認応答(acknowledgment)パケットの順序逆転との判別について説明する図である。図1には、動作例E1とE2が例示されている。動作例E1は、データパケットの再送が起きる例であり、動作例E2は、キャプチャ過程でデータパケットと確認応答パケットの順序逆転が起きる例である。
パケットには、ペイロードとして送信対象のデータを含むデータパケットと、データパケットに対する確認応答である確認応答パケットがある。以下では確認応答パケットを「ACKパケット」ともいう。また、詳しくは後述するように、「ある1つのパケットが、データパケットでもあり、かつ、別のデータパケットに対するACKパケットでもある」という場合もある。
動作例E1とE2の詳細について説明する前に、まず、パケットキャプチャの概要について説明する。
図1において、第1の装置1はコンピュータであり、第2の装置2もコンピュータである。コンピュータの種類は、スマートフォン、タブレット端末、PC(Personal Computer)、ワークステーション、サーバなど、任意である。
第1の装置1と第2の装置2の間では、第1の通信プロトコルと、第1の通信プロトコルよりも上位の層で定義される第2の通信プロトコルにしたがって、個々のパケットが送受信される。
なお、ここでは、第2の通信プロトコルのPDU(Protocol Data Unit)をペイロードとして含む第1の通信プロトコルのPDUを、「パケット」と呼んでいる。以下の説明において、「パケット」という用語は、第1と第2の通信プロトコルを限定する趣旨のものではないし、第1と第2の通信プロトコルのレイヤを限定する趣旨のものでもない。
第1の通信プロトコルは、識別用の数値を各パケットに割り当てるが、コネクションレスな(connectionless)通信プロトコルである。より具体的には、識別用の数値は、複数のパケットの送信に応じて、シーケンシャルに変化する(換言すれば、単調増加または単調減少する)。第2の通信プロトコルは、具体的には、コネクション指向の(connection-oriented)通信プロトコルであり、再送手順を有する。ある観点によれば、第1の通信プロトコルはステートレスな(stateless)通信プロトコルであり、第2の通信プロトコルはステートフルな(stateful)通信プロトコルである。
以下では説明の便宜上、第2の通信プロトコルのPDUの中にデータペイロードが含まれるパケットを、「データパケット」ということにする。あるデータパケットが何らかの理由により再送される場合、元のデータパケットのコネクション上の順序と、元のデータパケットを再送するための再送データパケットのコネクション上の順序は、同じである。
しかし、再送データパケットに対して第1の通信プロトコルにより識別用に割り当てられる数値は、元のデータパケットに対して第1の通信プロトコルにより識別用に割り当てられる数値とは異なる。なぜなら、第1の通信プロトコルは、コネクション指向の第2の通信プロトコルよりも下位の層で定義される、コネクションレスなプロトコルだからである。詳しくは後述するように、本実施形態では、「第1の通信プロトコルにより識別用に割り当てられる数値が、コネクション上の順序(すなわちコネクション上のデータストリームにおける順序)とは独立している」という性質が利用される。
例えば、第1の通信プロトコルは、IP(Internet Protocol)であってもよく、より具体的には、IPバージョン4であってもよい。IPバージョン4のヘッダには、各パケットを識別するための数値であるID(identification)が含まれる。
また、第2の通信プロトコルは、例えば、TCP(Transmission Control Protocol)であってもよい。つまり、第1の装置1と第2の装置2の間で送受信される各パケットは、TCPセグメントをペイロードとして含むIPパケットであってもよい。
あるデータパケットが再送される場合、TCPコネクション上の順序(つまり、TCPコネクション上のデータストリームにおける順序)は、元のデータパケットと再送データパケットで同じである。しかし、元のデータパケットのIPヘッダ中のIDは、再送データパケットのIPヘッダ中のIDとは異なる。
さて、パケット解析装置3は、第1の装置1と第2の装置2の間で送受信される個々のパケットをキャプチャする。具体的には、パケット解析装置3は、第1の装置1と第2の装置2の間の通信路の途中に設けられる。第1の装置1から第2の装置2に向けて送信されたパケットは、通信路上の通過点4で取り出され、パケット解析装置3にキャプチャされる。第2の装置2から第1の装置1に向けて送信されたパケットは、通信路上の通過点5で取り出され、パケット解析装置3にキャプチャされる。
例えば、通過点4と5は、2つ以上のネットワークポートと1つ以上のミラーポートを有する1台のネットワーク装置(例えばスイッチやルータなど)における、ある2つのネットワークポートであってもよい。
この場合、第1の装置1から送信されたパケットは、通過点4に相当するネットワークポートで受信され、当該ネットワークポートからミラーポートに複製され、ミラーポートからパケット解析装置3に出力され、パケット解析装置3においてキャプチャされる。また、第1の装置1から送信されたパケットは、通過点4に相当するネットワークポートで受信された後、通過点5に相当するネットワークポートからも出力され、第2の装置2に向けて送信される。
同様に、第2の装置2から送信されたパケットは、通過点5に相当するネットワークポートで受信され、当該ネットワークポートからミラーポートに複製され、ミラーポートからパケット解析装置3に出力され、パケット解析装置3においてキャプチャされる。また、第2の装置2から送信されたパケットは、通過点5に相当するネットワークポートで受信された後、通過点4に相当するネットワークポートからも出力され、第1の装置1に向けて送信される。
なお、ネットワーク装置は、第1の装置1から受信したパケットと第2の装置2から受信したパケットの双方を、1つのミラーポートに複製してもよい。換言すれば、ネットワーク装置は、複数のネットワークポートで受信した複数のトラフィックを、1つのミラーポートに集約(aggregate)してもよい。この場合、パケット解析装置3は、当該1つのミラーポートと接続される。
あるいは、ネットワーク装置は、第1の装置1から受信したパケットを第1のミラーポートに複製し、第2の装置2から受信したパケットを第2のミラーポートに複製してもよい。この場合、パケット解析装置3は、第1と第2のミラーポートの双方と接続される。つまり、この場合、パケット解析装置3は、少なくとも2つの通信インタフェイスを有し、2つの通信インタフェイスを介して受信したパケットを記憶するための共通のバッファを有する。
別の例として、パケットのミラーリングを行うスイッチやルータなどの装置の代わりに、ネットワークタップが使われてもよい。ネットワークタップは、パケットの信号(具体的には電気信号または光信号)を物理層で分岐させる(split)。ネットワークタップも、ネットワーク装置の1種である。
例えば、通過点4と5は、2台のネットワークタップそれぞれの入力ポートであってもよい。そして、パケット解析装置3は、2つの通信インタフェイスを介して、それら2台のネットワークタップそれぞれのモニタポートと接続されていてもよい。この場合、パケット解析装置3は、2つの通信インタフェイスを介して受信したパケットを記憶するためのバッファを有する。
より具体的には、この場合、第1の装置1から送信されたパケットが、通過点4に相当する入力ポートで受信されると、パケットの信号は、物理層で電気的または光学的に分岐させられる。その結果、分岐した一方の信号は、ネットワークタップを通過して第2の装置2へと送信され、分岐した他方の信号は、ネットワークタップのモニタポートからパケット解析装置3に出力される。よって、パケット解析装置3は、第1の装置1から第2の装置2へ向けて送信されたパケットを、ネットワークタップを介してキャプチャすることができる。
同様に、第2の装置2から送信されたパケットが、通過点5に相当する入力ポートで受信されると、パケットの信号が分岐させられる。その結果、分岐した一方の信号は、ネットワークタップを通過して第1の装置1へと送信され、分岐した他方の信号は、ネットワークタップのモニタポートからパケット解析装置3に出力される。よって、パケット解析装置3は、第2の装置2から第1の装置1へ向けて送信されたパケットを、ネットワークタップを介してキャプチャすることができる。
また、ネットワークタップには様々な種類のものがある。例えば、通過点4と5は、複数の入力ポートと複数のモニタポートを有する1台のネットワークタップの2つの入力ポートであってもよい。この場合、パケット解析装置3は、少なくとも2つの通信インタフェイスを有し、2つの通信インタフェイスは、上記2つの入力ポートに対応する2つのモニタポートと接続される。また、パケット解析装置3は、2つの通信インタフェイスを介して受信したパケットを記憶するためのバッファを有する。
この場合、第1の装置1から送信されたパケットが、通過点4に相当する第1の入力ポートで受信されると、パケットの信号が分岐させられる。その結果、一方の信号は、ネットワークタップを通過して第2の装置2へと送信され、他方の信号は、第1の入力ポートに対応する第1のモニタポートから、パケット解析装置3に出力される。よって、パケット解析装置3は、第1の装置1から第2の装置2へ向けて送信されたパケットを、ネットワークタップの第1のモニタポートを介してキャプチャすることができる。
同様に、第2の装置2から送信されたパケットが、通過点5に相当する第2の入力ポートで受信されると、パケットの信号が分岐させられる。その結果、一方の信号は、ネットワークタップを通過して第1の装置1へと送信され、他方の信号は、第2の入力ポートに対応する第2のモニタポートからパケット解析装置3に出力される。よって、パケット解析装置3は、第2の装置2から第1の装置1へ向けて送信されたパケットを、ネットワークタップの第2のモニタポートを介してキャプチャすることができる。
あるいは、複数の入力ポートで受信した複数のトラフィックを1つのモニタポートに集約するタイプのネットワークタップが使われてもよい。この場合、パケット解析装置3は、上記1つのモニタポートに接続される。
この場合、第1の装置1から送信されたパケットが、通過点4に相当する第1の入力ポートで受信されると、パケットの信号が分岐させられる。その結果、一方の信号は、ネットワークタップを通過して第2の装置2へと送信され、他方の信号は、上記1つのモニタポートからパケット解析装置3に出力される。よって、パケット解析装置3は、第1の装置1から第2の装置2へ向けて送信されたパケットを、ネットワークタップを介してキャプチャすることができる。
同様に、第2の装置2から送信されたパケットが、通過点5に相当する第2の入力ポートで受信されると、ケットの信号が分岐させられる。その結果、一方の信号は、ネットワークタップを通過して第1の装置1へと送信され、他方の信号は、上記1つのモニタポートからパケット解析装置3に出力される。よって、パケット解析装置3は、第2の装置2から第1の装置1へ向けて送信されたパケットを、ネットワークタップを介してキャプチャすることができる。
上記のように、パケット解析装置3が具体的にどのようにしてパケットをキャプチャするかは、実施形態に応じて様々であってよい。いずれにせよ、パケット解析装置3は、第1の装置1と第2の装置2の間で送受信される個々のパケットを通信路上でキャプチャすることができる。
パケット解析装置3は、キャプチャしたパケットを適宜の目的に応じて解析する。例えば、第1の装置1と第2の装置2の間のネットワークの品質を監視するために、パケット解析装置3はパケットをキャプチャおよび解析してもよい。つまり、パケット解析装置3は、具体的にはネットワーク監視装置であってもよい。例えば、パケット解析装置3は、以下のような種々の回数を推定してもよい。
・第1の装置1と第2の装置2の間のネットワーク上でパケットが消失した回数(以下「ネットワークロス数」ともいう)。
・第1の装置1または第2の装置2からパケットが再送された回数(以下「再送回数」ともいう)。
・第1の装置1から第2の装置2へ、または第2の装置2から第1の装置1へ、パケットが成功裡に送信されたにもかかわらず、パケット解析装置3がパケットのキャプチャに失敗した回数(以下「キャプチャロス数」ともいう)。
しかしながら、発明者が研究したところ、「ある種の条件下では以下のような誤判断(misjudgment)が起こり得る」ということを突き止めた。
・キャプチャに失敗したパケットが実際には存在しないにもかかわらず、パケット解析の結果、「1つ以上のパケットのキャプチャが失敗した」と誤判断され得る。つまり、キャプチャロス数が過大に推定され得る。
・実際にはネットワーク上でパケットが再送されていないにもかかわらず、キャプチャされたあるパケットが、パケット解析の結果、「再送されたパケットだ」と誤判断され得る。つまり、再送回数が過大に推定され得る。また、場合によっては、再送の原因としてパケットの消失が想定されるため、ネットワークロス数も過大に推定され得る。
具体的には、ネットワーク管理者が経験的に予想するネットワークロス数および/または再送回数よりも多めにネットワークロス数および/または再送回数が検出される場合について、発明者は鋭意研究した。その結果、発明者は、上記のような誤判断が起こり得ることを突き止めた。
また、発明者は、上記のような誤判断が起こり得る条件についても検討した。その結果、発明者は、以下のような知見を得た。
・少なくとも以下の第1の条件が成り立つ(hold true)場合に、上記のような誤判断が起こり得る。
・さらに第2〜第5の条件のうち1つ以上が成り立つ場合に、上記のような誤判断がより起こりやすくなる。
・環境によっては、第1〜第5の条件がすべて成り立つ場合もあり、そのような場合には特に、上記のような誤判断が起こりやすい。
さて、第1の条件は、「2台の装置間の通信路上を、互いに逆向きの2つの方向に流れるパケットが、キャプチャ過程で1つのストリームに集約される」という条件である。より具体的には、第1の条件は、「2つの方向の間での順序関係が保存されることが保証されないやり方で、2つの方向に流れるパケットが、キャプチャ過程で1つのストリームに集約される」という条件である。例えば、以下のような場合はいずれも、この第1の条件が成り立つ。
・スイッチやルータなどのネットワーク装置の複数のネットワークポートで受信されたパケットが、1つのミラーポートに複製(つまりミラーリング)される場合。より具体的には、ネットワークポート間での受信順序は考慮されない(つまり、ミラーポートへの出力順序に関して、ネットワークポート間で受信順序に基づく調停は行われない)場合。
・ネットワークタップの複数の入力ポートで受信されたパケットが、1つのモニタポートに集約されて出力される場合。より具体的には、入力ポート間での受信順序は考慮されない(つまり、モニタポートへの出力順序に関して、入力ポート間で受信順序に基づく調停は行われない)場合。
・スイッチやルータなどのネットワーク装置が有する複数のミラーポート、または、ネットワークタップが有する複数のモニタポートからの出力が、1つの共通のバッファにキューイングされ(enqueued)、バッファからパケットが順にキャプチャされる場合。より具体的には、バッファへのパケットのキューイングの順序に関する複数のポート間での調停が行われない場合。
第2の条件は、スイッチやルータなどのネットワーク装置の処理能力が低い、という条件である。第2の条件は、ネットワークタップによる信号の分岐ではなく、ポートミラーリングが使われる場合に関連する条件である。
受動的な装置であるネットワークタップとは異なり、ポートミラーリング機能を有するネットワーク装置では、能動素子が使われる。つまり、ポートミラーリング機能を有するネットワーク装置では、汎用的なプロセッサまたはASIC(Application-Specific Integrated Circuit)などの回路が、物理層より上位の層でパケットを複製する処理を実行する。第2の条件は、より具体的には、「複製処理を行う回路の処理能力が低い」という条件である。
なお、ネットワーク装置の処理能力(より具体的には複製処理を行う回路の能力)が低いほど、ネットワークポートで受信されたパケットをミラーポートに複製するのにかかる時間も長い。つまり、第2の条件は、別の観点から換言すれば、パケットの複製にかかる時間が長い、という条件である。
第3の条件は、第1の装置1と第2の装置2の間のRTT(Round-Trip Time)が短い、という条件である。第3の条件は、別の観点から換言すれば、データパケットが送信されてからACKパケットが送信されるまでの時間が短い、という条件である。第3の条件が成り立つ場合、先に送信されたデータパケットが通過点4を通過してから、ACKパケットが通過点5を通過するまでの時間が短い。よって、データパケットとACKパケットがほぼ同時にキャプチャされる蓋然性も高く、そのため、キャプチャ過程での順序逆転も生じやすい。
第4の条件は、第1の装置1と第2の装置2の間で単位時間あたりに送受信されるデータパケットの数が多い、という条件である。より詳しくは、第4の条件は、第1の装置1から第2の装置2へ単位時間あたりに送受信されるデータパケットの数が多いか、または、第2の装置2から第1の装置1へ単位時間あたりに送受信されるデータパケットの数が多い、という条件である。
第5の条件は、個々のデータパケットのサイズが大きい、という条件である。例えば、大量のデータがバースト的に送信される場合には、第4の条件と第5の条件がともに成り立つことが多い。
なお、第2〜第5の条件に関しては、上記のとおり「処理能力が低い」・「時間が長い」・「RTTが短い」・「データパケットの数が多い」・「サイズが大きい」といった相対的な表現を用いて説明した。このように相対的な表現を用いた理由は2つある。
1つ目の理由は、第2〜第5の条件は、誤判断の起きやすさに影響する変数についての条件だからである。例えば、第2の条件を例にとって説明すると、ネットワーク装置の処理能力が低いほど、上記の誤判断が起きやすい。よって、誤判断が起きる確率についての許容範囲に応じて、望ましい処理能力も異なる。
2つ目の理由は、第2〜第5の条件が互いに関連しているからである。例えば、RTTとデータパケットのサイズが一定だとして、誤判断が起きる確率を許容範囲内に抑えるためには、単位時間あたりに送受信されるデータパケットの数に応じて、ネットワーク装置の望ましい処理能力も異なる。また、RTTの長さと複製処理にかかる時間の長さの組み合わせに応じて、誤判断が起きる確率も異なる。もちろん、これ以外の組み合わせでも、第2〜第5の条件は互いに関連している。
いずれにせよ、第1の条件が成り立つ場合には上記の誤判断が生じる可能性がある。そして、誤判断が生じる蓋然性は、第1の条件に加えて第2〜第5の条件がさらに成り立つ場合に高まる。本実施形態のパケット解析装置3は、1つの側面では、上記のごとき誤判断を減らすことでパケット解析の精度を高めることを目的とする。
具体的には、本実施形態のパケット解析装置3は、図1の動作例E1に示すような再送と、図1の動作例E2に示すような順序逆転を判別することで、上記のような誤判断を減らす。以下、動作例E1とE2について説明し、その後、パケット解析装置3がいかにして誤判断を避けるかについて説明する。
動作例E1では、データパケットD1が再送される。説明の便宜上、再送されたデータパケットD1を図1では「再送パケットR1」と示している。
動作例E1において、データパケットD1に先立つデータパケットD0は、ステップS11で第1の装置1から送信され、ステップS12において通過点4で複製されるかまたは分岐させられる。よって、データパケットD0は、ステップS13に示すように通過点5を通って第2の装置2に到達する一方で、時刻T1にパケット解析装置3によりキャプチャされる。
第2の装置2は、データパケットD0の受信に応じて、データパケットD0の受信を通知するためのACKパケットを送信してもよい。しかし、第2の装置2は、ACKパケットによる通信オーバヘッドを減らすために、ACKパケットの送信を遅延させてもよい。
例えば、第1の装置1と第2の装置2の間では、上記のとおり、第1の通信プロトコルとしてIPが利用されてもよく、第2の通信プロトコルとしてTCPが利用されてもよい。多くのTCPの実装では、遅延確認応答(delayed acknowledgement)と呼ばれる仕組みが実装されている。第2の装置2は、TCPの遅延確認応答の仕組みにしたがい、以下のいずれかの条件が成立するまで、データパケットD0に対するACKパケットの送信を遅延させてもよい。
・第2の装置2が第1の装置1からデータパケットD0の次のデータパケットを受信する。
・第2の装置2から第1の装置1に送信する新たなデータパケットが発生する。
・所定の時間(例えば200ミリ秒)が経過する。
図1の動作例E1では、データパケットD0の受信から所定の時間が経過するよりも前に、第2の装置2がデータパケットD1を受信するものとする。
具体的には、データパケットD1は、ステップS21において第1の装置1から送信され、ステップS22において通過点4で複製されるかまたは分岐させられる。データパケットD1は、通過点4から第2の装置2へ向けて送信され、ステップS23に示すように通過点5を通って、第2の装置2に到達する。このように、データパケットD1は、データパケットD0と同様に、成功裡に第2の装置2において受信される。
しかし、動作例E1では、パケット解析装置3は、データパケットD0のキャプチャには成功するが、データパケットD1のキャプチャには失敗してしまう。
例えば、ポートミラーリングにより通過点4でデータパケットD1が複製される場合、ミラーポート用に設けられたバッファがオーバフローする可能性がある。バッファオーバフローの結果として、データパケットD1がパケット解析装置3に到達しない可能性がある。
別の可能性として、複製されるかまたは分岐させられたデータパケットD1が、パケット解析装置3に成功裡に到達したにもかかわらず、パケット解析装置3においてデータパケットD1が消失してしまう(lost)可能性もある。例えば、パケット解析装置3の通信インタフェイスが備える受信バッファが、オーバフローする可能性もある。あるいは、パケット解析装置3は、上記のとおり、2つ以上の通信インタフェイスを介して受信したデータパケットをキューイングするための1つのバッファを有していてもよいが、当該バッファがオーバフローする可能性もある。
いずれにしろ、動作例E1では、何らかの理由によりデータパケットD1のキャプチャロスが生じる。他方、第2の装置2は、上記のとおりデータパケットD1を成功裡に受信している。したがって、第2の装置2は、ステップS31でACKパケットA1を送信する。ACKパケットA1は、第2の装置2がデータパケットD1を受信したことを示す。動作例E1の例では、ACKパケットA1は、第2の装置2がデータパケットD0を受信したことも示している。
もちろん、第2の装置2は、データパケットD0の受信に応じて不図示のACKパケットを送信し、データパケットD1の受信に応じてACKパケットA1を送信してもよい。以下の議論は、第2の装置2がデータパケットD0とD1それぞれに対してACKパケットを送信する場合にも、第2の装置2が遅延確認応答の仕組みにより、データパケットD1の受信まで待ってから1つのACKパケットA1を送信する場合にも、共通である。
第2の装置2から送信されたACKパケットA1は、ステップS32において通過点5で複製されるかまたは分岐させられる。よって、ACKパケットA1は、ステップS33に示すように通過点4を通って第1の装置1に到達する一方で、時刻T2にパケット解析装置3によりキャプチャされる。
ところで、上記のとおり第2の通信プロトコル(例えばTCP)は、コネクション指向のプロトコルであり、再送手順を有する。動作例E1では、第1の装置1は、ACKパケットA1を受信するよりも前にタイムアウトしてしまうものとする。なお、動作例E1ではACKパケットA1が第1の装置1に成功裡に到達しているが、ACKパケットA1が通過点4と第1の装置1の間の通信路上で消失してしまう場合も、同様に、第1の装置1がタイムアウトする。
ACKパケットA1の受信前にタイムアウトすると、第1の装置1は、ステップS41に示すように再送パケットR1を送信する。上記のとおり、再送パケットR1は、データパケットD1の再送用のデータパケットである。
再送パケットR1は、ステップS42において通過点4で複製されるかまたは分岐させられる。よって、再送パケットR1は、ステップS43に示すように通過点5を通って第2の装置2に到達する一方で、時刻T3にパケット解析装置3によりキャプチャされる。
なお、図1では、ACKパケットA1が再送パケットR1より先に通過点4を通過している。しかし、再送パケットR1がACKパケットA1より先に通過点4を通過する場合もあり得る。ACKパケットA1と再送パケットR1のどちらが先に通過点4を通過するかは、パケット解析装置3にとっては無関係である。また、ステップS41での再送パケットR1の送信は、タイムアウト以外の理由によるものであってもよい。
以上のように、動作例E1では、データパケットD1のキャプチャロスと再送が生じる。そして、動作例E1においては、パケット解析装置3は、以下の順に3つのパケットをキャプチャする。
・時刻T1にデータパケットD0をキャプチャする。
・次に、時刻T2にACKパケットA1(すなわち、パケット解析装置3がまだキャプチャしていないデータパケットに対するACKパケット)をキャプチャする。
・その次に、時刻T3に再送パケットR1をキャプチャする。
他方、動作例E2では、再送が生じない。代わりに、動作例E2では、データパケットD1がACKパケットA1より先に送信されるにもかかわらず、ACKパケットA1の方がデータパケットD1より先にパケット解析装置3にキャプチャされるという、順序の逆転が生じる。具体的には以下のとおりである。
動作例E2において、データパケットD1に先立つデータパケットD0は、ステップS51で第1の装置1から送信され、ステップS52において通過点4で複製されるかまたは分岐させられる。よって、データパケットD0は、ステップS53に示すように通過点5を通って第2の装置2に到達する一方で、時刻T4にパケット解析装置3にキャプチャされる。
第2の装置2は、データパケットD0の受信に応じてACKパケットを送信してもよい。しかし、動作例E1と同様に、第2の装置2は動作例E2でもACKパケットの送信を遅延させるものとする。以下の議論は、第2の装置2がデータパケットD0とD1それぞれに対してACKパケットを送信する場合にも、第2の装置2が遅延確認応答の仕組みにより、データパケットD1の受信まで待ってから1つのACKパケットA1を送信する場合にも、共通である。
また、データパケットD1は、ステップS61において第1の装置1から送信され、ステップS62において通過点4で複製されるかまたは分岐させられる。データパケットD1は、通過点4から第2の装置2へ向けて送信され、ステップS63に示すように通過点5を通って、第2の装置2に到達する。このように、データパケットD1は、データパケットD0と同様に、成功裡に第2の装置2において受信される。
一方、動作例E2では、動作例E1とは異なりキャプチャロスは生じず、パケット解析装置3は、データパケットD1のキャプチャにも成功するものとする。しかし、何らかの理由により、データパケットD1が通過点4を通過してからパケット解析装置3にキャプチャされるまでに比較的長い時間がかかってしまう場合がある。その結果、パケット解析装置3は、データパケットD1をキャプチャする前に、データパケットD1に対するACKパケットA1をキャプチャしてしまう可能性がある。具体的には、以下のとおりである。
第2の装置2は、データパケットD1の受信に応じて、ステップS71でACKパケットA1を送信し、ACKパケットA1は、ステップS72において通過点5で複製されるかまたは分岐させられる。よって、ACKパケットA1は、ステップS73に示すように通過点4を通って第1の装置1に到達する一方で、時刻T5にはパケット解析装置3によりキャプチャされる。そして、時刻T5よりも後の時刻T6になってからやっと、パケット解析装置3はデータパケットD1をキャプチャする。
以上のように、動作例E2では、データパケットD1とACKパケットA1の間で、送信順序とキャプチャ順序の逆転が生じる。つまり、先に送信されたデータパケットD1がACKパケットA1より遅くキャプチャされ、後から送信されたACKパケットA1がデータパケットD1より早くキャプチャされる。このような逆転が生じる場合、パケット解析装置3は、以下の順に3つのパケットをキャプチャする。
・時刻T4にデータパケットD0をキャプチャする。
・次に、時刻T5にACKパケットA1(すなわち、パケット解析装置3がまだキャプチャしていないデータパケットに対するACKパケット)をキャプチャする。
・その次に、時刻T6にデータパケットD1をキャプチャする。
ここで、パケット解析装置3に着目して動作例E1とE2を比較すると、動作例E1とE2は以下の2点で共通である。
第1の共通点は、パケット解析装置3が、パケット解析装置3自身はまだキャプチャしていないデータパケットに対するACKパケットをキャプチャする、という点である。具体的には、動作例E1では、パケット解析装置3は時刻T2でACKパケットA1をキャプチャし、動作例E2では、パケット解析装置3は時刻T5でACKパケットA1をキャプチャする。
第2の共通点は、第2の装置2がACKパケットA1の送信後、次に第1の装置1から受信することを期待しているデータパケットに先行するデータパケットを、パケット解析装置3は、ACKパケットA1のキャプチャ後にキャプチャする、という点である。つまり、第2の装置2にとってはACKパケットA1の送信前に受信済みのデータパケットを、パケット解析装置3は、ACKパケットA1をキャプチャしたよりも後になってからキャプチャする。具体的には、動作例E1では、パケット解析装置3は時刻T3で再送パケットR1をキャプチャし、動作例E2では、パケット解析装置3は時刻T6にデータパケットD1をキャプチャする。
なお、上記の「第2の装置2がACKパケットA1の送信後、次に第1の装置1から受信することを期待しているデータパケット」は、パケット解析装置3がキャプチャしたACKパケットA1に含まれる情報により指し示される。
ここで、動作例E1とE2のいずれにおいても、第2の装置2は、ACKパケットA1を送信するより前に既にデータパケットD1を受信していることに注意されたい。このことに注意すると、第2の装置2が第1の装置1から次に受信することを期待するデータパケットは、コネクション上の順序がデータパケットD1より後のデータパケットである。つまり、データパケットD1自体や、データパケットD1の再送用のパケットである再送パケットR1は、第2の装置2が第1の装置1から次に受信することを期待するデータパケットに対して、コネクション上の順序において先行するデータパケットである。
このように、パケット解析装置3が、まだキャプチャしていないデータパケットに対するACKパケットをキャプチャした後に、データパケットを受信する場合、後から受信したデータパケットが再送パケットである可能性がある。つまり、パケット解析装置3がACKパケットの後から受信したデータパケットが、第2の装置2が第1の装置1から次に受信することを期待するデータパケットに先行するデータパケットの場合、動作例E1のように、キャプチャロスと再送が生じた可能性がある。
しかし、動作例E2から分かるように、必ずしもいつもキャプチャロスと再送が生じているとは限らない。データパケットとACKパケットの間で、キャプチャ過程において順序逆転が生じている場合もあり得る。
よって、パケット解析装置3は、動作例E1のようにキャプチャロスと再送が生じた場合と、動作例E2のように順序逆転が生じた場合を正確に判別することが望ましい。正確な判別により誤判断が減る。そして、誤判断が減ると、例えば再送率やネットワークロス率などの、ネットワーク品質に関する指標の推定値の精度も向上する。
ところで、動作例E2のような順序逆転は、上記の第1の条件が成立する場合に起こり得る。また、第1の条件に加えて、第2〜第5の条件のうちの1つ以上がさらに成立する場合に、動作例E2のような順序逆転が特によく起こり得る。
例えば、第1の装置1と第2の装置2の間のRTTが短いと、通過点4に相当するネットワークポートからミラーポートへのデータパケットD1の複製が完了する前に、データパケットD1が第2の装置2に到着する可能性がある。さらに、ACKパケットA1が第2の装置2から送信され、通過点5に相当するネットワークポートからミラーポートへ複製されてもまだ、データパケットD1の複製が完了していない可能性もある。
例えば、第1の装置1と第2の装置2以外の不図示の第3の装置がさらに存在してもよく、第1の装置1と第3の装置との間のトラフィックも通過点4を通ってもよい。第1の装置1から第3の装置へのトラフィックが非常に多い場合、通過点4に相当するネットワークポートからミラーポートへ複製する対象のパケットが大量にバッファに溜る可能性がある。その結果、通過点4に相当するネットワークポートからミラーポートへの複製には、比較的長い時間がかかる可能性がある。他方、通過点5に相当するネットワークポートからミラーポートへの複製は、短時間で済んでしまうかもしれない。その結果、動作例E2のように、ACKパケットA1がデータパケットD1より先にパケット解析装置3にキャプチャされる可能性がある。
例えば、サイズの大きなデータパケットが、単位時間あたりに多数、第1の装置1から第2の装置2へと送信される場合も、上記例示の場合と同様、通過点4に相当するネットワークポートからミラーポートへのデータパケットの複製を行う回路の処理負荷は重い。よって、この場合、通過点4に相当するネットワークポートからミラーポートへのデータパケットの複製は遅延しがちである。また、複製処理を行う回路の処理能力が低い場合は特に、ミラーポートへのデータパケットの複製は大幅に遅延しがちである。このような遅延は、データパケットD1とACKパケットA1のキャプチャ順の逆転を招く一因である。
以上の例示から分かるように、第1の条件に加えて、第2〜第5の条件のうちの1つ以上がさらに成立する場合に、動作例E2のような順序逆転が特によく起こり得る。
ここで、仮に、動作例E1のようにキャプチャロスと再送が生じた場合と、動作例E2のように順序逆転が生じた場合が判別されないとすれば、動作例E2のような順序逆転も、誤って、「キャプチャロスおよび再送の発生」と判断されてしまうであろう。つまり、2つの場合を区別しないタイプのパケット解析装置が仮に使われるとすると、第1の条件が成立する環境(特に、第2〜第5の条件のうちの1つ以上がさらに成立する環境)において、誤判断の確率が高まってしまう。
本実施形態のパケット解析装置3は、そのような誤判断を減らすように工夫されたものである。本実施形態のパケット解析装置3によれば、動作例E1のようにキャプチャロスと再送が生じた場合と、動作例E2のように順序逆転が生じた場合が、満足のいく精度で判別され得る。なお、パケット解析装置3は、ASICなどの専用ハードウェア回路を用いて実現されてもよいが、プログラムを実行する汎用的なコンピュータにより実現されてもよい。
具体的には、パケット解析装置3は、以下のような処理を行うことで、動作例E1のようにキャプチャロスと再送が生じた場合と、動作例E2のように順序逆転が生じた場合を判別する。
あるACKパケットが、第1の装置1から送信された第1のデータパケットを第2の装置2が受信したことを示しており、かつ、第2の装置2から送信されるものとする。このようなACKパケットをパケット解析装置3がキャプチャしたとき、パケット解析装置3は、「上記第1のデータパケットをパケット解析装置3が既にキャプチャしているか否か」を判断する。パケット解析装置3には、このような判断を実行する第1の判断手段が含まれ、例えば後述の検出部44は、第1の判断手段の一例である。
例えば、動作例E1とE2のいずれにおいても、ACKパケットA1は、データパケットD1を第2の装置2が受信したことを示しており、かつ、第2の装置2から送信される。
よって、パケット解析装置3は、動作例E1の時刻T2においてACKパケットA1をキャプチャすると、「パケット解析装置3がデータパケットD1を既にキャプチャしているか否か」を判断する。その結果、パケット解析装置3は、「パケット解析装置3はまだデータパケットD1をキャプチャしていない」と判断する。
同様に、パケット解析装置3は、動作例E2の時刻T5においてACKパケットA1をキャプチャすると、「パケット解析装置3がデータパケットD1を既にキャプチャしているか否か」を判断する。その結果、パケット解析装置3は、「パケット解析装置3はまだデータパケットD1をキャプチャしていない」と判断する。
もちろん、以上のような判断の結果、パケット解析装置3が「パケット解析装置3は上記第1のデータパケットを既にキャプチャしていた」と判断する場合もあり得る。この場合は、パケット解析装置3は、単に、キャプチャ済みの第1のデータパケットに対するACKパケットを正常にキャプチャしただけである。つまり、この場合、第1のデータパケットと、それに対するACKパケットは、正常にネットワーク上を流れ、順にパケット解析装置3にキャプチャされる。
逆に、上記の判断の結果、パケット解析装置3が「パケット解析装置3はまだ上記第1のデータパケットをキャプチャしていなかった」と判断する場合もある。ここで、「ACKパケットがキャプチャされた」ということは、「第1のデータパケット自体は第1の装置1と第2の装置2の通信路上で消失していない」ということの証左である。なぜなら、パケット解析装置3がキャプチャしたACKパケットは、上記のとおり「第1の装置1から送信された第1のデータパケットを第2の装置2が受信した」と示しているからである。よって、この場合、以下の2通りの可能性が考えられる。
・例えば動作例E1のように、第1のデータパケット自体は第2の装置2に成功裡に到達したが、第1のデータパケットのキャプチャにパケット解析装置3が失敗した、という可能性(すなわち、第1のデータパケットのキャプチャロスが生じた、という可能性)。
・例えば動作例E2のように、第1のデータパケットとACKパケットの間で、キャプチャ過程において順序の逆転が生じているため、第1のデータパケットがまだパケット解析装置3にキャプチャされていない、という可能性。
そこで、パケット解析装置3は、上記2通りの可能性を判別するための処理を行う。具体的には、上記ACKパケットの受信に応じた上記の判断の結果、パケット解析装置3が、「パケット解析装置3はまだ上記第1のデータパケットをキャプチャしていなかった」と判断した場合、パケット解析装置3は以下のように動作する。
すなわち、パケット解析装置3は、第1の装置1から送信された第2のデータパケットを、上記判断のトリガとなった上記ACKパケットの後にさらにキャプチャしたとき、以下の第1の数値と第2の数値を比較する。パケット解析装置3には、このような比較を実行する比較手段が含まれ、例えば後述の検出部44は、比較手段の一例でもある。
第1の数値は、第2の通信プロトコルによる1つのコネクション上で、第2の装置2が第1の装置1から次に受信することを期待するデータパケットを識別するための数値であり、上記ACKパケットにより示される。また、第2の数値は、第2のデータパケットをコネクション上で識別するために第2のデータパケット自体に含められている。
例えば、動作例E1では、パケット解析装置3が、時刻T2にACKパケットA1をキャプチャした後に、時刻T3に再送パケットR1をキャプチャする。よって、動作例E1では、上記第2のデータパケットは、具体的には再送パケットR1である。
また、動作例E1では、第1の数値は、ACKパケットA1により示される数値である。より具体的には、動作例E1では、第1の数値は、第2の装置2が第1の装置1からデータパケットD1の次に受信することを期待するデータパケットを識別するための数値である。例えば、第2の通信プロトコルがTCPである場合、第1の数値は、ACKパケットA1のTCPヘッダ内のACK番号(acknowledgement number)であってもよい。
そして、動作例E1では、第2の数値は、再送パケットR1をコネクション上で識別するために再送パケットR1自体に含められている。ここで、上記のとおり、第2の通信プロトコルは、コネクション指向であり、再送手順を有する。そして、再送パケットR1は、再送手順にしたがって再送されたパケットであるから、再送パケットR1とデータパケットD1のペイロードは同じである。また、再送パケットR1は、再送手順にしたがって再送されたパケットであるから、再送パケットR1をコネクション上で識別するための第2の数値は、データパケットD1をコネクション上で識別するための数値と同じである。例えば、第2の通信プロトコルがTCPである場合、第2の数値は、再送パケットR1のTCPヘッダ内のシーケンス番号(sequence number)であってもよい。
このように、動作例E1では、再送パケットR1に含まれる第2の数値は、データパケットD1をコネクション上で識別するための数値と等しい。そのため、第2の数値が示す上記コネクション上の順序は、ACKパケットA1に含まれる第1の数値が示す順序よりも早い。
一方、動作例E2では、パケット解析装置3が、時刻T5にACKパケットA1をキャプチャした後に、時刻T6にデータパケットD1をキャプチャする。よって、動作例E2では、上記第2のデータパケットは、具体的にはデータパケットD1である。
動作例E2でも動作例E1と同様に、第1の数値は、第2の装置2が第1の装置1からデータパケットD1の次に受信することを期待するデータパケットを識別するための数値である。例えば、上記のとおり、第1の数値は、ACKパケットA1のTCPヘッダ内のACK番号であってもよい。
また、動作例E2では、第2の数値は、データパケットD1をコネクション上で識別するためにデータパケットD1自体に含められている数値である。例えば、第2の通信プロトコルがTCPである場合、第2の数値は、データパケットD1のTCPヘッダ内のシーケンス番号であってもよい。
以上より、動作例E2においても動作例E1と同様に、第2の数値が示す上記コネクション上の順序は、第1の数値が示す順序よりも早い。
ここで、動作例E1について説明したとおり、データパケットD1をコネクション上で識別する数値と、再送パケットR1をコネクション上で識別する数値は同じである。よって、以上のような第1の数値と第2の数値の比較だけでは、動作例E1のようにキャプチャロスと再送が起こる場合と、動作例E2のようにキャプチャ過程で順序逆転が起こる場合とが判別されない。
別の観点から述べれば、第2の通信プロトコル(例えばTCP)にしたがって、再送パケットR1にはデータパケットD1と同じ数値が割り当てられるからこそ、「再送パケットR1がデータパケットD1の再送である」ということが示される。その結果として、コネクション指向の通信が実現される。そのため、コネクション指向の第2の通信プロトコルで使われる制御情報(例えば第1の数値や第2の数値)を用いるだけでは、キャプチャロスと再送が起こる場合と、順序逆転が起こる場合とを判別するのには不十分なのである。
なお、比較の結果として、「第2の数値が示すコネクション上の順序と、第1の数値が示すコネクション上の順序が等しい」と判明する場合もあり得る。この場合は、期待どおりに後続のデータパケットが第2の装置2に向けて送信されており、通信状況は正常である。
また、第2の数値が示すコネクション上の順序の方が、第1の数値が示すコネクション上の順序より遅い場合もあり得る。この場合は、例えば、「期待される次のデータパケットのネットワークロスまたはキャプチャロスが生じ、次のデータパケットよりもさらに後のデータパケットがキャプチャされた」といった可能性がある。パケット解析装置3は、この種のネットワークロスまたはキャプチャロスを、例えば公知の手法に基づいて検出してもよい。
さて、上記のとおり、コネクション指向の第2の通信プロトコルで使われる情報を用いるだけでは、キャプチャロスと再送が起こる場合と、順序逆転が起こる場合とを判別するのに不十分である。そこで、パケット解析装置3は、これら2つの場合を判別するために、第1の通信プロトコルで使われる制御情報を利用する。
上記のように、第1の通信プロトコルは、第2の通信プロトコルよりも下位の層で定義されるコネクションレスなプロトコルである。よって、第2の通信プロトコルにより割り当てられる数値では区別されないデータパケットD1と再送パケットR1も、第1の通信プロトコルによる制御情報では区別され得る。
そこで、第2の数値が示すコネクション上の順序が、第1の数値が示すコネクション上の順序よりも早い場合、パケット解析装置3は、以下の第3の数値と第4の数値の差に基づく判断を行う。パケット解析装置3には、このような判断を実行する第2の判断手段も含まれ、例えば後述の検出部44は、第2の判断手段の一例でもある。
第3の数値は、第1の通信プロトコルにしたがって、第1の装置1により、上記第2のデータパケットに対して識別用に割り当てられている数値である。例えば、第1の通信プロトコルがIPバージョン4である場合、第3の数値は、キャプチャされた第2のデータパケットのIPヘッダ中のIDであってもよい。
また、説明の便宜上、第1の装置1から送信されて、上記ACKパケットよりも前にパケット解析装置3によりキャプチャされたデータパケットの中では、最も遅くパケット解析装置3にキャプチャされたデータパケットのことを、「前回データパケット」という。第4の数値は、前回データパケットに対して、第1の通信プロトコルにしたがって第1の装置1により識別用に割り当てられている数値である。例えば、第1の通信プロトコルがIPバージョン4である場合、第4の数値は、前回データパケットのIPヘッダ中のIDであってもよい。
つまり、第3の数値と第4の数値は、いずれも、コネクションレスな第1の通信プロトコルにしたがって割り当てられる識別番号である。換言すれば、第3の数値と第4の数値は、コネクション上のパケット間の順序とは独立に割り当てられる。
例えば、動作例E1では、第3の数値は、第2のデータパケットに相当する再送パケットR1(すなわち時刻T3にキャプチャされたデータパケット)に対して、第1の通信プロトコルにしたがって割り当てられている識別番号である。また、動作例E1では、前回データパケットは、時刻T2でのACKパケットA1のキャプチャの前にキャプチャされたデータパケット中の最後のものである。つまり、動作例E1での前回データパケットは、データパケットD0である。よって、動作例E1では、第4の数値は、データパケットD0に対して第1の通信プロトコルにしたがって割り当てられている識別番号である。
他方、動作例E2では、第3の数値は、第2のデータパケットに相当するデータパケットD1(すなわち時刻T6にキャプチャされたデータパケット)に対して、第1の通信プロトコルにしたがって割り当てられている識別番号である。また、動作例E2では、前回データパケットは、時刻T5でのACKパケットA1のキャプチャの前にキャプチャされたデータパケット中の最後のものである。つまり、動作例E2での前回データパケットは、データパケットD0である。よって、動作例E2では、第4の数値は、データパケットD0に対して第1の通信プロトコルにしたがって割り当てられている識別番号である。
ここで、動作例E1では、パケット解析装置3がデータパケットD0の次にキャプチャしたデータパケットは、再送パケットR1であるが、第1の装置1からは、実際には、データパケットD0と再送パケットR1の間に、データパケットD1が送信されている。つまり、動作例E1では、第1の装置1が第1の通信プロトコルにしたがって再送パケットR1に識別番号を割り当てる前に、少なくとも1つは、データパケットD1用に識別番号が消費されている。
そのため、動作例E1では、キャプチャされたデータパケットの中では、データパケットD0と再送パケットR1が、キャプチャ順において隣接するにもかかわらず、データパケットD0と再送パケットR1の識別番号は、隣接しない。換言すれば、動作例E1のようにキャプチャロスと再送が起きる場合は、第3の数値と第4の数値の差は、前回データパケットのキャプチャから上記ACKパケットのキャプチャまでの間に生じた、データパケットのキャプチャロスの回数よりも、大きい。
それに対し、動作例E2では、パケット解析装置3がデータパケットD0の次にキャプチャしたデータパケットは、データパケットD1であり、かつ、第1の装置1がデータパケットD0の次に送信したデータパケットも、データパケットD1である。よって、もし仮に、データパケットD0の送信からデータパケットD1の送信までの間には、第1の装置1がパケットを送信していなければ、データパケットD0とD1の識別番号は隣接する。
もちろん、第1の装置1は、データパケットD0の送信からデータパケットD1の送信までの間に、例えば以下に例示するような何らかのパケットを1つ以上送信する可能性がある。
・第2の通信プロトコルによる、第1の装置1と第2の装置2の間の他のコネクション上での、第2の装置2宛のパケット。
・第2の通信プロトコル以外のプロトコルによる、第2の装置2宛のパケット。
・第2の装置2以外の他の装置宛のパケット。
このように第1の装置1がデータパケットD0とD1の間に何らかのパケットを1つ以上送信する場合、第3の数値と第4の数値は隣接しない。つまり、この場合、第3の数値と第4の数値の差は、データパケットD0とD1の間に送信されたパケットの数に応じた値である。
しかし、第3の数値と第4の数値の差が大きければ、動作例E2のような順序逆転が起きた蓋然性よりも、動作例E1のようなキャプチャロスと再送が起きた蓋然性の方が高い。逆に、第3の数値と第4の数値の差が小さければ、キャプチャロスと再送が起きた蓋然性よりも、順序逆転が起きた蓋然性の方が高い。よって、パケット解析装置3は、第3の数値と第4の数値の差に基づく判断を行うことで、ある程度の高い信頼性をもって、2つの場合を判別することができる。
つまり、パケット解析装置3は、「キャプチャされた上記第2のデータパケットが、上記ACKパケットよりも遅れてパケット解析装置3にキャプチャされた上記第1のデータパケットであるのか否か」を、第3の数値と第4の数値の差に基づいて判断する。
例えば、動作例E2は、「第2のデータパケットとして時刻T6にキャプチャされたデータパケットD1が、実は第1のデータパケットに対するACKパケットA1よりも遅れてパケット解析装置3にキャプチャされた第1のデータパケットである」という例である。パケット解析装置3は、第3の数値と第4の数値の差に基づいて、「第2のデータパケットは、遅れてキャプチャされた第1のデータパケットである」と判断することができる。つまり、パケット解析装置3は、データパケットD1とD0の識別番号の差が小さいことから、「第2のデータパケットは、遅れてキャプチャされた第1のデータパケットである」と判断することができる。
他方、動作例E1では、第2のデータパケットとして時刻T3にキャプチャされた再送パケットR1は、第1のデータパケット(すなわち、第2の装置2において受信されたことがACKパケットA1により示されているデータパケットD1)そのものではない。パケット解析装置3は、第3の数値と第4の数値の差に基づいて、「第2のデータパケットは、遅れてキャプチャされた第1のデータパケットではない」と判断することも可能である。つまり、パケット解析装置3は、再送パケットR1の識別番号とデータパケットD0の識別番号の差が大きいことから、「第2のデータパケットは、遅れてキャプチャされた第1のデータパケットではない」と判断することができる。
なお、以上の説明においては、第3の数値と第4の数値の差に関して、「大きい」・「小さい」という相対的な表現を用いている。しかし、当該差に基づく判断は、具体的には、可変の閾値に基づく判断であることが好ましい。
より具体的には、第3の数値と第4の数値との差が閾値以下の場合に、パケット解析装置3は、「キャプチャされた第2のデータパケットは、実は、ACKパケットよりも遅れてキャプチャされた第1のデータパケットである」と判断してもよい。当該閾値は、具体的には、第1の数値と、前回データパケットをコネクション上で識別するために前回データパケットに含められている第5の数値に応じて決まる値である。
例えば、第2の通信プロトコルがTCPである場合、上記のとおり第1の数値はTCPヘッダ内のACK番号である。また、第5の数値は、前回データパケットのTCPヘッダ内のシーケンス番号である。上記閾値は、第1の数値としてのACK番号と第5の数値としてのシーケンス番号とに基づいて決められてもよい。
より好ましくは、上記閾値は、第1の数値と第5の数値だけでなく、さらに以下の2つの値にも基づいて決められてもよい。
・前回データパケットのサイズ(より詳しくは、前回データパケットのうち、第2の通信プロトコルにとってのペイロードのサイズ)。
・コネクション上で第1の装置1から第2の装置2へ送信される複数のデータパケットのサイズ(より詳しくは、データパケットのうち、第2の通信プロトコルにとってのペイロードのサイズ)に関する、サイズ値。
例えば、第2の通信プロトコルがTCPの場合、第5の数値と前回データパケットのサイズの和から、「コネクション上を流れるデータストリーム内のどのオクテットまでがキャプチャ済みか」という範囲が判明する。また、第2の通信プロトコルがTCPの場合、第1の数値は、ACKパケットにより示されるACK番号であり、第2の装置2が次に受信を期待するオクテットの位置を示す。よって、第1の数値と、第5の数値と、前回データパケットのサイズから、未キャプチャのオクテットの範囲も判明するし、未キャプチャのオクテット数も算出可能である。
上記閾値は、未キャプチャのオクテット数をサイズ値で割った商であってもよいし、その商を切り上げた整数であってもよい。例えば、サイズ値は、コネクション上で第1の装置1から第2の装置2へ送信される複数のデータパケットのサイズから得られる統計値であってもよい。より具体的には、サイズ値は、コネクション上で第1の装置1から第2の装置2へ送信される複数のデータパケットの中での相対比較において所定の基準以上に長いペイロード長であってもよい。
所定の基準は、例えば、「ペイロードが長い方から上位X1%以内の長さ」や「ペイロードが長い方から上位X2位以内の長さ」などの基準であってもよい(ただし、X1とX2は予め決められた値とする)。例えば、X2=1の場合、サイズ値は、コネクション上で第1の装置1から第2の装置2へ送信される複数のデータパケットの中で最長のペイロード長である。
パケット解析装置3は、実際にキャプチャした複数のデータパケットからサイズ値を求めてもよい。あるいは、データパケットの最長のペイロード長が、コネクションを確立する(establish)際のネゴシエーションにより(あるいは仕様により)予め決められている場合は、パケット解析装置3は、予め決められたサイズ値を利用してもよい。
例えば、TCPでは、コネクション確立の際にMSS(Maximum Segment Size)が決められる場合が多い。パケット解析装置3は、TCPヘッダのオプションフィールド中にMSSの指定を含むSYNパケットまたはSYN/ACKパケットをキャプチャすることにより、MSSを認識してもよい。パケット解析装置3は、認識したMSSをサイズ値として使ってもよい。
なお、サイズ値に関する上記の「複数のデータパケット」は、実施形態に応じて適宜決められてよい。例えば、「複数のデータパケット」は以下のどちらであってもよい。
・コネクションが確立してから今までに、コネクション上で第1の装置1から第2の装置2に送信され、かつ、パケット解析装置3がキャプチャに成功した、すべてのデータパケット。
・コネクション上で第1の装置1から第2の装置2に送信され、かつ、直近の所定期間以内(例えば、直近のX3分以内)にパケット解析装置3によりキャプチャされた、すべてのデータパケット(ただし、X3は予め決められた値とする)。
例えば、第2の通信プロトコルがTCPである場合、第1の数値は、ACK番号であり、第2の装置2が次に受信を期待するデータパケットのTCPペイロードの先頭オクテットを示す。また、第2の通信プロトコルがTCPである場合、第5の数値は、シーケンス番号であり、前回データパケットのTCPペイロードの先頭オクテットを示す。サイズ値は、例えば、コネクション上で第1の装置1から第2の装置2へ向けて送信され、パケット解析装置3によりキャプチャされたすべてのデータパケットの中で、最長のTCPペイロードの長さでもよい。
例えば、パケット解析装置3は、第5の数値と前回データパケットのサイズの和を、第1の数値から引くことで、パケット解析装置3がキャプチャに失敗したと推定される1つ以上のデータパケットの合計サイズを推定してもよい。パケット解析装置3は、推定した合計サイズをサイズ値で割ることで、パケット解析装置3がキャプチャに失敗したと推定されるデータパケットの個数を推定してもよい。
こうして推定されるデータパケットの個数は、換言すれば、前回データパケットのキャプチャからACKパケットのキャプチャまでの間に生じた、データパケットのキャプチャロスの回数の推定値である。なお、図1の動作例E1は、データパケットのキャプチャロスの回数が1回の例だが、例えば連続する2個以上のデータパケットのキャプチャにパケット解析装置3が失敗することもあり得る。よって、キャプチャロスの回数の推定値は、2以上の場合もある。
以上述べたような、キャプチャロスの回数の推定値は、第3の数値と第4の数値との差と比べるための上記閾値として好適である。なぜなら、前回データパケットのキャプチャからACKパケットのキャプチャまでの間に実際にキャプチャロスが1回以上生じた場合、第3の数値と第4の数値の差は、実際のキャプチャロスの回数よりも大きいからである。実際のキャプチャロスの回数はパケット解析装置3にとって未知だが、パケット解析装置3は、実際のキャプチャロスの回数の代わりに、キャプチャロスの回数の推定値を上記閾値として利用することができる。
なお、上記のように最長のペイロード長がサイズ値として使われる場合、以上のようにしてサイズ値による除算に基づいて推定されるキャプチャロスの回数は、推定され得る最小値である。このように、推定され得る最小値を、キャプチャロスの回数の推定値として採用することには、副作用を小さくとどめる利点がある。理由は以下のとおりである。
上記のとおり、パケット解析装置3は、第3の数値と第4の数値との差が上記閾値以下の場合に、「キャプチャされた第2のデータパケットは、ACKパケットよりも遅れてキャプチャされた第1のデータパケットである」と判断してもよい。つまり、パケット解析装置3は、第3の数値と第4の数値との差が上記閾値以下の場合に、「キャプチャ過程での逆転が生じた」と判断してもよい。
逆に、第3の数値と第4の数値との差が、上記閾値よりも大きい場合、パケット解析装置3は、「キャプチャロスと再送が生じた」と判断してもよい。つまり、この場合、パケット解析装置3は、「第1の装置1が、第2の通信プロトコルの再送手順にしたがって第1のデータパケットと同じ数値を含めて再送したデータパケットを、パケット解析装置3が、第2のデータパケットとしてキャプチャした」と判断してもよい。
ここで、閾値が適切に定められているほど、パケット解析装置3による判断の正確性も高い。しかし、閾値が過度に大きく定められていると、実際にはキャプチャロスと再送が生じたにもかかわらず、パケット解析装置3が「キャプチャ過程での逆転が生じた」と誤判断するおそれがある。また、閾値が過度に小さく定められていると、実際にはキャプチャ過程での逆転が生じたにもかかわらず、パケット解析装置3が「キャプチャロスと再送が生じた」と誤判断するおそれがある。
前者の誤判断と後者の誤判断を比較すると、後者の誤判断の方が、弊害が少ないと考えられる。なぜなら、発明者が得た知見によれば、キャプチャ過程での順序逆転よりは、キャプチャロスと再送が起こる場合の方が多いからである。
よって、全体として判断の精度を高めるためには、パケット解析装置3は、キャプチャ過程での順序逆転が生じたことが明らかな場合だけを順序逆転として検出することが好ましい。換言すれば、「キャプチャ過程での順序逆転が生じたのか、それとも、キャプチャロスと再送が生じたのか」を明確に判断することが難しい場合については、パケット解析装置3は、「キャプチャロスと再送が生じた」と判断することが好ましい。つまり、パケット解析装置3は、後者の誤判断を少々犯してでも、前者の誤判断を避ける方が、結果として、全体的な判断の精度を高めることができる、と期待される。
そして、前者の誤判断は、閾値が過度に大きい場合に生じ得るものである。よって、前者の誤判断を避けるには、閾値を、適切な範囲内で小さめの値に抑えることが有効である。よって、パケット解析装置3は、上記のように、推定され得る最小値をキャプチャロスの回数の推定値として採用し、当該推定値を上記閾値として用いることで、前者の誤判断をより確実に避けることができ、結果として全体的な判断の精度を高めることができる。
以上説明したように、本実施形態のパケット解析装置3によれば、キャプチャロスと再送が生じる場合と、キャプチャ過程での順序逆転が生じる場合とが、比較的高い精度で判別される。つまり、パケット解析装置3によれば、再送に関する誤判断が減る。よって、例えば、再送回数からネットワーク品質を推定してネットワーク品質を監視する用途などにパケット解析装置3が利用される場合、推定の精度が向上する。
近年では、ネットワークを介してサーバがクライアントにサービスを提供する機会も多いので、ネットワーク品質の監視の重要性も増している。よって、パケット解析装置3によるネットワーク品質の推定精度の向上は、サービス提供者やネットワーク提供者にとって非常に有意義である。
以下では、上記第1の通信プロトコルがIP(より具体的にはIPバージョン4)であり、上記第2の通信プロトコルがTCPである場合を例にして、本実施形態についてさらに詳しく説明する。なお、以下の説明では、パケット解析装置3は、ネットワーク品質を監視するためにパケット解析を行うネットワーク監視装置であるものとする。
図2は、キャプチャ過程でのパケット間の順序の逆転を例示する図である。図2には、図1の動作例E2のような逆転が例示されている。
図2にはホスト11と12が例示されている。ホスト11と12はいずれもコンピュータである。例えば、ホスト11が図1の第1の装置1に対応し、ホスト12が図1の第2の装置2に対応する。なお、図2などでは「ホスト」という用語を使っているが、「ホスト」を「ノード」と言い換えてもよい。
ホスト11と12の間のネットワーク上には、パケット解析システム10aまたは10bが設けられる。パケット解析システム10aはネットワーク装置13aとネットワーク監視装置17aを含み、パケット解析システム10bはネットワーク装置13bとネットワーク監視装置17bを含む。
ネットワーク装置13aは、少なくとも3つのポート14a、15a、および16aを有し、ネットワーク装置13bは、少なくとも4つのポート14b、15b、16b、および16cを有する。ポート14aと14bは図1の通過点4に対応し、ポート15aと15bは図1の通過点5に対応する。
ポート14aは、ホスト11と直接的に接続されるか、または、1つ以上の他のネットワーク装置(例えばスイッチやルータなど)を介してホスト11と間接的に接続される。ポート15aは、ホスト12と直接的に接続されるか、または、1つ以上の他のネットワーク装置(例えばスイッチやルータなど)を介してホスト12と間接的に接続される。
ポート16aは、ネットワーク監視装置17aと接続される。ポート16aは、ネットワーク監視装置17aと直接的にケーブルで接続されることが望ましい。ネットワーク監視装置17aは、ポート16aからの出力をキャプチャすることで、ホスト11と12の間で送受信されるパケットをキャプチャすることができる。
ポート14bは、ホスト11と直接的に接続されるか、または、1つ以上の他のネットワーク装置(例えばスイッチやルータなど)を介してホスト11と間接的に接続される。ポート15bは、ホスト12と直接的に接続されるか、または、1つ以上の他のネットワーク装置(例えばスイッチやルータなど)を介してホスト12と間接的に接続される。
ポート16bと16cは、ネットワーク監視装置17bと接続される。ポート16bと16cは、それぞれ、ネットワーク監視装置17bと直接的にケーブルで接続されることが望ましい。ネットワーク監視装置17bは、ポート16bから出力されるパケットを受信し、ポート16cから出力されるパケットも受信する。
ネットワーク監視装置17bは、ポート16bから受信したパケットとポート16cから受信したパケットをともに記憶するためのバッファ18を有する。バッファ18は、具体的には、FIFO(First-In First-Out)キューである。
ネットワーク装置13aは、ポートミラーリング機能を有するスイッチまたはルータであってもよい。この場合、ポート14aと15aはいずれもネットワークポートであり、ポート16aは、ポート14aで受信されたパケットとポート15aで受信されたパケットの双方をミラーリングするための、集約ミラーポートである。この場合、ネットワーク装置13aは、ホスト11からホスト12へ向けて送信されるパケットをポート14aで受信すると、以下の処理を行う。
・受信したパケットをポート15aからホスト12へ向けて送信する。
・受信したパケットを複製してポート16aに出力し、複製したパケットをポート16aからネットワーク監視装置17aに送信する。
また、ネットワーク装置13aがポートミラーリング機能を有するスイッチまたはルータである場合、ネットワーク装置13aは、ホスト12からホスト11へ向けて送信されるパケットをポート15aで受信すると、以下の処理を行う。
・受信したパケットをポート14aからホスト11へ向けて送信する。
・受信したパケットを複製してポート16aに出力し、複製したパケットをポート16aからネットワーク監視装置17aに送信する。
同様に、ネットワーク装置13bも、ポートミラーリング機能を有するスイッチまたはルータであってもよい。この場合、ポート14bと15bはいずれもネットワークポートである。また、この場合、ポート16bは、ポート14bで受信されたパケットをミラーリングするためのミラーポートであり、ポート16cは、ポート15bで受信されたパケットをミラーリングするためのミラーポートである。この場合、ネットワーク装置13bは、ホスト11からホスト12へ向けて送信されるパケットをポート14bで受信すると、以下の処理を行う。
・受信したパケットをポート15bからホスト12へ向けて送信する。
・受信したパケットを複製してポート16bに出力し、複製したパケットをポート16bからネットワーク監視装置17aに送信する。
また、ネットワーク装置13bがポートミラーリング機能を有するスイッチまたはルータである場合、ネットワーク装置13bは、ホスト12からホスト11へ向けて送信されるパケットをポート15bで受信すると、以下の処理を行う。
・受信したパケットをポート14bからホスト11へ向けて送信する。
・受信したパケットを複製してポート16cに出力し、複製したパケットをポート16cからネットワーク監視装置17aに送信する。
あるいは、ネットワーク装置13aはネットワークタップであってもよい。この場合、ポート16aは、集約モニタポートである。この場合、ホスト11からホスト12へ向けて送信されるパケットの信号がポート14aで受信されると、信号は物理層で2つに分岐させられる。分岐した一方の信号は、ネットワーク装置13aを通過する(具体的には、ポート15aからホスト12へ向けて出力される)。分岐した他方の信号は、ポート16aからネットワーク監視装置17aへ出力される。
また、ネットワーク装置13aがネットワークタップである場合、ホスト12からホスト11へ向けて送信されるパケットの信号がポート15aで受信されると、信号は物理層で2つに分岐させられる。分岐した一方の信号は、ネットワーク装置13aを通過する(具体的には、ポート14aからホスト11へ向けて出力される)。分岐した他方の信号は、ポート16aからネットワーク監視装置17aへ出力される。
同様に、ネットワーク装置13bがネットワークタップであってもよい。この場合、ポート16bと16cはいずれもモニタポートである。この場合、ホスト11からホスト12へ向けて送信されるパケットの信号がポート14bで受信されると、信号は物理層で2つに分岐させられる。分岐した一方の信号は、ネットワーク装置13bを通過する(具体的には、ポート15bからホスト12へ向けて出力される)。分岐した他方の信号は、ポート16bからネットワーク監視装置17bへ出力される。
また、ネットワーク装置13bがネットワークタップである場合、ホスト12からホスト11へ向けて送信されるパケットの信号がポート15bで受信されると、信号は物理層で2つに分岐させられる。分岐した一方の信号は、ネットワーク装置13bを通過する(具体的には、ポート14bからホスト11へ向けて出力される)。分岐した他方の信号は、ポート16cからネットワーク監視装置17bへ出力される。
いずれにせよ、ネットワーク監視装置17aは、ホスト11とホスト12の間で送受信されるパケットを、ポート16aを介してキャプチャすることができる。しかし、ポート14aからポート16aへの経路とポート15aからポート16aへの経路の間で、パケット間の順序関係を保つための調停が行われない場合、図1の動作例E2に例示したような、キャプチャ過程での順序逆転が起こり得る。
同様に、ネットワーク監視装置17bは、ホスト11とホスト12の間で送受信されるパケットを、ポート16bと16cを介してキャプチャすることができる。しかし、ポート14bからポート16bを通ってバッファ18に至る経路と、ポート15bからポート16cを通ってバッファ18に至る経路の間で、パケット間の順序関係を保つための調停が行われない場合、キャプチャ過程での順序逆転が起こり得る。
例えば、ネットワーク装置13aが、ポートミラーリング機能を有するスイッチまたはルータである場合、動作例E3のような順序逆転が起こり得る。まず、ホスト11がパケットP1を送信し、次にホスト11がパケットP2を送信し、その後、ホスト12がパケットP3を送信したとする。よって、ネットワーク装置13aは、まずポート14aでパケットP1を受信し、次にポート14aでパケットP2を受信し、その後、ポート15aでパケットP3を受信する。
しかし、何らかの理由により、パケットP2よりも遅くにネットワーク装置13aに到着したパケットP3の方が、パケットP2がポート14aからポート16aに複製されるよりも前に、ポート15aからポート16aに複製される場合があり得る。その結果、ポート16aからは、まずパケットP1が出力され、次にパケットP3が出力され、その後、パケットP2が出力される。したがって、ネットワーク監視装置17aは、まずパケットP1をキャプチャし、次にパケットP3をキャプチャし、その後、パケットP2をキャプチャする。つまり、動作例E3では、パケットP2とP3の間で、キャプチャ過程において(より具体的にはネットワーク装置13a内において)順序逆転が発生している。
例えば、パケットP1とP2は、ともに、ホスト11からホスト12へ送信されるデータパケットでもよい。パケットP3は、ホスト12が遅延確認応答の仕組みにしたがってパケットP2の受信まで待ってから返信するACKパケットであってもよい。この場合、パケットP3によって、パケットP1とP2の双方の受信がホスト11に通知される。
以下では説明の便宜上、TCPセグメントのペイロード長を「TCPデータ長」という。
ここで、IPパケットの長さは、IPヘッダ長と、TCPヘッダ長と、TCPセグメントのペイロード長の和である。そして、IPパケットの長さは、IPヘッダ(具体的にはIPバージョン4のヘッダ)中の「全長(total length)」フィールドによりオクテット単位で示される。また、IPヘッダ長は、IPヘッダ中の「IHL(Internet Header Length)」フィールドにより32ビット単位で示される。そして、TCPヘッダ長は、TCPヘッダ中の「データオフセット」フィールドにより32ビット単位で示される。よって、TCPデータ長は、全長フィールドとIHLフィールドとデータオフセットフィールドの値から計算することができる。
例えば、パケットP1のTCPヘッダ内のシーケンス番号が1であり、パケットP1のTCPデータ長が1514であるとする。この場合、ホスト11がパケットP1の直後に送信するパケットP2のTCPヘッダ内のシーケンス番号は、1515(=1+1514)である。また、パケットP2のTCPデータ長も、1514であるとする。上記のようにパケットP3がパケットP1とP2に対して送信されるACKパケットである場合、パケットP3のTCPヘッダ内のACK番号は、3029(=1515+1514)である。
パケットP1とP2のように長いパケットが、連続して同じポート14aにおいて受信されると、ポート14aからポート16aへの複製処理を行う回路の処理負荷が高くなる。その結果、ポート14aからポート16aへの複製処理は遅れがちとなる。他方、パケットP3が上記のようにACKパケットである場合、パケットP3のサイズは小さいので、ポート15aからポート16aへのパケットP3の複製処理は、すぐに完了するであろう。そのため、動作例E3に示すような順序の逆転が生じ、ネットワーク監視装置17aが、パケットP1、パケットP3、パケットP2の順にこれらのパケットをキャプチャする可能性がある。
ネットワーク装置13aがネットワークタップである場合も、ネットワーク装置13bが使われる場合も、動作例E3と同様の順序の逆転が起こる可能性がある。動作例E3におけるパケットP2とP3の間の順序逆転は、図1の動作例E2におけるデータパケットD1とACKパケットA1の間の順序逆転と同様である。
ネットワーク装置13aと13bは、いずれも、図1のパケット解析装置3と同様の方法により、順序逆転を適切に検出する。つまり、ネットワーク装置13aと13bは、いずれも、順序逆転が起こった場合と、キャプチャロスと再送が起こった場合とを適切に判別する。よって、ネットワーク装置13aまたは13bによって推定されるネットワーク品質(例えば、再送率やネットワークロス率により示される品質)は、信頼性が高い。
続いて、図3〜6を参照しながら、複数のパケットのさらに具体的な例を使って、キャプチャ過程での順序逆転と誤判断の防止について、説明する。
図3は、パケットの流れを例示する図である。図3のタイミングチャートには、ホスト21とホスト22のタイムラインが示されている。ホスト21と22は、いずれもコンピュータである。そして、キャプチャ地点(capture location)23には、ホスト21と22の間で送受信されるパケットをキャプチャし、キャプチャしたパケットを使った解析を行うためのパケット解析装置が設けられる。パケット解析装置は、具体的にはコンピュータであってもよい。ホスト21と22との間の通信路上には、図3には不図示のネットワーク装置が設けられ、パケット解析装置は、当該ネットワーク装置を介してパケットをキャプチャする。
例えば、ホスト21は図1の第1の装置1であってもよく、ホスト22は図1の第2の装置2であってもよい。この場合、キャプチャ地点23でパケットをキャプチャするパケット解析装置は、パケット解析装置3である。また、この場合、図1の通過点4と5は、図3には不図示の上記ネットワーク装置のポートである。
あるいは、ホスト21は図2のホスト11であってもよく、ホスト22は図2のホスト12であってもよい。この場合、キャプチャ地点23でパケットをキャプチャするパケット解析装置は、ネットワーク監視装置17aまたは17bである。
図3の例では、ホスト21が、データパケットD11〜D15を順にホスト22に送信する。なお、TCPではスライディングウィンドウが使われるので、ホスト21は、ウィンドウサイズの範囲内で、ホスト22からのACKパケットの到着を待たずに、次々とデータパケットを送信することができる。
また、TCPの遅延確認応答の仕組みにより、ホスト22は、データパケットD11を受信してもすぐにはACKパケットを送信しない。ホスト22は、データパケットD12の受信後に、ACKパケットA12を送信する。同様に、ホスト22は、データパケットD13を受信してもすぐにはACKパケットを送信せず、データパケットD14の受信後に、ACKパケットA14を送信する。
図3〜6では参照の便宜のため、パケットのTCPヘッダ中のシーケンス番号を「seq=801」のように示しており、パケットのTCPデータ長を「len=100」のように示している。また、図3〜6では、パケットのTCPヘッダ中のACK番号を「ack=1001」のように示している。具体的には以下のとおりである。
・データパケットD11のシーケンス番号は801であり、データパケットD11のTCPデータ長は100オクテットである。
・データパケットD12のシーケンス番号は901(=801+100)であり、データパケットD12のTCPデータ長は100オクテットである。
・ACKパケットA12は、ホスト22がデータパケットD12までのデータパケットを受信済みであることを示す。よって、ACKパケットA12のACK番号は、1001(=901+100)である。換言すれば、ACKパケットA12は、ホスト22が次に受信することを期待するデータパケットのシーケンス番号が1001であることを示す。
・データパケットD13のシーケンス番号は1001(=901+100)であり、データパケットD13のTCPデータ長は100オクテットである。
・データパケットD14のシーケンス番号は1101(=1001+100)であり、データパケットD14のTCPデータ長は100オクテットである。
・ACKパケットA14は、ホスト22がデータパケットD14までのデータパケットを受信済みであることを示す。よって、ACKパケットA14のACK番号は、1201(=1101+100)である。換言すれば、ACKパケットA14は、ホスト22が次に受信することを期待するデータパケットのシーケンス番号が1201であることを示す。
・データパケットD15のシーケンス番号は1201(=1101+100)であり、データパケットD15のTCPデータ長は100オクテットである。
図3では、キャプチャ地点23でパケットがキャプチャされる順序の詳細を示していないが、具体的には、図3に示した7つのパケットは、図4のような順序でキャプチャされる場合があり得る。図4は、キャプチャの過程でパケット間の順序が逆転する例を示す図である。
例えば、あるネットワークポートからミラーポートへのパケットの複製にかかる時間が、他のネットワークポートからミラーポートへのパケットの複製にかかる時間よりもかなり長い場合や、ホスト21と22の間のRTTが短い場合などに、順序逆転が生じ得る。順序逆転が生じやすい条件については、図1に関して前述したとおりである。図4の例では、キャプチャ過程での順序逆転により、具体的には、図3の7つのパケットは、キャプチャ地点23において以下の順序でキャプチャされたものとする。
・まず、時刻T11にデータパケットD11がキャプチャ地点23でキャプチャされる。
・その後、時刻T12にデータパケットD12がキャプチャ地点23でキャプチャされる。
・その後、時刻T13にACKパケットA12がキャプチャ地点23でキャプチャされる。
・その後、時刻T14にACKパケットA14がキャプチャ地点23でキャプチャされる。
・その後、時刻T15にデータパケットD13がキャプチャ地点23でキャプチャされる。
・その後、時刻T16にデータパケットD14がキャプチャ地点23でキャプチャされる。
・その後、時刻T17にデータパケットD15がキャプチャ地点23でキャプチャされる。
図3と4を比較すれば分かるように、図4に逆転範囲24として示した範囲において、順序逆転が生じている。つまり、図3のように、ACKパケットA14より前にデータパケットD13とD14が送信されるにもかかわらず、データパケットD13とD14の方がACKパケットA14より先にキャプチャ地点23に到達する。
より具体的には、例えば、ポートミラーリング機能を有するスイッチまたはルータが使われる場合、データパケットD13とD14の方が、ACKパケットA14より先に、スイッチまたはルータのネットワークポートで受信される。あるいは、ネットワークタップが使われる場合、データパケットD13とD14の信号の方が、ACKパケットA14の信号より先に、ネットワークタップの入力ポートに入力される。それにもかかわらず、図4では、ACKパケットA14の方がデータパケットD13とD14より先にキャプチャされる。
図4での以上のような順序逆転は、図1の動作例E2での順序逆転と類似である。つまり、以下の2つの順序逆転は互いに類似している。
・図1の動作例E2において、時刻T5にACKパケットA1がキャプチャされ、その後、時刻T6にデータパケットD1がキャプチャされる、という順序逆転。
・図4において、時刻T14にACKパケットA14がキャプチャされ、その後、時刻T15とT16にデータパケットD13とD14がキャプチャされる、という順序逆転。
なお、順序逆転のせいでACKパケットよりも遅れてキャプチャされるデータパケットの個数は、動作例E2では1個であるが、図4では2個である。しかし、「先に送信された1つ以上のデータパケットの方が、当該1つ以上のデータパケットの受信を通知するACKパケットより後にキャプチャされる」という点では、図1の動作例E2と図4の例は共通である。また、動作例E2における前回データパケットはデータパケットD0であり、図4における前回データパケットはデータパケットD12である。
ところで、図1に関して説明したとおり、動作例E1のようにキャプチャロスと再送が生じる場合と、動作例E2のように順序逆転が生じる場合を判別するには、コネクション指向の上位層のプロトコルのPDUについてのメタ情報を使うだけでは不十分である。換言すれば、TCPセグメントについてのメタ情報(例えば、TCPヘッダ内のシーケンス番号、TCPヘッダ内のACK番号、およびTCPデータ長)を使うだけでは、誤判断が起こり得る。よって、本実施形態では、図1に関して説明したとおり、誤判断の防止のために、コネクションレスな下位層のプロトコルのPDUについてのメタ情報(具体的にはIPヘッダ内のID)が使われる。
以下では、比較例として、キャプチャ地点23でパケットをキャプチャするパケット解析装置が、TCPセグメントについてのメタ情報のみを使って解析を行う例について、説明する。図5は、比較例において順序の逆転に起因して起こり得る誤判断について説明する図である。具体的には、図5には、図4のような順序で7つのパケットがキャプチャされた場合に起こり得る誤判断が例示されている。
図5の比較例において、キャプチャ地点23でパケットをキャプチャするパケット解析装置は、時刻T11にデータパケットD11をキャプチャし、時刻T12にデータパケットD12をキャプチャし、時刻T13にACKパケットA12をキャプチャする。キャプチャしたACKパケットA12のACK番号に基づいて、パケット解析装置は、「時刻T11とT12にキャプチャ済みのデータパケットD11とD12は、ホスト22により成功裡に受信された」と認識する。つまり、データパケットD11とD12のネットワークロスが生じていないことをパケット解析装置は認識する。以上のような認識は正しい。
その後、パケット解析装置は、時刻T14にACKパケットA14をキャプチャする。ACKパケットA14のACK番号は1201である。よって、パケット解析装置は、「ホスト21と22の間のコネクション上(より具体的には、ホスト21からホスト22へ向かうデータストリーム上)で、1200という数値で示されるオクテットまでの全データを、ホスト22が成功裡に受信した」と認識する。この認識自体は正しい。
しかしながら、時刻T14より前にパケット解析装置がキャプチャした最後のデータパケットは、データパケットD12である。そして、データパケットD12のシーケンス番号は901であり、データパケットD12のTCPデータ長は100である。つまり、パケット解析装置は、ホスト21からホスト22へ向かうデータストリーム上で、1000(=901+100−1)という数値で示されるオクテットまでのデータしか、まだキャプチャしていない。
よって、パケット解析装置は、「1001と1200という数値で示される範囲のオクテットに相当する1つ以上のデータパケットが存在したが、当該1つ以上のデータパケットのキャプチャが失敗した」と誤判断する。つまり、パケット解析装置は、「時刻T12とT14の間にキャプチャロスが生じた」と誤判断する。
なお、1001と1200という数値で示される範囲の長さは200オクテットである。また、パケット解析装置が今までにキャプチャしたデータパケットD11とD12はいずれも長さが100オクテットである。よって、パケット解析装置は、例えば、「2(=200/100)個のデータパケットのキャプチャロスが生じた」と推定する。
この推定は間違っている。図5には、こうして間違って推定された2個のデータパケットL11とL12が示されている。
つまり、比較例のパケット解析装置は、「キャプチャロスが生じなければ、時刻T12とT14の間にデータパケットL11とL12がキャプチャされたであろう」と誤判断する。パケット解析装置は、必ずしもデータパケットL11とL12の詳細(例えば、それぞれのシーケンス番号とTCPデータ長)を推定する必要はないが、図5には、例として、以下のごときデータパケットL11とL12が例示されている。
・シーケンス番号が1001であり、TCPデータ長が100のデータパケットL11。
・シーケンス番号が1101であり、TCPデータ長が100のデータパケットL12。
その後、パケット解析装置は、時刻T15にデータパケットD13をキャプチャし、時刻T16にデータパケットD14をキャプチャする。データパケットD13のシーケンス番号は、データパケットL11と同じく1001である。また、データパケットD14のシーケンス番号は、データパケットL12と同じく1101である。よって、パケット解析装置は、「データパケットL11とL12がそれぞれデータパケットD13とD14として再送された」と誤判断する。
もちろん、パケット解析装置は、単純に、「データパケットD13とD14のシーケンス番号は、いずれも、1001と1200という数値で示される範囲内に含まれるから、データパケットD13とD14は再送パケットである」と判断してもよい。しかし、いずれにせよ、パケット解析装置は誤判断を犯す。
以上のような、キャプチャロスについての誤判断や、再送についての誤判断は、解析精度を低下させる要因である。パケット解析のアルゴリズムには様々なものがあり、中には、データパケットの再送を検出すると「ネットワークロスが生じていた」と判断するアルゴリズムもある。例えば、パケット解析のアルゴリズムによっては、比較例のパケット解析装置は、以下のように判断してもよい。
・「1200という数値で示されるオクテットまでの全データをホスト22が成功裡に受信した」と示すACKパケットA14が送信された後に、1200以下のシーケンス番号を持つデータパケットD13とD14が再送されている。
・このような再送が生じた原因は、ACKパケットA14が、パケット解析装置にキャプチャされた後、ホスト21に届く前に、ネットワーク上で消失したからであろう。
例えば以上のように、再送の検出に応じてネットワークロスを検出するタイプのアルゴリズムが利用される場合、図5のような再送についての誤判断は、ネットワークロス数の過大推定(overestimation)を招く。また、ネットワークロス数の過大推定は、コネクション上で送信側のホストから実際に送信されたパケット数の過大推定や、コネクション上で送信側のホストから実際に送信されたトラフィックの量の過大推定を招く。
したがって、図5のような再送についての誤判断は、ネットワークロス率やトラフィック量の推定値の精度劣化を招く。その結果、例えばネットワーク品質の監視のためにパケット解析が行われる場合には、ネットワーク品質の推定値の精度も劣化する。よって、パケット解析の解析精度を高めるためには、図5の比較例で起き得るような誤判断を防止することが望ましい。
ところで、パケット解析のアルゴリズムには様々なものがある。簡易的なアルゴリズムの中には、ホスト21からホスト22へ向かう方向のトラフィックと、ホスト22からホスト21へ向かう方向のトラフィックを、独立に観察および解析するタイプのアルゴリズムもある。
ここで、図4を参照すると、ホスト21からホスト22へ送信される5つのデータパケットD11〜D15の間では、キャプチャ順序の逆転は生じていない。また、ホスト22からホスト21へ送信される2つのACKパケットA12とA14の間でも、キャプチャ順序の逆転は生じていない。
よって、2つの方向のトラフィックを独立に観察および解析するタイプの簡易的なアルゴリズムでは、キャプチャ過程でのデータパケットとACKパケットの間での順序逆転の影響がない。しかしながら、そのような簡易的なアルゴリズムでは、ネットワークロスとキャプチャロスが区別されないし、ネットワークの挙動も大雑把に推測されるだけである。
例えば、データパケットの再送は、元のデータパケットがネットワーク上で消失するのが原因で起こることもある。あるいは、元のデータパケットが成功裡に送信先のホストに受信された後に送信されるACKパケットが、ネットワーク上で消失するのが原因で、データパケットの再送が起こることもある。
また、再送の具体的なトリガも様々である。例えば、データパケットの送信元のホストが、同一のACK番号を有する所定数(例えば3個)のACKパケットを続けて受信すると、送信元のホストが、当該ACK番号をシーケンス番号として含むデータパケットを再送する場合もある。なぜなら、連続する複数のデータパケットのうちの先頭または中途のデータパケットがネットワーク上で消失すると、受信側のホストは、複数のデータパケットのうちの後続のデータパケットを成功裡に受信するたびに、同じACK番号を通知するからである。よって、重複ACK(duplicate acknowledgement)パケットの受信は、再送のトリガになり得る。
また、「RTO(Retransmission Time-Out)」と呼ばれる時間がデータパケットの送信から経過しても、まだACKパケットが受信されないときに、送信元のホストがデータパケットを再送する場合もある。
したがって、例えば再送に関するネットワークの挙動をより正確に推定するには、データパケットが送られる方向のトラフィックと、ACKパケットが送られる方向のトラフィックとの間の関連性を考慮に入れることが好ましい。例えば、ネットワークの挙動をより正確に推定するには、ACK番号とシーケンス番号の間の関係などを考慮に入れることが好ましい。つまり、パケット解析の目的によっては、2つの方向を独立に解析する簡易的なアルゴリズムでは不十分である。
他方、互いに逆向きの2つの方向を流れるパケット間の関連性を単純素朴に考慮に入れるだけでは、図5に例示したような誤判断を招くおそれがある。図5の誤判断が好ましくないことは、上述したとおりである。
したがって、より正確な解析結果を得るためには(換言すれば、より信頼性の高い解析結果を得るためには)、図1に関して説明したように、キャプチャ過程での順序逆転を検出することが好ましい。なぜなら、キャプチャ過程での順序逆転の検出により、図5のような誤判断が減るからである。
具体的には、図4のような順序で7つのパケットがキャプチャされた場合、本実施形態では、図6のようにしてキャプチャ過程での順序逆転が検出され、誤判断が防止される。なお、図6では参照の便宜のため、パケットのIPヘッダ中のIDを「IP−ID=99」のように示している。また、以下では、パケットのIPヘッダ中のIDを単に「IP−ID」と表記することがある。
本実施形態において、キャプチャ地点23でパケットをキャプチャするパケット解析装置は、パケット解析装置3、ネットワーク監視装置17a、およびネットワーク監視装置17bのいずれであってもよいし、後述のネットワーク監視装置40であってもよい。図6に関しては、説明の便宜上、パケット解析装置3がキャプチャ地点23でパケットをキャプチャするものとする。
パケット解析装置3は、時刻T11にデータパケットD11をキャプチャし、時刻T12にデータパケットD12をキャプチャし、時刻T13にACKパケットA12をキャプチャする。キャプチャしたACKパケットA12のACK番号に基づいて、パケット解析装置3は、「時刻T11とT12にキャプチャ済みのデータパケットD11とD12は、ホスト22により成功裡に受信された」と認識する。つまり、データパケットD11とD12のネットワークロスが生じていないことを、パケット解析装置3は認識する。以上のような認識は正しい。
その後、パケット解析装置3は、時刻T14にACKパケットA14をキャプチャする。ACKパケットA14のACK番号は1201である。よって、パケット解析装置3は、「ホスト21と22の間のコネクション上(より具体的には、ホスト21からホスト22へ向かうデータストリーム上)で、1200という数値で示されるオクテットまでの全データを、ホスト22が成功裡に受信した」と認識する。この認識も正しい。
ここで、時刻T14より前にパケット解析装置3がキャプチャした最後のデータパケットは、データパケットD12である。そして、データパケットD12のシーケンス番号は901であり、データパケットD12のTCPデータ長は100である。つまり、パケット解析装置3は、ホスト21からホスト22へ向かうデータストリーム上で、1000(=901+100−1)という数値で示されるオクテットまでのデータしか、まだキャプチャしていない。
つまり、時刻T14でのACKパケットA14のキャプチャの結果、パケット解析装置3は、「未キャプチャの1つ以上のデータパケットに対するACKパケットA14がキャプチャされた」と認識する。未キャプチャの1つ以上のデータパケットに対するACKパケットがキャプチャされた場合、図1から分かるように、キャプチャロスが生じた可能性と、キャプチャ過程での順序逆転が生じた可能性がある。
そこで、パケット解析装置3は、ACKパケットA14をキャプチャした後の時刻T15において、さらにデータパケットD13をキャプチャすると、ACKパケットA14のACK番号とデータパケットD13のシーケンス番号を比較する。
もし、データパケットD13のシーケンス番号が、ACKパケットA14のACK番号以上であれば、パケット解析装置3は、「ACKパケットA14により受信が通知されたデータパケットの、後続のデータパケットが、キャプチャされた」と判断する。ウィンドウサイズなどの条件によっては、実際にこのように後続のデータパケットがキャプチャされる場合もあり得る。
逆に、データパケットD13のシーケンス番号が、ACKパケットA14のACK番号未満であれば、再送が生じた可能性と、キャプチャ過程での順序逆転が生じた可能性がある。図6の例では、データパケットD13のシーケンス番号は1001であり、ACKパケットA12のACK番号は1201である。つまり、図6の例では、データパケットD13の方が、ホスト22が次に受信を期待しているデータパケットよりも、コネクション上の順序が早い。
よって、パケット解析装置3は、ACKパケットA14の後にデータパケットD13をキャプチャすると、再送が生じた可能性と、キャプチャ過程での順序逆転が生じた可能性とを判別するための処理を行う。具体的には、パケット解析装置3は、データパケットD13のIP−IDと、ACKパケットA14より前にパケット解析装置3がキャプチャしたデータパケットの中では最後にキャプチャされたデータパケットD12のIP−IDとの差を計算する。
図6の例では、データパケットD11、D12、D13、D14、D15のIP−IDは、それぞれ、99、100、101、102、103である。よって、時刻T15にキャプチャされたデータパケットD13のIP−IDと、時刻T12にキャプチャされたデータパケットD12のIP−IDの差は、1(=101−100)である。
パケット解析装置3は、こうして計算した差に基づいて、「時刻T15にキャプチャしたデータパケットD13が、ホスト22での受信がACKパケットA14によって通知される対象のデータパケットであるのか否か」を判断する。換言すれば、パケット解析装置3は、計算した差に基づいて、「時刻T15にキャプチャしたデータパケットD13が、キャプチャ過程での順序逆転のせいでACKパケットA14よりも遅れてキャプチャされたデータパケットなのか否か」を判断する。
図1に関する説明から分かるように、IP−IDの差が大きいほど、データパケットD13が再送データパケットである蓋然性が高い。そこで、パケット解析装置3は、具体的には、計算したIP−IDの差を、閾値と比較する。閾値は、具体的には、再送が生じたと仮定した場合に推定されるキャプチャロス数である。この閾値は、例えば以下のようにして決められる。
時刻T14よりも前には、パケット解析装置3は、ホスト21からホスト22へ向かうデータストリーム上で1000(=901+100−1)という数値で示されるオクテットまでのデータしかキャプチャしていない。しかしACKパケットA14のACK番号は1201である。つまり、時刻T14では、1001と1200という数値で示される範囲の200オクテットが未キャプチャである。
また、パケット解析装置3は、時刻T14までに2個のデータパケット(つまりデータパケットD11とD12)をキャプチャ済みである。これら2個のデータパケットのTCPデータ長の最大値は100である。
よって、パケット解析装置3は、時刻T14において未キャプチャの200(=1201−(901+100))オクテットの送信に使われるデータパケットの個数を、少なくとも2(=ceil(200/100))個である、と推定する。換言すれば、パケット解析装置3は、再送が生じたと仮定した場合に推定されるキャプチャロス数を、2と推定する。なお、ceil(x)は、引数x以上で引数xに最も近い整数とする。
時刻T15にキャプチャされたデータパケットD13が、もし真に再送データパケットであるならば、上記のように計算したデータパケットD13とD12のIP−IDの差は、キャプチャロス数の推定値よりも大きい、と想定される。なぜなら、もしデータパケットD13が真に再送データパケットであるならば、少なくとも2個のデータパケットのキャプチャロスが生じている、と想定されるからである。ホスト21は、それら2個のデータパケット用に2個のIP−IDを消費する。よって、もしデータパケットD13が真に再送データパケットであるならば、上記のように計算したIP−IDの差は、2より大きい、と想定される。
なお、上記段落で「想定される」と述べたのは、実際のキャプチャロス数ではなく、キャプチャロス数の推定値が閾値として使われるためである。キャプチャロス数の推定値が正しければ、想定も正しい。また、図1に関して説明したように、副作用を小さくとどめるために、図6の例では、キャプチャロス数として推定され得る最小値が、閾値として使われる。つまり、副作用を小さくとどめるために、キャプチャロス数の推定値の算出においては、(例えばTCPデータ長の算術平均値等ではなく)TCPデータ長の最大値が使われる。
図6の例では、上記のとおり、キャプチャロス数の推定値は2であり、この2という値が閾値として使われる。また、図6の例では、上記のとおり、IP−IDの差は1である。1≦2なので、パケット解析装置3は、「データパケットD13は、キャプチャ過程での順序逆転のせいでACKパケットA14より遅れてキャプチャされたデータパケットである」と判断する。つまり、パケット解析装置3は、「データパケットD13は再送データパケットではない」と判断する。
パケット解析装置3は、その後の時刻T16に、データパケットD14をさらにキャプチャする。データパケットD14のシーケンス番号は1101であり、ACKパケットA14のACK番号は1201であり、1101は1201より小さい。よって、時刻T16でのデータパケットD14のキャプチャの際にも、パケット解析装置3は、再送が生じた可能性と、キャプチャ過程での順序逆転が生じた可能性とを判別するための処理を行う。
この場合も、パケット解析装置3は、「データパケットD14は、キャプチャ過程での順序逆転のせいでACKパケットA14より遅れてキャプチャされたデータパケットである」と判断する。例えば、パケット解析装置3は、以下の2つの事項に基づいて、この判断を下してもよい。
・時刻T15でのデータパケットD13のキャプチャを契機として、順序逆転が既に検出されている。
・データパケットD14のシーケンス番号は、上記の未キャプチャのオクテット範囲に含まれる。
なお、時刻T16にキャプチャされたデータパケットD14のIP−IDと、ACKパケットA14より前にキャプチャされたデータパケットのうちでは最後にキャプチャされたデータパケットD12のIP−IDの差は、2(=102−100)である。よって、IP−ID間の差が2で、上記の閾値も2であるから、IP−ID間の差は閾値以下である。パケット解析装置3は、データパケットD14に関しても、以上のような閾値との比較に基づいて、「データパケットD14は、キャプチャ過程での順序逆転のせいでACKパケットA14より遅れてキャプチャされたデータパケットである」と判断してもよい。
以上説明した図6の具体例から分かるように、本実施形態によれば、キャプチャ過程での順序逆転が、十分な信頼性をもって検出されるので、再送に関する誤判断が減る。その結果、本実施形態によれば、パケット解析(例えばネットワーク品質の監視のための解析)の精度が向上する。
続いて、図1や図6を参照して説明したような順序逆転の検出を行う装置の詳細について、図7を参照して説明する。図7は、システム構成図である。
図7には、ホスト31と32が例示されている。ホスト31と32は、いずれもコンピュータである。ホスト31と32は、ネットワーク33を介して接続されている。ネットワーク33には、ネットワーク装置34が設けられる。ネットワーク装置34は、ポートミラーリング機能を有するスイッチまたはルータであってもよいし、ネットワークタップであってもよい。ネットワーク装置34は少なくとも3つのポート35〜37を有する。
ホスト31は図2のホスト21と同様であり、ホスト32は図2のホスト22と同様である。また、ネットワーク装置34は図2のネットワーク装置13aと同様である。つまり、ポート35、36、37は、それぞれ、図2のポート14a、15a、16aと同様である。よって、ホスト31、ホスト32、およびネットワーク装置34についての詳しい説明は省略する。
なお、別の観点から言えば、ホスト31は図1の第1の装置1に対応し、ホスト32は第2の装置2に対応し、ポート35は通過点4に対応し、ポート36は通過点5に対応する。
ポート37にはネットワーク監視装置40が接続される。ネットワーク監視装置40は、図1のパケット解析装置3に対応し、図2のネットワーク監視装置17aにも対応する。
ネットワーク監視装置40は、通信インタフェイス41、抽出部42、管理部43、検出部44、出力制御部45、出力インタフェイス46、コネクション管理テーブル47、および解析情報テーブル48を有する。また、ネットワーク監視装置40は、出力インタフェイス46を介して、外部に設けられた出力装置49と接続される。もちろん、ネットワーク監視装置40が出力装置49を内蔵していてもよい。
具体的には、通信インタフェイス41がネットワーク装置34のポート37と接続される。通信インタフェイス41は、ポート37からパケットを受信する。
なお、図7の例では、ホスト31からホスト32へ送信されるパケットと、ホスト32からホスト31へ送信されるパケットは、ネットワーク装置34の内部で集約され、ポート37から出力される。このようなネットワーク装置34内部での集約は、図2のネットワーク装置13a内部での集約と同様である。
一方、図2のネットワーク装置13bとネットワーク監視装置17bの例から分かるように、ネットワーク装置13b内ではなくネットワーク監視装置17b内で集約が行われてもよい。つまり、図7のネットワーク監視装置40の内部で集約が行われるような構成も可能である。具体的には、ネットワーク監視装置40は、ネットワーク装置の2つのポートからパケットを受信する2つの通信インタフェイス41と、2つの通信インタフェイス41が受信したパケットを記憶するための共通のバッファを有してもよい。共通のバッファは、図2のバッファ18と同様である。
さて、抽出部42は、通信インタフェイス41が受信したパケットからヘッダ情報を抽出する。具体的には、抽出部42は、少なくとも以下の各フィールドの値を抽出する。抽出部42は、抽出したヘッダ情報を管理部43に出力する。
・IPヘッダ内の、IHL、全長、ID、送信元IPアドレス、および送信先IPアドレス。
・TCPヘッダ内の、送信元ポート番号、送信先ポート番号、シーケンス番号、ACK番号、ACKフラグ、SYNフラグ、FINフラグ。
管理部43は、コネクションに関する情報を管理する。本実施形態では、コネクションに関する情報はコネクション管理テーブル47に記憶される。つまり、管理部43は、抽出部42から出力されるヘッダ情報に基づいて、コネクション管理テーブル47を更新する。コネクション管理テーブル47の詳細は、図9とともに後述する。
検出部44は、キャプチャ過程での順序逆転を検出する。具体的には、検出部44は、キャプチャロスと再送が発生した場合と、順序逆転が発生した場合とを判別するための処理を実行する。検出部44は、コネクション管理テーブル47と、抽出部42により抽出されたヘッダ情報とを用いて、上記処理を実行する。
さらに、検出部44は、処理結果に応じて、解析情報テーブル48を適宜更新する。解析情報テーブル48の詳細は、図10とともに後述する。
なお、抽出部42は、管理部43だけでなく検出部44にもヘッダ情報を出力してもよい。あるいは、管理部43が、抽出部42から受け取ったヘッダ情報を検出部44に出力してもよい。管理部43と検出部44のより詳しい動作については、図11〜14のフローチャートとともに後述する。
出力制御部45は、解析情報テーブル48から情報を取得する。そして、出力制御部45は、パケット解析の結果を出力装置49に出力するための処理を、取得した情報に基づいて行う。出力装置49への出力は、例えば、予め決められたスケジュールにしたがって行われてもよいし、図7には示していない入力装置を介してユーザからネットワーク監視装置40に与えられる命令に応じて行われてもよい。
パケット解析の結果を表すためのフォーマットは実施形態に応じて任意であってよい。例えば、解析情報テーブル48中の情報そのものがパケット解析の結果の中に含まれていてもよい。また、出力制御部45が、解析情報テーブル48から取得した情報に基づいて適宜の計算を行って、計算結果をパケット解析の結果の中に含めてもよい。いずれにせよ、出力制御部45は、出力インタフェイス46を制御して、パケット解析の結果を出力装置49に出力させる。
出力インタフェイス46は、ネットワーク監視装置40と出力装置49との間のインタフェイスである。
例えば、ネットワーク監視装置40がコンピュータであり、出力装置49がディスプレイである場合は、出力インタフェイス46は、コンピュータとディスプレイの間の接続インタフェイス回路と、ディスプレイ用のVRAM(Video Random Access Memory)と、ディスプレイドライバにより実現されてもよい。
出力装置49は、ネットワーク監視装置40とは別の他のコンピュータ(例えば、ネットワーク33とは別のネットワークを介してネットワーク監視装置40に接続されるコンピュータ)であってもよい。この場合、出力インタフェイス46は、無線LAN(Local Area Network)インタフェイス回路または有線LANインタフェイス回路により実現されてもよい。
図8は、コンピュータのハードウェア構成図である。図1のパケット解析装置3、図2のネットワーク監視装置17aと17b、および図7のネットワーク監視装置40は、いずれも、図8に示すようなコンピュータ50であってもよい。
コンピュータ50は、CPU(Central Processing Unit)51と、RAM(Random Access Memory)52と、1つ以上の通信インタフェイスを有する。図8には、例として、2つの通信インタフェイス53aと53bが例示されている。コンピュータ50はさらに、入力装置54と、出力装置55と、記憶装置56と、コンピュータ読み取り可能な記憶媒体60の駆動装置57を有する。コンピュータ50のこれらのコンポーネントは、互いにバス58で接続されている。
CPU51は、シングルコアまたはマルチコアのプロセッサの一例である。コンピュータ50は、複数のプロセッサを有していてもよい。CPU51はプログラムをRAM52にロードし、RAM52をワーキングエリアとしても利用しながら、プログラムを実行する。コンピュータ50がネットワーク監視装置17bである場合、RAM52は、さらにバッファ18としても利用される。
通信インタフェイス53aと53bの各々は、無線LANインタフェイスでもよいが、より確実にパケットをキャプチャする目的のためには、有線LANインタフェイスであることが望ましい。コンピュータ50は、1つ以上の通信インタフェイスを介して、ネットワーク装置13a、13bまたは37に接続される。
例えば、コンピュータ50がネットワーク監視装置17aである場合、コンピュータ50は、通信インタフェイス53aとケーブルを介してネットワーク装置13aのポート16aに接続される。
コンピュータ50がネットワーク監視装置17bである場合、コンピュータ50は、通信インタフェイス53aと53bを介してネットワーク装置13bに接続される。具体的には、通信インタフェイス53aがケーブルによりポート16bに接続され、通信インタフェイス53bが別のケーブルによりポート16cに接続される。
コンピュータ50がネットワーク監視装置40である場合、コンピュータ50は、通信インタフェイス53aとケーブルを介してネットワーク装置34のポート37に接続される。
各通信インタフェイスは、より具体的には、外付けのNIC(Network Interface Card)でもよいし、オンボード型のネットワークインタフェイスコントローラでもよい。各通信インタフェイスは、物理的なネットワークポートと、物理層の処理を行う「PHYチップ」と呼ばれる回路と、MAC(Media Access Control)副層の処理を行う「MACチップ」と呼ばれる回路を含んでいてもよい。
なお、コンピュータ50は、パケットをキャプチャするためにネットワーク装置13a、13bまたは34に接続されるだけでなく、さらに他のネットワーク装置(例えばスイッチまたはルータ)に接続されてもよい。コンピュータ50は、そのような接続のための通信インタフェイス(例えば、無線LANインタフェイス、有線LANインタフェイス、またはその組み合わせ)を有していてもよい。この場合、コンピュータ50は、適宜のネットワークから適宜のプログラムをダウンロードすることができる。ダウンロードされたプログラムは、CPU51により実行されてもよい。
入力装置54は、例えば、キーボード、ポインティングデバイス、またはその組み合わせである。ポインティングデバイスは、例えば、マウスでもよいしタッチパッドでもよいしタッチスクリーンでもよい。
出力装置55は、ディスプレイ、スピーカ、またはその組み合わせである。ディスプレイはタッチスクリーンであってもよい。なお、図7ではネットワーク監視装置40の外部に出力装置49が描かれているが、ネットワーク監視装置40が出力装置49を内蔵していてもよい。逆に、図8では入力装置54と出力装置55がコンピュータ50の中に描かれているが、入力装置54と出力装置55はコンピュータ50の外部にあってコンピュータ50に接続されるのでもよい。
記憶装置56は、具体的には、1つ以上の不揮発性の記憶装置である。記憶装置56は、例えば、HDD(Hard Disk Drive)でもよいし、SSD(Solid-State Drive)でもよいし、両者の組み合わせでもよい。さらにROM(Read Only Memory)が記憶装置56として含まれていてもよい。
記憶媒体60の例は、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、光磁気ディスク、磁気ディスク、フラッシュメモリなどの半導体メモリカードなどである。記憶媒体60の駆動装置57は、コンピュータ50の外部にあってコンピュータ50に接続されるのでもよい。
CPU51が実行するプログラムは、予め記憶装置56にインストールされていてもよい。あるいは、プログラムは、記憶媒体60に格納されて提供され、記憶媒体60から駆動装置57により読み取られて記憶装置56にコピーされ、その後、RAM52にロードされてもよい。または、プログラムは、上記のようにダウンロードされてもよい。なお、RAM52、記憶装置56、および記憶媒体60は、いずれも、コンピュータ読み取り可能な有形の(tangible)媒体であり、信号搬送波のような一時的な(transitory)媒体ではない。
ところで、図7のネットワーク監視装置40が図8のコンピュータ50により実現される場合、通信インタフェイス41は通信インタフェイス53aであってもよい。また、この場合、抽出部42、管理部43、検出部44、および出力制御部45は、プログラムを実行するCPU51により実現されてもよい。コネクション管理テーブル47と解析情報テーブル48は、RAM52に記憶されてもよいし、記憶装置56に記憶されてもよい。なお、出力インタフェイス46を実現するハードウェアの例については、図7に関して述べたとおりである。
さて、図9は、図7のコネクション管理テーブル47の例を示す図である。図9には、コネクション管理テーブル47の例と、コネクション管理テーブル47中の1つのエントリの内容の変化が例示されている。コネクション管理テーブル47の各エントリは、以下に説明するような各「サブコネクション」に対応する。
例えば、ホスト31と32の間の1つのコネクション上には、ホスト31からホスト32へ向かう第1の方向のデータストリームと、ホスト32からホスト31へ向かう第2の方向のデータストリームが流れる。管理部43は、ホスト31と32の間の1つのコネクションを、便宜上、第1の方向のサブコネクションと第2の方向サブコネクションに分けて管理する。
第1の方向のサブコネクションは、換言すれば、第1の方向のデータストリーム用のサブコネクションである。ここで、第1の方向に流れるデータパケットに対するACKパケットは、第2の方向に流れる。よって、以下では説明の便宜上、第1の方向のサブコネクションにとっての第1の方向を「データ方向」といい、第1の方向のサブコネクションにとっての第2の方向を「ACK方向」という。
また、第2の方向のサブコネクションは、換言すれば、第2の方向のデータストリーム用のサブコネクションである。ここで、第2の方向に流れるデータパケットに対するACKパケットは、第1の方向に流れる。よって、第2の方向のサブコネクションにとっては、第2の方向が「データ方向」であり、第1の方向が「ACK方向」である。
なお、ホスト31と32の間には、複数のコネクションが確立されていてもよい。異なるコネクション同士は、異なるポート番号により識別可能である。
コネクション管理テーブル47の各エントリは、1つのサブコネクションに対応する。換言すれば、2つのエントリのペアが1つのコネクションに対応する。また、各エントリは以下のフィールドを有する。図9では紙幅の都合上、各フィールドの名称が略称で表されている。
・当該エントリのサブコネクションを識別するための識別情報を表す「コネクションID」フィールド(図9では「Conn. ID」と示す)。
・当該エントリのサブコネクションにとってのデータ方向の送信側ホストのIPアドレスを表す「送信元IPアドレス」フィールド(図9では「Src. IP Addr.」と示す)。
・当該エントリのサブコネクションにとってのデータ方向の送信側ホストのポート番号を表す「送信元ポート番号」フィールド(図9では「Src. Port」と示す)。
・当該エントリのサブコネクションにとってのデータ方向の受信側ホストのIPアドレスを表す「送信先IPアドレス」フィールド(図9では「Dst. IP Addr.」と示す)。
・当該エントリのサブコネクションにとってのデータ方向の受信側ホストのポート番号を表す「送信先ポート番号」フィールド(図9では「Dst. Port」と示す)。
・当該エントリのサブコネクションにとってのデータ方向で今までに送信されてキャプチャされたデータパケットの中で最大のシーケンス番号を表す「最大シーケンス番号」フィールド(図9では「Max. Seq.」と示す)。
・当該エントリのサブコネクションにとってのACK方向で次に送られるACKパケットのACK番号として期待される最小値を表す「ACK期待値」フィールド(図9では「Exp. Ack.」と示す)。
・当該エントリのサブコネクションにとってのACK方向で今までに送信されてキャプチャされたACKパケットの中で最大のACK番号を表す「最大ACK番号」フィールド(図9では「Max. Ack.」と示す)。
・当該エントリのサブコネクションにとってのデータ方向で今までに送信されてキャプチャされたデータパケットの中で最大のTCPデータ長を表す「最大長さ」フィールド(図9では「Max. Len.」と示す)。
・当該エントリのサブコネクション上を流れるデータストリーム中のオクテットのうち、キャプチャに失敗した可能性がある、と暫定的に判断されたオクテットの範囲を表す「暫定キャプチャロス範囲」フィールド(図9では「Prov. Loss」と示す)。
・当該エントリのサブコネクション上でデータ方向とACK方向にそれぞれ送信されるデータパケットとACKパケットの間で、キャプチャ順序の逆転が生じている範囲を表す「逆転範囲」フィールド(図9では「Inv. Range」と示す)。
・当該エントリのサブコネクションにとってのデータ方向で最も遅くにキャプチャされたデータパケットのIPヘッダ中のIDを表す「IP−ID」フィールド(図9では「IP-ID」と示す)。
例えば、ホスト31のIPアドレスが「10.25.1.3」であり、ホスト32のIPアドレスが「10.25.1.200」であるとする。そして、ホスト31の1501番ポートとホスト32の20番ポートの間にコネクションが確立されているとする。図9のコネクション管理テーブル47の1番目のエントリは、以上のようなコネクションの2つのサブコネクションのうち、ホスト31からホスト32へ向かう方向のサブコネクションに対応する。また、2番目のエントリは、逆方向(つまりホスト32からホスト31へ向かう方向)のサブコネクションに対応する。
1番目のエントリに対応するサブコネクションのコネクションIDは、図9によれば「1−1」である。また、2番目のエントリに対応するサブコネクションのコネクションIDは、図9によれば「1−2」である。
ところで、ホスト31とホスト32の間では、複数のコネクションが確立され得る。つまり、ホスト31が1501番以外のポートを使い、かつ/または、ホスト32が20番以外のポートを使うことで、ホスト31と32の間に別のコネクションが確立されてもよい。コネクション管理テーブル47は、ホスト31と32の間のコネクションごとに、当該コネクションの2つのサブコネクションに対応する2つのエントリを有する。
また、図7には、ネットワーク装置34の3つのポートのみが図示されているが、ネットワーク装置34は、より多くのポートを有していてもよい。ネットワーク装置34が有する不図示の各ポートには、直接的または間接的に不図示のホストが接続されていてもよい。そして、さらに以下のようなパケットが、ポート37を介してネットワーク監視装置40に出力されてもよい。すなわち、ネットワーク監視装置40は以下のようなパケットをさらにキャプチャしてもよい。
・ネットワーク装置34の不図示の2つのポートに接続される不図示の2台のホスト間のコネクション上で送受信されるパケット。
・ネットワーク装置34の不図示の1つのポートに接続される不図示の1台のホストと、ホスト31との間のコネクション上で送受信されるパケット。
・ネットワーク装置34の不図示の1つのポートに接続される不図示の1台のホストと、ホスト32との間のコネクション上で送受信されるパケット。
例えば、IPアドレスが「10.25.1.16」のホストと、IPアドレスが「10.25.1.210」のホストが、ネットワーク装置34にさらに接続されていてもよい。そして、前者のホストの300番ポートと後者のホストの45番ポートの間にコネクションが確立されていてもよい。図9のコネクション管理テーブル47の3番目のエントリは、以上のようなコネクションの2つのサブコネクションのうち、前者のホストから後者のホストへ向かう方向のサブコネクションに対応する。また、4番目のエントリは、逆方向のサブコネクションに対応する。
3番目のエントリに対応するサブコネクションのコネクションIDは、図9によれば「2−1」である。また、4番目のエントリに対応するサブコネクションのコネクションIDは、図9によれば「2−2」である。
なお、図9には、図4および6に示す時刻T12〜T16それぞれにおけるパケットの受信に応じて更新されたコネクション管理テーブル47が、コネクション管理テーブル47a〜47eとして例示されている。具体的には、図9には、コネクションIDが「1−1」のエントリの変遷が例示されている。コネクション管理テーブル47a〜47eの具体例については、図11〜14のフローチャートとともに後述する。
さて、図10は、図7の解析情報テーブル48の例を示す図である。解析情報テーブル48の各エントリも、1つのサブコネクションに対応する。解析情報テーブル48の各エントリは、以下のフィールドを有する。
・当該エントリのサブコネクションを識別するための識別情報を表す「コネクションID」フィールド。
・当該エントリのサブコネクションにとってのデータ方向で今までに送信されたと推定されるデータパケットの数を表す「パケット数」フィールド。
・当該エントリのサブコネクションにとってのデータ方向で今までに再送されたと推定されるデータパケットの数を表す「再送数」フィールド。
・当該エントリのサブコネクション上をデータ方向に流れるデータパケットに関して今までに生じたと推定されるキャプチャロスの回数を表す「キャプチャロス数」フィールド。
・当該エントリのサブコネクション上でデータ方向とACK方向にそれぞれ送信されるデータパケットとACKパケットの間で、今までに生じたと推定される、キャプチャ順序の逆転の回数を表す「複製時逆転数」フィールド。
例えば、図10によれば、「1−1」というコネクションIDで識別されるサブコネクションに関する1番目のエントリは、以下のことを示す。
・当該サブコネクション上で今までに13個のデータパケットがデータ方向に送信された、と推定される。
・当該サブコネクション上で今までにデータパケットの再送が3回生じた、と推定される。
・当該サブコネクション上をデータ方向に流れるデータパケットに関しては、今までにキャプチャロスは1回も生じていない、と推定される。
・当該サブコネクション上で送信されるデータパケットとACKパケットの間でのキャプチャ順序の逆転が、今までに1回生じた、と推定される。
なお、ネットワーク監視装置40は、サブコネクションごとのエントリを有する上記のごとき解析情報テーブル48の代わりに、コネクションごとのエントリを有する解析情報テーブル48bを有してもよい。解析情報テーブル48bにおける1つのエントリは、対になる2つのサブコネクションに対応する解析情報テーブル48の2つのエントリを集約したものである。解析情報テーブル48bの形式は解析情報テーブル48と同じである。
例えば、解析情報テーブル48において「1−1」と「1−2」というコネクションIDを持つ2つのエントリには、2つのサブコネクションが対応する。これら2つのサブコネクションを含むコネクションは、解析情報テーブル48bでは、「1」というコネクションIDにより識別される。
例えば、解析情報テーブル48において「1−1」と「1−2」というコネクションIDを持つ2つのエントリの複製時逆転数の和は3(=1+2)である。この3という数値が、解析情報テーブル48bにおいて「1」というコネクションIDを持つエントリの複製時逆転数として記憶される。他のフィールドについても同様に、解析情報テーブル48において対になる2つのエントリの値が、解析情報テーブル48の1つのエントリに集約される。
続いて、図7のネットワーク監視装置40が行う処理について、図11〜14のフローチャートを参照して説明する。通信インタフェイス41がネットワーク装置34のポート37に接続され、ネットワーク監視装置40に電源が入れられると、ネットワーク監視装置40は図11〜14の処理を開始することができる。なお、以下では図11〜14の各ステップについて先に説明し、その後、図6および図9に示した具体例と図11〜14の処理の関係について説明する。
ステップS101でネットワーク監視装置40は、ポート37から出力されるパケットを通信インタフェイス41が受信(つまりキャプチャ)するまで待つ。なお、以下では説明の便宜上、ステップS101で通信インタフェイス41が受信したパケットを「対象パケット」ともいう。
通信インタフェイス41がパケットを受信(つまりキャプチャ)すると、抽出部42は、受信されたパケットからヘッダ情報を抽出し、抽出したヘッダ情報を出力する。ヘッダ情報は、具体的には以下の各フィールドの値を含む。もちろん、抽出部42はIPヘッダとTCPヘッダ中の他のフィールドの値を、ヘッダ情報にさらに含めてもよい。
・IPヘッダ内の、IHL、全長、ID、送信元IPアドレス、および送信先IPアドレス。
・TCPヘッダ内の、送信元ポート番号、送信先ポート番号、シーケンス番号、ACK番号、ACKフラグ、SYNフラグ、FINフラグ。
こうして抽出される、送信元IPアドレスと、送信元ポート番号と、送信先IPアドレスと、送信先ポート番号との組み合わせにより、「対象パケットはどのコネクション上を流れてきてキャプチャされたのか」ということが識別可能である。
なお、通信インタフェイス41内のバッファがオーバフローしている場合などには、パケットがポート37から出力されるにもかかわらず、通信インタフェイス41がパケットの受信(つまりキャプチャ)に失敗することがあり得る。このように通信インタフェイス41においてキャプチャロスが生じる場合には、パケットは正常に受信されない。よって、通信インタフェイス41においてキャプチャロスが生じる場合には、ネットワーク監視装置40は、次に別のパケットが成功裡に通信インタフェイス41によりキャプチャされるまで、ステップS101で待つ。
次に、ステップS102で管理部43は、以下の2つの条件のうちのいずれかが成立するか否かを、抽出されたヘッダ情報に基づいて判断する。
・対象パケットの送信に使われているコネクションについての情報が、コネクション管理テーブル47にはまだ登録されていない。
・対象パケットは、コネクションを解放しようとする(つまりクローズしようとする)ためのパケットである。
具体的には、管理部43は、対象パケットの送信に使われているコネクションに対応する2つのエントリをコネクション管理テーブル47において検索する。検索キーとして、対象パケットの送信に使われているコネクションを識別する情報(つまり、対象パケットの送信元IPアドレスと、送信元ポート番号と、送信先IPアドレスと、送信先ポート番号)が使われる。
検索の結果、対象パケットの送信に使われているコネクションに対応する2つのエントリが見つかれば、対象パケットの送信に使われているコネクションについての情報はコネクション管理テーブル47に登録済みである。逆に、エントリが見つからなければ、対象パケットの送信に使われているコネクションについての情報はコネクション管理テーブル47にまだ登録されていない。
また、管理部43は、対象パケットのFINフラグの値が1ならば、「対象パケットは、コネクションを解放しようとするためのパケットである」と判断する。管理部43は、かつてキャプチャされたFINパケットに対するACKパケットが今回ステップS101でキャプチャされた場合にも、「対象パケットは、コネクションを解放しようとするためのパケットである」と判断する。
例えば、コネクション管理テーブル47には、コネクションの確立と解放に関する状態を示すためのフィールドがさらに含まれていてもよい。管理部43は、そのようなフィールドを参照することにより、「かつてキャプチャされたFINパケットに対するACKパケットが今回ステップS101でキャプチャされたのか否か」を判断してもよい。もちろん、そのようなコネクション管理テーブル47中のフィールドの代わりに、新たに確立されようとしているコネクションに関する情報と、解放されようとしている確立済みのコネクションに関する情報を記憶するための一時的な記憶領域が使われてもよい。
上記の2つの条件のうちのいずれかが成立する場合、コネクション管理テーブル47へのエントリの追加、または、コネクション管理テーブル47からのエントリの削除が生じ得る。よって、上記のいずれかの条件が成立する場合、管理部43は、ステップS102の次にステップS103の判断を行う。
逆に、上記の2つの条件がいずれも成立しない場合とは、コネクション管理テーブル47に登録済みの既存の2つのエントリに対応するコネクション上を流れるパケットが、今回キャプチャされた場合である。よって、上記の2つの条件がいずれも成立しない場合、検出部44がステップS109以降の処理を行う。
さて、ステップS103で管理部43は、「対象パケットが、コネクション管理テーブル47には未登録のコネクション上を流れる通常のパケット(例えば、データパケットや、データパケットに対するACKパケットなど)であるか否か」を判断する。
例えば、ホスト31と32の間にコネクションが確立した後で、ネットワーク監視装置40がポート37に接続され、ネットワーク監視装置40が図11〜14の処理を開始することがあり得る。このような場合、ネットワーク監視装置40は、SYNパケット等のコネクション確立用のパケットをキャプチャする前に、通常のパケットをキャプチャする可能性がある。
具体的には、管理部43は、「対象パケットの送信に使われているコネクションについての情報はコネクション管理テーブル47に未登録」とステップS102で判断した場合、ステップS103で対象パケットのSYNフラグを参照する。SYNフラグの値が1ならば、管理部43は、「対象パケットは通常のパケットではない」と判断する。また、たとえ対象パケットのSYNフラグの値が0であっても、対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットである場合には、管理部43は、「対象パケットは通常のパケットではない」と判断する。
例えば、上記のように、コネクション管理テーブル47には、コネクションの確立と解放に関する状態を示すための不図示のフィールドがあってもよい。管理部43は、そのようなフィールド(または上記のような一時的な記憶領域)を参照することにより、「対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットであるのか否か」を判断してもよい。
以上のような処理の結果、管理部43が対象パケットを「コネクション管理テーブル47には未登録のコネクション上を流れる通常のパケットである」と判断した場合は、管理部43は次にステップS104の処理を行う。
逆に、管理部43が対象パケットを「コネクション管理テーブル47には未登録のコネクション上を流れる通常のパケットではない」と判断した場合は、管理部43は次にステップS105の処理を行う。なお、管理部43が「対象パケットは、コネクションを解放しようとするためのパケットである」とステップS102で判断した場合も、管理部43は、ステップS103の次にステップS105の処理を行う。
ステップS104で管理部43は、対象パケットの送信に使われている未登録のコネクションに関する情報を、コネクション管理テーブル47に登録する。具体的には、管理部43は、対象パケットの送信に使われている未登録のコネクションの2つのサブコネクションに対応する、2つの新たなコネクションIDを発行する。そして、管理部43は、上記2つのサブコネクションに対応する、2つの新たなエントリをコネクション管理テーブル47に追加する。管理部43は、2つの新たなエントリの各々において、上記のように発行した値をコネクションIDとして設定する。
また、管理部43は、2つの新たなエントリのうちの一方の送信元IPアドレス、送信元ポート番号、送信先IPアドレス、および送信先ポート番号のフィールドには、対象パケットから抽出された値を設定する。管理部43は、他方のエントリでは、送信元IPアドレスと送信元ポート番号として対象パケットの送信先IPアドレスと送信先ポート番号を設定し、送信先IPアドレスと送信先ポート番号として対象パケットの送信元IPアドレスと送信元ポート番号を設定する。
管理部43は、対象パケットのヘッダ情報に基づいて、コネクション管理テーブル47の他のフィールドに、適宜のダミー値をさらに設定することが好ましい。
例えば、対象パケットのTCPデータ長が0より大きい場合、管理部43は、以下のようなダミー値を設定してもよい。以下のダミー値は、後述のステップと整合性のとれる適宜のダミー値の例である。
・対象パケットが流れる方向をデータ方向とするサブコネクションのエントリのIP−IDフィールドのダミー値として、対象パケットのIP−IDから1を引いた値を設定する。
・対象パケットが流れる方向をデータ方向とするサブコネクションのエントリの最大シーケンス番号フィールドのダミー値として、対象パケットのシーケンス番号から適宜の数を引いた値を設定する。
ステップS104でのコネクション管理テーブル47への2つのエントリの追加の後、図11〜14の処理はステップS109へと移行する。
さて、ステップS105で管理部43は、対象パケットがコネクション確立用のパケットであるか否かを判断する。具体的には、管理部43は、対象パケットのSYNフラグを参照する。SYNフラグの値が1ならば、管理部43は、「対象パケットは、SYNパケットまたはSYN/ACKパケットであるから、コネクション確立用のパケットである」と判断する。また、たとえ対象パケットのSYNフラグの値が0であっても、対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットである場合には、管理部43は、「対象パケットはコネクション確立用のパケットである」と判断する。
例えば、上記のように、コネクション管理テーブル47には、コネクションの確立と解放に関する状態を示すための不図示のフィールドがあってもよい。管理部43は、そのようなフィールド(または上記のような一時的な記憶領域)を参照することにより、「対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットであるのか否か」を判断してもよい。
以上のような処理の結果、管理部43が対象パケットを「コネクション確立用のパケットである」と判断した場合には、管理部43は次にステップS106の処理を行う。逆に、管理部43が対象パケットを「コネクション確立用のパケットではない」と判断した場合には、管理部43は次にステップS107の処理を行う。
ステップS106で管理部43は、新たなコネクションに関する情報をコネクション管理テーブル47に登録するための処理を行う。
具体的には、対象パケットがSYNパケットの場合、管理部43は、新たに確立されようとしているコネクションの2つのサブコネクションに対応する、2つの新たなコネクションIDを発行し、2つの新たなエントリをコネクション管理テーブル47に追加する。これら2つのエントリの追加はステップS104における追加と同様である。
管理部43は、SYNパケットに指定されているISN(Initial Sequence Number)に応じた適宜のダミー値を、新規エントリ中のフィールドに設定してもよい。例えば、SYNパケットが送信される方向をデータ方向とするサブコネクションのエントリの最大シーケンス番号のダミー値として、ISNから1を引いた値が設定されてもよい。
また、対象パケットがSYN/ACKパケットの場合、管理部43は、新たに確立されようとしているコネクションに関してかつてSYNパケットが受信された際に追加された2つのエントリを、適宜更新する。例えば、上記のようにコネクション管理テーブル47には、コネクションの確立と解放に関する状態を示すための不図示のフィールドがあってもよく、管理部43は当該フィールドを更新してもよい。また、管理部43は、例えば、SYN/ACKパケットに指定されているISNから1を引いた値を、SYN/ACKパケットが送信される方向をデータ方向とするサブコネクションのエントリの最大シーケンス番号のダミー値として、設定してもよい。
あるいは、対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットの場合、管理部43は、新たに確立されようとしているコネクションに関してかつてSYNパケットが受信された際に追加された2つのエントリを、適宜更新する。例えば、管理部43は、コネクションの確立と解放に関する状態を示すための不図示のフィールドを更新してもよい。
ステップS106におけるコネクション管理テーブル47の更新が完了すると、図11〜14の処理はステップS101に戻る。
なお、上記の説明では、コネクションの確立と解放に関する状態を示すための不図示のフィールドがコネクション管理テーブル47に含まれる場合を例としたが、そのようなフィールドの代わりに、一時的な記憶領域が使われてもよい。例えば、管理部43は、対象パケットがSYNパケットの場合と、対象パケットがSYN/ACKパケットの場合には、ステップS106では、新規コネクションの2つのサブコネクションに関する情報を一時的な記憶領域に記憶するだけでもよい。そして、対象パケットが、かつてキャプチャされたSYN/ACKパケットに対するACKパケットである場合に、管理部43は、上記の一時的な記憶領域を参照して、コネクション管理テーブル47に新規エントリを2つ追加してもよい。
さて、ステップS107で管理部43は、「対象パケットは、コネクションを解放する(つまりクローズする)ためのパケットであるか否か」を判断する。具体的には、管理部43は、対象パケットのFINフラグを参照する。FINフラグの値が1ならば、管理部43は、「対象パケットは、コネクション解放用のパケットである」と判断する。
また、かつてキャプチャされたFINパケットに対するACKパケットが今回ステップS101でキャプチャされた場合にも、管理部43は、「対象パケットはコネクション解放用のパケットである」と判断する。例えば、管理部43は、コネクションの確立と解放に関する状態を示すための、コネクション管理テーブル47中の不図示のフィールド、または、コネクションの確立と解放に関する情報を記憶するための一時的な記憶領域を参照してもよい。それにより、管理部43は、「対象パケットが、かつてキャプチャされたFINパケットに対するACKパケットであるのか否か」を判断してもよい。
以上のような処理の結果、管理部43が対象パケットを「コネクション解放用のパケットである」と判断した場合には、管理部43は次にステップS108の処理を行う。逆に、管理部43が対象パケットを「コネクション解放用のパケットではない」と判断した場合には、図11〜14の処理はステップS101へと戻る。
なお、何らかのエラーが生じない限り、ステップS107で管理部43が対象パケットを「コネクション解放用のパケットではない」と判断することはない。よって、ステップS107で管理部43が対象パケットを「コネクション解放用のパケットではない」と判断した場合、不図示の適宜のエラー処理が、ステップS107とS101の間に行われてもよい。
ステップS108で管理部43は、解放されようとしているコネクションに関する情報をコネクション管理テーブル47から削除するための処理を行う。
具体的には、対象パケットがFINパケットの場合、管理部43は、FINパケットが送信される方向をデータ方向とするサブコネクションの状態を示す情報を更新する。なお、上記のとおり、状態を示す情報は、例えば、コネクション管理テーブル47中の不図示のフィールドに記憶されてもよいし、一時的な記憶領域に記憶されてもよい。状態を示す情報の更新は、コネクション管理テーブル47からのエントリの削除を準備する処理であるから、削除のための処理の一種である。また、対象パケットが、かつてキャプチャされたFINパケットに対するACKパケットの場合、管理部43は、当該ACKパケットが送信される方向をACK方向とするサブコネクションのエントリを、コネクション管理テーブル47から削除する。
ステップS108の完了後、図11〜14の処理はステップS101に戻る。
さて、ステップS109は、確立済みのコネクション上で送信されるデータパケットまたはACKパケットが、ステップS101で受信(つまりキャプチャ)された場合に実行される。ステップS102における検索の結果として、または、ステップS104における登録の結果として、ステップS109の実行時には、対象パケットの送信に使われるコネクションに関する、コネクション管理テーブル47の2つのエントリが既に特定されている。そこで、ステップS109で検出部44は、コネクションとサブコネクションを選択する。
具体的には、対象パケットの送信元IPアドレス、送信元ポート番号、送信先IPアドレス、および送信先ポート番号は、抽出部42から直接検出部44へ出力されてもよいし、抽出部42から管理部43を介して検出部44へ出力されてもよい。いずれにせよ、検出部44は、対象パケットの送信元IPアドレス、送信元ポート番号、送信先IPアドレス、および送信先ポート番号に基づき、対象パケットの送信に使われるコネクションを認識することができる。よって、検出部44は認識したコネクションを選択する。
また、選択されたコネクションは2つのサブコネクションを含む。ステップS109で検出部44は、2つのサブコネクションのうちの一方を選択する。なお、他方のコネクションは後述のステップS123で選択される。検出部44は、どちらのサブコネクションを先にステップS109で選択してもよい。
以下、ステップS109で選択されたコネクションを「選択コネクション」ともいう。そして、ステップS109またはS123で選択されたサブコネクションを「選択サブコネクション」ともいう。
ステップS109での選択の後、ステップS110で検出部44は、対象パケットが送信される方向が、選択サブコネクションにとってのデータ方向であるのか、それとも、選択サブコネクションにとってのACK方向であるのかを判断する。検出部44は、対象パケットの送信元IPアドレスと送信先IPアドレスを、コネクション管理テーブル47における選択サブコネクションのエントリの送信元IPアドレスと送信先IPアドレスと比較することで、ステップS110の判断を行ってもよい。
対象パケットが送信される方向が、選択サブコネクションにとってのデータ方向である場合、検出部44は次に図12のステップS111の判断を行う。逆に、対象パケットが送信される方向が、選択サブコネクションにとってのACK方向である場合、検出部44は次に図14のステップS124の判断を行う。
さて、ステップS111で検出部44は、対象パケットがデータを含むか否かを判断する。具体的には、検出部44は、IPヘッダ中の全長フィールドと、IPヘッダ中のIHLフィールドと、TCPヘッダ中のデータオフセットから、対象パケットのTCPデータ長を算出する。TCPデータ長が0の場合、対象パケットはデータを含まず、TCPデータ長が正の場合、対象パケットはデータを含む。
対象パケットがデータを含む場合(つまり、選択サブコネクションのデータ方向に送信されるデータパケットが、ステップS101で対象パケットとしてキャプチャされた場合)、検出部44は図10の解析情報テーブル48のパケット数フィールドを更新し、次にステップS112の判断を行う。逆に、対象パケットがデータを含まない場合、検出部44は次に図13のステップS122の判断を行う。
解析情報テーブル48のパケット数フィールドの更新は、具体的には以下のように行われる。検出部44は、解析情報テーブル48において選択サブコネクションのコネクションIDを有するエントリを検索する。そして、検出部44は、見つかったエントリのパケット数フィールドの値を、1だけインクリメントする。
実施形態によっては、解析情報テーブル48の代わりに解析情報テーブル48bが使われてもよい。この場合、検出部44は、解析情報テーブル48bにおいて選択コネクションのコネクションIDを有するエントリを検索する。そして、検出部44は、見つかったエントリのパケット数フィールドの値を、1だけインクリメントする。図10の例では、任意のjについて、「j−1」と「j−2」というコネクションIDで識別される2つのサブコネクションを含むコネクションが、「j」というコネクションIDで識別されている。
なお、選択サブコネクションのデータ方向は、選択サブコネクションとは逆方向のサブコネクションにとってのACK方向であることに注意されたい。つまり、選択サブコネクションとは逆方向のサブコネクション上を流れるデータストリームに関するACKパケットは、選択サブコネクションのデータ方向に送信される。
具体的には、対象パケットが、そのようなACKパケットであり、かつピギーバック(piggy-back)されていないACKパケットである場合に、ステップS111で「対象パケットがデータを含まない」と判断される。この場合、次に後述の図13のステップS122が実行される。
さて、ステップS112で検出部44は、対象パケットのTCPヘッダ中のシーケンス番号と、コネクション管理テーブル47における選択サブコネクションのエントリの最大ACK番号を比較する。シーケンス番号が最大ACK番号未満の場合(例えば、図4および図6の時刻T15で、データパケットD13が対象パケットとしてキャプチャされた場合など)、次の2つの可能性がある。
・対象パケットが、再送されたデータパケットである可能性。
・対象パケットが、キャプチャ過程での順序逆転のせいで、ACKパケットよりも遅れてキャプチャされたデータパケットである可能性。
よって、シーケンス番号が最大ACK番号未満の場合、検出部44は、2つの可能性を判別するために、次にステップS113の判断を行う。逆に、シーケンス番号が最大ACK番号以上の場合、検出部44は、キャプチャ過程でのデータパケットとACKパケットの間の順序逆転の可能性を考慮する必要がない。よって、シーケンス番号が最大ACK番号以上の場合(例えば、図6の時刻T17でデータパケットD15が対象パケットとしてキャプチャされた場合など)、検出部44は次に図13のステップS119の判断を行う。
さて、ステップS113で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリの、逆転範囲フィールドを参照する。そして、検出部44は、対象パケット(すなわち、選択サブコネクションのデータ方向に送信されるデータパケット)のシーケンス番号が、逆転範囲外か否かを判断する。
逆転範囲フィールドが空であれば、対象パケットのシーケンス番号は逆転範囲外である。あるいは、逆転範囲フィールドに「SN1以上SN2未満」という範囲が記憶されている場合があり得る。この場合、対象パケットのシーケンス番号がSN1未満またはSN2以上ならば、対象パケットのシーケンス番号は、逆転範囲外である。逆に、対象パケットのシーケンス番号がSN1以上かつSN2未満ならば、対象パケットのシーケンス番号は、逆転範囲内である。
例えば、図6の時刻T14にACKパケットA14がキャプチャされた場合、逆転範囲24には2つのデータパケットD13とD14が含まれる。このように、2つ以上のデータパケットがキャプチャされるよりも先に、それら2つ以上のデータパケットの受信を通知するためのACKパケットがキャプチャされる場合があり得る。
この場合、2つ以上のデータパケットのうちの最初の1つがキャプチャされた際に、再送と順序逆転の判別が行われる。そして、順序逆転と判断された場合には、順序逆転のせいでACKパケットより遅れてキャプチャされる可能性のある2つ目以降のデータパケットのシーケンス番号の範囲が、逆転範囲フィールドに記録される(詳しくは後述のステップS117〜S118を参照)。
よって、ACKパケットより遅れてキャプチャされる2つ以上のデータパケットのうちの、2つ目以降のいずれかのデータパケットがステップS101でキャプチャされると、ステップS113では、「対象パケットのシーケンス番号は逆転範囲内」と判断される。なお、逆転範囲の上限のシーケンス番号SN2は、先にキャプチャされたACKパケットのACK番号により規定される。よって、図9とともに後述する具体例からも明らかなように、例えば図6のデータパケットD15のように逆転範囲24の後に正常にキャプチャされる後続のデータパケットに関しては、ステップS113で「逆転範囲外」と判断される。
対象パケットのシーケンス番号が逆転範囲内の場合は、「再送ではなく順序逆転が生じた」という判断が既になされている。よって、この場合、検出部44は、次に、検出済みの順序逆転に関する処理をステップS118で行う。
逆に、対象パケットのシーケンス番号が逆転範囲外の場合は、順序逆転はまだ検出されていない。そこで、検出部44は、順序逆転の可能性について検討するため、次にステップS114の処理を行う。
具体的には、ステップS114で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリの、暫定キャプチャロス範囲フィールドを参照する。そして、検出部44は、対象パケット(すなわち、選択サブコネクションのデータ方向に送信されるデータパケット)のシーケンス番号が、暫定キャプチャロス範囲内か否かを判断する。
暫定キャプチャロス範囲フィールドが空であれば、対象パケットのシーケンス番号は暫定キャプチャロス範囲外である。
あるいは、暫定キャプチャロス範囲フィールドに「SN1以上SN2未満」という範囲が記憶されている場合があり得る。この場合、対象パケットのシーケンス番号がSN1未満またはSN2以上ならば、対象パケットのシーケンス番号は、暫定キャプチャロス範囲外である。逆に、対象パケットのシーケンス番号がSN1以上かつSN2未満ならば、対象パケットのシーケンス番号は、暫定キャプチャロス範囲内である。
例えば、図6の時刻T14にACKパケットA14がキャプチャされると、検出部44は、以下の2つの可能性があることを検出する(詳しくは後述のステップS125〜S126を参照)。
・キャプチャロスが原因でキャプチャされていない1つ以上のデータパケットが何らかの理由で再送されて、当該1つ以上の再送データパケットが、今回キャプチャされたACKパケットより後に(つまり将来において)キャプチャされるかもしれない、という可能性。
・キャプチャ過程で、1つ以上のデータパケットと、当該1つ以上のデータパケットの受信を通知するためのACKパケットとの間での順序逆転が起きており、そのため、今回のACKパケットがデータパケットより先に受信された、という可能性。
しかし、ACKパケットがキャプチャされた段階では、キャプチャロスと再送が起きたのか、順序逆転が起きたのかは、まだ不明である。一方、ACKパケットがキャプチャされた段階で検出部44により「キャプチャロスが生じたのかもしれない」と認識される範囲は、ACKパケットがキャプチャされた段階で検出部44により「順序逆転が起きたのかもしれない」と認識される範囲と同じである。よって、ACKパケットがキャプチャされた段階では、キャプチャロスまたは順序逆転の範囲が、暫定キャプチャロス範囲フィールドに記録される。
よって、キャプチャロスの後に再送が生じた場合に、再送されたデータパケットがACKパケットの後にステップS101でキャプチャされると、ステップS114では「対象パケットのシーケンス番号は暫定キャプチャロス範囲内」と判断される。また、キャプチャ過程の順序逆転のせいで、1つ以上のデータパケットがACKパケットより遅れてキャプチャされる場合もあり得る。この場合、当該1つ以上のデータパケットのうちの1つ目がステップS101でキャプチャされると、ステップS114では「対象パケットのシーケンス番号は暫定キャプチャロス範囲内」と判断される。
もちろん、キャプチャロスとは無関係にデータパケットが再送される場合もあり得る。例えば、以下のような場合である。
・シーケンス番号が501でTCPデータ長が100のデータパケットが送信され、キャプチャされる。
・その後、当該データパケットに対するACKとして、ACK番号が601のACKパケットが送信され、キャプチャされる。
・しかし、当該ACKパケットは、キャプチャされた後にネットワーク上で消失してしまう。
・その結果、シーケンス番号が501でTCPデータ長が100のデータパケットが再送され、この再送されたデータパケットがキャプチャされる。
例えば上記の例のように、キャプチャロスとは無関係にデータパケットが再送される場合などは、ステップS114で「対象パケットのシーケンス番号は暫定キャプチャロス範囲外」と判断される。このように、対象パケットのシーケンス番号が暫定キャプチャロス範囲外の場合、検出部44は、順序逆転の可能性を排除することができる。
ステップS114において「対象パケットのシーケンス番号は暫定キャプチャロス範囲内」と判断した場合、検出部44は、次に、キャプチャロスと再送が起きたのか、それとも順序逆転が起きたのかを判別するために、ステップS115の判断を行う。逆に、ステップS114において「対象パケットのシーケンス番号は暫定キャプチャロス範囲外」と判断した場合、検出部44は、次にステップS116の処理を行う。
さて、ステップS115で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリのIP−IDフィールドの値を読み取る。こうして読み取られる値は、図1に関して説明した「前回データパケット」のIP−IDである。なぜなら、IP−IDフィールドは、後述のステップS121で更新されるからである。
前回データパケットは、「キャプチャロスと再送が起きたか、キャプチャ過程での順序逆転が起きた」と検出部44が検出する契機となったACKパケットよりも前にキャプチャされたデータパケットの中では、最も遅くにキャプチャされたデータパケットである。以下のいくつかの式では、前回データパケットのIP−IDを「Prev」と表記することがある。
また、ステップS115で検出部44は、「キャプチャロスと再送が起きた」と想定した場合における、ネットワーク監視装置40がキャプチャに失敗したデータパケットの個数を算出する。以下、この個数を「暫定ロス数」といい、「Loss」と表記することがある。
具体的には、検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリから、暫定キャプチャロス範囲フィールドと最大長さフィールドの値を読み出す。説明の便宜上、暫定キャプチャロス範囲フィールドに記憶されている範囲を「SN1以上SN2未満」とし、かつ、最大長さフィールドに記憶されている長さを「MaxLen」とする。この場合、検出部44は、式(1)のように暫定ロス数を算出する。なお、ceil(x)は、引数x以上で引数xに最も近い整数とする。
Loss = ceil((SN2-SN1)/MaxLen) (1)
式(1)のように最大長さに基づいて算出される暫定ロス数は、キャプチャロスの回数の最小の推定値である。図1に関して説明したとおり、キャプチャロスの回数の推定値として最小の推定値を用いることは、副作用を抑える効果があるので、好ましい。
さらに、ステップS115で検出部44は、読み取った前回データパケットのIP−IDと、算出した暫定ロス数と、対象パケットのIP−IDに基づいて、「式(2)が成り立つか否か」を判断する。なお、式(2)では、対象パケットのIP−ID(すなわち今回キャプチャされたデータパケットのIP−ID)が「Cur」と表記されている。
Prev+Loss < Cur (2)
式(2)が成り立つ場合、検出部44は、「キャプチャロスと再送が起きた」と判断する。なぜなら、前回データパケットに対する送信元ホストでのIP−IDの発行後、対象パケットまでのパケットに対して送信元ホストで消費されたIP−IDの個数が、閾値としての暫定ロス数よりも大きいからである。そのため、式(2)が成り立つ場合、検出部44は次にステップS116の処理を行う。
逆に、式(2)が成り立たない場合、検出部44は、「キャプチャ過程でのデータパケットとACKパケットの間の順序逆転が起きた」と判断する。すなわち、この場合、検出部44は、順序逆転を検出する。より詳しくは、検出部44は、「1つ以上のデータパケットと、当該1つ以上のデータパケットの受信を通知するためのACKパケットとの間での順序逆転が起きて、対象パケットは当該1つ以上のデータパケットのうちの1つ目である」と判断する。この場合、検出部44は次にステップS117の処理を行う。
なお、式(2)は式(3)と等価である。つまり、検出部44は、今回キャプチャされた対象パケットのIP−IDと前回データパケットのIP−IDの差が、閾値としての暫定ロス数より大きければ、「キャプチャロスと再送が生じた」と判断する。逆に、検出部44は、検出部44は、今回キャプチャされた対象パケットのIP−IDと前回データパケットのIP−IDの差が、閾値としての暫定ロス数以下ならば、「順序逆転が生じた」と判断する。
Loss < Cur-Prev (3)
なお、式(3)の「Cur」と「Prev」と「Loss」は、それぞれ、図1に関して説明した「第3の数値」と「第4の数値」と「閾値」の例である。また、図1に関して、「閾値」が「第1の数値」と「第5の数値」と「前回データパケットのサイズ」と「サイズ値」に基づく場合を説明した。式(1)はそのような「閾値」の算出法の一例を示す。つまり、式(1)の「SN2」は「第1の数値」の例であり、式(1)の「SN1」は「第5の数値」と「前回データパケットのサイズ」の和に相当し、式(1)の「MaxLen」は「サイズ値」の例である。
さて、再送を検出した場合、ステップS116で検出部44は、解析情報テーブル48における選択サブコネクションのエントリの再送数を1だけインクリメントする。あるいは、検出部44は、解析情報テーブル48bおける選択コネクションのエントリの再送数を1だけインクリメントしてもよい。そして、図11〜14の処理はステップS121へと移行する。
一方、順序逆転を検出した場合、ステップS117で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリを更新する。具体的には、検出部44は、暫定キャプチャロス範囲フィールドの値を、逆転範囲フィールドに転写し、暫定キャプチャロス範囲をクリアする。ステップS117は、キャプチャ過程での順序逆転のせいで、2つ以上のデータパケットがACKパケットよりも後にキャプチャされる場合の、2つ目以降のデータパケットのキャプチャに備えるために行われる。検出部44は、ステップS117の次に、ステップS118を実行する。
ステップS118は、順序逆転がステップS115で検出されてステップS117が実行された場合か、ステップS113で「対象パケットのシーケンス番号は逆転範囲内」と判断された場合に、実行される。後者の場合は、換言すれば、検出済みの順序逆転に関する2つ目以降のデータパケットが、ステップS101でキャプチャされた場合である。つまり、ステップS118は、対象パケットが、キャプチャ過程での順序逆転のせいでACKパケットより送れてキャプチャされたいずれかのデータパケットである場合に、実行される。
具体的には、ステップS118で検出部44は、解析情報テーブル48における選択サブコネクションのエントリの複製時逆転数を1だけインクリメントする。あるいは、検出部44は、解析情報テーブル48bおける選択コネクションのエントリの複製時逆転数を1だけインクリメントしてもよい。
また、ステップS118で検出部44は、解析情報テーブル48における選択サブコネクションのエントリのキャプチャロス数を1だけデクリメントする。あるいは、検出部44は、解析情報テーブル48bにおける選択コネクションのエントリのキャプチャロス数を1だけデクリメントしてもよい。このようなキャプチャロス数のデクリメントは、以前、ACKパケットのキャプチャの際に暫定的に行われたキャプチャロス数のインクリメント(詳しくはステップS126とともに後述する)の影響を、打ち消すために行われる。
さらに、ステップS118で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリの逆転範囲フィールドを更新する。具体的には、検出部44は、対象パケットのシーケンス番号と対象パケットのTCPデータ長の和を算出する。そして、算出した和が逆転範囲の上限以上ならば、検出部44は、逆転範囲フィールドをクリアする。逆に、算出した和が逆転範囲の上限より小さければ、検出部44は、逆転範囲の下限を、算出した和に更新する。このように逆転範囲を更新することで、検出部44は、順序逆転に起因してACKパケットより後にキャプチャされると推定される1つ以上のデータパケットのうち未キャプチャのデータパケットに相当するオクテットの範囲を、適切に認識することができる。
以上のようなステップS118における解析情報テーブル48とコネクション管理テーブル47の更新の後、図13のステップS119が実行される。
図12〜13から分かるように、ステップS119は、ステップS112で「対象パケットのシーケンス番号が選択サブコネクションのエントリの最大ACK番号以上である」と判断された場合に実行される。また、ステップS119は、ステップS112で「対象パケットのシーケンス番号が選択サブコネクションのエントリの最大ACK番号未満である」と判断された後に、「対象パケットは再送データパケットではない」と判断された場合にも実行される。
具体的には、ステップS119で検出部44は、対象パケットのシーケンス番号と、コネクション管理テーブル47における選択サブコネクションのエントリの最大シーケンス番号を比較する。
対象パケットのシーケンス番号が最大シーケンス番号より大きい場合、「対象パケットは再送データパケットではない」と推定される。よって、この場合、検出部44は次にステップS120を実行する。
逆に、対象パケットのシーケンス番号が最大シーケンス番号以下の場合、「対象パケットは再送データパケットである」と推定される。よって、この場合、検出部44は次に前述のステップS116を実行する。
ステップS120で検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリの最大シーケンス番号とACK期待値を更新する。具体的には、検出部44は、対象パケットのシーケンス番号を、最大シーケンス番号フィールドに記憶する。また、検出部44は、対象パケットのシーケンス番号と対象パケットのTCPデータ長の和を、ACK期待値フィールドに記憶する。
そして、ステップS120またはS116の実行後に、検出部44は、ステップS121の処理を行う。
具体的には、検出部44は、コネクション管理テーブル47における選択サブコネクションのIP−IDフィールドの値を、対象パケットのIP−IDに更新する。
また、ステップS121で検出部44は、コネクション管理テーブル47における選択サブコネクションの最大長さフィールドを、必要に応じて更新する。つまり、検出部44は、最大長さフィールドの値を対象パケットのTCPデータ長と比較し、対象パケットのTCPデータ長の方が最大長さフィールドの現在の値より大きければ、最大長さフィールドに対象パケットのTCPデータ長を設定する。
次に、ステップS122で検出部44は、選択サブコネクションと逆方向のサブコネクションが解析済みか否かを判断する。つまり、ステップS109で選択されたコネクションの2つのサブコネクションの双方について、ステップS110以降の処理が済んでいるか否かを検出部44は判断する。
2つのサブコネクションについてステップS110以降の処理が実行済みの場合、対象パケットに関する処理は完了している。よって、この場合、図11〜14の処理はステップS101へと戻り、ネットワーク監視装置40は次のパケットを待つ。
逆に、2つのサブコネクションのうちの一方についてしか、まだステップS110以降の処理が実行されていない場合、検出部44は、次にステップS123を実行する。つまり、検出部44は、現在の選択サブコネクションとは逆方向のサブコネクションを選択する。そして、検出部44は、新たに選択したサブコネクションに関して、ステップS110以降の処理を実行する。
さて、ステップS124は、ステップS110において、「対象パケットが送信される方向が、選択サブコネクションにとってのACK方向である」と判断された場合に実行される。
ところで、ここまでの説明においては、説明の簡略化のため、単に「ACKパケット」という用語を用いてきたが、あるデータパケットに対するACKは、逆方向に送信される別のデータパケットにピギーバックされる場合もあり得る。つまり、TCPデータペイロードを持つACKパケットも存在し得る。もちろん、逆方向に送信されるデータが存在しない場合などには、TCPデータペイロードを持たないACKパケットが送信される場合もあり得る。
また、TCPコネクションの確立後に送信されるどのパケットでも、ACKフラグは1に設定される。つまり、TCPコネクションの確立後に送信されるどのパケットでも、ACK番号フィールドは有効である。よって、例えば以下のような場合には、同じACK番号が何度も繰り返し通知される可能性がある。
・ホスト31がホスト32に宛てて、コネクション上で、あるデータパケットを送信する。
・そのデータパケットに対して、ホスト32がホスト31にACKパケットを返信する。このACKパケットは、TCPデータペイロードを持っている場合もあり得るし、TCPデータペイロードを持っていない場合もあり得る。
・その後しばらくの間は、ホスト31では、ホスト32へ送信する対象のデータがない。そのため、その期間中、ホスト31はホスト32にデータパケットを送信しない。
・しかし、その期間中、ホスト32には、ホスト31へ送信する対象のデータがある。そのため、その期間中にホスト32はホスト31にいくつかのデータパケットを送信する。これらのデータパケットのACK番号は、上記のACKパケットのACK番号と同じである。
以上の説明から分かるように、選択サブコネクションにとってのACK方向に送信されるパケットは、TCPデータペイロードを持つ可能性もあるし、TCPデータペイロードを持たない可能性もある。いずれにせよ、選択サブコネクションにとってのACK方向に送信されるどのパケットにおいても、ACK番号フィールドは有効である。
しかし、ACK番号はパケットごとに異なるとは限らない。例えば上記の例のように(あるいは、データパケットのネットワークロスに起因して)、同じACK番号を持つ複数のパケットが送信される可能性もある。
したがって、対象パケットが送信される方向が選択サブコネクションのACK方向である場合、ステップS124において検出部44は、まず、「過去に通知されたACK番号と同じACK番号がまた対象パケットによって通知されているのか否か」を判断する。つまり、検出部44は、コネクション管理テーブル47における選択サブコネクションのエントリの最大ACK番号フィールドの値と、対象パケットのACK番号フィールドの値を比較する。
最大ACK番号が対象パケットのACK番号未満ならば、対象パケットにより通知されるACK番号は、過去にキャプチャされたどのパケットによっても通知されてはいない。よって、この場合、検出部44は次にステップS125を実行する。
逆に、最大ACK番号が対象パケットのACK番号以上ならば、対象パケットにより通知されるACK番号は、過去にキャプチャされたいずれかのACKパケットによって既に通知された番号である。よって、この場合、検出部44は、ACKパケットとしての対象パケットを無視する。具体的には、この場合、検出部44は、ステップS125〜S127を実行せずに、次に前述のステップS122の判断を行う。
さて、ステップS125で検出部44は、「対象パケットが、未検出のデータパケット(つまり、未キャプチャのデータパケット)に対するACKパケットであるか否か」を判断する。具体的には、検出部44は、コネクション管理テーブル47の選択サブコネクションのエントリのACK期待値フィールドを参照する。そして、検出部44は、ACK期待値と対象パケットのACK番号を比較する。
ACK期待値よりACK番号が大きい場合、検出部44は、「対象パケットは、未検出のデータパケットに対するACKパケットである」と判断する。この場合、データパケットのキャプチャロスが生じた可能性と、キャプチャ過程での順序逆転によりACKパケットがデータパケットに先んじてキャプチャされた可能性がある。よって、ACK期待値よりACK番号が大きい場合、検出部44は、次にデータパケットがキャプチャされたときにこれら2つの可能性を判別することができるようにするための準備を行う。つまり、この場合、検出部44はステップS125の次にステップS126を実行する。
逆に、ACK番号がACK期待値以下の場合、検出部44は、「対象パケットは、検出済みのデータパケットに対するACKパケットである」と判断する。この場合、検出部44は、ステップS125の次にステップS127を実行する。
さて、ステップS126で検出部44は、コネクション管理テーブル47の選択サブコネクションのエントリの暫定キャプチャロス範囲フィールドを更新する。具体的には、検出部44は、ステップS126で参照したACK期待値を暫定キャプチャロス範囲の下限に設定し、対象パケットのACK番号を暫定キャプチャロス範囲の上限に設定する。
例えば、以上のようにして設定される下限と上限の値がSN1とSN2だとする。選択サブコネクション上でデータ方向に送信されるデータストリームにおいて、SN1という数値で示されるオクテットから、(SN2−1)という数値で示されるオクテットまでが、キャプチャ過程で失われたか、または、キャプチャが遅れている可能性がある。
検出部44は、ステップS126においてさらに、解析情報テーブル48の選択サブコネクションのエントリにおいて、キャプチャロス数を暫定的にインクリメントする。具体的には、検出部44は、キャプチャロスの可能性があるデータパケットの個数を、式(4)により推定する。
Loss = ceil((SN2-SN1)/MaxLen) (4)
なお、ステップS126では上記のように「SN1以上SN2未満」と暫定キャプチャロス範囲が記録されたものとする。また、コネクション管理テーブル47の選択サブコネクションのエントリの最大長さフィールドの値を「MaxLen」とする。式(4)の「Loss」は、キャプチャロスの可能性があると推定されるデータパケットの個数であり、すなわち、暫定ロス数である。式(4)は、ステップS115での暫定ロス数の算出に関して参照した式(1)と同じである。
検出部44は、解析情報テーブル48の選択サブコネクションのエントリにおいて、キャプチャロス数フィールドの値を、式(4)により推定した暫定ロス数の分だけ、インクリメントする。なお、解析情報テーブル48の代わりに解析情報テーブル48bが使われる実施形態では、検出部44は、解析情報テーブル48bの選択コネクションのエントリにおいて、キャプチャロス数フィールドの値を暫定ロス数の分だけインクリメントする。
以上のような暫定キャプチャロス範囲とキャプチャロス数の更新の後、検出部44は、ステップS127を実行する。
なお、ステップS126で上記のように暫定的にインクリメントされたキャプチャロス数は、後に「キャプチャロスと再送が生じた」と判断された場合には、そのままにしておかれる。つまり、ステップS116ではキャプチャロス数は更新されず、それにより、キャプチャロス数が確定する。
逆に、後に「順序逆転が生じた」と判断された場合は、前述のステップS118においてキャプチャロス数がデクリメントされる。それにより、ステップS126での暫定的なインクリメントの影響が打ち消される。
もちろん、実施形態によっては、検出部44は、ステップS126での暫定的なインクリメントとステップS118のデクリメントの代わりに、例えばRAM52上の適宜の一時的な記憶領域を利用してもよい。つまり、検出部44は、式(4)により推定した暫定ロス数を、ステップS126で一時的な記憶領域に記憶してもよい。そして、現在の選択サブコネクションのデータ方向に送信されるデータパケットが次にキャプチャされたときに、もし、ステップS115が実行されて「式(2)が成り立つ」と判断されたならば、検出部44は、キャプチャロス数をインクリメントしてもよい。つまり、検出部44は、キャプチャロスと再送を検出した後になってはじめて、キャプチャロス数を、一時的な記憶領域に記憶した暫定ロス数の分だけ、インクリメントしてもよい。
さて、ステップS127で検出部44は、ステップS101でキャプチャされた対象パケットのACK番号を、コネクション管理テーブル47における選択サブコネクションのエントリの最大ACK番号として記録する。そして、検出部44は、次に前述のステップS122を実行する。
以上説明した図11〜14の処理によれば、例えば図5に例示したような再送に関する誤判断を防ぐことができ、例えば図6に例示したような適切な判断が行われる。その結果、パケット解析の精度が高まる。
なお、図11〜14の処理では、1つの方向に送信されるパケット間ではキャプチャ過程での順序逆転が生じない(よってIP−IDやACK番号が単調増加する)、という性質が利用されている。詳しくは以下のとおりである。
ホスト31と32の間の1つのコネクション上で、ホスト31からホスト32に向けて送信されるデータパケットと、当該コネクション上でホスト32からホスト31に向けて送信されるACKパケットの間の順序は、キャプチャ過程で逆転する可能性がある。同様に、当該コネクション上でホスト32からホスト31に向けて送信されるデータパケットと、当該コネクション上でホスト31からホスト32に向けて送信されるACKパケットの間の順序が、キャプチャ過程で逆転する可能性もある。このような順序逆転は、ある方向に流れるパケットと、その逆の方向に流れるパケットを、1つの出口(例えば、ポート16aもしくはポート37のような集約ポート、または、バッファ18など)に集約する過程において、2つの方向の間で起こり得る。
しかし、1つの方向を流れる複数のパケット間での順序は、キャプチャ過程を経ても保たれる。つまり、ホスト31と32の間の1つのコネクション上で、ホスト31からホスト32に向けて送信される複数のパケット間の順序は、キャプチャ後も保たれる。同様に、当該コネクション上でホスト32からホスト31に向けて送信される複数のパケット間の順序も、キャプチャ後も保たれる。
なお、複数のパケットがネットワーク上の別々の経路をルーティングされることに起因して、それら複数のパケット間での順序の逆転が起きる場合もあり得る。しかし、以下では説明の簡単化のため、その種の逆転の影響がない(あるいは、その種の逆転の影響は適宜打ち消される)ものとする。複数の経路を通る複数のパケット間での順序の逆転の検出のために、例えば、既存のパケット解析アルゴリズムが利用されてもよい。
換言すれば、当該コネクション上でホスト31が送信する複数のデータパケット間の順序は、キャプチャ後も保たれる。よって、当該コネクション上でホスト31から送信されてネットワーク監視装置40にキャプチャされた複数のデータパケット間では、IP−IDが狭義単調増加する。また、当該コネクション上でホスト32が送信する複数のACKパケット間の順序も保たれる。また、TCPでは、累積確認応答方式(cumulative acknowledgment scheme)のACK番号が使われる。よって、当該コネクション上でホスト32から送信されてネットワーク監視装置40にキャプチャされた複数のACKパケット間では、ACK番号が広義単調増加する。
同様に、当該コネクション上でホスト32が送信する複数のデータパケット間の順序は保たれるし、当該コネクション上でホスト31が送信する複数のACKパケット間の順序も保たれる。よって、当該コネクション上でホスト32から送信されてネットワーク監視装置40にキャプチャされた複数のデータパケット間では、IP−IDが狭義単調増加する。また、当該コネクション上でホスト31から送信されてネットワーク監視装置40にキャプチャされた複数のACKパケット間では、ACK番号が広義単調増加する。
図11〜14の処理では、例えばステップS115、S121、S124、S127などにおいて、以上のようなIP−IDとACK番号の単調性が利用されている。
また、図11〜14の処理は、IPフラグメンテーションが起きない場合についての処理である。TCPを用いた通信では、コネクション確立の際に適宜のMSS(Maximum Segment Size)が通知される場合が多いので、「IPフラグメンテーションが起きない」という想定は、現実的な想定である。
IPフラグメンテーションが起きない場合、1つのTCPセグメントは1つのIPパケットにより搬送されるから、TCPセグメントの搬送に使われるどのIPパケットも、TCPヘッダを含む。また、IPフラグメンテーションが起きない場合、2つ以上のIPパケットのIP−IDは互いに異なる。図11〜14の処理(例えば、ステップS101でのヘッダ情報の抽出、IP−IDに関するステップS115とS121の処理、など)では、IPフラグメンテーションが起きない場合におけるこれらの性質が、利用される。
続いて、図6と9に示した具体例を用いて、図11〜14を参照して以上説明した処理についてさらに説明する。なお、図6は、図3のようにホスト21と22の間のパケット送受信に関する例であり、図9には図7のホスト31と32の間のコネクションに関する情報が例示されている。ここで、上記のとおり、ホスト21は具体的にはホスト31であってもよく、ホスト22は具体的にはホスト32であってもよいので、以下では、ホスト21がホスト31であり、ホスト22がホスト32であるものとする。
図9のコネクション管理テーブル47において、コネクションIDが「1−1」と「1−2」の2つのエントリは、図6の時刻T11より前に行われるコネクション確立のための3ウェイハンドシェイクの際にステップS106で登録されてもよい。あるいは、コネクションの確立後にネットワーク監視装置40がパケットキャプチャを開始した場合は、これら2つのエントリは、ネットワーク監視装置40が最初にパケットをキャプチャした際にステップS104で登録されてもよい。
図6の時刻T11にデータパケットD11がステップS101でキャプチャされると、次にステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、データパケットD11の送信方向は、選択サブコネクションにとってのデータ方向であるから、ステップS111が実行される。また、データパケットD11はデータペイロードを含むので、次にステップS112が実行される。
ところで、図6では省略されているが、説明の便宜上、時刻T11の前には、正常にACKパケット(具体的にはACK番号が801のACKパケット)がキャプチャされていたものとする。よって、以前正常にキャプチャされたACKパケットのACK番号が、コネクション管理テーブル47に最大ACK番号として記憶されている。そのため、データパケットD11の801というシーケンス番号は、最大ACK番号以上であると判断される。その結果、ステップS112の次にはステップS119が実行される。
また、データパケットD11は、再送されたものではないとする。すると、データパケットD11のシーケンス番号は、コネクション管理テーブル47に記憶されている最大シーケンス番号より大きい。そのため、次にステップS120が実行される。
そして、ステップS120では、データパケットD11のシーケンス番号である801という値が、最大シーケンス番号として記憶される。ステップS120ではさらに、データパケットD11のシーケンス番号とTCPデータ長の和である901(=801+100)という値が、ACK期待値として記憶される。
そして、ステップS121では、データパケットD11のIP−IDである99という値が、「1−1」というコネクションIDのエントリにIP−IDとして記憶される。また、データパケットD11のTCPデータ長が最大長さより長ければ、データパケットD11のTCPデータ長である100という値が最大長さとして記憶され、データパケットD11のTCPデータ長が最大長さ以下ならば、最大長さは更新されない。いずれにせよ、図6と9の例では、最大長さは100であるものとする。
その後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。すると、データパケットD11の送信方向は、選択サブコネクションにとってのACK方向であるから、ステップS124が実行される。
図6には明記されていないが、データパケットD11においてもACKフラグの値は1であり、ACK番号は有効である。よって、データパケットD11のACK番号に応じて、ステップS124以降の処理が適宜実行される。そして、ステップS124でデータパケットD11のACK番号が最大ACK番号以下だった場合はステップS124の後に、そうでない場合はステップS127の後に、再度ステップS122が実行される。今度は、「逆方向のサブコネクションも解析済み」と判断されるので、ネットワーク監視装置40は再度ステップS101でパケットの受信を待つ。
すると、時刻T12にデータパケットD12がキャプチャされ、続いて、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、データパケットD12の送信方向は、選択サブコネクションにとってのデータ方向であるから、ステップS111が実行される。また、データパケットD12はデータペイロードを含むので、次にステップS112が実行される。
ここで、データパケットD11に関して上述したとおり、コネクションIDが「1−1」のエントリに記憶されている最大ACK番号が801だとする。データパケットD12のシーケンス番号である901という値は、801という最大ACK番号以上である。よって、ステップS112の次にはステップS119が実行される。
また、データパケットD11に関して上述したとおり、コネクションIDが「1−1」のエントリに記憶されている最大シーケンス番号は、801である。よって、データパケットD12のシーケンス番号である901という値の方が、最大シーケンス番号より大きい。そのため、次にステップS120が実行される。
そして、ステップS120では、データパケットD12のシーケンス番号である901という値が、最大シーケンス番号として記憶される。ステップS120ではさらに、データパケットD12のシーケンス番号とTCPデータ長の和である1001(=901+100)という値が、ACK期待値として記憶される。
そして、ステップS121では、データパケットD12のIP−IDである100という値が、「1−1」というコネクションIDのエントリにIP−IDとして記憶される。また、データパケットD12のTCPデータ長は、記憶されている100という最大長さ以下であるから、最大長さは更新されない。
図9のコネクション管理テーブル47aに示した、コネクションIDが「1−1」のエントリは、時刻T12でのデータパケットD12のキャプチャを契機として以上のようにしてステップS121までの処理が行われた後の状態を示す。
なお、この後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。そして、データパケットD12のACK番号に応じて、ステップS124以降の処理が適宜実行され、その後、ネットワーク監視装置40は再度ステップS101でパケットの受信を待つ。
すると、時刻T13にACKパケットA12がキャプチャされ、続いて、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、ACKパケットA12の送信方向は、選択サブコネクションにとってのACK方向であるから、ステップS124が実行される。コネクション管理テーブル47aに示すように、記憶されている最大ACK番号は801であり、図6に示すように、ACKパケットA12のACK番号は1001である。801<1001なので、次に、ステップS125が実行される。
コネクション管理テーブル47aに示すように、記憶されているACK期待値は1001である。よって、ACKパケットA12のACK番号は、ACK期待値以下である。よって、検出部44は、ACKパケットA12を「キャプチャ済みのデータパケットに対するACKパケットである」と判断する。図3、4、および6から分かるように、ACKパケットA12はデータパケットD11とD12に対するACKパケットであるから、この判断は正しい。
上記のように判断されると、次にステップS127が実行される。つまり、コネクションIDが「1−1」のエントリの最大ACK番号フィールドに、ACKパケットA12のACK番号である1001という値が設定される。
図9のコネクション管理テーブル47bに示した、コネクションIDが「1−1」のエントリは、時刻T13でのACKパケットA12のキャプチャを契機として以上のようにしてステップS127までの処理が行われた後の状態を示す。
なお、この後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。もし、ACKパケットA12がピギーバックACKパケットであれば、ステップS112以降の処理が適宜行われ、その後、ステップS122からステップS101へと処理が戻る。逆に、ACKパケットA12がTCPデータペイロードを持たなければ、ステップS111の次にステップS122が実行され、ステップS101へと処理が戻る。
ステップS101でネットワーク監視装置40がパケットの受信を待っていると、図6の時刻T14にACKパケットA14がキャプチャされる。そして、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、ACKパケットA14の送信方向は、選択サブコネクションにとってのACK方向であるから、ステップS124が実行される。コネクション管理テーブル47bに示すように、記憶されている最大ACK番号は1001であり、図6に示すように、ACKパケットA14のACK番号は1201である。1001<1201なので、次に、ステップS125が実行される。
コネクション管理テーブル47bに示すように、記憶されているACK期待値は1001である。よって、ACKパケットA14のACK番号は、ACK期待値より大きい。したがって、検出部44は、ACKパケットA14を「未キャプチャのデータパケットに対するACKパケットである」と判断する。図3と6から分かるように、ACKパケットA14は、データパケットD13とD14に対するACKパケットであるから、この判断は正しい。
また、未キャプチャのデータパケットに対するACKパケットがキャプチャされた場合には、データパケットのキャプチャロスが生じた可能性と、キャプチャ過程での順序逆転が生じた可能性がある。この2つの可能性の判別は、コネクションIDが「1−1」のサブコネクションのデータ方向に流れるデータパケットが次にキャプチャされたときに行われる。ACKパケットA14がキャプチャされた段階では、ステップS125での上記判断に続いて、ステップS126で暫定キャプチャロス範囲とキャプチャロス数が更新される。
具体的には、現在のACK期待値が1001であり、ACKパケットA14のACK番号が1201である。よって、暫定キャプチャロス範囲フィールドには、「1001以上1201未満」という範囲が設定される。
また、コネクション管理テーブル47bに示すように、最大長さは100である。よって、式(4)により推定される暫定ロス数は、2(=ceil((1201−1001)/100))である。したがって、解析情報テーブル48においてコネクションIDが「1−1」のエントリのキャプチャロス数は、暫定的に、2だけインクリメントされる。
そして、ステップS127では、コネクションIDが「1−1」のエントリの最大ACK番号フィールドに、ACKパケットA14のACK番号である1201という値が設定される。
図9のコネクション管理テーブル47cに示した、コネクションIDが「1−1」のエントリは、時刻T14でのACKパケットA14のキャプチャを契機として以上のようにしてステップS127までの処理が行われた後の状態を示す。
なお、この後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。もし、ACKパケットA14がピギーバックACKパケットであれば、ステップS112以降の処理が適宜行われ、その後、ステップS122からステップS101へと処理が戻る。逆に、ACKパケットA14がTCPデータペイロードを持たなければ、ステップS111の次にステップS122が実行され、ステップS101へと処理が戻る。
そして、ネットワーク監視装置40がステップS101でパケットの受信を待っていると、図6の時刻T15にデータパケットD13がキャプチャされる。続いて、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、データパケットD13の送信方向は、選択サブコネクションにとってのデータ方向であるから、ステップS111が実行される。また、データパケットD13はデータペイロードを含むので、次にステップS112が実行される。
ここで、コネクション管理テーブル47cに示すように、コネクションIDが「1−1」のエントリに記憶されている最大ACK番号は1201である。また、データパケットD13のシーケンス番号は、図6に示すように1001である。1001<1201であるから、次に、ステップS113が実行される。
ここで、コネクション管理テーブル47cに示すように、コネクションIDが「1−1」のエントリにおける逆転範囲フィールドは空である。よって、ステップS113では、「1001というシーケンス番号は、逆転範囲外」と判断される。
そのため、次にステップS114が実行される。コネクション管理テーブル47cに示すように、コネクションIDが「1−1」のエントリにおける暫定キャプチャロス範囲フィールドには、「1001以上1201未満」という範囲が記憶されている。よって、ステップS114では、「1001というシーケンス番号は、暫定キャプチャロス範囲内」と判断される。
よって、次にステップS115が実行される。ここで、コネクションIDが「1−1」のサブコネクション上でデータ方向に送信されて、ACKパケットA14よりも前にキャプチャされたデータパケットのうち、最後にキャプチャされたデータパケットは、データパケットD12である。データパケットD12のIP−IDは図6のとおり100であり、この100というIP−IDは、コネクション管理テーブル47cに示すように、コネクションIDが「1−1」のエントリに記憶されている。
また、コネクション管理テーブル47cによれば、最大長さは100であり、暫定キャプチャロス範囲は「1001以上1201未満」という範囲である。よって、ステップS115では式(1)により、2(=ceil((1201−1001)/100))という暫定ロス数が算出される。
そして、図6に示すように、データパケットD13のIP−IDは101である。よって、前回データパケットのIP−IDと暫定ロス数の和は102(=100+2)であり、この102という値は、今回キャプチャされたデータパケットD13のIP−IDである101という値以上である。よって、ステップS115では、式(2)が成り立たない(換言すれば、式(3)が成り立たない)。つまり、ステップS115では、「キャプチャ過程でのデータパケットとACKパケットの間の順序逆転が起きた」と判断される。
その結果、ステップS117が実行される。具体的には、コネクションIDが「1−1」のエントリにおける現在の暫定キャプチャロス範囲フィールドの値が、逆転範囲フィールドに転写される。つまり、「1001以上1201未満」という範囲が、逆転範囲フィールドに記憶される。そして、暫定キャプチャロス範囲フィールドはクリアされる。
その後、ステップS118では、解析情報テーブル48においてコネクションIDが「1−1」のエントリが更新される。具体的には、複製時逆転数が1だけインクリメントされる。また、ACKパケットA14がキャプチャされたときに上述のようにステップS126で暫定的に2だけインクリメントされたキャプチャロス数が、ここで1だけデクリメントされる。
なお、キャプチャロス数が2ではなく1だけデクリメントされる理由は、順序逆転のせいでACKパケットよりも遅れてキャプチャされる各データパケットについて1回ずつステップS118が実行されるからである。ステップS126でのインクリメントとステップS118でのデクリメントの組み合わせは、検出部44により検出されるキャプチャロスの回数を、解析情報テーブル48のキャプチャロス数フィールドに反映するための方法の一例である。検出部44により検出されるキャプチャロスの回数とは、換言すれば、今回キャプチャされたデータパケットのIP−IDと、図1に関して説明した「前回データパケット」のIP−IDとの差が閾値より大きかった回数である。
さらに、ステップS118では、コネクション管理テーブル47においてコネクションIDが「1−1」のエントリの逆転範囲も更新される。具体的には、ステップS117で上記のとおり暫定キャプチャロス範囲フィールドから転写された「1001以上1201未満」という範囲の下限が、1001から1101(=1001+100)へと更新される。
なぜなら、「1001以上1201未満」という範囲のうちの、「1001以上1101未満」という範囲のオクテットは、今回キャプチャされたデータパケットD13に含まれるからである。よって、順序逆転に起因して今後キャプチャされると予測される1つ以上のデータパケットは、具体的には、残りの「1101以上1201未満」という範囲のオクテットをデータペイロードに含むような1つ以上のデータパケットである。
したがって、コネクション管理テーブル47においてコネクションIDが「1−1」のエントリの逆転範囲の下限は、上記のように、データパケットD13のシーケンス番号とTCPデータ長の和である1101という値に更新される。その結果、逆転範囲フィールドには「1101以上1201未満」という範囲が記録されることになる。
さて、以上説明したようなステップS118の実行後、ステップS119が実行される。ここで、データパケットD13のシーケンス番号は図6のとおり1001である。また、コネクション管理テーブル47cのとおり、最大シーケンス番号は901である。1001>901であるから、次にステップS120が実行される。
そして、ステップS120では、データパケットD13のシーケンス番号である1001という値が、最大シーケンス番号として記憶される。ステップS120ではさらに、データパケットD13のシーケンス番号とTCPデータ長の和である1101(=1001+100)という値が、ACK期待値として記憶される。
そして、ステップS121では、データパケットD13のIP−IDである101という値が、「1−1」というコネクションIDのエントリにIP−IDとして記憶される。また、データパケットD13のTCPデータ長は、記憶されている100という最大長さ以下であるから、最大長さは更新されない。
図9のコネクション管理テーブル47dに示した、コネクションIDが「1−1」のエントリは、時刻T15でのデータパケットD13のキャプチャを契機として以上のようにしてステップS121までの処理が行われた後の状態を示す。
なお、この後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。そして、データパケットD13のACK番号に応じて、ステップS124以降の処理が適宜実行され、その後、ネットワーク監視装置40は再度ステップS101でパケットの受信を待つ。
すると、時刻T16にデータパケットD14がキャプチャされ、続いて、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、データパケットD14の送信方向は、選択サブコネクションにとってのデータ方向であるから、ステップS111が実行される。また、データパケットD14はデータペイロードを含むので、次にステップS112が実行される。
ここで、コネクション管理テーブル47dに示すように、コネクションIDが「1−1」のエントリに記憶されている最大ACK番号は1201である。また、データパケットD14のシーケンス番号は、図6に示すように1101である。1101<1201であるから、次に、ステップS113が実行される。
ここで、コネクション管理テーブル47dに示すように、コネクションIDが「1−1」のエントリにおける逆転範囲フィールドには、「1101以上1201未満」という範囲が記憶されている。よって、ステップS113では、「1101というシーケンス番号は、逆転範囲内」と判断される。つまり、「1101というシーケンス番号を有するデータパケットD14は、検出済みの逆転範囲に含まれる」と判断される。
その結果、次にステップS118が実行される。具体的には、解析情報テーブル48においてコネクションIDが「1−1」のエントリにおいて、複製時逆転数が1だけインクリメントされ、キャプチャロス数が1だけデクリメントされる。その結果、ACKパケットA14がキャプチャされたときのステップS126での暫定的なインクリメントの影響は、なくなる。
さらに、ステップS118では、コネクション管理テーブル47においてコネクションIDが「1−1」のエントリの逆転範囲も更新される。具体的には、逆転範囲フィールドがクリアされる。
なぜなら、逆転範囲フィールドに現在記憶されている「1101以上1201未満」という範囲のオクテットは、すべて、今回キャプチャされたデータパケットD14に含まれるからである。このことは、データパケットD14のシーケンス番号とTCPデータ長から明らかである。
そして、以上説明したようなステップS118の実行後、ステップS119が実行される。ここで、データパケットD14のシーケンス番号は図6のとおり1101である。また、コネクション管理テーブル47dのとおり、最大シーケンス番号は1001である。1101>1001であるから、次にステップS120が実行される。
そして、ステップS120では、データパケットD14のシーケンス番号である1101という値が、最大シーケンス番号として記憶される。ステップS120ではさらに、データパケットD14のシーケンス番号とTCPデータ長の和である1201(=1101+100)という値が、ACK期待値として記憶される。
そして、ステップS121では、データパケットD14のIP−IDである102という値が、「1−1」というコネクションIDのエントリにIP−IDとして記憶される。また、データパケットD14のTCPデータ長は、記憶されている100という最大長さ以下であるから、最大長さは更新されない。
図9のコネクション管理テーブル47eに示した、コネクションIDが「1−1」のエントリは、時刻T16でのデータパケットD14のキャプチャを契機として以上のようにしてステップS121までの処理が行われた後の状態を示す。
なお、この後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。そして、データパケットD14のACK番号に応じて、ステップS124以降の処理が適宜実行され、その後、ネットワーク監視装置40は再度ステップS101でパケットの受信を待つ。
すると、時刻T17にデータパケットD15がキャプチャされ、続いて、ステップS102とS109が実行される。説明の便宜上、ステップS109では、コネクションIDが「1−1」のサブコネクションが選択されたものとする。
すると、データパケットD15の送信方向は、選択サブコネクションにとってのデータ方向であるから、ステップS111が実行される。また、データパケットD15はデータペイロードを含むので、次にステップS112が実行される。
ここで、コネクション管理テーブル47eに示すように、コネクションIDが「1−1」のエントリに記憶されている最大ACK番号は1201である。また、図6に示すようにデータパケットD15のシーケンス番号は1201である。よって、シーケンス番号が最大ACK番号以上なので、ステップS112の次にはステップS119が実行される。
また、コネクション管理テーブル47eに示すように、コネクションIDが「1−1」のエントリに記憶されている最大シーケンス番号は、1101である。よって、データパケットD15のシーケンス番号である1201という値の方が、最大シーケンス番号より大きい。そのため、次にステップS120が実行される。
そして、ステップS120では、データパケットD15のシーケンス番号である1201という値が、最大シーケンス番号として記憶される。ステップS120ではさらに、データパケットD15のシーケンス番号とTCPデータ長の和である1301(=1201+100)という値が、ACK期待値として記憶される。
そして、ステップS121では、データパケットD15のIP−IDである103という値が、「1−1」というコネクションIDのエントリにIP−IDとして記憶される。また、データパケットD15のTCPデータ長は、記憶されている100という最大長さ以下であるから、最大長さは更新されない。
その後、ステップS122では「逆方向のサブコネクションは未解析」と判断され、ステップS123では、コネクションIDが「1−2」のサブコネクションが選択される。そして、データパケットD15のACK番号に応じて、ステップS124以降の処理が適宜実行され、その後、ネットワーク監視装置40は再度ステップS101でパケットの受信を待つ。
以上説明したように、図11〜14の処理によれば、各パケットのキャプチャのたびに図9のコネクション管理テーブル47が適切に更新されるので、図6のような適切な判断が下される。そのため、図10の解析情報テーブル48の各種フィールドを使ってカウントされる種々のカウント値の信頼性も高く、その結果、パケット解析の精度も高い。
また、図11〜14の処理によれば、1つのコネクション上で互いに逆方向に流れる2つのデータストリームについての2つのエントリを用いた、データストリームごとの管理が可能である。換言すれば、1つのコネクションに含まれる2つのサブコネクションについての2つのエントリを用いた、サブコネクションごとの管理が可能である。つまり、図11〜14の処理によれば、2つのうちどちらのデータストリームに関して順序逆転が生じたとしても、検出部44は適切な判断を下すことができる。
ところで、図11〜14のフローチャートには、キャプチャロスと再送が生じた場合と、順序逆転が生じた場合の判別に関わる種々のステップが例示されているが、ネットワーク監視装置40は、さらに他の処理を行ってもよい。例えば、ネットワーク監視装置40が不図示の解析部を有してもよく、解析部が解析情報テーブル48に基づいてネットワークロス数やネットワークロス率などを推定してもよい。検出部44は、具体的には解析部の中のモジュールであってもよい。
あるいは、解析部ではなく、検出部44が、ネットワークロス数やネットワークロス率などの推定をさらに行ってもよい。そのために、解析情報テーブル48には、ネットワークロス数のフィールドが追加されてもよい。
例えば、ステップS124で「最大ACK番号が対象パケットのACK番号以上である」と判断した場合、検出部44は、ステップS122を実行する前に、「同じACK番号のACKパケットが重複して2回以上送信されたのか否か」をチェックしてもよい。具体的には、最大ACK番号が対象パケットのACK番号と等しければ、検出部44は、「重複ACKパケットが送信された」と検出し、検出した重複ACKパケットのACK番号を記録してもよい。
例えば、コネクション管理テーブル47の各エントリには、重複ACKパケットのACK番号を記録するためのフィールド(以下「重複ACK番号フィールド」という)がさらに追加されてもよい。重複ACK番号フィールドは、ステップS124とS125の間でクリアされてもよい。
また、ステップS112で「対象パケットのシーケンス番号が最大ACK番号以上である」と判断した場合、検出部44は、ステップS119を実行する前に、選択サブコネクションのエントリの重複ACK番号フィールドを参照してもよい。そして、重複ACK番号フィールドに重複ACK番号が記憶されている場合、検出部44は、記憶されている重複ACK番号と対象パケットのシーケンス番号を比べてもよい。
対象パケットのシーケンス番号と重複ACK番号が等しい場合、検出部44は、「ネットワークロスに起因する再送が生じた」と判断してもよい。より具体的には、検出部44は、「今回の対象パケットと同じシーケンス番号を持つデータパケットが、かつてネットワーク上で消失し、そのせいで重複ACKパケットが送信され、重複ACKパケットに応じてデータパケットが再送された」と判断してもよい。
また、ステップS112で「対象パケットのシーケンス番号が最大ACK番号以上である」と判断した場合、検出部44は、さらに、重複ACK番号フィールドの値によらず、再送に関する以下のような判断を行ってもよい。具体的には、検出部44は、対象パケットのシーケンス番号が最大ACK番号と等しいか否かを判断してもよい。両者が等しい場合、検出部44はさらに、ネットワークロスと、その結果としてのタイムアウトによる再送が起きたのか否かを判断してもよい。
具体的には、検出部44は、以下の条件がともに成り立つか否かを推定してもよい。
・対象パケットと同じシーケンス番号を持つデータパケットが、かつて送信されたことがある。
・対象パケットと同じシーケンス番号を持つデータパケットが最初に送信された時刻から、対象パケットが送信された時刻までの間隔が、RTO(Retransmission Time-Out)以上である。
検出部44は、コネクション管理テーブル47中の最大シーケンス番号フィールドを参照することで、前者の条件が成立するか否かを判断してもよい。検出部44は、前者の条件が成立すると判断した場合に、さらに、後者の条件が成立するか否かを判断してもよい。
例えば、検出部44は、以下の2つの時間を計測し、計測結果に基づいて、ホスト31と32の間のRTTを推定してもよい。
・ホスト31からホスト32へ送信されるデータパケットのキャプチャ時刻から、当該データパケットに対するACKパケットのキャプチャ時刻までの時間。
・ホスト32からホスト31へ送信されるデータパケットのキャプチャ時刻から、当該データパケットに対するACKパケットのキャプチャ時刻までの時間。
また、ネットワーク監視装置40は、実際には、ホスト31や32にパケットを送信するわけではない。しかし、検出部44は、擬似的に、ホスト31とネットワーク監視装置40の間のRTTや、ネットワーク監視装置40とホスト32の間のRTTなどを推定してもよい。例えば、上記2つの時間のうち、前者の時間が、ネットワーク監視装置40とホスト32の間の擬似的なRTTとして推定されてもよい。同様に、後者の時間が、ネットワーク監視装置40とホスト31の間の擬似的なRTTとして推定されてもよい。
検出部44は、上記のようなRTTの推定のために、各パケットのキャプチャ時刻をRAM52などに一時的に記憶してもよい。検出部44は、推定した擬似的なRTTと、キャプチャ時刻とに基づいて、対象パケットと同じシーケンス番号を持つデータパケットが最初に送信された時刻を推定してもよい。同様に、検出部44は、対象パケットが送信された時刻を推定してもよい。
また、ホスト31とホスト32の間のRTTの4倍の値に適宜の値(例えばRTTの標準偏差)を足した和が、RTOとして使われることが多い。よって、検出部44は、推定したRTTからRTOを推定してもよい。
以上のような種々の推定値を使うことで、検出部44は、「対象パケットと同じシーケンス番号を持つデータパケットが最初に送信された時刻から、対象パケットが送信された時刻までの間隔が、RTO以上であるか否か」を推定してもよい。当該間隔がRTO以上であると推定した場合、検出部44は、「ネットワークロスと、タイムアウトによる再送が生じた」と判断してもよい。
例えば以上例示したように、ステップS112で「対象パケットのシーケンス番号が最大ACK番号以上である」と判断した場合、検出部44は、「ネットワークロスに起因する再送が生じたか否か」を判断してもよい。そして、「ネットワークロスに起因する再送が生じた」と判断した場合、検出部44は、解析情報テーブル48の選択サブコネクションのエントリにおいて、再送数を1だけインクリメントするとともに、ネットワークロス数を1だけインクリメントしてもよい。
例えば以上説明したようにして、再送数やネットワークロス数の推定が行われてもよい。
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記の観点から様々に変形することもできる。上記および下記の変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
例えば、図11〜14の処理は、パケット解析のための他の適宜のアルゴリズムと組み合わされてもよく、組み合わせに応じて適宜変更されてもよい。例えば、再送率やネットワークロス率の推定を行うステップが、図11〜14のフローチャートに追加されてもよい。また、出力制御部45による出力インタフェイス46を介した出力装置49への出力は、図11〜14の処理とは独立したタイミングで行われてもよいし、例えば所定数のパケットのキャプチャのたびに1回行われてもよい。
図9のコネクション管理テーブル47には最大長さフィールドがあり、最大長さフィールドはステップS121で必要に応じて更新される。よって、例えばコネクションIDが「1−1」のエントリにおける最大長さフィールドには、コネクションIDが「1−1」のサブコネクションのデータ方向に今まで送信された全データパケットのTCPデータ長のうちの、最大値が記録される。
しかし、最大値以外の統計値が使われてもよい。例えば、コネクションIDが「1−1」のサブコネクションのデータ方向に今まで送信された全データパケットのTCPデータ長のヒストグラムを、管理部43または検出部44が作成してもよい。そして、「ペイロードが長い方から上位X1%以内の長さ」や「ペイロードが長い方から上位X2位以内の長さ」などの統計値が使われてもよい(X1とX2は予め決められた値であるものとする)。
あるいは、ステップS121での最大長さフィールドの動的な更新は省略されてもよい。その代わり、コネクション確立の際のネゴシエーションにより通知されるMSSの値が、SYNパケットまたはSYN/ACKパケットがキャプチャされた際に、ステップS101で抽出部42によりTCPヘッダから抽出されてもよい。こうして抽出されたMSSの値を、管理部43がステップS106で最大長さフィールドに設定してもよい。そして、ステップS115やS126での暫定ロス数の算出においては、こうして静的に設定された最大長さ(すなわちMSS)が利用されてもよい。
ところで、TCPのACK番号は、累積確認応答方式による番号である。しかし、TCPの実装によっては、累積確認応答方式による通常のACK番号に加えて、オプショナルにSACK(selective acknowledgment)が利用されることがある。SACKが利用される場合、図11〜14の処理とコネクション管理テーブル47が適宜変形されてもよい。
例えば、コネクション管理テーブル47には、今までにSACKオプションを使って通知された範囲のうち、最大ACK番号より大きい範囲を記憶しておくためのフィールド(以下「SACK範囲フィールドという」)が追加されてもよい。コネクション管理テーブル47中のSACK範囲フィールドは、空の場合もあり得るし、1つ以上のオクテット範囲が列挙されている場合もあり得る。例えば、ステップS127とS122の間で、以下の情報に基づいて検出部44がSACK範囲フィールドを適宜更新してもよい。
・コネクション管理テーブル47中の最大ACK番号フィールドの現在の値。
・コネクション管理テーブル47中のSACK範囲フィールドの現在の内容(つまり、空リスト、または、1つ以上のオクテット範囲のリスト)。
・対象パケット中のTCPヘッダ内でSACKオプションにより通知されている内容(つまり、空リスト、または、1つ以上のオクテット範囲のリスト)。
SACKオプションが使われる場合、図11〜14の処理においては、ステップS112とS124とS125が変形されてもよい。
具体的には、互いに排他な以下の2つの条件の一方がステップS112において成立する場合に、次にS113が実行されてもよい。逆に、どちらの条件もステップS112において成立しない場合に、次にS119が実行されてもよい。
・コネクション管理テーブル47中のSACK範囲フィールドが空であり、かつ、対象パケットのシーケンス番号の方が最大ACK番号より小さい。
・コネクション管理テーブル47中のSACK範囲フィールドに1つ以上のオクテット範囲が列挙されており、かつ、そのうちの最後のオクテット位置を示す数値よりも、対象パケットのシーケンス番号の方が小さい。
また、以下の2つの条件のうち少なくとも1つがステップS124において成立する場合に、次にステップS125が実行されてもよい。逆に、どちらの条件もステップS124において成立しない場合には、次に、ステップS122が実行されてもよい。
・対象パケットのACK番号が最大ACK番号より大きい。
・コネクション管理テーブル47中のSACK範囲フィールドには記録されていない1つ以上の範囲が、対象パケットにおいて、SACKオプションを使ってオプションフィールド内に指定されている。
そして、以下の2つの条件のうち少なくとも1つがステップS125において成立する場合に、検出部44は「未キャプチャのデータパケットに対するACKおよび/またはSACKが通知された」と判断してもよい。その結果、次にステップS126が実行されてもよい。逆に、どちらの条件もステップS125において成立しない場合には、検出部44は、「今回通知されたACKおよび/またはSACKは、キャプチャ済みのいずれかのデータパケットに対応する」と判断してもよい。その結果、次にステップS127が実行されてもよい。
・コネクション管理テーブル47中のACK期待値より、対象パケットのACK番号の方が大きい。
・コネクション管理テーブル47中のACK期待値より大きな番号の範囲が、対象パケットにおいて、SACKオプションを使ってオプションフィールド内に指定されている。
なお、以上のようにSACKオプションが使われる場合において、もし、現在の最大ACK番号が対象パケットのACK番号以上であれば、ステップS127では最大ACK番号の更新は省略される。
ところで、上記のステップS112、S113、S114、S119、S124、およびS125では、TCPヘッダ中の番号を用いた比較が行われる。図11〜14についての説明では、説明の簡単化のために、例えば「シーケンス番号が最大ACK番号未満である」などの単純な表現を用いたが、実際には番号のラップアラウンド(wrap-around)が生じ得る。
よって、TCPヘッダ中の番号を用いた比較においては、ラップアラウンドを考慮した比較が行われる。同様に、IP−IDもラップアラウンドする可能性がある。よって、ステップS115におけるIP−IDを用いた比較においても、ラップアラウンドが考慮に入れられる。
ラップアラウンドを考慮に入れるために、例えば、TCPヘッダ中のオプションフィールドに含まれるタイムスタンプが使われてもよい。また、ラップアラウンドを考慮に入れた比較のために、各パケットがキャプチャされた時刻が使われてもよい。
なお、パケットのキャプチャ時刻は、他にも、ステップS115の判断をより正確にするために利用されてもよい。ここで、キャプチャ過程での順序逆転が生じるのは、データパケットのキャプチャ時刻とACKパケットのキャプチャ時刻が近い場合である。よって、例えば、データパケットのキャプチャ時刻とACKパケットのキャプチャ時刻との差が所定の閾値より短く、かつ、式(2)が成り立たない場合にのみ、検出部44は、「順序逆転が生じた」と判断してもよい。
ところで、図9ではコネクション管理テーブル47および47a〜47eをテーブル形式で例示し、図10では解析情報テーブル48および48bをテーブル形式で例示した。しかし、テーブル以外の他のデータ形式が利用されてもよい。
なお、上記の説明では、第1の通信プロトコルがIPバージョン4であり、第2の通信プロトコルがTCPである場合について特に詳しく説明した。しかし、図1に関する説明から明らかなように、識別用の数値を各パケットに割り当てるような、コネクションレスな他の通信プロトコルが、IPバージョン4の代わりに第1の通信プロトコルとして使われてもよい。同様に、第1の通信プロトコルよりも上位の層で定義されており再送手順を有するような、コネクション指向の他のプロトコルが、TCPの代わりに第2の通信プロトコルとして使われてもよい。
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
(付記1)
コンピュータに、
識別用の数値を各パケットに割り当てる第1の通信プロトコルと、前記第1の通信プロトコルより上位の層で定義されるコネクション指向の第2の通信プロトコルにしたがって第1の装置と第2の装置の間で送受信される個々のパケットを、キャプチャし、
前記第1の装置から送信された第1のデータパケットに対して前記第2の装置から送信された確認応答パケットがキャプチャされた時点では、前記第1のデータパケットがキャプチャされておらず、かつ、前記第2の通信プロトコルによるコネクション上で前記第2の装置が前記第1の装置から次に受信すると期待するデータパケットの識別用に前記確認応答パケットが含む第1の数値よりも、前記第1の装置から送信されて前記確認応答パケットの後にキャプチャされた第2のデータパケットが前記コネクション上での識別用に含む第2の数値の方が前の順序を示す場合、前記第1の通信プロトコルにより前記第2のデータパケットに割り当てられた第3の数値と、前記第1の装置から送信されて前記確認応答パケットより前にキャプチャされたデータパケットの中では最も遅くキャプチャされた前回データパケットに前記第1の通信プロトコルにより割り当てられた第4の数値との差に基づき、キャプチャされた前記第2のデータパケットが前記確認応答パケットより遅れてキャプチャされた前記第1のデータパケットなのか否かを判断する
ことを含む処理を実行させるパケット解析プログラム。
(付記2)
前記差が、前記第1の数値と、前記コネクション上での識別用に前記前回データパケットが含む第5の数値とに応じて決まる閾値以下の場合に、キャプチャされた前記第2のデータパケットは前記確認応答パケットより遅れてキャプチャされた前記第1のデータパケットである、と判断される
ことを特徴とする付記1に記載のパケット解析プログラム。
(付記3)
前記差が前記閾値よりも大きい場合、前記第1の装置が前記第2の通信プロトコルによる再送手順にしたがって前記第1のデータパケットと同じ数値を含めて再送したデータパケットを、前記コンピュータが前記第2のデータパケットとしてキャプチャしたのだ、と判断する
ことを前記処理がさらに含むことを特徴とする付記2に記載のパケット解析プログラム。
(付記4)
前記閾値は、前記第1の数値、前記第5の数値、前記前回データパケットのサイズ、および、前記コネクション上で前記第1の装置から前記第2の装置へ送信される複数のデータパケットのサイズに関するサイズ値に基づく
ことを特徴とする付記2または3に記載のパケット解析プログラム。
(付記5)
前記サイズ値は、前記コネクション上で前記第1の装置から前記第2の装置へ送信される前記複数のデータパケットの中での相対比較において、所定の基準以上に長いペイロード長である
ことを特徴とする付記4に記載のパケット解析プログラム。
(付記6)
前記サイズ値は、前記コネクション上で前記第1の装置から前記第2の装置へ送信される前記複数のデータパケットの中で最長のペイロード長である
ことを特徴とする付記5に記載のパケット解析プログラム。
(付記7)
前記確認応答パケットは、1つ以上の前記第1のデータパケットを前記第2の装置が受信したことを示し、
前記閾値は、前記1つ以上の前記第1のデータパケットのうち、前記コンピュータがキャプチャに失敗したデータパケットの個数の推定値である
ことを特徴とする付記2から6のいずれか1項に記載のパケット解析プログラム。
(付記8)
前記コネクション上で前記第1の装置から前記第2の装置へ向けて送信されたデータパケットと前記コネクション上で前記第2の装置から前記第1の装置に送信された確認応答パケットとの間でキャプチャの過程で生じる順序の逆転の回数である第1の逆転回数を数えるか、または、前記コネクション上で前記第2の装置から前記第1の装置へ向けて送信されたデータパケットと前記コネクション上で前記第1の装置から前記第2の装置に送信された確認応答パケットとの間でキャプチャの過程で生じる順序の逆転の回数である第2の逆転回数と前記第1の逆転回数との和を数えるための、逆転カウント値を、前記差が前記閾値以下の場合にインクリメントする
ことを前記処理がさらに含むことを特徴とする付記2から7のいずれか1項に記載のパケット解析プログラム。
(付記9)
前記コネクション上で前記第1の装置から前記第2の装置へ向かう方向に送信されたのに前記コンピュータがキャプチャに失敗したデータパケットの数を数えるか、または前記コネクション上で送信されたのに前記コンピュータがキャプチャに失敗したデータパケットの数を方向によらず数えるための、ロスカウント値に、前記第3の数値と前記第4の数値との前記差が前記閾値よりも大きかった回数を反映させる
ことを前記処理がさらに含むことを特徴とする付記2から8のいずれか1項に記載のパケット解析プログラム。
(付記10)
前記コネクション上で前記第1の装置から前記第2の装置へ向かう方向に生じた再送の回数を数えるか、または前記コネクション上で生じた再送の回数を方向によらず数えるための、再送カウント値を、前記第3の数値と前記第4の数値との前記差が前記閾値よりも大きい場合にインクリメントする
ことを前記処理がさらに含むことを特徴とする付記2から9のいずれか1項に記載のパケット解析プログラム。
(付記11)
前記第1の通信プロトコルがInternet Protocolであり、前記第2の通信プロトコルがTransmission Control Protocolであることを特徴とする付記1から10のいずれか1項に記載のパケット解析プログラム。
(付記12)
コンピュータが、
識別用の数値を各パケットに割り当てる第1の通信プロトコルと、前記第1の通信プロトコルより上位の層で定義されるコネクション指向の第2の通信プロトコルにしたがって第1の装置と第2の装置の間で送受信される個々のパケットを、キャプチャし、
前記第1の装置から送信された第1のデータパケットに対して前記第2の装置から送信された確認応答パケットがキャプチャされた時点では、前記第1のデータパケットがキャプチャされておらず、かつ、前記第2の通信プロトコルによるコネクション上で前記第2の装置が前記第1の装置から次に受信すると期待するデータパケットの識別用に前記確認応答パケットが含む第1の数値よりも、前記第1の装置から送信されて前記確認応答パケットの後にキャプチャされた第2のデータパケットが前記コネクション上での識別用に含む第2の数値の方が前の順序を示す場合、前記第1の通信プロトコルにより前記第2のデータパケットに割り当てられた第3の数値と、前記第1の装置から送信されて前記確認応答パケットより前にキャプチャされたデータパケットの中では最も遅くキャプチャされた前回データパケットに前記第1の通信プロトコルにより割り当てられた第4の数値との差に基づき、キャプチャされた前記第2のデータパケットが前記確認応答パケットより遅れてキャプチャされた前記第1のデータパケットなのか否かを判断する
ことを特徴とするパケット解析方法。
(付記13)
第1の装置と第2の装置の間で送受信される個々のパケットを、キャプチャして解析するパケット解析装置であって、
識別用の数値を各パケットに割り当てる第1の通信プロトコルと、前記第1の通信プロトコルより上位の層で定義されるコネクション指向の第2の通信プロトコルにしたがって前記第1の装置から送信された第1のデータパケットに対して、前記第2の装置から送信された確認応答パケットを、前記パケット解析装置がキャプチャした時点では、前記第1のデータパケットがキャプチャされておらず、かつ、前記第2の通信プロトコルによるコネクション上で前記第2の装置が前記第1の装置から次に受信すると期待するデータパケットの識別用に前記確認応答パケットが含む第1の数値よりも、前記第1の装置から送信されて前記確認応答パケットの後にキャプチャされた第2のデータパケットが前記コネクション上での識別用に含む第2の数値の方が前の順序を示す場合、前記第1の通信プロトコルにより前記第2のデータパケットに割り当てられた第3の数値と、前記第1の装置から送信されて前記確認応答パケットより前にキャプチャされたデータパケットの中では最も遅くキャプチャされた前回データパケットに前記第1の通信プロトコルにより割り当てられた第4の数値との差に基づき、キャプチャされた前記第2のデータパケットが前記確認応答パケットより遅れてキャプチャされた前記第1のデータパケットなのか否かを判断する判断手段
を備えることを特徴とするパケット解析装置。
(付記14)
第1の装置と第2の装置の間で送受信される個々のパケットを、前記第1の装置と前記第2の装置との間の通信路の途中で取り出すネットワーク装置と、
前記ネットワーク装置に接続されており、前記ネットワーク装置を介して前記個々のパケットをキャプチャし、前記個々のパケットを解析するパケット解析装置であって、
識別用の数値を各パケットに割り当てる第1の通信プロトコルと、前記第1の通信プロトコルより上位の層で定義されるコネクション指向の第2の通信プロトコルにしたがって前記第1の装置から送信された第1のデータパケットに対して、前記第2の装置から送信された確認応答パケットを、前記パケット解析装置がキャプチャした時点では、前記第1のデータパケットがキャプチャされておらず、かつ、前記第2の通信プロトコルによるコネクション上で前記第2の装置が前記第1の装置から次に受信すると期待するデータパケットの識別用に前記確認応答パケットが含む第1の数値よりも、前記第1の装置から送信されて前記確認応答パケットの後にキャプチャされた第2のデータパケットが前記コネクション上での識別用に含む第2の数値の方が前の順序を示す場合、前記第1の通信プロトコルにより前記第2のデータパケットに割り当てられた第3の数値と、前記第1の装置から送信されて前記確認応答パケットより前にキャプチャされたデータパケットの中では最も遅くキャプチャされた前回データパケットに前記第1の通信プロトコルにより割り当てられた第4の数値との差に基づき、キャプチャされた前記第2のデータパケットが前記確認応答パケットより遅れてキャプチャされた前記第1のデータパケットなのか否かを判断する判断手段を備えるパケット解析装置と、
を備えることを特徴とするパケット解析システム。
(付記15)
前記ネットワーク装置が、前記パケット解析装置に接続されるモニタポートを有するネットワークタップであるか、または、前記パケット解析装置に接続されるミラーポートを有するスイッチもしくはルータである
ことを特徴とする付記14に記載のパケット解析システム。
(付記16)
前記パケット解析装置が、
前記第1の装置から前記第2の装置へ向けて送信される個々のパケットを前記ネットワーク装置から受信する第1の通信インタフェイスと、
前記第2の装置から前記第1の装置へ向けて送信される個々のパケットを前記ネットワーク装置から受信する第2の通信インタフェイスと、
前記第1の通信インタフェイスで受信した前記個々のパケットと前記第2の通信インタフェイスで受信した前記個々のパケットを記憶する記憶手段
を備えることを特徴とする付記14または15に記載のパケット解析システム。
(付記17)
前記パケット解析装置が、
前記第1の装置から前記第2の装置へ向けて送信される個々のパケットと、前記第2の装置から前記第1の装置へ向けて送信される個々のパケットの双方を、前記ネットワーク装置から受信する通信インタフェイス
を備えることを特徴とする付記14または15に記載のパケット解析システム。