あるキャプチャには Echo 要求が六件、応答が三件あり、誰かがチケットに 50 パーセントのパケット損失と書く。その数字はキャプチャには当てはまっても、トンネルには当てはまらないかもしれない。六件の要求は、異なる配送契約を持つ二つの会話に属している可能性がある。分割する前にグループ化すれば、比率は報告書の面白い部分ではなくなる。

ステップ 1: 送信元と宛先でストリームを分ける

Echo 要求は送信元と宛先を持ち、その二つのフィールドがどの会話に属するかを決める。ゲートウェイが生成するプローブはゲートウェイのトンネルアドレスを使い、LAN ホストの代理で転送されるプローブはそのホストのアドレスを保つ。遠端は一方には戻り経路があっても他方にはないことがあり、そのためトンネルとは無関係な理由で二つのグループの挙動が変わる。

何かを数える前に、キャプチャをこれらのフィールドで分割し、宛先をキーの一部として残す。異なるピアへの二つのストリームは、送信元を共有していても比較できない。

グループを件数とともに記録するのは、次のステップがどの応答がどのグループに属するかを決めるからだ。三件の要求に一致する応答がないグループは所見である。三件の要求と三件の応答があるグループは基準線である。

ステップ 2: 識別子とシーケンスで照合する

RFC 792 の Echo 形式は識別子とシーケンス番号を持ち、それらを応答と要求を対にするフィールドとして扱う。この作業には両方が必要だ。シーケンス番号だけでは一意でなく、異なる送信者やプロセスが同じ値を一つのキャプチャウィンドウ内で再利用できる。識別子が送信者を絞り、シーケンスが位置を絞り、その対がそろって初めて照合は弁護できるものになる。

応答は要求のアドレスの向きを逆にするので、照合は要求と応答の対であり、二つの同一のタプルではない。要求の送信元を応答の宛先と、要求の宛先を応答の送信元と比較し、次に識別子とシーケンスが一致することを確認する。

長いキャプチャには両フィールドの正当な再利用が含まれうるので、観測ウィンドウも保持する。ウィンドウを一つのバーストに切り詰めれば、その曖昧さの大半は消える。チケットを読む誰にとっても件数が再現可能になる。

tshark -r capture.pcap -Y 'icmp.type == 8' -T fields -e frame.time -e ip.src -e ip.dst -e icmp.ident -e icmp.seq
tshark -r capture.pcap -Y 'icmp.type == 0' -T fields -e frame.time -e ip.src -e ip.dst -e icmp.ident -e icmp.seq

ステップ 3: 同じ境界でタプルを比較する

ネットワークアドレス変換がキャプチャ点とピアの間にあるなら、要求と応答のアドレスは設計上異なる。 一つの境界でタプルを比較する、あるいは差異が説明されるように対応を明示的に持ち運ぶ。変換前の要求を変換後の応答と混ぜると、実際には存在しなかった不一致を作り出してしまう。

数え始める前に境界を決め、報告書に明記して次の人がグループ化を再現できるようにする。クライアント側のキャプチャとサーバ側のキャプチャは二つの異なる境界だ。それぞれが、応答がどこで消えたかについて別の問いに答える。

変換されたプローブのグループは、変換装置自身の状態も引き継ぐ。それが応答が届かない本当の理由かもしれないので、その先の経路を責める前にその状態を確認する。

tcpdump -ni any icmp and host 10.90.0.1 -c 20
tshark -r capture.pcap -Y 'icmp' -T fields -e ip.src -e ip.dst -e ip.ttl | head -20

ステップ 4: キャプチャが証明できることとできないことを述べる

観測された隙間は、遠端のホストが沈黙したことを証明しない。キャプチャ点が一方向しか見ていない、フィルタが応答を落とす、ウィンドウ中にバッファがあふれた、のいずれかかもしれない。それらはいずれも同じ不在を生み、結論だけが異なる。

キャプチャの位置、フィルタ式、ドロップカウンタを件数と並べて記録するのは、それらなしの比率は監査できないからだ。この三行が後で数字を弁護可能にする。

次に、観測が確定することと示唆することを、一つではなく二つの文で分ける。最初の文は件数と境界を述べる。二つ目は仮説とそれを確かめる方法を述べる。

特定の経路がパケットを落とすかどうかが問いなら、明示的な送信元アドレスを持つ制御されたプローブは、混在トラフィックの受動的な計数より強い証拠になる。同じマシンから、同じ時刻に、同じピアへ送る。変数を一つ変えれば比較は成り立つ。

グループと次の境界を報告する

報告書は三行で構成する。グループの定義、各グループ内の一致した件数、比較を行った境界であり、そうすれば読者は一方のグループは完全に応答し、他方は応答しなかったことが分かり、無作為な損失ではなく経路や権限を示唆する。

グループ化を再現できるよう、キャプチャファイルとフィルタ式を添付する。ファイルのない要約は主張であり、結果ではない。

ping -c 5 -I 10.80.0.6 10.90.0.1
ping -c 5 -I 10.30.0.25 10.90.0.1
tshark -r capture.pcap -Y 'icmp.type == 8 || icmp.type == 0' -T fields -e ip.src -e ip.dst -e icmp.ident -e icmp.seq | sort | uniq -c | head

一方のグループが五件の応答を示し、他方が皆無なら、所見は一方の送信元には機能する戻り経路があり、他方にはないということだ。それは混ぜた割合よりはるかに良いチケットであり、次の確認を無関係な VPN インスタンスではなく戻り経路に向ける。

関連記事