Wiresharkによるパケットキャプチャと障害解析の技法

```html

なぜ今、Wiresharkが現場で欠かせないのか

「疎通は取れているはずなのに、アプリが応答しない」「特定の時間帯だけ遅延が発生する」——こういった症状に頭を抱えた経験、きっとあるのではないでしょうか。ログやSNMPの統計情報だけでは原因に辿り着けないとき、最後の砦になるのがパケットキャプチャです。Wiresharkはそのための代表的なツールであり、通信の「現場」をありのままに見せてくれます。コマンドを覚えるだけでなく、「何を見るか」を理解することで、障害解析のスピードが劇的に変わります。

Wiresharkの基本的な仕組み

Wiresharkはネットワークインターフェースをプロミスキャスモード(自分宛て以外のフレームも受信するモード)で動作させ、流れるパケットをリアルタイムに収集・解析します。内部的にはlibpcap(Linuxなど)Npcap(Windows)というライブラリが実際のキャプチャを担っており、Wiresharkはその上にGUIとプロトコル解析エンジンを乗せた構成になっています。

パケットが届いてから画面に表示されるまでの流れはこうなります。

  • NICがフレームを受信し、カーネルのバッファに格納される
  • libpcap/Npcapがそのバッファからパケットを読み出す
  • Wiresharkがプロトコルをディセクター(解析プラグイン)で段階的に解釈する
  • Ethernet → IP → TCP/UDP → アプリケーション層の順で展開・表示される

この多層的な解析があるため、「TCPハンドシェイクに失敗している」「HTTPステータスが500を返している」といった層ごとの事実をすぐに確認できるのです。

設定例・コマンド例

CLIでのキャプチャ(tcpdump連携)

サーバ上やルータのSSH越しにキャプチャするには、tcpdumpでファイルに保存してからWiresharkで開く方法が実用的です。

# eth0インターフェースでポート80/443のパケットを1000件保存
tcpdump -i eth0 -n -s 0 'tcp port 80 or tcp port 443' -c 1000 -w /tmp/capture.pcap

# 特定ホストとの通信のみキャプチャ
tcpdump -i eth0 -n host 192.168.1.100 -w /tmp/target.pcap

Wiresharkの表示フィルタ(Display Filter)

キャプチャ後の絞り込みには表示フィルタを使います。リアルタイムで適用でき、元データは保持されます。

/* 特定IPとの通信だけ表示 */
ip.addr == 192.168.1.100

/* TCPの再送パケットを抽出(輻輳・ロス確認に有効)*/
tcp.analysis.retransmission

/* HTTPステータスコードが4xx/5xxのレスポンスを抽出 */
http.response.code >= 400

/* TCPコネクション確立失敗(RSTフラグ)を抽出 */
tcp.flags.reset == 1

よく使うフィルタ一覧

目的 表示フィルタ
DNSのクエリ・応答 dns
TCPハンドシェイク(SYN)のみ tcp.flags.syn == 1 and tcp.flags.ack == 0
ICMPエラーメッセージ icmp.type == 3
ARPリクエスト arp.opcode == 1
TLSハンドシェイク tls.handshake

現場での活用・ベストプラクティス

RTTとTCPウィンドウサイズで遅延を見抜く

「速度が遅い」という報告に対し、まず確認すべきはRTT(往復遅延)TCPウィンドウサイズです。WiresharkのStatistics → TCP Stream GraphsからTime-Sequence Graph(Stevens)を開くと、パケットの到達タイミングと再送の有無を視覚的に把握できます。ウィンドウサイズが小さくなっている(ウィンドウスケーリングが機能していない)と、スループットが理論値に達しないことがあります。

フォローTCPストリームで会話全体を追う

気になるパケットを右クリック →「Follow → TCP Stream」を選ぶと、その通信の全やり取りをテキストで確認できます。HTTPのリクエスト・レスポンスヘッダの確認や、プロトコル違反の検出に非常に便利です。

キャプチャポイントの選択

「どこでキャプチャするか」は障害解析の精度を左右します。クライアント・スイッチ・サーバの複数点で同時に取得し、パケットがどこで消えているか(あるいは変化しているか)を比較する方法が効果的です。

注意点・よくある落とし穴

  • キャプチャするだけで満足しない:ファイルを取得しても「どのフィルタで見るか」が決まらないと情報の海で溺れます。症状から「TCPのRSTが出ているのか」「DNSが応答していないのか」など仮説を先に立てましょう。
  • 時刻同期を忘れずに:複数拠点のキャプチャを比較する際、NTPがズレていると前後関係が狂います。事前にNTP同期を確認しておくことが必須です。
  • 高トラフィック環境でのパフォーマンス影響:Wiresharkをリアルタイム表示しながら高速回線でキャプチャすると、パケットドロップが起きることがあります。本番環境ではtcpdumpでファイル保存してからオフライン解析するのが安全です。
  • 暗号化通信への対応:TLS 1.3では復号が難しくなっています。アプリ側でSSLキーログを出力(SSLKEYLOGFILE環境変数)させ、Wiresharkに読み込ませることで中身を確認できます(検証環境限定で使用してください)。

まとめ

Wiresharkは単なる「パケットを見るツール」ではなく、ネットワーク上で何が起きているかを証拠ベースで把握する手段です。表示フィルタを使いこなし、適切なキャプチャポイントを選び、仮説を持って解析することで、他の手段では気づけない問題の根本原因に辿り着けます。まずは手元の検証環境でHTTPやDNSの通信をキャプチャして、流れるパケットを「読む」練習から始めてみてください。その積み重ねが、障害対応の現場で確かな自信につながります。

```