第 5 章 例外的なテストシーケンスのみをシナリオ記述する TCP テスタ
5.3 詳細設計
5.3.5 TCP テスタの動作例
単純な試験シナリオを用いて,TCPテスタの動作例を説明する.図 5-3は,初期輻輳ウ インドウアルゴリズム[54]への適合性を試験する試験シナリオの例である.このアルゴリ ズムでは,送信側TCPは,以下の式で与えられた値よりも小さい値にcwndを拡大するこ とが可能である.
min (4*MSS, max(2*MSS, 4380 bytes)) (式5-1)
ただし,MSSは最大セグメント長(Maximum Segment Size)を表す
この試験シナリオは,上記アルゴリズムに違反しているか否かを試験する.本試験シナ リオでは,TCPコネクション確立後,データセグメントをいくつ受信するかどうかを検査 するため,全ての受信パケットを無視する.上記の式を超えるデータセグメントを受信し た場合,試験実行結果はFAILとなる.
試験シナリオの各行は,条件とアクションで構成され,その区切りとしてデリミタ”;”を使 用する.例外的に,”SEQUNCE {“,”}”等,制御コマンドのみを含む行も存在する.この 試験シナリオにおいて,各行は以下のように翻訳される.
z 1行目: シーケンス番号(seq)が1のパケットを受信したとき,TCPテスタは,その パケットを無視する.これは,そのパケット受信に関する処理を,TCPモジュールに おいて行わないことを意味する.シナリオとして記述するシーケンス番号は,初期シ ーケンス番号からの相対値とする.
z 2行目: 再送セグメントを受信したときは,判定結果をPASSとすることを意味す
る.”snd_nxt”は,TCPテスタによって推定された被試験システムの内部変数であり,
次に送信されることが期待されているシーケンス番号である.”seq”は受信パケットの シーケンス番号である.従って,”seq<snd_nxt”は,受信パケットが再送されたパケ ットであることを示す条件である.”verdict PASS”は,判定を示すアクションであり,
判定結果をPASSとし,試験シナリオの実行を終了する.
z 3行目: 制御コマンドSEQUNCEが,3~8行目までを括弧で括っている.これは,
括弧で括られた行がこの順序で実行されることを意味する.
z 4行目: シーケンス番号の最大値(シーケンス番号にセグメント長を加えた値)が 4381よりも大きい場合,判定結果をFALSEとし,試験実行を終了する.
z 5~7行目: シーケンス番号が1よりも大きく,シーケンス番号の最大値が 4381 よりも小さいパケットについては,3回受信するまで,受信パケットの処理を無視す る.3回パケットを受信したのち,括弧から抜け,SCは9行目に移行する.
z 9行目: コネクション確立から4回目となる,シーケンス番号が1より大きいパケ ットを受信したとき,判定結果をFAILとする.初期輻輳ウインドウアルゴリズムが 正しく実装されている場合には,4つめのパケットの受信は行われず,被試験システ ム側のタイムアウトにより,再送パケットを受信し,2行目の処理が実行される.
01: recv seq=1 ; ignore
02: ALWAYS recv seq<snd_nxt ; PASS 03: SEQUENCE {
04: ALWAYS recv seqlen>4381 ; FAIL 05: recv seq>1 ; ignore
06: recv seq>1 ; ignore 07: recv seq>1 ; ignore 08: }
09: recv seq>1 ; FAIL
図 5-3 試験シナリオ例
試験は,ttcp等のアプリケーションプログラムを用いて行われる.この試験シナリオで は,テスタは受信側となるため,試験実行開始後,まず”ttcp –r”等のコマンドでコネクシ ョン確立待ちを行うこととなる.被試験システムは送信側であり,”ttcp –t”等のコマンド を実行する.
本試験シナリオ例における実際の通信シーケンスの例を図 5-4に示す.3-wayハンドシ ェイクによるTCPコネクション確立後,SCは初期値01となり,条件01を待つ.シーケ ンス番号1のパケットを受信したとき,アクション 01 に従い,本パケットの受信処理を 行わず,パケットを廃棄する.SEQUENCE の括弧内に入った後は,SC は 05 となり,
ALWAYSに記載された条件も含み,条件02, 条件04, 条件05 を待つ.次に,シーケン
ス番号が1461, 2921のパケットを受信したとき,05, 06のアクションに従い,これらの
パケットは無視され,SCのみが加算される.途中で,シーケンス番号が4381のパケット を受信したときには,条件04 により,判定結果 FAILとなる.このときテスタは,RST セグメントを送信し,TCPコネクションを解放し,テスト実行を終了する.
図 5-4 試験シナリオ実行例
テスト実行結果は, 図 5-5 の例に示すように,テスト実行結果表示機能として参照で きる.通信結果ログは,tcpdump等のモニタツールに比べて多くの情報を収集する.例え ば,本ログは,テスタが検知した全てのイベントと送受信パケットの情報を持つ.括弧内 で表記されたイベントは,TCPモジュールが受信処理を行わなかったパケットを表してい る.実行結果には,試験シナリオの判定結果も含まれる.
図 5-5 通信結果ログの例