VPNキャプチャの不正チェックサムはファイル破損ではない
キャプチャはアダプターが処理を終える前のパケットを記録することがある。アナライザーの判定と受信したファイルを切り分け、ハッシュで整合性を証明する。
アナライザーがパケットに不正なチェックサムを付け、ダウンロードしたファイルも壊れて見えるため、二つの観測がVPN上の破損という一つの物語にまとめられてしまう。だが両者は異なる地点で取られた別々の測定である。一方はネットワークアダプターが処理を終える前にキャプチャ機構が見たものを述べ、他方はアプリケーションが保存したバイトを述べている。どちらが実際に変化したのかを特定することが、診断のすべてである。
キャプチャはアダプターに対してどこにあるか
パケットキャプチャは、複数の変換を含む経路の一点でのスナップショットである。ホストスタックとワイヤの間にはセグメンテーション、チェックサム計算、受信時の結合がある。キャプチャ点はその瞬間の状態を示すが、それはワイヤ上の最終フレームと一致するとは限らない。それをワイヤそのもののように読むことが、プレースホルダー欄を告発に変えてしまう。
したがって疑わしい欄について有用な問いは、それが誤って見えるかではなく、どこで観測されたかである。キャプチャインターフェース、アナライザーのバージョン、パケット層を所見の横に書き添えよ。この三つがなければチェックサムの表示はまったく解釈できない。
送信オフロードはトレースに何をするか
送信チェックサムオフロードが有効な場合、アダプターはホストがパケットをキューに入れた後にチェックサムを計算して欄を埋める。そのためホスト側のキャプチャにはプレースホルダーが記録され、アナライザーはワイヤが決して運ばなかったチェックサムを報告する。セグメンテーションオフロードも同様の人工物を生む。ホストが大きなバッファを一つアダプターに渡し、それが後に複数のフレームになるからである。
Wireshark のオフロードの解説は両方の効果を説明し、部分的なチェックサムの認識がアナライザーのバージョンとパケット種別に依存すると指摘している。だから同じトレースについて、古いキャプチャツールと新しいものが、どちらも正しく読んでいるのに見解を異にすることがある。
カプセル化は第二の対象を加える
VPN は図に二つ目のパケットを挿入する。トンネルインターフェースはアプリケーションが実際に送った内側のパケットを示し、物理インターフェースはそれを運ぶ外側のカプセル化された接続を示す。内側のパケットから取ったチェックサムや長さは外側のフレームのものではなく、両者を同じ対象を述べているかのように比べれば無意味になる。
比較が必要なときは、同種のもの同士を比べよ。内側は内側と、外側は外側と、経路の同じ地点で。一致しない欄の組は、二つの異なる対象を測ったことしか証明しない。各トレースがどのインターフェースから来たのかを記録せよ。きれいに見えるトンネルのキャプチャは、アダプターが何を出したかについて何も語らない。
ハッシュでファイルの整合性を証明する
ファイルそのものについては、再現可能な出所と保存された結果の内容ハッシュを計算し、ダイジェストを比べる。これはパケットごとの表示とは別の問いに答えるものであり、利用者が本当に気にする対象について答えている。
sha256sum payload.bin
sha256sum /srv/transfer/payload.bin
cmp -l payload.bin /srv/transfer/payload.bin | head
ダイジェストが一致すれば、その転送について破損の問いは閉じる。異なれば、より狭い問いが開く。バイトが分岐する最も早い段階を見つけ、何かが意図的にファイルを変換したかどうかを確かめよ。部分的な保存、再エンコードされた添付ファイル、期待されたファイル名で保存されたエラーページは、いずれもネットワークの不具合なしにバイトを変える。
アダプター経路を恒久的にせずに切り分ける
一つのドックやアダプターに伴う再現可能な問題では、VPN プロファイル、アプリケーション、試験対象、宛先を固定し、対応する代替インターフェースで転送を繰り返す。アダプターとともに変化する結果は、障害をその経路に絞り込む。ただしドライバーの設定を特定したわけでも、型全体の欠陥を証明したわけでもない。
オフロードを全体で無効にするのは魅力的な試験であり、悪い既定値でもある。ホスト全体の設定は実験の外の通信にも広く影響し、実際の性能コストを伴い得る。だからそのような変更は一時的なものとして扱い、記録し、元に戻せ。別の機械から借りた回避策を残す前に、ベンダーが対応する診断を用いよ。
報告書は三つの結果のどれが変化したのかを述べるべきである。アナライザーによるパケットの解釈か、アプリケーションの完成したバイトか、一つのアダプター経路の再現性か。それぞれ次の行動が異なり、暗号化に関わるのは一つだけである。