NET // communication networks
LESSON 30 / 発展編

Wireshark でパケットを観る

第28回で 「サーバとクライアントは TCP/UDP ポートを持つプロセスにすぎない」 ことを確認し、第29回で HTTP を実際に書く 側を体験しました。本講ではさらに一段下、「ワイヤ(ネットワーク媒体)を実際に流れているバイト列そのものを観る」 視点に降ります。自分で書いた HTTP リクエスト がパケットとしてどう見えるかを、Wireshark で直接観察できるようになる回です。代表的なツールは Wireshark(GUI) と、その兄弟分の tshark / tcpdump / dumpcap(CLI)。Ethernet フレームから IP・TCP・HTTP・TLS まで、層を一枚ずつ剥がして読みます。取得フィルタ(BPF)表示フィルタ の違い、TCP の 3 ウェイ・再送・ウィンドウ の見え方、そして SSLKEYLOGFILE を使って TLS 通信を復号するところまで踏み込みます。

学習目標

本講を終えると、以下を達成できるようになります。

本講は 基礎 プロトコルとTCP/IP階層標準 階層とカプセル化標準 TCP標準 HTTP を前提とします。第28回 ネットワークプログラミング でプロセス視点を、前回 第29回 HTTP プログラミング で実装視点を獲得しました。本講で パケット視点 を加え、自分が書いた HTTP リクエストがワイヤをどう流れるかを直接観察できるようになります。

このレッスンの目次

01 位置づけ Wireshark / tshark / dumpcap / tcpdump の関係… 02 導入とキャプチャ開始 Npcap、インタフェース選択、Promiscuous… 03 層をたどって読む フレーム → IP → TCP → アプリ層を一枚ずつ剥がす… 04 取得 vs 表示フィルタ BPF と Wireshark 独自構文の違い、書式… 05 TCP を観る 3 ウェイ・再送・ウィンドウの見え方… 06 TLS を復号する SSLKEYLOGFILE で HTTP/2 の中身を覗く… 07 tshark で自動化 CLI でフィールド抽出、grep/awk と連携… 08 トラブルシュート SYN だけ来る・再送連発・MTU・RST 即切断… 09 まとめと用語 本講の重要語句を整理 10 確認問題 5 問で理解度をチェック

位置づけ ─ Wireshark / tshark / dumpcap / tcpdump

パケット観察ツールは複数あり、役割分担で覚えると混乱しません。キャプチャ(取得) は OS のパケットフックから生のフレームを取る処理、解析(表示) は取れたフレームを各プロトコルに沿って復号して人間に見せる処理。Wireshark はこの2つを GUI で一体化したツールです。
POINTWireshark:GUI。キャプチャ + 高度な解析・統計・グラフ・復号
tshark:Wireshark の CLI 版。同じディスセクタ(解析エンジン) を持ち、自動化に向く
dumpcap:Wireshark / tshark が内部で使う 純キャプチャ ツール。低オーバヘッドで取り込み専用
tcpdump:Unix の伝統的な CLI キャプチャ + 簡易解析。サーバへの sshトラブル時に重宝
・共通の保存形式は pcap / pcapng。tcpdump で取った pcap を Wireshark で開く運用が定番

役割分担を図で

取得 → 保存 → 解析 のパイプライン 取得 (Capture) dumpcap tcpdump -w (libpcap / Npcap) 保存 file.pcap file.pcapng (中間ファイル) 解析 (Display) Wireshark (GUI) tshark (CLI) tcpdump -r 統計・可視化 Flow Graph I/O Graph Stream 抽出 Wireshark は 1 ツールで全部こなすが、内部では取得=dumpcap、解析=ディスセクタ群 と分担している

図の見方:キャプチャは OS のパケットフックから生バイトを取る重い処理、解析はそれを TCP/HTTP/TLS など各層に分解する処理。GUI で全部やるのが Wireshark、サーバ上で tcpdump -w xxx.pcap して手元の Wireshark で開く運用も多い。

つながる知識: パケットキャプチャは OS から見ると ネットワークインタフェースのフックポイント に常駐する作業。Linux は AF_PACKET、macOS / BSD は BPF デバイス、Windows は Npcap(WinPcap の後継) が経路。この層は通常のユーザ権限では触れず、管理者権限 やキャプチャ専用グループ(Linux なら wireshark グループ)が必要。

確認: 本番サーバ(SSH 経由)で短時間だけパケットを取得してから、自分の PC の Wireshark で解析したい。最も適切な手段は?

正解:B。本番運用では「取得は CLI で軽量・解析は手元 GUI で快適」が定石。dumpcap や tcpdump はメモリフットプリントが小さくサーバへの負荷が少ない。生成された .pcap ファイルは Wireshark / tshark どちらでも開けるので、現場(取得)と分析(可視化)を分離できる。これが Wireshark のアーキテクチャが dumpcap・tshark・GUI に分割されている理由。

導入とキャプチャ開始

Wireshark のインストールから「最初の 1 つ目のパケット」までを最短で押さえます。OS によって キャプチャドライバ の扱いが異なる点が初心者の最大の躓きポイントです。

OS 別インストール

OS導入注意点
WindowsWireshark 公式インストーラ → Npcap も一緒にインストール(チェック必須)Npcap を入れないとインタフェース一覧が空になる
macOSbrew install --cask wireshark + ChmodBPF を許可初回起動時に「BPF デバイスへのアクセス許可」 ダイアログを承認
Linuxapt install wireshark 等。インストール時に「非 root ユーザに dumpcap 実行を許可するか」 と聞かれる許可した場合、自分のユーザを wireshark グループに追加し再ログイン

最初のキャプチャ ─ 5 ステップ

  1. Wireshark を起動 → 「キャプチャ → インタフェース」 で動いているインタフェースが上位に並ぶ(波形プレビュー付き)
  2. 有線なら en0 / eth0、無線なら Wi-Fi を選んでダブルクリック → キャプチャ開始
  3. ブラウザで http://example.com/ を開く(HTTPS でなく HTTP の方が観察しやすい)
  4. Wireshark 上部の 赤い四角(停止) でキャプチャ停止
  5. 表示フィルタ欄に http と入れて Enter → HTTP メッセージだけが残る

Wireshark の 3 ペイン構造

Wireshark の画面構成 ① パケット一覧(Packet List) No. / Time / Source / Destination / Protocol / Length / Info ─ 1 行 = 1 パケット ② パケット詳細(Packet Details) Frame > Ethernet > IP > TCP > HTTP のように層を展開して読む(本講の主役) ③ パケットバイト(Packet Bytes) ─ 16 進ダンプ。詳細でクリックした項目が反転表示

図の見方:Wireshark の操作の 9 割は 「① で気になる行を選ぶ → ② で層を展開して読む → ③ でバイト位置を確認」 の往復。パケットを「読む」 とは、② の階層展開を上から下へたどる作業のこと。

プロミスキャスモードの注意: Wi-Fi で「自分以外の端末のパケット」 まで見たい場合、無線の モニターモード が必要(macOS は対応、Windows は Npcap でも限定的)。普通の有線 LAN ではスイッチが宛先以外には流さないため、自分宛のフレームしか見えない。授業や CTF で 「自分の端末の通信を観る」 範囲では問題ない。

Q. 「Wireshark で職場の Wi-Fi に流れている全パケットを覗ける」と思いきや、実際には自分宛のフレームしか見えない。なぜ? また、どんな環境なら他人のパケットが見えるのか?

層をたどって読む ─ 1 つの HTTP リクエストの解剖

Wireshark でパケットを 1 つ選び、② のパケット詳細を上から開いていくと、第3回・第11回で学んだカプセル化が、そのまま生バイトとして観察できる。HTTP リクエストを例に、各層をたどります。
1 つの HTTP リクエストパケットの中身 ▶ Frame 12: 458 bytes on wire, interface en0 ▶ Ethernet II: src 3c:22:fb:.., dst 8c:85:90:.., type IPv4 (0x0800) ▶ Internet Protocol Version 4: src 192.168.1.10, dst 93.184.216.34 ▶ Transmission Control Protocol: src 53824 → dst 80, Seq=1, Ack=1, Len=404 ▶ Hypertext Transfer Protocol GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0... Accept: text/html\r\nConnection: keep-alive\r\n\r\n

図の見方:外側のヘッダから内側へ、Frame(物理 + 取得情報) → Ethernet → IP → TCP → HTTP と入れ子になっている。Wireshark の詳細ペインは、これをそのまま展開可能なツリーで見せる。第11回(階層化とカプセル化) の図が 実バイトとして可視化 される瞬間。

各層で必ず見るフィールド

必ず見る項目意味
FrameTime, Length, Interface取得時刻と長さ。前後パケットとの時間差(Δt) は性能解析の基本
EthernetSrc / Dst MAC, EtherType同一セグメント上の物理経路。EtherType=0x0800 が IPv4、0x86DD が IPv6
IPv4Src / Dst IP, TTL, IdentificationTTL の減り方で経由ルータ数。Identification は断片化の追跡用
TCPSrc / Dst Port, Flags, Seq, Ack, Window後述の TCP セクションで深掘り
HTTP / TLSMethod, Host, Status, ALPNアプリ層の意味。TLS は暗号化されているとここで止まる(後の節で復号)

考えてみよう: 同じ Web ページを取得しても、HTTP/1.1 と HTTP/2、HTTP/3 でパケットの見え方は大きく違う。HTTP/1.1 は平文 ASCII でそのまま読めるが、HTTP/2 は バイナリフレーム で多重化、HTTP/3 は QUIC over UDP で TCP すら見えない。Wireshark は ALPN(Application-Layer Protocol Negotiation) を見て自動判別してくれる。次回 第33回 QUIC / HTTP/3 で、その差を再度見ます。

確認: HTTPS(TLS 1.3)で暗号化された通信を Wireshark でキャプチャしたとき、復号鍵を持たなくても観察できる情報はどれか。

正解:C。TLS は ペイロード(HTTP メソッド・URL・ヘッダ・本文) を暗号化するが、IP/TCP ヘッダや TLS のクライアントヘロー内 SNI は平文で見える。だから「どこに接続しているか」「どれくらいの量を流しているか」は復号なしで分かる(これがメタデータの限界)。Encrypted Client Hello(ECH)が普及すると SNI も隠れるが、IP・タイミングは依然見える。これが「TLS は中身を守るがメタデータは守らない」と言われる本質。

取得フィルタ vs 表示フィルタ ─ 似て非なる二つ

Wireshark の最大の混乱ポイントが フィルタが2種類ある ことです。取得フィルタ(Capture Filter)取り込む段階で絞る(=取らない)、表示フィルタ(Display Filter)取った中から見せる範囲を絞る(=取った全部は残っている)。書式も別物。
POINT取得フィルタBPF(Berkeley Packet Filter) 構文。tcpdump と互換。例:tcp port 443
表示フィルタWireshark 独自の式言語。例:tcp.port == 443
・パケット量が多い回線では 取得フィルタで取り込み量自体を減らす(ディスク I/O 軽減)
・授業・トラブル解析では 取らずに残しておく ほうが後悔が少ない → 全部取って表示フィルタで絞るのが基本

BPF と Wireshark 構文の対応表

意図取得フィルタ(BPF / tcpdump)表示フィルタ(Wireshark)
HTTP / HTTPS だけtcp port 80 or tcp port 443tcp.port == 80 || tcp.port == 443
特定 IP との通信host 93.184.216.34ip.addr == 93.184.216.34
DNS だけudp port 53dns(プロトコル名でも書ける)
SYN パケットだけtcp[tcpflags] & tcp-syn != 0tcp.flags.syn == 1 && tcp.flags.ack == 0
HTTP の GET(BPF では難しい)http.request.method == "GET"
TLS ハンドシェイクの ClientHello(BPF では難しい)tls.handshake.type == 1

ペイロード中身に基づく絞り込みは BPF では困難。BPF は ヘッダのバイト位置で素早く判定する低レベル機構なので、HTTP のテキスト中身や TLS のハンドシェイク種別のような 解析後でないと意味が分からない条件 は表示フィルタの仕事になります。

表示フィルタの応用例(クリックで展開)
# TCP の再送だけ
tcp.analysis.retransmission

# 1500 バイト超の IP パケット(MTU超えの調査)
ip.len > 1500

# RST が立った TCP (異常切断)
tcp.flags.reset == 1

# DNS 応答で NXDOMAIN
dns.flags.rcode == 3

# HTTP/2 の SETTINGS フレーム
http2.type == 4

# 特定の TCP ストリーム全体(右クリック → Follow → TCP Stream で取得した番号)
tcp.stream eq 7

確認: 取得フィルタ(BPF)と表示フィルタの違いとして、最も適切なものはどれか。

正解:B。取得フィルタ(BPF)は カーネルレベルで動き、ディスクへの書き出し前にパケットを捨てる ─ ハイトラフィック環境で必須。一方、表示フィルタは 記録済みデータの可視化制御 で、解析中に何度でも条件を変えられる。実務では「取得は広めに保存、表示で詳しく絞る」が定石。文法も BPF と Wireshark フィルタは別系統(tcp port 80 vs tcp.port == 80 など)で、慣れが要る。

TCP を観る ─ 3 ウェイ・再送・ウィンドウ

第18回で TCP の手順を学びました。Wireshark は その手順がそのまま画面上に時系列で並ぶ。ここでは「現実の TCP がどう見えるか」 を、Wireshark の表現に焦点を当てて読みます。

3 ウェイハンドシェイクの見え方

パケット一覧での 3 ウェイの見え方 No.1 0.000 192.168.1.10 93.184.216.34 TCP 74 53824 → 80 [SYN] Seq=0 Win=65535 No.2 0.018 93.184.216.34 192.168.1.10 TCP 74 80 → 53824 [SYN, ACK] Seq=0 Ack=1 No.3 0.018 192.168.1.10 93.184.216.34 TCP 66 53824 → 80 [ACK] Seq=1 Ack=1 Win=131744 No.4 0.018 192.168.1.10 93.184.216.34 HTTP 470 GET / HTTP/1.1

図の見方:Info 列の [SYN] / [SYN, ACK] / [ACK] の 3 行が 3 ウェイ。直後にデータ送信(GET) が続く。Time 列を見れば、SYN→SYN/ACK 間の往復時間 ≒ RTT(ここでは約 18ms)。これだけで「サーバまでの距離感」 が分かる。

再送の見え方

Wireshark は TCP ストリームの状態を内部で追跡しており、同じ Seq の再送失った Seq に対する Duplicate ACK を Info 列に [TCP Retransmission][TCP Dup ACK ...] と表示してくれます。表示フィルタで tcp.analysis.retransmissiontcp.analysis.duplicate_ack を入れれば、再送だけを抽出可能。

便利機能:Follow → TCP Stream

パケット一覧で気になる行を右クリック → Follow → TCP Stream。これだけで、その TCP セッションの送受信バイトをアプリ層の塊として整形表示してくれます。HTTP/1.1 の通信なら 「リクエストヘッダとレスポンスヘッダ・本文」 がそのまま 1 画面に 並びます。HTTPS だと暗号文が並ぶので意味不明 ─ 次節の TLS 復号と組み合わせると一気に有用になります。

TLS を復号する ─ SSLKEYLOGFILE を使う

HTTPS 通信を Wireshark で開くと、ハンドシェイクは部分的に見えますが、本文(GET / レスポンス) は暗号化されており Encrypted Application Data としか表示されません。サーバ側の秘密鍵がなくても クライアント側で鍵情報を出力させる ことで、TLS を復号する標準的なやり方があります。それが SSLKEYLOGFILE 環境変数。
POINT 手順:
1. 環境変数 SSLKEYLOGFILE=/tmp/sslkeys.log を設定してブラウザを起動
2. 普通に HTTPS を閲覧 → ブラウザは セッションごとの鍵情報 をテキストで追記する
3. Wireshark の Preferences → Protocols → TLS → "(Pre)-Master-Secret log filename" に同じパスを指定
4. 既に取った pcap でも、設定後すぐ HTTPS が HTTP/2 メッセージとして展開 される
対応ブラウザ:Chrome / Firefox / Edge(curl も --keylog-file 相当あり)

セットアップ例(macOS / Linux)

# Chrome を SSLKEYLOGFILE つきで起動(macOS)
export SSLKEYLOGFILE="$HOME/sslkeys.log"
open -a "Google Chrome"

# curl の場合
curl --tlsv1.3 --keylog-file ~/sslkeys.log https://example.com/

# Linux で Firefox
SSLKEYLOGFILE=/tmp/sslkeys.log firefox &

sslkeys.log の中身は次のようなテキスト:

CLIENT_HANDSHAKE_TRAFFIC_SECRET 52d7e2bc... 4a91c0ab8f...
SERVER_HANDSHAKE_TRAFFIC_SECRET 52d7e2bc... 8d3f7e21a4...
CLIENT_TRAFFIC_SECRET_0          52d7e2bc... 1b22b7f0c9...
SERVER_TRAFFIC_SECRET_0          52d7e2bc... 6e0d8c4915...

Wireshark はこれらの secrets を使って TLS 1.3 のキーを再構成し、暗号文を復号して上の階層(HTTP/2) を表示できるようになります。

つながる知識: SSLKEYLOGFILERFC 文書ではなく業界事実上の標準(NSS Keylog format)。OpenSSL は SSL_CTX_set_keylog_callback() で出力できる。本機構があるからこそ、自社の HTTPS バックエンドとの通信不具合を Wireshark で追える。一方で 本番環境で常に有効化してはいけない(鍵が平文ファイルとして残る) ─ デバッグ時のみ、安全な手元環境で。

Q. 「SSLKEYLOGFILE を設定すれば、自分の PC で動くブラウザの HTTPS 通信を Wireshark で復号できる」と言うが、では 他人(別ホスト)の TLS 通信を盗聴して同じ手順で復号 できるか? できないなら、なぜ?

tshark で自動化 ─ CLI でフィールドだけ抜く

GUI で見るだけが Wireshark ではありません。同梱の tshark を使うと、pcap から特定フィールドだけを抽出して grep / awk / jq と連携できます。観察を「目視」 から「集計・自動化」 へ広げる入り口。

よく使うレシピ

# 1) ライブで HTTP リクエストの URI だけ表示
tshark -i en0 -Y 'http.request' -T fields -e ip.dst -e http.host -e http.request.uri

# 2) pcap から DNS クエリ名を集計
tshark -r capture.pcapng -Y 'dns.qry.name' \
       -T fields -e dns.qry.name | sort | uniq -c | sort -rn | head

# 3) TLS の SNI(Server Name Indication) 一覧
tshark -r capture.pcapng -Y 'tls.handshake.extensions_server_name' \
       -T fields -e tls.handshake.extensions_server_name | sort -u

# 4) TCP ストリームの統計(再送・損失・ACK重複)
tshark -r capture.pcapng -q -z conv,tcp

# 5) JSON 出力(jq などへ流す)
tshark -r capture.pcapng -Y 'http.request' -T json | jq '.[] | ._source.layers.http'

# 6) リングバッファでの長時間キャプチャ(100MB × 5 ファイルでローテート)
dumpcap -i en0 -b filesize:100000 -b files:5 -w rotating.pcap

覚えるべき主要オプション:-i インタフェース、-r 入力 pcap、-w 出力 pcap、-Y 表示フィルタ、-f 取得フィルタ、-T fields -e ... 指定フィールド抽出、-q -z 統計表示。

つながる知識: サーバ上で問題を再現するときは、SSH 越しに root で tcpdump して pcap を持ち帰る のが定石。tcpdump -i any -w /tmp/x.pcap host 10.0.0.5 and port 443 のような形で取り、scp で手元へ。tshark は GUI 不要なので CI / 自動テスト・回帰検査に組み込みやすい。

よくあるトラブルシュートのレシピ

パケットが取れた段階でできることはたくさんあります。代表的な「症状 → Wireshark での見え方 → 一次仮説」 のパターンをまとめます。
症状Wireshark の見え方一次仮説
サーバに繋がらないSYN は出るが SYN/ACK が一切返らない到達経路で FW がドロップ、または相手プロセスが listen していない(第28回参照)
すぐ切られる3 ウェイ完了直後に RST(Reset)サーバ側アプリのエラー、ALPN 不一致、IP/ポートの誤り
遅い・止まる大量の [TCP Retransmission]Dup ACK経路の損失、Wi-Fi の電波品質、輻輳制御の介入
大きいデータだけ失敗~1500B 周辺で再送集中、ICMP Frag Needed ありPMTUD 失敗 ─ ICMP がブロックされ MTU 通知が届かない
HTTPS が落ちるClientHello → Alert: "handshake_failure"ALPN / 暗号スイート / SNI / 証明書ミスマッチ
DNS が遅いクエリ送信から応答まで >1s、または NXDOMAIN の連発リゾルバ到達不能、上流障害、DNSSEC の検証失敗
同じ IP から大量の SYN1 つのソース IP からの SYN だけで埋まるSYN フラッド(攻撃) または NAT 配下の多数クライアント

つながる知識: ここで挙げた症状の多くは、過去のレッスンで原理を学んだもの ─ TCP(第18回)、IP/ICMP/MTU(第20回)、TLS(第25回)、DNS(第13・39回)、ファイアウォール(第27回)。Wireshark は「学んだことを目で確認する装置」。逆に、原理を知らないと表示が読めない。教科書とパケット観察は両輪で動かすのが効きます。

まとめと用語チェック

SUMMARY 1. Wireshark = GUI、tshark = CLI、dumpcap = 純キャプチャ、tcpdump = 伝統的 CLI。pcap / pcapng 形式で交換
2. Wireshark は 3 ペイン構造(一覧 / 詳細 / バイト)。詳細を上から展開して層をたどるのが基本作法
3. 取得フィルタ(BPF)は取り込み量を絞る、表示フィルタは取った中から見せる範囲を絞る ─ 書式が別物
4. TCP の 3 ウェイ・再送・ウィンドウは Info 列でひと目。tcp.analysis.retransmission 等の専用フィルタが便利
5. Follow → TCP Stream でセッションをアプリ層レベルで整形表示できる
6. HTTPS の中身は SSLKEYLOGFILE + Wireshark 設定で復号可能(NSS keylog format)
7. tshark で -T fields -e ... フィールド抽出、-z 統計、-T json で外部処理連携
8. トラブル解析は 症状 → Wireshark の見え方 → 仮説 の3点セットで進める

用語チェック

用語1行説明
pcap / pcapngパケットキャプチャの保存形式。pcapng は注釈・複数インタフェース対応の新版
libpcap / Npcapキャプチャドライバ。Unix 系は libpcap、Windows は Npcap(WinPcap 後継)
取得フィルタ(BPF)取り込み段階で絞る低レベル構文。tcpdump と互換
表示フィルタ取った中から見せる範囲を絞る Wireshark 独自構文(tcp.port == 443)
パケット詳細(Packet Details)1 つのパケットを層ごとに展開表示するペイン
Follow Stream選択した会話の全パケットを抽出してアプリ層で整形表示する機能
tcp.analysis.retransmissionWireshark が自動検出した再送を表す表示フィルタ
SSLKEYLOGFILEブラウザ等が TLS 鍵情報を出力する環境変数。Wireshark が読み込んで復号
tsharkWireshark の CLI 版。フィールド抽出・統計・JSON 出力が可能
dumpcap取得専用の軽量バックエンド。Wireshark / tshark が内部で使用
プロミスキャスモードNIC が自分宛以外のフレームも受信するモード(L2 観察用)
NEXT: 次回 第33回 QUIC と HTTP/3 では、TCP+TLS の段重ねを UDP 上で再設計するトランスポート革命を見ます。前回 第29回 HTTP プログラミング で書いた HTTP/1.1 がパケットとして見えた経験を踏まえて、HTTP/3(QUIC ベース)が そもそも TCP に見えない ことが Wireshark で観察できるようになります。

確認問題

問1. Wireshark の 取得フィルタ表示フィルタ の違いとして、最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. 同じ構文で書ける2つの別名で、どちらを使っても結果は同じ
B. 取得フィルタは取り込み段階で絞る(取らない)、表示フィルタは取った中から見せる範囲を絞る。書式も別物(BPF vs Wireshark独自)
C. 取得フィルタは GUI 専用、表示フィルタは CLI 専用
D. 取得フィルタは TCP 専用、表示フィルタは UDP 専用
正解:B
取得フィルタ(BPF)は 取り込まない ので後から見直せない。表示フィルタは 取った全部 をファイルに残し、その中から見せる範囲を変える。書式も tcp port 443(BPF) と tcp.port == 443(Wireshark) で別。授業・トラブル解析では「全部取って表示で絞る」 のが安全。

問2. パケット詳細ペインで HTTP リクエストを開くと、上から Frame → Ethernet → IP → TCP → HTTP の順に展開される。これが意味することはどれか。

次の選択肢から最も適切なものを選択してください。
A. Wireshark がアルファベット順に並べているだけ
B. Wireshark の表示の癖で、実際のパケットと層の順序は逆
C. パケット内のバイト列が外側ヘッダから内側ペイロードへとカプセル化されており、その入れ子構造をそのまま展開表示している
D. ユーザが好きな順序にドラッグで並び替えできる
正解:C
第3回・第11回で学んだカプセル化の通り、送信時に HTTP の中身を TCP ヘッダで包み、それを IP で包み、さらに Ethernet で包む。Wireshark の詳細表示は外側から順に展開しているだけで、実バイト列の構造そのまま。これが「パケットを読む = 層をたどる」 という感覚の基礎になる。

問3. HTTPS 通信を Wireshark で開いたら本文が Encrypted Application Data としか見えない。GET の URI やレスポンス JSON を確認したい場合の標準的な手段はどれか。

次の選択肢から最も適切なものを選択してください。
A. ブラウザを SSLKEYLOGFILE 環境変数を設定して起動し、Wireshark の TLS 設定で同じファイルを参照させる
B. Wireshark のメニューから「TLS を解除」 を選ぶ
C. ブラウザのキャッシュを Wireshark にインポートする
D. CA の秘密鍵を Wireshark に入れる
正解:A
クライアント側で SSLKEYLOGFILEセッションごとの鍵情報(NSS keylog format) を出力させ、Wireshark がそれを使って TLS を復号する標準的な仕組み。Chrome / Firefox / curl 等が対応。CA 秘密鍵で復号は不可(D は誤り、TLS 1.3 は PFS で長期鍵を使い回さない)。

問4. 表示フィルタ tcp.analysis.retransmission を入れたら大量にヒットした。次に確認する観点として最も適切でないものはどれか。

次の選択肢から最も適切でないものを選択してください。
A. RTT のばらつき(Time 列の差分、または TCP Stream Graph)
B. tcp.window_size の推移(受信側のバッファ詰まり)
C. ICMP Frag Needed の有無(PMTUD 失敗の可能性)
D. SSLKEYLOGFILE が設定されているか
正解:D
再送は TCP 層・経路の現象。SSLKEYLOGFILE は TLS の 復号 のための設定で、再送の有無や原因とは独立。再送解析の一次仮説は (1) 経路の損失/ジッタ、(2) 受信ウィンドウの詰まり、(3) MTU 不一致、(4) 輻輳制御の介入。A・B・C はそれぞれ仮説に対応する確認項目で、適切。

問5. リモートサーバ上で問題が再現するため、その場で pcap を取って手元の Wireshark で解析したい。実用上もっとも妥当な手順はどれか。

次の選択肢から最も適切なものを選択してください。
A. リモートサーバに Wireshark GUI をインストールし、X 転送で開く
B. リモートサーバで tcpdump -i any -w /tmp/x.pcap host A and port P を実行 → scp で持ち帰り、手元の Wireshark で開く
C. リモートサーバの NIC を物理的に持ち帰る
D. リモートサーバから自分の端末へ ping を打って観察
正解:B
実務での標準パターン。サーバ上では 軽量な tcpdump で取得 し、解析は 手元の Wireshark で行う。pcap / pcapng は OS 非依存の中間ファイルなので、これだけで取得と解析を分離できる。X 転送は重く、本番サーバへの GUI 導入は避けるのが定石(A は不適)。
← PREV
第29回 HTTP プログラミング
NEXT →
第31回 GNS3 + VyOS でネットワーク構築