動作モード相違検出プログラム、方法及び装置
【課題】通信装置間の通信を観測することによって通信状態の問題を検出する。
【解決手段】あるアプリケーション間でやりとりされるメッセージは、当該メッセージのサイズが大きければ複数のセグメントに分割され、複数パケット(同じく複数フレーム)として送信される。この複数のフレームの送信間隔は短く、メッセージ間の送信間隔は相対的に長くなる。もし通信している装置間に動作モード相違が存在する場合に送信間隔が短ければ、フレーム衝突がより多く発生するので、メッセージ内衝突率が大きな値になる。一方、送信間隔が相対的に長いメッセージの先頭パケットについての衝突率であるメッセージ先頭衝突率は、動作モード相違の場合には相対的に小さくなる。従って、メッセージ内衝突率>メッセージ先頭衝突率が成立する場合には、動作モード相違が存在するものとして記録する。
【解決手段】あるアプリケーション間でやりとりされるメッセージは、当該メッセージのサイズが大きければ複数のセグメントに分割され、複数パケット(同じく複数フレーム)として送信される。この複数のフレームの送信間隔は短く、メッセージ間の送信間隔は相対的に長くなる。もし通信している装置間に動作モード相違が存在する場合に送信間隔が短ければ、フレーム衝突がより多く発生するので、メッセージ内衝突率が大きな値になる。一方、送信間隔が相対的に長いメッセージの先頭パケットについての衝突率であるメッセージ先頭衝突率は、動作モード相違の場合には相対的に小さくなる。従って、メッセージ内衝突率>メッセージ先頭衝突率が成立する場合には、動作モード相違が存在するものとして記録する。
【発明の詳細な説明】
【技術分野】
【0001】
本技術は、通信状態の分析技術に関する。
【背景技術】
【0002】
図1に示すように、2つの通信装置(例えばクライアント端末とスイッチ(SW)等)をイーサネット(登録商標)で接続し通信する場合、LAN(Local Area Network)ポートの一方を「全二重固定」、他方を「自動識別」の設定で接続すると、自動認識が失敗し、「自動識別」側が「半二重」の動作モードに設定される場合が多い。この時、イーサネットの障害とは認識されず、2つの装置間で動作モードが異なる状態で接続される。「全二重固定」と「半二重」で通信を行う場合、送受信で同一伝送路を用いるため、同時にイーサフレームを送信するとフレーム衝突が発生し、衝突したフレームは破棄され相手装置に届かなくなる。しかしながら、イーサフレームの再送や上位レイヤでTCPセグメントの再送処理を行うため、通信を行っているアプリケーションではパケット衝突を検出できないという問題がある。
【0003】
このため、従来から全二重・半二重不整合検出装置が考案されている。この全二重・半二重不整合検出装置は、全二重・半二重不整合検出装置から連続送信パターンとして複数個の検査メッセージを短い間隔で連続送信し、分割送信パターンとして1つの検査メッセージを複数の通信フレームに分割して送信し、連続送信パターンにより送信された検査メッセージをそのままホスト側から折り返し送信し、分割送信パターンにより送信された検査メッセージを再組み立てしてホスト側から折り返し送信する。そして、全二重・半二重不整合検出装置により、連続送信パターンによる検査メッセージ送信におけるロス率と、分割送信パターンによる検査メッセージ送信におけるロス率と比較し、連続送信パターンによる検査メッセージ送信におけるロス率の方が大きい場合にネットワーク経路上に全二重・半二重不整合が存在すると判定するものである。このようなシステムでは、検査メッセージをわざわざ送信しなければならず、問題のないネットワークにおいて通信負荷を高めることになる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−345224号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上で述べた方式によれば、信頼性のある数値を得るためには、それなりの数の検査メッセージを送信しなければならず、通常運用しているネットワークやホストに対して負荷を与えることになる。
【0006】
従って、本技術の目的は、通信装置間の通信を観測することによって通信状態の問題を検出するための新規な技術を提供することである。
【課題を解決するための手段】
【0007】
本動作モード相違検出方法は、1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、上記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、上記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、コネクション毎且つ上り方向及び下り方向の各々について、パケットに含まれるシーケンス番号とシーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、第1のパケット及び第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、第1のパケットにロス又は再送が発生していると判断された場合には、コネクション毎に第1のパケットについての衝突数及び第2のパケットについての衝突数を格納する衝突数データ格納部において、第1のパケットが関連するコネクションで送信される第1のパケットについての衝突数を増加させ、第2のパケットにロス又は再送が発生していると判断された場合には、衝突数データ格納部において、第2のパケットが関連するコネクションで送信される第2のパケットについての衝突数を増加させるステップと、コネクション毎に、第1のパケットについての衝突数を第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、第2のパケットについての衝突数を第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、メッセージ内衝突率がメッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップとを含む。
【発明の効果】
【0008】
通信装置間の通信を観測することによって通信状態の問題を検出できるようになる。
【図面の簡単な説明】
【0009】
【図1】図1は、従来の問題点を説明するための図である。
【図2】図2は、装置接続の概要を示す図である。
【図3】図3は、動作モード違いによる衝突の一例を示す図である。
【図4】図4は、間欠障害の一例を示す図である。
【図5】図5は、メッセージのセグメントの送信間隔について説明するための図である。
【図6】図6は、TCPレベルでのパケットロスの検出と再送を示す図である。
【図7】図7は、TCPレベルでのパケットロスの検出と再送を示す図である。
【図8】図8は、イーサレベルの衝突検出と再送を示す図である。
【図9】図9は、TCPにおける通信の遷移を説明するシーケンス図である。
【図10】図10は、IPパケットの構成図である。
【図11】図11は、IPヘッダの構成図である。
【図12】図12は、TCPヘッダの構成図である。
【図13】図13は、分析装置の機能ブロック図である。
【図14】図14は、メインの処理フローを示す図である。
【図15】図15は、コネクション情報テーブルの一例を示す図である。
【図16】図16は、メインの処理フローを示す図である。
【図17】図17は、開始及び終了時処理の処理フローを示す図である。
【図18】図18は、第1シーケンス番号テーブルの一例を示す図である。
【図19】図19は、第2シーケンス番号テーブルの一例を示す図である。
【図20】図20は、セグメント数テーブルの一例を示す図である。
【図21】図21は、衝突数テーブルの一例を示す図である。
【図22】図22は、蓄積セグメント数テーブルの一例を示す図である。
【図23】図23は、蓄積衝突数テーブルの一例を示す図である。
【図24】図24は、上りパケット処理の処理フローを示す図である。
【図25】図25は、上りパケット処理の処理フローを示す図である。
【図26】図26は、下りパケット処理の処理フローを示す図である。
【図27】図27は、下りパケット処理の処理フローを示す図である。
【図28】図28は、集計処理の処理フローを示す図である。
【図29】図29は、蓄積データ格納部に格納されるデータの一例を示す図である。
【図30】図30は、集計処理の処理フローを示す図である。
【図31】図31は、集計結果の一例を示す図である。
【図32】図32は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0010】
[本実施の形態の前提]
まず、本実施の形態では、図2に示すように、分析装置100で、通信装置間のイーサネットフレームをキャプチャし、イーサネットフレームの再送やTCPセグメント(すなわちパケット)の再送又はロスを検出することで、通信装置間の動作モード違いを判別するものである。図2では、サーバとクライアント端末との間のスイッチに分析装置100を接続して、イーサネットフレーム(以下、イーサフレームとも呼ぶ)をキャプチャする。
【0011】
イーサフレームの再送、TCPセグメントの再送及びロスの検出は、イーサフレームの衝突以外に、伝送路の間欠障害、サーバや通信装置の高負荷など様々な要因が考えられる。すなわち、イーサフレームの再送やTCPセグメントの再送及びロスの現象を、イーサフレーム衝突とそれ以外の要因に区別する必要がある。イーサフレームの衝突は、図3に示すように、イーサフレームの送信間隔が短い時に発生する傾向がある。衝突が発生して到達していないパケットがあることが分かれば、イーサレベルで自ら再送する場合もあれば、ロスを発見してACKにてロスを通知してTCPレイヤで再送する場合もある。一方、伝送路の間欠障害、サーバや通信装置の高負荷などの場合、図4に示すようにイーサフレームの送信間隔が長い場合も、イーサフレームの送信間隔が短い場合にも発生する。しかしながら、イーサフレームの衝突が図3に示すように送信間隔が短い場合に明らかに発生しやすいという特性との対比においては、送信間隔が長い場合においてパケットの再送やロスの検出の頻度が高ければ、間欠障害であると言うことができる。
【0012】
なお、TCP上のアプリケーションが1パケット(1514バイト)に収まらないメッセージの送信を指示すると、カーネルがセグメント分割し、複数セグメントでメッセージを送信する。図5に示すように、セグメントの送信間隔には、同一メッセージ内と異なるメッセージ間の2種類が存在し、同一メッセージ内のセグメント送信間隔が短いという性質がある。これは、例えばサーバアプリケーションがカーネルに対して、メッセージ単位に送信要求を行うため、カーネル内で分割された同一メッセージ内のセグメントの送信間隔は短くなるためである。一方、サーバアプリケーションで分割された2つの異なるメッセージ送信要求は、別々にシーケンシャルにカーネルで処理されるので、セグメント送信間隔が長くなる。
【0013】
本実施の形態では、イーサフレームの衝突とそれ以外の要因とに区別するため、同一メッセージ内でイーサフレームの再送又はTCPセグメントの再送やロスが発生する割合と、メッセージ先頭で発生する割合を比較する。そして、同一メッセージ内の発生率がメッセージ先頭の発生率よりも大きい時、イーサフレームが衝突しており、動作モード違いが存在すると推測することができる。
【0014】
本実施の形態では、セグメントに係るパケットのロスや再送をTCPシーケンス番号を用いて検出する。すなわち、分析装置100が接続されているスイッチなどでモニタするポート(以下、モニタポートと呼ぶ)を通過するパケットのTCPヘッダに含まれるシーケンス番号をその直前のパケットのTCPヘッダに含まれるTCPヘッダから予測される予測シーケンス番号と比較する。図6に示すように、TCPのACKで、それまでに受信できたセグメントに係るパケットのシーケンス番号が通知されるので、最後に送信したパケットのシーケンス番号+データ量より小さい応答確認番号がACKに含まれていれば、衝突があったことになり、TCPレベルにおいてパケットの再送が行われる。この場合には、予測より小さく且つ応答確認番号と同じ値のシーケンス番号のパケットが送信されるので、パケットの再送を検出できる。
【0015】
さらに、図7に示すように、衝突によりパケットをロスしても通信装置側から次々にパケットが送信されてくる場合には、予測よりも大きな値のシーケンス番号を含むパケットを受信することから、パケットのロスを検出することができる。
【0016】
また、図8に示すように、イーサレベルにおいて衝突を検出してイーサフレームの再送を行った場合には、イーサフレームをバッファリングしておくことで完全に一致するイーサフレームの再送を検出することができる。
【0017】
以上述べた3つの衝突パターンを検出すると共に、当該衝突がメッセージの先頭なのかメッセージ内なのかを識別することで、メッセージ内の衝突率及びメッセージ先頭の衝突率を算出することができる。
【0018】
また、図9に示すように、クライアント端末からサーバに接続する場合には、TCPレベルにおいて、SYNパケットをクライアント端末からサーバに送信し、これに対してサーバからクライアント端末にSYN+ACKパケットを送信する。さらに、クライアント端末からサーバへACKパケットを送信する。これによってコネクションが確立したことになって、通信が双方向で行われる。その後、例えばクライアント端末からサーバへFINパケットを送信し、それに対してサーバからクライアント端末へACKパケットが返信される。さらに、サーバからクライアント端末へFINパケットが送信され、クライアント端末からサーバへACKパケットが送信されると、コネクションの切断が行われたことになる。TCPヘッダに設定されるシーケンス番号は、直前に受信したACKパケットに応じて設定される。すなわち、接続確立前であれば、クライアント端末からサーバへ送信したACKパケットに含まれる応答確認番号をシーケンス番号として含むパケットをサーバからクライアント端末へ送信することになる。同様に、サーバからクライアント端末へ送信したSYN+ACKパケットに含まれる応答確認番号をシーケンス番号として含むパケットをクライアント端末からサーバへ送信することになる。なお、接続確立時であれば、クライアント端末からサーバに送られたACKパケットに含まれるシーケンス番号と応答確認番号をチェックすれば、開始シーケンス番号を特定できる。
【0019】
さらに、図10に示すように、IPパケットには、IPヘッダ、TCPヘッダ及びTCPデータが含まれており、このTCPデータの部分にアプリケーションのメッセージヘッダ及びメッセージデータが含まれる。メッセージヘッダには、メッセージ長が含まれる。なお、IPパケットは、イーサフレームの中に含まれることになる。
【0020】
また、IPヘッダの模式図を図11に示す。IPヘッダは周知であるから詳しく述べないが、送信元IPアドレスと宛先IPアドレスを含むようになっている。同様に、図12にTCPヘッダの模式図を示す。TCPヘッダには、TCPヘッダについても周知であるから詳しく述べないが、コネクションを識別するための送信元ポート番号及び宛先ポート番号と、シーケンス番号及び確認応答番号とを含むようになっている。なお、フラグにおいてSYNパケット、FINパケット、ACKパケットであるか否かなどが指定されている。なお、TCPパケットのTCPデータのサイズ(データ長)は、(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長)にて算出可能である。
【0021】
[実施の形態の具体的内容]
次に、本実施の形態に係る分析装置100の構成及び処理内容について説明する。図13に分析装置100の機能ブロック図を示す。分析装置100は、コネクション関連処理部101と、上りパケット処理部102と、下りパケット処理部103と、コネクション情報テーブル104と、セグメント数テーブル105と、衝突数テーブル106と、第1シーケンス番号テーブル107と、第2シーケンス番号テーブル108と、フレームバッファ109と、蓄積データ格納部110と、評価処理部111と、出力部112とを有する。
【0022】
次に、図13に示した分析装置100の処理内容について図14乃至図31を用いて説明する。コネクション関連処理部101は、モニタポートを通過するパケットを受信したか判断する(ステップS1)。パケットを受信していない場合には、受信するまで待機する。一方、受信した場合には、コネクション関連処理部101は、受信パケットからコネクション情報を抽出する(ステップS3)。コネクション情報は、送信元IPアドレス及び宛先IPアドレスと送信元ポート番号及び宛先ポート番号とを含む。そして、コネクション関連処理部101は、抽出コネクション情報でコネクション情報テーブル104を検索する(ステップS5)。コネクション情報テーブル104には、例えば図15に示すようなテーブルである。図15の例では、レコードの生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)とが登録されるようになっている。なお、送信元と宛先が入れ替わっている場合にも同じコネクションであるが、ここでは両方テーブルに登録するのではなく、一方のみを登録することにする。
【0023】
そして、ステップS5の結果として該当レコードが存在すれば(ステップS7:Yesルート)、コネクション関連処理部101は、受信パケットが切断関連パケットであるか判断する(ステップS8)。切断関連パケットは、FINパケットを含む。切断関連パケットであれば、端子Aを介して図16のステップS15に移行する。一方、切断関連パケットでなければ、コネクション関連処理部101は、上りパケット処理部102に処理を依頼し、上りパケット処理部102は、上りパケット処理を実施する(ステップS9)。この上りパケット処理については後に詳しく述べる。その後端子Bを介して図16のステップS19に移行する。
【0024】
一方、ステップS5の結果として該当レコードが存在しない場合には(ステップS7:Noルート)、コネクション関連処理部101は、接続先と接続元のIPアドレス及びポート番号を入れ替えて、下りコネクション情報を生成し(ステップS11)、下りコネクション情報でコネクション情報テーブル104を検索する(ステップS13)。処理は端子Cを介して図16の処理に移行する。
【0025】
そして、ステップS13の結果として該当レコードが存在する場合には(ステップS14:Yesルート)、コネクション関連処理部101は、受信パケットが切断関連パケットであるか判断する(ステップS16)。切断関連パケットであれば、ステップS15に移行する。一方、切断関連パケットでなければ、コネクション関連処理部101は、下りパケット処理部103に処理を依頼し、下りパケット処理部103は、下りパケット処理を実施する(ステップS17)。この下りパケット処理については後に詳しく述べる。その後ステップS19に移行する。
【0026】
一方、ステップS13の結果として該当レコードが存在しない場合には(ステップS14:Noルート)、コネクション関連処理部101は、開始及び終了時処理を実施する(ステップS15)。この開始及び終了時処理については後に詳しく述べる。処理はステップS19に移行する。
【0027】
ステップS19では、処理が終了するか判断し(ステップS19)、処理終了でなければ端子Dを介して図14のステップS1に戻る。一方、処理終了であれば、処理を終了する。
【0028】
上りパケット処理及び下りパケット処理により、メッセージ先頭か否か及び衝突の検出を実施し、開始及び終了時処理により、コネクション情報等を設定する処理及び収集データを蓄積データ格納部110に移動させる処理を実施する。
【0029】
次に、開始及び終了時処理について図17乃至図23を用いて説明する。最初に、コネクション関連処理部101は、受信パケットが第1の接続関連パケットであるか判断する(ステップS21)。本実施の形態では、第1の接続関連パケットは、SYN+ACKパケットである。第1の接続関連パケットであれば、コネクション関連処理部101は、受信パケットのコネクション情報の接続先と接続元のIPアドレス及びポート番号を入れ替えて接続判断情報として、例えばメインメモリなどの記憶装置に格納する(ステップS23)。そして元の処理に戻る。
【0030】
一方、第1の接続関連パケットではない場合には、コネクション関連処理部101は、受信パケットが、接続判断情報と同じコネクション情報を含む第2の接続関連パケットであるか判断する(ステップS25)。第2の接続関連パケットは、図9で示した接続シーケンスにおいてSYN+ACKパケットの次に送信されるACKパケットである。従って、このようなACKパケットでは、SYN+ACKパケットとは接続先と接続元のIPアドレス及びポート番号が逆になっている。
【0031】
受信パケットが、このような第2の接続関連パケットであれば、コネクション関連処理部101は、受信パケットのコネクション情報をコネクション情報テーブル104(図15)に登録する(ステップS27)。この際、処理時刻を生成時刻として一緒に登録する。さらに、第2の接続関連パケットのTCPヘッダに含まれるシーケンス番号及び応答確認番号とコネクション情報などを、第1シーケンス番号テーブル107及び第2シーケンス番号テーブル108に登録する(ステップS29)。第1シーケンス番号テーブル107の一例を図18に示す。図18の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、上りシーケンス番号と、上り終了シーケンス番号と、下りシーケンス番号と、下り終了シーケンス番号とを登録するようになっている。ここでは、上り終了シーケンス番号及び下り終了シーケンス番号については登録されない。また、上りシーケンス番号には、シーケンス番号が登録され、下りシーケンス番号には、応答確認番号が登録される。また、第2シーケンス番号テーブル108の一例を図19に示す。図19の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、上りロス回数と、下りロス回数と、上りロスシーケンス番号リストへのアドレスと、下りロスシーケンス番号リストへのアドレスとを登録するようになっている。この第2シーケンス番号テーブルは、パケットのロスを検出した場合にそのロスを管理するためのテーブルであり、上りロス回数及び下りロス回数はカウンタであり、上りロスシーケンス番号リストへのアドレスは、上り用のリスト構造における先頭リストのデータブロックへのポインタとなっており、下りロスシーケンス番号リストへのアドレスは、下り用のリスト構造における先頭リストのデータブロックへのポインタとなっている。図19の例では、第2レコードにおける上りシーケンス番号リストにおける先頭リストのデータブロックのアドレスは「456」であり、アドレス「456」には、「Nextアドレス」(=次のリストのデータブロックへのポインタ。ここでは次のリストのデータブロックが存在しないので「0」。)と、ロス開始シーケンス番号(ここでは「3000」)とが登録されるようになっている。同様に、第1レコードにおける下りシーケンス番号リストにおける先頭リストのデータブロックのアドレスは「123」であり、アドレス「123」には、「Nextアドレス」(ここでは「789」)と、ロス開始シーケンス番号(ここでは「10000」)とが登録されている。次のリストのデータブロックのアドレス「789」には、「Nextアドレス」(ここでは存在していないので「0」)と、ロス開始シーケンス番号(ここでは「500000」)とが登録されている。このように、ロスを発見する毎に、カウンタがインクリメントされ、リスト構造の長さが伸びるようになっている。但し、以下で述べるように、再送が確認できた時点で該当リストのデータブロックについては削除され、リスト構造が変更される。
【0032】
さらに、コネクション関連処理部101は、セグメント数テーブル105及び衝突数テーブル106に、コネクション情報などを登録する(ステップS31)。セグメント数テーブル105の一例を図20に示す。図20の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内のセグメントの出現回数と、メッセージ先頭のセグメントの出現回数とが登録されるようになっている。但し、この時点では、出現回数は「0」となる。また、衝突数テーブル106の一例を図21に示す。図21の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内の衝突検出の回数と、メッセージ先頭の衝突検出の回数とを登録するようになっている。但し、この時点では、衝突検出の回数は「0」となる。そして元の処理に戻る。以上が、接続時の処理になる。
【0033】
なお、切断時の処理(ステップS35乃至S41)は、ステップS25で上で述べたような第2の接続関連パケットではなく、切断関連パケット(ここではFINパケット)である場合に実行される。
【0034】
すなわち、コネクション関連処理部101は、受信パケットがステップS25で上で述べたような第2の接続関連パケットではないと判断した場合には、受信パケットが切断関連パケットであるか判断する(ステップS33)。受信パケットが切断関連パケットでもない場合には、そのまま元の処理に戻る。一方、受信パケットが切断関連パケットであれば、セグメント数テーブル105及び衝突数テーブル106における該当レコード(コネクション情報又は下りコネクション情報で特定されるレコード)を、蓄積データ格納部110の対応するテーブルに登録する(ステップS35)。図22に、蓄積データ格納部110に格納される蓄積セグメント数テーブルの一例を示す。図22の例では、生成時刻と、消滅時刻(=ステップS35実行時刻)と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内のセグメントの出現回数と、メッセージ先頭のセグメントの出現回数とを登録するようになっている。また、図23に、蓄積データ格納部110に格納される蓄積衝突数テーブルの一例を示す。図22の例では、生成時刻と、消滅時刻(=ステップS35実行時刻)と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内の衝突検出の回数と、メッセージ先頭の衝突検出の回数とが登録されるようになっている。
【0035】
また、コネクション関連処理部101は、セグメント数テーブル105及び衝突数テーブル106において該当レコード(コネクション情報又は下りコネクション情報で特定されるレコード)を削除する(ステップS37)。さらに、第1及び第2シーケンス番号テーブル107及び108においても、該当レコードを削除する(ステップS39)。第2シーケンス番号テーブル108に付随する関連リスト構造も削除する。最後に、コネクション情報テーブル104において、該当レコードを削除する(ステップS41)。そして元の処理に戻る。
【0036】
以上のような処理を実施することで、以下で述べる集計処理の前処理が実施されたことになり、さらに同じコネクションが確立されても異なるデータとして処理できるようになる。
【0037】
次に、図24及び図25を用いて上りパケット処理について説明する。まず、上りパケット処理部102は、受信イーサフレームをそのままフレームバッファ109に格納する(ステップS51)。フレームバッファ109は、1つのコネクションについて例えば20msec分のイーサフレームを格納できる程度のサイズを有しており、古いものから順に上書きする形でバッファリングする。また、受信パケットにおいて、アプリケーション層のメッセージヘッダをチェックし(ステップS53)、当該メッセージヘッダに含まれる情報からメッセージの先頭であるか否かを判断する(ステップS55)。例えば、メッセージヘッダに、現パケットの、メッセージ先頭からのオフセットが含まれており、そのオフセットが「0」であれば先頭と判断できる。これは一例であるが一般的には、先頭か否かを特定可能なデータをメッセージヘッダは含むので、そのデータを用いる。メッセージの先頭でなければステップS59に移行する。
【0038】
メッセージの先頭であれば、上りパケット処理部102は、メッセージヘッダに含まれるメッセージ長のデータを用いてメッセージの末尾に相当するシーケンス番号を(第1シーケンス番号テーブル107の上りシーケンス番号+メッセージ長)で算出し、第1シーケンス番号テーブル107における該当コネクションについてのレコードの上り終了シーケンス番号の列を更新する(ステップS57)。上り終了シーケンス番号までのシーケンス番号であれば1つのメッセージについてのパケットであるが、上り終了シーケンス番号より大きな値のシーケンス番号については、次のメッセージについてのパケットである。なお、フロー上では明示していないが、コネクションを維持したまま次のメッセージを送信する場合もある。処理はステップS59に移行する。
【0039】
ステップS59では、上りパケット処理部102は、セグメント数テーブル105において、ステップS55の判断結果に応じて、メッセージ先頭のセグメントの出現回数又はメッセージ内のセグメントの出現回数を1インクリメントする。そして、フレームバッファ109にステップS51で格納したイーサフレームと同一のイーサフレームが完全に重複してバッファリングされているか否かを判断する(ステップS61)。これは、図8に示すようなイーサレベルでのフレームの衝突に応じたイーサフレームの再送を検出するためである。
【0040】
重複していれば、上りパケット処理部102は、衝突数テーブル106において、ステップS55の判断結果に応じて、メッセージ先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS63)。その後処理は端子Eを介して元の処理に戻る。
【0041】
一方、重複していなければ、上りパケット処理部102は、受信パケットのTCPヘッダからシーケンス番号(以下、上りシーケンス番号と呼ぶ)を抽出する(ステップS65)。そして、上りシーケンス番号と第1シーケンス番号テーブル107における該当レコードの上りシーケンス番号(区別するために上り番号と呼ぶ)とが一致するか判断する(ステップS67)。この条件を満たす場合には、ロスも再送も発生していないので端子Fを介して図25のステップS81に移行する。一方、この条件を満たさない場合には、ロス又は再送が発生しているので端子Gを介して図25のステップS69に移行する。
【0042】
図25の処理の説明に移行して、上りパケット処理部102は、受信パケットのTCPヘッダにおける上りシーケンス番号が第1シーケンス番号テーブル107における該当レコードの上り番号より大きいか判断する(ステップS69)。このような条件を満たす場合には、図7に示すような上りパケットロスを検出したことになる。従って、第2シーケンス番号テーブル108における該当レコードの上りロス回数を1インクリメントすると共に、リスト構造を辿って末端に上り番号を含むリストのデータブロックを追加する(ステップS71)。リストのデータブロックは、ロスしたパケットの再送が後に発生した場合に衝突回数をダブルカウントしないようにするために用いられる。さらに、衝突数テーブル106における該当レコードにおいて、ステップS55の判断結果に応じて、メッセージの先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS73)。そしてステップS81に移行する。
【0043】
一方、ステップS69の条件を満たさない場合には、図6に示すようなパケットの再送が発生していることが分かるので、上りパケット処理部102は、受信パケットのコネクション情報で第2シーケンス番号テーブル108を検索して該当レコードを特定すると共に、該当レコードで指し示されているリスト構造において上りシーケンス番号に該当するリストを検索する(ステップS75)。検索の結果リストが存在しない場合には、何らかの理由でロスを検出せずに再送が行われたという状態でありステップS73に移行する。すなわち、衝突回数を1インクリメントする。一方、検索の結果リストが存在する場合には、再送において衝突回数を1インクリメントしているので、同じ事象について衝突回数をインクリメントすることはできない。従って、第2シーケンス番号テーブル108の該当レコードにおいて、上りシーケンス番号に該当するリストのデータブロックを削除する(ステップS79)。なお、リンクの途中のリストが削除対象であれば、リンク切れが発生するので、1つ前のリストのデータブロックにおけるNextアドレスを1つ後のリストのデータブロックのアドレスに変更する。処理はステップS81に移行する。
【0044】
ステップS81では、上りパケット処理部102は、受信パケットのセグメント長(=(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長))を取得する。そして、受信パケットのTCPヘッダにおける上りシーケンス番号にセグメント長を加算し、当該加算結果で第1シーケンス番号テーブル107の該当レコードにおける上りシーケンス番号を更新する(ステップS83)。この加算結果が予測シーケンス番号となる。そして元の処理に戻る。
【0045】
このようにすれば、セグメントのデータを含むパケット(イーサフレームを含む)を検査して主にシーケンス番号をベースに判断することにより、図6乃至図8で示した衝突の事象を適切に検出して、衝突数テーブル106及びセグメント数テーブル105に反映させることができる。
【0046】
次に、下りパケット処理について図26及び図27を用いて説明する。下りパケット処理はほぼ上りパケット処理と同様である。まず、下りパケット処理部103は、受信イーサフレームをそのままフレームバッファ109に格納する(ステップS91)。フレームバッファ109は、1つのコネクションについて例えば20msec分のイーサフレームを格納できる程度のサイズを有しており、古いものから順に上書きする形でバッファリングする。また、受信パケットにおいて、アプリケーション層のメッセージヘッダをチェックし(ステップS93)、当該メッセージヘッダに含まれる情報からメッセージの先頭であるか否かを判断する(ステップS95)。メッセージの先頭でなければステップS99に移行する。
【0047】
メッセージの先頭であれば、下りパケット処理部103は、メッセージヘッダに含まれるメッセージ長のデータを用いてメッセージの末尾に相当するシーケンス番号を(第1シーケンス番号テーブル107の下りシーケンス番号+メッセージ長)で算出し、第1シーケンス番号テーブル107における該当コネクションについてのレコードの下り終了シーケンス番号の列を更新する(ステップS97)。処理はステップS99に移行する。
【0048】
ステップS99では、下りパケット処理部103は、セグメント数テーブル105において、ステップS95の判断結果に応じて、メッセージ先頭のセグメントの出現回数又はメッセージ内のセグメントの出現回数を1インクリメントする。そして、フレームバッファ109にステップS51で格納したイーサフレームと同一のイーサフレームが完全に重複しているか否かを判断する(ステップS101)。これは、図8に示すようなイーサレベルでのフレームの衝突に応じたイーサフレームの再送を検出するためである。
【0049】
重複していれば、下りパケット処理部103は、衝突数テーブル106において、ステップS95の判断結果に応じて、メッセージ先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS103)。その後処理は端子Hを介して元の処理に戻る。
【0050】
一方、重複していなければ、下りパケット処理部103は、受信パケットのTCPヘッダからシーケンス番号(以下、下りシーケンス番号と呼ぶ)を抽出する(ステップS105)。そして、下りシーケンス番号と第1シーケンス番号テーブル107における該当レコードの下りシーケンス番号(区別するために下り番号と呼ぶ)とが一致するか判断する(ステップS107)。この条件を満たす場合には、ロスも再送も発生していないので端子Jを介して図27のステップS121に移行する。一方、この条件を満たさない場合には、ロス又は再送が発生しているので端子Kを介して図27のステップS109に移行する。
【0051】
図27の処理の説明に移行して、下りパケット処理部103は、受信パケットのTCPヘッダにおける下りシーケンス番号が第1シーケンス番号テーブル107における該当レコードの下り番号より大きいか判断する(ステップS109)。このような条件を満たす場合には、図7に示すような下りパケットロスを検出したことになる。従って、第2シーケンス番号テーブル108における該当レコードの下りロス回数を1インクリメントすると共に、リスト構造を辿って末端に下り番号を含むリストのデータブロックを追加する(ステップS111)。リストのデータブロックは、ロスしたパケットの再送が後に発生した場合に衝突回数をダブルカウントしないようにするために用いられる。さらに、衝突数テーブル106における該当レコードにおいて、ステップS95の判断結果に応じて、メッセージの先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS113)。そしてステップS121に移行する。
【0052】
一方、ステップS109の条件を満たさない場合には、図6に示すようなパケットの再送が発生していることが分かるので、下りパケット処理部103は、受信パケットの下りコネクション情報で第2シーケンス番号テーブル108を検索して該当レコードを特定すると共に、該当レコードで指し示されているリスト構造において下りシーケンス番号に該当するリストを検索する(ステップS115)。検索の結果リストが存在しない場合には、何らかの理由でロスを検出せずに再送が行われたという状態でありステップS113に移行する。すなわち、衝突回数を1インクリメントする。一方、検索の結果リストが存在する場合には、再送において衝突回数を1インクリメントしているので、同じ事象について衝突回数をインクリメントすることはできない。そこで、第2シーケンス番号テーブル108の該当レコードにおいて、下りシーケンス番号に該当するリストのデータブロックを削除する(ステップS119)。なお、リンクの途中のリストが削除対象であればリンク切れが発生するので、1つ前のリストのデータブロックにおけるNextアドレスを1つ後のリストのデータブロックのアドレスに変更する。処理はステップS121に移行する。
【0053】
ステップS121では、下りパケット処理部103は、受信パケットのセグメント長(=(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長))を取得する。そして、受信パケットのTCPヘッダにおける下りシーケンス番号にセグメント長を加算し、当該加算結果で第1シーケンス番号テーブル107の該当レコードにおける下りシーケンス番号を更新する(ステップS123)。この加算結果が予測シーケンス番号となる。そして元の処理に戻る。
【0054】
このようにすれば、セグメントのデータを含むパケット(イーサフレームを含む)を検査して主にシーケンス番号をベースに判断することにより、図6乃至図8で示した衝突の事象を適切に検出して、衝突数テーブル106及びセグメント数テーブル105に反映させることができる。
【0055】
次に、蓄積データ格納部110に格納されているデータを用いて動作モード違いや間欠障害が発生しているか否かについて判断する集計処理について図28乃至図31を用いて説明する。なお、集計処理については、定期的に実施するようにしても良いし、ユーザからの指示に応じて実施するようにしても良い。
【0056】
まず、評価処理部111は、蓄積データ格納部110の蓄積セグメント数テーブル及び蓄積衝突数テーブルに格納されている、一定時間内のレコードをコネクション毎にソートする(ステップS131)。一定時間についてはユーザに指定された時間を採用するか、又は定期的に所定時間だけシフトさせるようにして決定する。また、例えば生成時刻と消滅時刻の両方が一定期間に含まれるレコードを処理対象とする。そして、未処理のコネクションを1つ特定する(ステップS133)。1つのコネクションにつき複数レコード抽出される場合がある。また、上りと下りとをここでは区別しない。さらに、特定されたコネクションの先頭衝突数(=メッセージ先頭の衝突回数の合計)/先頭セグメント数(=メッセージ先頭のセグメント出現回数の合計)によりメッセージ先頭衝突率を算出し、例えばメインメモリなどの記憶装置に格納する(ステップS135)。さらに、特定されたコネクションのメッセージ内衝突数(=メッセージ内の衝突回数の合計)/メッセージ内セグメント数(=メッセージ内のセグメントの出現回数の合計)によりメッセージ内衝突率を算出し、例えばメインメモリ等の記憶装置に格納する(ステップS137)。
【0057】
その後、評価処理部111は、メッセージ先頭衝突率とメッセージ内衝突率が一致するか判断する(ステップS139)。例えば衝突数が0であればこのような条件が満たされることになる。この条件を満たす場合には、特に問題が発生しているわけではないので、コネクション情報と共に正常を表すデータを、例えば蓄積データ格納部110に格納する(ステップS141)。例えば図29に示すような判定結果テーブルにデータを登録する。図29の例では、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、判定結果(「正常」「動作モード違い」又は「間欠障害」)とが登録されるようになっている。処理は端子Lを介して図30に移行して処理を終了する。
【0058】
一方、メッセージ先頭衝突率とメッセージ内衝突率が一致しない場合には、評価処理部111は、メッセージ先頭衝突率<メッセージ内衝突率であるか否かを判断する(ステップS143)。この条件を満たす場合には、上で述べたように動作モード違いと判断できるので、コネクション情報と動作モード違いを表すデータを、例えば蓄積データ格納部110の判定結果テーブルに格納する(ステップS147)。そしてステップS149に移行する。一方、この条件を満たさない場合には、コネクション情報と伝送路間欠障害を表すデータを、例えば蓄積データ格納部110の判定結果テーブルに格納する(ステップS145)。そしてステップS149に移行する。
【0059】
ステップS149においては、評価処理部111は、全てのコネクションについて処理したか判断し、未処理のコネクションが存在する場合には、端子Mを介してステップS133に戻る。一方、全てのコネクションについて処理した場合には、端子Nを介して図30の処理に移行する。
【0060】
図30の処理の説明に移行して、評価処理部111は、コネクション毎の結果を装置間毎に集計して、集計結果を例えば蓄積データ格納部110に格納する(ステップS151)。例えば図31に示すようなデータを生成する。具体的には、接続先IPアドレスと接続元IPアドレスの組み合わせ毎に、正常と判定されたコネクションの有無と、動作モード違いと判定されたコネクションの有無と、間欠障害と判定されたコネクションの有無とを登録するようになっている。接続先IPアドレスと接続元IPアドレスとの組み合わせは入れ替わっていても同じものとして集約する。なお、動作モード違いと間欠障害とは同時に発生することもある。従って、動作モード違いと判定されたコネクションも間欠障害と判定されたコネクションも含む場合がある。
【0061】
そして、出力部112は、蓄積データ格納部110に格納されているデータを、例えばユーザからの要求に応じて出力する(ステップS153)。例えば、蓄積データ格納部110に格納されているデータをそのまま要求された部分について出力するようにしても良いし、例えば間欠障害が検出された装置のデータや動作モード違いが検出された装置のデータのみを出力するようにしても良い。さらに、後者のようなデータについては、検出された場合には予め設定されているユーザに対してメールなどで通知するような構成を採用するようにしても良い。
【0062】
以上のように、ネットワークの状況を、特別なパケットを送信することなく通常のパケットをキャプチャすることによって得られたデータにより把握することができるようになる。動作モード違いが検出された装置間の伝送路については、その設定の状態を確認して正しい設定に直せば通常どおり使用することができる。また、間欠障害が検出された場合には、ケーブルの交換などを含む他の周知の手法を用いて障害除去を行うことができる。
【0063】
以上本技術の実施の形態を説明したが、本実施の形態はこれに限定されるものではない。例えば、ACKパケットを用いないような処理フローを示したが、ACKパケットの応答確認番号を参照した上でパケットのロスや再送を特定するようにしても良い。
【0064】
さらに、上で述べた処理は一例であり、処理結果が変わらなければ処理ステップの順番を入れ替えたり並列に実行するようにしても良い。また、シーケンス番号を用いる処理で、正しく衝突がカウントできればよいので、他の処理フローを採用するようにしても良い。さらに、図13の機能ブロック図も一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。
【0065】
なお、上で述べた分析装置100は、コンピュータ装置であって、図32に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0066】
以上本実施の形態をまとめると以下のようになる。
【0067】
本動作モード相違検出方法は、1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、上記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、上記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、コネクション毎且つ上り方向及び下り方向の各々について、パケットに含まれるシーケンス番号とシーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、第1のパケット及び第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、第1のパケットにロス又は再送が発生していると判断された場合には、コネクション毎に第1のパケットについての衝突数及び第2のパケットについての衝突数を格納する衝突数データ格納部において、第1のパケットが関連するコネクションで送信される第1のパケットについての衝突数を増加させ、第2のパケットにロス又は再送が発生していると判断された場合には、衝突数データ格納部において、第2のパケットが関連するコネクションで送信される第2のパケットについての衝突数を増加させるステップと、コネクション毎に、第1のパケットについての衝突数を第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、第2のパケットについての衝突数を第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、メッセージ内衝突率がメッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップとを含む。
【0068】
あるアプリケーション間でやりとりされるメッセージは、当該メッセージのサイズが大きければ複数のセグメントに分割され、複数パケット(同じく複数フレーム)として送信される。この複数のフレームの送信間隔は短く、メッセージ間の送信間隔は相対的に長くなる。もし通信している装置間に動作モード相違が存在する場合に送信間隔が短ければ、フレーム衝突がより多く発生するので、上で述べるメッセージ内衝突率が大きな値になる。一方、送信間隔が相対的に長いメッセージの先頭パケットについての衝突率であるメッセージ先頭衝突率は、動作モード相違の場合には相対的に小さくなる。従って、上で述べたように、メッセージ内衝突率>メッセージ先頭衝突率が成立する場合には、動作モード相違が存在するものとして記録するものである。
【0069】
また、メッセージ内衝突率がメッセージ先頭衝突率より小さい場合に、伝送路間欠障害が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップをさらに含むようにしても良い。間欠障害があればイーサフレームの衝突自体はメッセージ内もメッセージ先頭も均等に発生するが、上で述べたのと逆にメッセージ内衝突率<メッセージ先頭衝突率が成立する場合には、伝送路間欠障害が発生していると推測できる。
【0070】
さらに、処理結果格納部に登録されているコネクションを上記装置の組み合わせ毎に集約すると共に、コネクションに対応する結果データを上記装置の組み合わせ毎に集約するステップをさらに含むようにしても良い。このようにすれば、どの装置について設定を修正すべきなのか、どの伝送路の検査を行うべきなのかを総合的に特定することができるようになる。
【0071】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【符号の説明】
【0072】
101 コネクション関連処理部 102 上りパケット処理部
103 下りパケット処理部 104 コネクション情報テーブル
105 セグメント数テーブル 106 衝突数テーブル
107 第1シーケンス番号テーブル
108 第2シーケンス番号テーブル
109 フレームバッファ 110 蓄積データ格納部
111 評価処理部 112 出力部
【技術分野】
【0001】
本技術は、通信状態の分析技術に関する。
【背景技術】
【0002】
図1に示すように、2つの通信装置(例えばクライアント端末とスイッチ(SW)等)をイーサネット(登録商標)で接続し通信する場合、LAN(Local Area Network)ポートの一方を「全二重固定」、他方を「自動識別」の設定で接続すると、自動認識が失敗し、「自動識別」側が「半二重」の動作モードに設定される場合が多い。この時、イーサネットの障害とは認識されず、2つの装置間で動作モードが異なる状態で接続される。「全二重固定」と「半二重」で通信を行う場合、送受信で同一伝送路を用いるため、同時にイーサフレームを送信するとフレーム衝突が発生し、衝突したフレームは破棄され相手装置に届かなくなる。しかしながら、イーサフレームの再送や上位レイヤでTCPセグメントの再送処理を行うため、通信を行っているアプリケーションではパケット衝突を検出できないという問題がある。
【0003】
このため、従来から全二重・半二重不整合検出装置が考案されている。この全二重・半二重不整合検出装置は、全二重・半二重不整合検出装置から連続送信パターンとして複数個の検査メッセージを短い間隔で連続送信し、分割送信パターンとして1つの検査メッセージを複数の通信フレームに分割して送信し、連続送信パターンにより送信された検査メッセージをそのままホスト側から折り返し送信し、分割送信パターンにより送信された検査メッセージを再組み立てしてホスト側から折り返し送信する。そして、全二重・半二重不整合検出装置により、連続送信パターンによる検査メッセージ送信におけるロス率と、分割送信パターンによる検査メッセージ送信におけるロス率と比較し、連続送信パターンによる検査メッセージ送信におけるロス率の方が大きい場合にネットワーク経路上に全二重・半二重不整合が存在すると判定するものである。このようなシステムでは、検査メッセージをわざわざ送信しなければならず、問題のないネットワークにおいて通信負荷を高めることになる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2006−345224号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上で述べた方式によれば、信頼性のある数値を得るためには、それなりの数の検査メッセージを送信しなければならず、通常運用しているネットワークやホストに対して負荷を与えることになる。
【0006】
従って、本技術の目的は、通信装置間の通信を観測することによって通信状態の問題を検出するための新規な技術を提供することである。
【課題を解決するための手段】
【0007】
本動作モード相違検出方法は、1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、上記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、上記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、コネクション毎且つ上り方向及び下り方向の各々について、パケットに含まれるシーケンス番号とシーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、第1のパケット及び第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、第1のパケットにロス又は再送が発生していると判断された場合には、コネクション毎に第1のパケットについての衝突数及び第2のパケットについての衝突数を格納する衝突数データ格納部において、第1のパケットが関連するコネクションで送信される第1のパケットについての衝突数を増加させ、第2のパケットにロス又は再送が発生していると判断された場合には、衝突数データ格納部において、第2のパケットが関連するコネクションで送信される第2のパケットについての衝突数を増加させるステップと、コネクション毎に、第1のパケットについての衝突数を第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、第2のパケットについての衝突数を第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、メッセージ内衝突率がメッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップとを含む。
【発明の効果】
【0008】
通信装置間の通信を観測することによって通信状態の問題を検出できるようになる。
【図面の簡単な説明】
【0009】
【図1】図1は、従来の問題点を説明するための図である。
【図2】図2は、装置接続の概要を示す図である。
【図3】図3は、動作モード違いによる衝突の一例を示す図である。
【図4】図4は、間欠障害の一例を示す図である。
【図5】図5は、メッセージのセグメントの送信間隔について説明するための図である。
【図6】図6は、TCPレベルでのパケットロスの検出と再送を示す図である。
【図7】図7は、TCPレベルでのパケットロスの検出と再送を示す図である。
【図8】図8は、イーサレベルの衝突検出と再送を示す図である。
【図9】図9は、TCPにおける通信の遷移を説明するシーケンス図である。
【図10】図10は、IPパケットの構成図である。
【図11】図11は、IPヘッダの構成図である。
【図12】図12は、TCPヘッダの構成図である。
【図13】図13は、分析装置の機能ブロック図である。
【図14】図14は、メインの処理フローを示す図である。
【図15】図15は、コネクション情報テーブルの一例を示す図である。
【図16】図16は、メインの処理フローを示す図である。
【図17】図17は、開始及び終了時処理の処理フローを示す図である。
【図18】図18は、第1シーケンス番号テーブルの一例を示す図である。
【図19】図19は、第2シーケンス番号テーブルの一例を示す図である。
【図20】図20は、セグメント数テーブルの一例を示す図である。
【図21】図21は、衝突数テーブルの一例を示す図である。
【図22】図22は、蓄積セグメント数テーブルの一例を示す図である。
【図23】図23は、蓄積衝突数テーブルの一例を示す図である。
【図24】図24は、上りパケット処理の処理フローを示す図である。
【図25】図25は、上りパケット処理の処理フローを示す図である。
【図26】図26は、下りパケット処理の処理フローを示す図である。
【図27】図27は、下りパケット処理の処理フローを示す図である。
【図28】図28は、集計処理の処理フローを示す図である。
【図29】図29は、蓄積データ格納部に格納されるデータの一例を示す図である。
【図30】図30は、集計処理の処理フローを示す図である。
【図31】図31は、集計結果の一例を示す図である。
【図32】図32は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0010】
[本実施の形態の前提]
まず、本実施の形態では、図2に示すように、分析装置100で、通信装置間のイーサネットフレームをキャプチャし、イーサネットフレームの再送やTCPセグメント(すなわちパケット)の再送又はロスを検出することで、通信装置間の動作モード違いを判別するものである。図2では、サーバとクライアント端末との間のスイッチに分析装置100を接続して、イーサネットフレーム(以下、イーサフレームとも呼ぶ)をキャプチャする。
【0011】
イーサフレームの再送、TCPセグメントの再送及びロスの検出は、イーサフレームの衝突以外に、伝送路の間欠障害、サーバや通信装置の高負荷など様々な要因が考えられる。すなわち、イーサフレームの再送やTCPセグメントの再送及びロスの現象を、イーサフレーム衝突とそれ以外の要因に区別する必要がある。イーサフレームの衝突は、図3に示すように、イーサフレームの送信間隔が短い時に発生する傾向がある。衝突が発生して到達していないパケットがあることが分かれば、イーサレベルで自ら再送する場合もあれば、ロスを発見してACKにてロスを通知してTCPレイヤで再送する場合もある。一方、伝送路の間欠障害、サーバや通信装置の高負荷などの場合、図4に示すようにイーサフレームの送信間隔が長い場合も、イーサフレームの送信間隔が短い場合にも発生する。しかしながら、イーサフレームの衝突が図3に示すように送信間隔が短い場合に明らかに発生しやすいという特性との対比においては、送信間隔が長い場合においてパケットの再送やロスの検出の頻度が高ければ、間欠障害であると言うことができる。
【0012】
なお、TCP上のアプリケーションが1パケット(1514バイト)に収まらないメッセージの送信を指示すると、カーネルがセグメント分割し、複数セグメントでメッセージを送信する。図5に示すように、セグメントの送信間隔には、同一メッセージ内と異なるメッセージ間の2種類が存在し、同一メッセージ内のセグメント送信間隔が短いという性質がある。これは、例えばサーバアプリケーションがカーネルに対して、メッセージ単位に送信要求を行うため、カーネル内で分割された同一メッセージ内のセグメントの送信間隔は短くなるためである。一方、サーバアプリケーションで分割された2つの異なるメッセージ送信要求は、別々にシーケンシャルにカーネルで処理されるので、セグメント送信間隔が長くなる。
【0013】
本実施の形態では、イーサフレームの衝突とそれ以外の要因とに区別するため、同一メッセージ内でイーサフレームの再送又はTCPセグメントの再送やロスが発生する割合と、メッセージ先頭で発生する割合を比較する。そして、同一メッセージ内の発生率がメッセージ先頭の発生率よりも大きい時、イーサフレームが衝突しており、動作モード違いが存在すると推測することができる。
【0014】
本実施の形態では、セグメントに係るパケットのロスや再送をTCPシーケンス番号を用いて検出する。すなわち、分析装置100が接続されているスイッチなどでモニタするポート(以下、モニタポートと呼ぶ)を通過するパケットのTCPヘッダに含まれるシーケンス番号をその直前のパケットのTCPヘッダに含まれるTCPヘッダから予測される予測シーケンス番号と比較する。図6に示すように、TCPのACKで、それまでに受信できたセグメントに係るパケットのシーケンス番号が通知されるので、最後に送信したパケットのシーケンス番号+データ量より小さい応答確認番号がACKに含まれていれば、衝突があったことになり、TCPレベルにおいてパケットの再送が行われる。この場合には、予測より小さく且つ応答確認番号と同じ値のシーケンス番号のパケットが送信されるので、パケットの再送を検出できる。
【0015】
さらに、図7に示すように、衝突によりパケットをロスしても通信装置側から次々にパケットが送信されてくる場合には、予測よりも大きな値のシーケンス番号を含むパケットを受信することから、パケットのロスを検出することができる。
【0016】
また、図8に示すように、イーサレベルにおいて衝突を検出してイーサフレームの再送を行った場合には、イーサフレームをバッファリングしておくことで完全に一致するイーサフレームの再送を検出することができる。
【0017】
以上述べた3つの衝突パターンを検出すると共に、当該衝突がメッセージの先頭なのかメッセージ内なのかを識別することで、メッセージ内の衝突率及びメッセージ先頭の衝突率を算出することができる。
【0018】
また、図9に示すように、クライアント端末からサーバに接続する場合には、TCPレベルにおいて、SYNパケットをクライアント端末からサーバに送信し、これに対してサーバからクライアント端末にSYN+ACKパケットを送信する。さらに、クライアント端末からサーバへACKパケットを送信する。これによってコネクションが確立したことになって、通信が双方向で行われる。その後、例えばクライアント端末からサーバへFINパケットを送信し、それに対してサーバからクライアント端末へACKパケットが返信される。さらに、サーバからクライアント端末へFINパケットが送信され、クライアント端末からサーバへACKパケットが送信されると、コネクションの切断が行われたことになる。TCPヘッダに設定されるシーケンス番号は、直前に受信したACKパケットに応じて設定される。すなわち、接続確立前であれば、クライアント端末からサーバへ送信したACKパケットに含まれる応答確認番号をシーケンス番号として含むパケットをサーバからクライアント端末へ送信することになる。同様に、サーバからクライアント端末へ送信したSYN+ACKパケットに含まれる応答確認番号をシーケンス番号として含むパケットをクライアント端末からサーバへ送信することになる。なお、接続確立時であれば、クライアント端末からサーバに送られたACKパケットに含まれるシーケンス番号と応答確認番号をチェックすれば、開始シーケンス番号を特定できる。
【0019】
さらに、図10に示すように、IPパケットには、IPヘッダ、TCPヘッダ及びTCPデータが含まれており、このTCPデータの部分にアプリケーションのメッセージヘッダ及びメッセージデータが含まれる。メッセージヘッダには、メッセージ長が含まれる。なお、IPパケットは、イーサフレームの中に含まれることになる。
【0020】
また、IPヘッダの模式図を図11に示す。IPヘッダは周知であるから詳しく述べないが、送信元IPアドレスと宛先IPアドレスを含むようになっている。同様に、図12にTCPヘッダの模式図を示す。TCPヘッダには、TCPヘッダについても周知であるから詳しく述べないが、コネクションを識別するための送信元ポート番号及び宛先ポート番号と、シーケンス番号及び確認応答番号とを含むようになっている。なお、フラグにおいてSYNパケット、FINパケット、ACKパケットであるか否かなどが指定されている。なお、TCPパケットのTCPデータのサイズ(データ長)は、(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長)にて算出可能である。
【0021】
[実施の形態の具体的内容]
次に、本実施の形態に係る分析装置100の構成及び処理内容について説明する。図13に分析装置100の機能ブロック図を示す。分析装置100は、コネクション関連処理部101と、上りパケット処理部102と、下りパケット処理部103と、コネクション情報テーブル104と、セグメント数テーブル105と、衝突数テーブル106と、第1シーケンス番号テーブル107と、第2シーケンス番号テーブル108と、フレームバッファ109と、蓄積データ格納部110と、評価処理部111と、出力部112とを有する。
【0022】
次に、図13に示した分析装置100の処理内容について図14乃至図31を用いて説明する。コネクション関連処理部101は、モニタポートを通過するパケットを受信したか判断する(ステップS1)。パケットを受信していない場合には、受信するまで待機する。一方、受信した場合には、コネクション関連処理部101は、受信パケットからコネクション情報を抽出する(ステップS3)。コネクション情報は、送信元IPアドレス及び宛先IPアドレスと送信元ポート番号及び宛先ポート番号とを含む。そして、コネクション関連処理部101は、抽出コネクション情報でコネクション情報テーブル104を検索する(ステップS5)。コネクション情報テーブル104には、例えば図15に示すようなテーブルである。図15の例では、レコードの生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)とが登録されるようになっている。なお、送信元と宛先が入れ替わっている場合にも同じコネクションであるが、ここでは両方テーブルに登録するのではなく、一方のみを登録することにする。
【0023】
そして、ステップS5の結果として該当レコードが存在すれば(ステップS7:Yesルート)、コネクション関連処理部101は、受信パケットが切断関連パケットであるか判断する(ステップS8)。切断関連パケットは、FINパケットを含む。切断関連パケットであれば、端子Aを介して図16のステップS15に移行する。一方、切断関連パケットでなければ、コネクション関連処理部101は、上りパケット処理部102に処理を依頼し、上りパケット処理部102は、上りパケット処理を実施する(ステップS9)。この上りパケット処理については後に詳しく述べる。その後端子Bを介して図16のステップS19に移行する。
【0024】
一方、ステップS5の結果として該当レコードが存在しない場合には(ステップS7:Noルート)、コネクション関連処理部101は、接続先と接続元のIPアドレス及びポート番号を入れ替えて、下りコネクション情報を生成し(ステップS11)、下りコネクション情報でコネクション情報テーブル104を検索する(ステップS13)。処理は端子Cを介して図16の処理に移行する。
【0025】
そして、ステップS13の結果として該当レコードが存在する場合には(ステップS14:Yesルート)、コネクション関連処理部101は、受信パケットが切断関連パケットであるか判断する(ステップS16)。切断関連パケットであれば、ステップS15に移行する。一方、切断関連パケットでなければ、コネクション関連処理部101は、下りパケット処理部103に処理を依頼し、下りパケット処理部103は、下りパケット処理を実施する(ステップS17)。この下りパケット処理については後に詳しく述べる。その後ステップS19に移行する。
【0026】
一方、ステップS13の結果として該当レコードが存在しない場合には(ステップS14:Noルート)、コネクション関連処理部101は、開始及び終了時処理を実施する(ステップS15)。この開始及び終了時処理については後に詳しく述べる。処理はステップS19に移行する。
【0027】
ステップS19では、処理が終了するか判断し(ステップS19)、処理終了でなければ端子Dを介して図14のステップS1に戻る。一方、処理終了であれば、処理を終了する。
【0028】
上りパケット処理及び下りパケット処理により、メッセージ先頭か否か及び衝突の検出を実施し、開始及び終了時処理により、コネクション情報等を設定する処理及び収集データを蓄積データ格納部110に移動させる処理を実施する。
【0029】
次に、開始及び終了時処理について図17乃至図23を用いて説明する。最初に、コネクション関連処理部101は、受信パケットが第1の接続関連パケットであるか判断する(ステップS21)。本実施の形態では、第1の接続関連パケットは、SYN+ACKパケットである。第1の接続関連パケットであれば、コネクション関連処理部101は、受信パケットのコネクション情報の接続先と接続元のIPアドレス及びポート番号を入れ替えて接続判断情報として、例えばメインメモリなどの記憶装置に格納する(ステップS23)。そして元の処理に戻る。
【0030】
一方、第1の接続関連パケットではない場合には、コネクション関連処理部101は、受信パケットが、接続判断情報と同じコネクション情報を含む第2の接続関連パケットであるか判断する(ステップS25)。第2の接続関連パケットは、図9で示した接続シーケンスにおいてSYN+ACKパケットの次に送信されるACKパケットである。従って、このようなACKパケットでは、SYN+ACKパケットとは接続先と接続元のIPアドレス及びポート番号が逆になっている。
【0031】
受信パケットが、このような第2の接続関連パケットであれば、コネクション関連処理部101は、受信パケットのコネクション情報をコネクション情報テーブル104(図15)に登録する(ステップS27)。この際、処理時刻を生成時刻として一緒に登録する。さらに、第2の接続関連パケットのTCPヘッダに含まれるシーケンス番号及び応答確認番号とコネクション情報などを、第1シーケンス番号テーブル107及び第2シーケンス番号テーブル108に登録する(ステップS29)。第1シーケンス番号テーブル107の一例を図18に示す。図18の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、上りシーケンス番号と、上り終了シーケンス番号と、下りシーケンス番号と、下り終了シーケンス番号とを登録するようになっている。ここでは、上り終了シーケンス番号及び下り終了シーケンス番号については登録されない。また、上りシーケンス番号には、シーケンス番号が登録され、下りシーケンス番号には、応答確認番号が登録される。また、第2シーケンス番号テーブル108の一例を図19に示す。図19の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、上りロス回数と、下りロス回数と、上りロスシーケンス番号リストへのアドレスと、下りロスシーケンス番号リストへのアドレスとを登録するようになっている。この第2シーケンス番号テーブルは、パケットのロスを検出した場合にそのロスを管理するためのテーブルであり、上りロス回数及び下りロス回数はカウンタであり、上りロスシーケンス番号リストへのアドレスは、上り用のリスト構造における先頭リストのデータブロックへのポインタとなっており、下りロスシーケンス番号リストへのアドレスは、下り用のリスト構造における先頭リストのデータブロックへのポインタとなっている。図19の例では、第2レコードにおける上りシーケンス番号リストにおける先頭リストのデータブロックのアドレスは「456」であり、アドレス「456」には、「Nextアドレス」(=次のリストのデータブロックへのポインタ。ここでは次のリストのデータブロックが存在しないので「0」。)と、ロス開始シーケンス番号(ここでは「3000」)とが登録されるようになっている。同様に、第1レコードにおける下りシーケンス番号リストにおける先頭リストのデータブロックのアドレスは「123」であり、アドレス「123」には、「Nextアドレス」(ここでは「789」)と、ロス開始シーケンス番号(ここでは「10000」)とが登録されている。次のリストのデータブロックのアドレス「789」には、「Nextアドレス」(ここでは存在していないので「0」)と、ロス開始シーケンス番号(ここでは「500000」)とが登録されている。このように、ロスを発見する毎に、カウンタがインクリメントされ、リスト構造の長さが伸びるようになっている。但し、以下で述べるように、再送が確認できた時点で該当リストのデータブロックについては削除され、リスト構造が変更される。
【0032】
さらに、コネクション関連処理部101は、セグメント数テーブル105及び衝突数テーブル106に、コネクション情報などを登録する(ステップS31)。セグメント数テーブル105の一例を図20に示す。図20の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内のセグメントの出現回数と、メッセージ先頭のセグメントの出現回数とが登録されるようになっている。但し、この時点では、出現回数は「0」となる。また、衝突数テーブル106の一例を図21に示す。図21の例では、生成時刻と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内の衝突検出の回数と、メッセージ先頭の衝突検出の回数とを登録するようになっている。但し、この時点では、衝突検出の回数は「0」となる。そして元の処理に戻る。以上が、接続時の処理になる。
【0033】
なお、切断時の処理(ステップS35乃至S41)は、ステップS25で上で述べたような第2の接続関連パケットではなく、切断関連パケット(ここではFINパケット)である場合に実行される。
【0034】
すなわち、コネクション関連処理部101は、受信パケットがステップS25で上で述べたような第2の接続関連パケットではないと判断した場合には、受信パケットが切断関連パケットであるか判断する(ステップS33)。受信パケットが切断関連パケットでもない場合には、そのまま元の処理に戻る。一方、受信パケットが切断関連パケットであれば、セグメント数テーブル105及び衝突数テーブル106における該当レコード(コネクション情報又は下りコネクション情報で特定されるレコード)を、蓄積データ格納部110の対応するテーブルに登録する(ステップS35)。図22に、蓄積データ格納部110に格納される蓄積セグメント数テーブルの一例を示す。図22の例では、生成時刻と、消滅時刻(=ステップS35実行時刻)と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内のセグメントの出現回数と、メッセージ先頭のセグメントの出現回数とを登録するようになっている。また、図23に、蓄積データ格納部110に格納される蓄積衝突数テーブルの一例を示す。図22の例では、生成時刻と、消滅時刻(=ステップS35実行時刻)と、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、メッセージ内の衝突検出の回数と、メッセージ先頭の衝突検出の回数とが登録されるようになっている。
【0035】
また、コネクション関連処理部101は、セグメント数テーブル105及び衝突数テーブル106において該当レコード(コネクション情報又は下りコネクション情報で特定されるレコード)を削除する(ステップS37)。さらに、第1及び第2シーケンス番号テーブル107及び108においても、該当レコードを削除する(ステップS39)。第2シーケンス番号テーブル108に付随する関連リスト構造も削除する。最後に、コネクション情報テーブル104において、該当レコードを削除する(ステップS41)。そして元の処理に戻る。
【0036】
以上のような処理を実施することで、以下で述べる集計処理の前処理が実施されたことになり、さらに同じコネクションが確立されても異なるデータとして処理できるようになる。
【0037】
次に、図24及び図25を用いて上りパケット処理について説明する。まず、上りパケット処理部102は、受信イーサフレームをそのままフレームバッファ109に格納する(ステップS51)。フレームバッファ109は、1つのコネクションについて例えば20msec分のイーサフレームを格納できる程度のサイズを有しており、古いものから順に上書きする形でバッファリングする。また、受信パケットにおいて、アプリケーション層のメッセージヘッダをチェックし(ステップS53)、当該メッセージヘッダに含まれる情報からメッセージの先頭であるか否かを判断する(ステップS55)。例えば、メッセージヘッダに、現パケットの、メッセージ先頭からのオフセットが含まれており、そのオフセットが「0」であれば先頭と判断できる。これは一例であるが一般的には、先頭か否かを特定可能なデータをメッセージヘッダは含むので、そのデータを用いる。メッセージの先頭でなければステップS59に移行する。
【0038】
メッセージの先頭であれば、上りパケット処理部102は、メッセージヘッダに含まれるメッセージ長のデータを用いてメッセージの末尾に相当するシーケンス番号を(第1シーケンス番号テーブル107の上りシーケンス番号+メッセージ長)で算出し、第1シーケンス番号テーブル107における該当コネクションについてのレコードの上り終了シーケンス番号の列を更新する(ステップS57)。上り終了シーケンス番号までのシーケンス番号であれば1つのメッセージについてのパケットであるが、上り終了シーケンス番号より大きな値のシーケンス番号については、次のメッセージについてのパケットである。なお、フロー上では明示していないが、コネクションを維持したまま次のメッセージを送信する場合もある。処理はステップS59に移行する。
【0039】
ステップS59では、上りパケット処理部102は、セグメント数テーブル105において、ステップS55の判断結果に応じて、メッセージ先頭のセグメントの出現回数又はメッセージ内のセグメントの出現回数を1インクリメントする。そして、フレームバッファ109にステップS51で格納したイーサフレームと同一のイーサフレームが完全に重複してバッファリングされているか否かを判断する(ステップS61)。これは、図8に示すようなイーサレベルでのフレームの衝突に応じたイーサフレームの再送を検出するためである。
【0040】
重複していれば、上りパケット処理部102は、衝突数テーブル106において、ステップS55の判断結果に応じて、メッセージ先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS63)。その後処理は端子Eを介して元の処理に戻る。
【0041】
一方、重複していなければ、上りパケット処理部102は、受信パケットのTCPヘッダからシーケンス番号(以下、上りシーケンス番号と呼ぶ)を抽出する(ステップS65)。そして、上りシーケンス番号と第1シーケンス番号テーブル107における該当レコードの上りシーケンス番号(区別するために上り番号と呼ぶ)とが一致するか判断する(ステップS67)。この条件を満たす場合には、ロスも再送も発生していないので端子Fを介して図25のステップS81に移行する。一方、この条件を満たさない場合には、ロス又は再送が発生しているので端子Gを介して図25のステップS69に移行する。
【0042】
図25の処理の説明に移行して、上りパケット処理部102は、受信パケットのTCPヘッダにおける上りシーケンス番号が第1シーケンス番号テーブル107における該当レコードの上り番号より大きいか判断する(ステップS69)。このような条件を満たす場合には、図7に示すような上りパケットロスを検出したことになる。従って、第2シーケンス番号テーブル108における該当レコードの上りロス回数を1インクリメントすると共に、リスト構造を辿って末端に上り番号を含むリストのデータブロックを追加する(ステップS71)。リストのデータブロックは、ロスしたパケットの再送が後に発生した場合に衝突回数をダブルカウントしないようにするために用いられる。さらに、衝突数テーブル106における該当レコードにおいて、ステップS55の判断結果に応じて、メッセージの先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS73)。そしてステップS81に移行する。
【0043】
一方、ステップS69の条件を満たさない場合には、図6に示すようなパケットの再送が発生していることが分かるので、上りパケット処理部102は、受信パケットのコネクション情報で第2シーケンス番号テーブル108を検索して該当レコードを特定すると共に、該当レコードで指し示されているリスト構造において上りシーケンス番号に該当するリストを検索する(ステップS75)。検索の結果リストが存在しない場合には、何らかの理由でロスを検出せずに再送が行われたという状態でありステップS73に移行する。すなわち、衝突回数を1インクリメントする。一方、検索の結果リストが存在する場合には、再送において衝突回数を1インクリメントしているので、同じ事象について衝突回数をインクリメントすることはできない。従って、第2シーケンス番号テーブル108の該当レコードにおいて、上りシーケンス番号に該当するリストのデータブロックを削除する(ステップS79)。なお、リンクの途中のリストが削除対象であれば、リンク切れが発生するので、1つ前のリストのデータブロックにおけるNextアドレスを1つ後のリストのデータブロックのアドレスに変更する。処理はステップS81に移行する。
【0044】
ステップS81では、上りパケット処理部102は、受信パケットのセグメント長(=(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長))を取得する。そして、受信パケットのTCPヘッダにおける上りシーケンス番号にセグメント長を加算し、当該加算結果で第1シーケンス番号テーブル107の該当レコードにおける上りシーケンス番号を更新する(ステップS83)。この加算結果が予測シーケンス番号となる。そして元の処理に戻る。
【0045】
このようにすれば、セグメントのデータを含むパケット(イーサフレームを含む)を検査して主にシーケンス番号をベースに判断することにより、図6乃至図8で示した衝突の事象を適切に検出して、衝突数テーブル106及びセグメント数テーブル105に反映させることができる。
【0046】
次に、下りパケット処理について図26及び図27を用いて説明する。下りパケット処理はほぼ上りパケット処理と同様である。まず、下りパケット処理部103は、受信イーサフレームをそのままフレームバッファ109に格納する(ステップS91)。フレームバッファ109は、1つのコネクションについて例えば20msec分のイーサフレームを格納できる程度のサイズを有しており、古いものから順に上書きする形でバッファリングする。また、受信パケットにおいて、アプリケーション層のメッセージヘッダをチェックし(ステップS93)、当該メッセージヘッダに含まれる情報からメッセージの先頭であるか否かを判断する(ステップS95)。メッセージの先頭でなければステップS99に移行する。
【0047】
メッセージの先頭であれば、下りパケット処理部103は、メッセージヘッダに含まれるメッセージ長のデータを用いてメッセージの末尾に相当するシーケンス番号を(第1シーケンス番号テーブル107の下りシーケンス番号+メッセージ長)で算出し、第1シーケンス番号テーブル107における該当コネクションについてのレコードの下り終了シーケンス番号の列を更新する(ステップS97)。処理はステップS99に移行する。
【0048】
ステップS99では、下りパケット処理部103は、セグメント数テーブル105において、ステップS95の判断結果に応じて、メッセージ先頭のセグメントの出現回数又はメッセージ内のセグメントの出現回数を1インクリメントする。そして、フレームバッファ109にステップS51で格納したイーサフレームと同一のイーサフレームが完全に重複しているか否かを判断する(ステップS101)。これは、図8に示すようなイーサレベルでのフレームの衝突に応じたイーサフレームの再送を検出するためである。
【0049】
重複していれば、下りパケット処理部103は、衝突数テーブル106において、ステップS95の判断結果に応じて、メッセージ先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS103)。その後処理は端子Hを介して元の処理に戻る。
【0050】
一方、重複していなければ、下りパケット処理部103は、受信パケットのTCPヘッダからシーケンス番号(以下、下りシーケンス番号と呼ぶ)を抽出する(ステップS105)。そして、下りシーケンス番号と第1シーケンス番号テーブル107における該当レコードの下りシーケンス番号(区別するために下り番号と呼ぶ)とが一致するか判断する(ステップS107)。この条件を満たす場合には、ロスも再送も発生していないので端子Jを介して図27のステップS121に移行する。一方、この条件を満たさない場合には、ロス又は再送が発生しているので端子Kを介して図27のステップS109に移行する。
【0051】
図27の処理の説明に移行して、下りパケット処理部103は、受信パケットのTCPヘッダにおける下りシーケンス番号が第1シーケンス番号テーブル107における該当レコードの下り番号より大きいか判断する(ステップS109)。このような条件を満たす場合には、図7に示すような下りパケットロスを検出したことになる。従って、第2シーケンス番号テーブル108における該当レコードの下りロス回数を1インクリメントすると共に、リスト構造を辿って末端に下り番号を含むリストのデータブロックを追加する(ステップS111)。リストのデータブロックは、ロスしたパケットの再送が後に発生した場合に衝突回数をダブルカウントしないようにするために用いられる。さらに、衝突数テーブル106における該当レコードにおいて、ステップS95の判断結果に応じて、メッセージの先頭又はメッセージ内の衝突回数を1インクリメントする(ステップS113)。そしてステップS121に移行する。
【0052】
一方、ステップS109の条件を満たさない場合には、図6に示すようなパケットの再送が発生していることが分かるので、下りパケット処理部103は、受信パケットの下りコネクション情報で第2シーケンス番号テーブル108を検索して該当レコードを特定すると共に、該当レコードで指し示されているリスト構造において下りシーケンス番号に該当するリストを検索する(ステップS115)。検索の結果リストが存在しない場合には、何らかの理由でロスを検出せずに再送が行われたという状態でありステップS113に移行する。すなわち、衝突回数を1インクリメントする。一方、検索の結果リストが存在する場合には、再送において衝突回数を1インクリメントしているので、同じ事象について衝突回数をインクリメントすることはできない。そこで、第2シーケンス番号テーブル108の該当レコードにおいて、下りシーケンス番号に該当するリストのデータブロックを削除する(ステップS119)。なお、リンクの途中のリストが削除対象であればリンク切れが発生するので、1つ前のリストのデータブロックにおけるNextアドレスを1つ後のリストのデータブロックのアドレスに変更する。処理はステップS121に移行する。
【0053】
ステップS121では、下りパケット処理部103は、受信パケットのセグメント長(=(IPパケットに含まれるパケット長−IPヘッダ長−TCPヘッダ長))を取得する。そして、受信パケットのTCPヘッダにおける下りシーケンス番号にセグメント長を加算し、当該加算結果で第1シーケンス番号テーブル107の該当レコードにおける下りシーケンス番号を更新する(ステップS123)。この加算結果が予測シーケンス番号となる。そして元の処理に戻る。
【0054】
このようにすれば、セグメントのデータを含むパケット(イーサフレームを含む)を検査して主にシーケンス番号をベースに判断することにより、図6乃至図8で示した衝突の事象を適切に検出して、衝突数テーブル106及びセグメント数テーブル105に反映させることができる。
【0055】
次に、蓄積データ格納部110に格納されているデータを用いて動作モード違いや間欠障害が発生しているか否かについて判断する集計処理について図28乃至図31を用いて説明する。なお、集計処理については、定期的に実施するようにしても良いし、ユーザからの指示に応じて実施するようにしても良い。
【0056】
まず、評価処理部111は、蓄積データ格納部110の蓄積セグメント数テーブル及び蓄積衝突数テーブルに格納されている、一定時間内のレコードをコネクション毎にソートする(ステップS131)。一定時間についてはユーザに指定された時間を採用するか、又は定期的に所定時間だけシフトさせるようにして決定する。また、例えば生成時刻と消滅時刻の両方が一定期間に含まれるレコードを処理対象とする。そして、未処理のコネクションを1つ特定する(ステップS133)。1つのコネクションにつき複数レコード抽出される場合がある。また、上りと下りとをここでは区別しない。さらに、特定されたコネクションの先頭衝突数(=メッセージ先頭の衝突回数の合計)/先頭セグメント数(=メッセージ先頭のセグメント出現回数の合計)によりメッセージ先頭衝突率を算出し、例えばメインメモリなどの記憶装置に格納する(ステップS135)。さらに、特定されたコネクションのメッセージ内衝突数(=メッセージ内の衝突回数の合計)/メッセージ内セグメント数(=メッセージ内のセグメントの出現回数の合計)によりメッセージ内衝突率を算出し、例えばメインメモリ等の記憶装置に格納する(ステップS137)。
【0057】
その後、評価処理部111は、メッセージ先頭衝突率とメッセージ内衝突率が一致するか判断する(ステップS139)。例えば衝突数が0であればこのような条件が満たされることになる。この条件を満たす場合には、特に問題が発生しているわけではないので、コネクション情報と共に正常を表すデータを、例えば蓄積データ格納部110に格納する(ステップS141)。例えば図29に示すような判定結果テーブルにデータを登録する。図29の例では、接続先IPアドレス(=宛先IPアドレス)と、接続先ポート番号(=宛先ポート番号)と、接続元IPアドレス(=送信元IPアドレス)と、接続元ポート番号(=送信元ポート番号)と、判定結果(「正常」「動作モード違い」又は「間欠障害」)とが登録されるようになっている。処理は端子Lを介して図30に移行して処理を終了する。
【0058】
一方、メッセージ先頭衝突率とメッセージ内衝突率が一致しない場合には、評価処理部111は、メッセージ先頭衝突率<メッセージ内衝突率であるか否かを判断する(ステップS143)。この条件を満たす場合には、上で述べたように動作モード違いと判断できるので、コネクション情報と動作モード違いを表すデータを、例えば蓄積データ格納部110の判定結果テーブルに格納する(ステップS147)。そしてステップS149に移行する。一方、この条件を満たさない場合には、コネクション情報と伝送路間欠障害を表すデータを、例えば蓄積データ格納部110の判定結果テーブルに格納する(ステップS145)。そしてステップS149に移行する。
【0059】
ステップS149においては、評価処理部111は、全てのコネクションについて処理したか判断し、未処理のコネクションが存在する場合には、端子Mを介してステップS133に戻る。一方、全てのコネクションについて処理した場合には、端子Nを介して図30の処理に移行する。
【0060】
図30の処理の説明に移行して、評価処理部111は、コネクション毎の結果を装置間毎に集計して、集計結果を例えば蓄積データ格納部110に格納する(ステップS151)。例えば図31に示すようなデータを生成する。具体的には、接続先IPアドレスと接続元IPアドレスの組み合わせ毎に、正常と判定されたコネクションの有無と、動作モード違いと判定されたコネクションの有無と、間欠障害と判定されたコネクションの有無とを登録するようになっている。接続先IPアドレスと接続元IPアドレスとの組み合わせは入れ替わっていても同じものとして集約する。なお、動作モード違いと間欠障害とは同時に発生することもある。従って、動作モード違いと判定されたコネクションも間欠障害と判定されたコネクションも含む場合がある。
【0061】
そして、出力部112は、蓄積データ格納部110に格納されているデータを、例えばユーザからの要求に応じて出力する(ステップS153)。例えば、蓄積データ格納部110に格納されているデータをそのまま要求された部分について出力するようにしても良いし、例えば間欠障害が検出された装置のデータや動作モード違いが検出された装置のデータのみを出力するようにしても良い。さらに、後者のようなデータについては、検出された場合には予め設定されているユーザに対してメールなどで通知するような構成を採用するようにしても良い。
【0062】
以上のように、ネットワークの状況を、特別なパケットを送信することなく通常のパケットをキャプチャすることによって得られたデータにより把握することができるようになる。動作モード違いが検出された装置間の伝送路については、その設定の状態を確認して正しい設定に直せば通常どおり使用することができる。また、間欠障害が検出された場合には、ケーブルの交換などを含む他の周知の手法を用いて障害除去を行うことができる。
【0063】
以上本技術の実施の形態を説明したが、本実施の形態はこれに限定されるものではない。例えば、ACKパケットを用いないような処理フローを示したが、ACKパケットの応答確認番号を参照した上でパケットのロスや再送を特定するようにしても良い。
【0064】
さらに、上で述べた処理は一例であり、処理結果が変わらなければ処理ステップの順番を入れ替えたり並列に実行するようにしても良い。また、シーケンス番号を用いる処理で、正しく衝突がカウントできればよいので、他の処理フローを採用するようにしても良い。さらに、図13の機能ブロック図も一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。
【0065】
なお、上で述べた分析装置100は、コンピュータ装置であって、図32に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。必要に応じてCPU2503は、表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ2501に格納され、必要があればHDD2505に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0066】
以上本実施の形態をまとめると以下のようになる。
【0067】
本動作モード相違検出方法は、1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、上記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、上記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、コネクション毎且つ上り方向及び下り方向の各々について、パケットに含まれるシーケンス番号とシーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、第1のパケット及び第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、第1のパケットにロス又は再送が発生していると判断された場合には、コネクション毎に第1のパケットについての衝突数及び第2のパケットについての衝突数を格納する衝突数データ格納部において、第1のパケットが関連するコネクションで送信される第1のパケットについての衝突数を増加させ、第2のパケットにロス又は再送が発生していると判断された場合には、衝突数データ格納部において、第2のパケットが関連するコネクションで送信される第2のパケットについての衝突数を増加させるステップと、コネクション毎に、第1のパケットについての衝突数を第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、第2のパケットについての衝突数を第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、メッセージ内衝突率がメッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップとを含む。
【0068】
あるアプリケーション間でやりとりされるメッセージは、当該メッセージのサイズが大きければ複数のセグメントに分割され、複数パケット(同じく複数フレーム)として送信される。この複数のフレームの送信間隔は短く、メッセージ間の送信間隔は相対的に長くなる。もし通信している装置間に動作モード相違が存在する場合に送信間隔が短ければ、フレーム衝突がより多く発生するので、上で述べるメッセージ内衝突率が大きな値になる。一方、送信間隔が相対的に長いメッセージの先頭パケットについての衝突率であるメッセージ先頭衝突率は、動作モード相違の場合には相対的に小さくなる。従って、上で述べたように、メッセージ内衝突率>メッセージ先頭衝突率が成立する場合には、動作モード相違が存在するものとして記録するものである。
【0069】
また、メッセージ内衝突率がメッセージ先頭衝突率より小さい場合に、伝送路間欠障害が存在することを表す結果データを、コネクションの情報に対応付けて処理結果格納部に格納するステップをさらに含むようにしても良い。間欠障害があればイーサフレームの衝突自体はメッセージ内もメッセージ先頭も均等に発生するが、上で述べたのと逆にメッセージ内衝突率<メッセージ先頭衝突率が成立する場合には、伝送路間欠障害が発生していると推測できる。
【0070】
さらに、処理結果格納部に登録されているコネクションを上記装置の組み合わせ毎に集約すると共に、コネクションに対応する結果データを上記装置の組み合わせ毎に集約するステップをさらに含むようにしても良い。このようにすれば、どの装置について設定を修正すべきなのか、どの伝送路の検査を行うべきなのかを総合的に特定することができるようになる。
【0071】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【符号の説明】
【0072】
101 コネクション関連処理部 102 上りパケット処理部
103 下りパケット処理部 104 コネクション情報テーブル
105 セグメント数テーブル 106 衝突数テーブル
107 第1シーケンス番号テーブル
108 第2シーケンス番号テーブル
109 フレームバッファ 110 蓄積データ格納部
111 評価処理部 112 出力部
【特許請求の範囲】
【請求項1】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、
前記コネクション毎且つ上り方向及び下り方向の各々について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、
前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させるステップと、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、
前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納するステップと、
を、コンピュータに実行させるための動作モード相違検出プログラム。
【請求項2】
前記メッセージ内衝突率が前記メッセージ先頭衝突率より小さい場合に、伝送路間欠障害が存在することを表す結果データを、前記コネクションの情報に対応付けて前記処理結果格納部に格納するステップ
をさらにコンピュータに実行させるための請求項1記載の動作モード相違検出プログラム。
【請求項3】
前記処理結果格納部に登録されている前記コネクションを前記装置の組み合わせ毎に集約すると共に、前記コネクションに対応する前記結果データを前記装置の組み合わせ毎に集約するステップ
をさらにコンピュータに実行させるための請求項1又は2記載の動作モード相違検出プログラム。
【請求項4】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、
前記コネクション毎且つ上り方向及び下り方向の各々について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、
前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させるステップと、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、
前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納するステップと、
を含み、コンピュータに実行される動作モード相違検出方法。
【請求項5】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数を上り方向についてカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数を前記上り方向についてカウントして、セグメント数データ格納部に格納し、前記コネクション毎であって前記上り方向について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断し、前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させる手段と、
前記コネクション毎に、前記第1のパケットの数を下り方向についてカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数を前記下り方向についてカウントして、セグメント数データ格納部に格納し、前記コネクション毎であって前記下り方向について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断し、前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させる手段と、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較し、前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納する手段と、
を有する動作モード相違検出装置。
【請求項1】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、
前記コネクション毎且つ上り方向及び下り方向の各々について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、
前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させるステップと、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、
前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納するステップと、
を、コンピュータに実行させるための動作モード相違検出プログラム。
【請求項2】
前記メッセージ内衝突率が前記メッセージ先頭衝突率より小さい場合に、伝送路間欠障害が存在することを表す結果データを、前記コネクションの情報に対応付けて前記処理結果格納部に格納するステップ
をさらにコンピュータに実行させるための請求項1記載の動作モード相違検出プログラム。
【請求項3】
前記処理結果格納部に登録されている前記コネクションを前記装置の組み合わせ毎に集約すると共に、前記コネクションに対応する前記結果データを前記装置の組み合わせ毎に集約するステップ
をさらにコンピュータに実行させるための請求項1又は2記載の動作モード相違検出プログラム。
【請求項4】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数をカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数をカウントして、セグメント数データ格納部に格納するステップと、
前記コネクション毎且つ上り方向及び下り方向の各々について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断する判断ステップと、
前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させるステップと、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較するステップと、
前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納するステップと、
を含み、コンピュータに実行される動作モード相違検出方法。
【請求項5】
1のメッセージを1又は複数のセグメントに分割してパケットを送信する場合、2つの装置間のコネクション毎に、前記1のメッセージにおける先頭セグメントについての第1のパケットの数を上り方向についてカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数を前記上り方向についてカウントして、セグメント数データ格納部に格納し、前記コネクション毎であって前記上り方向について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断し、前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記コネクション毎に前記第1のパケットについての衝突数及び前記第2のパケットについての衝突数を格納する衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させる手段と、
前記コネクション毎に、前記第1のパケットの数を下り方向についてカウントすると共に、前記1のメッセージにおける先頭セグメント以外のセグメントについての第2のパケットの数を前記下り方向についてカウントして、セグメント数データ格納部に格納し、前記コネクション毎であって前記下り方向について、前記パケットに含まれるシーケンス番号と前記シーケンス番号の予測値と下位階層フレームの再送の有無とに基づき、前記第1のパケット及び前記第2のパケットに、ロス又は再送が発生しているか判断し、前記第1のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第1のパケットが関連するコネクションで送信される前記第1のパケットについての衝突数を増加させ、前記第2のパケットに前記ロス又は再送が発生していると判断された場合には、前記衝突数データ格納部において、前記第2のパケットが関連するコネクションで送信される前記第2のパケットについての衝突数を増加させる手段と、
前記コネクション毎に、前記第1のパケットについての衝突数を前記第1のパケットの数で除することによって得られるメッセージ先頭衝突率と、前記第2のパケットについての衝突数を前記第2のパケットの数で除することによって得られるメッセージ内衝突率とを比較し、前記メッセージ内衝突率が前記メッセージ先頭衝突率より大きい場合に、当該コネクションの両端の装置に動作モード相違が存在することを表す結果データを、前記コネクションの情報に対応付けて処理結果格納部に格納する手段と、
を有する動作モード相違検出装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【公開番号】特開2010−252031(P2010−252031A)
【公開日】平成22年11月4日(2010.11.4)
【国際特許分類】
【出願番号】特願2009−99010(P2009−99010)
【出願日】平成21年4月15日(2009.4.15)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成22年11月4日(2010.11.4)
【国際特許分類】
【出願日】平成21年4月15日(2009.4.15)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]