
tcpdumpは1988年に米ローレンス・バークレー国立研究所(LBL)のヴァン・ジェイコブソン(Van Jacobson)らが公開したパケットキャプチャ用のコマンドラインツールです。同時に開発された汎用ライブラリのlibpcapが切り出され、WiresharkやSnort、ngrepなど後続のネットワーク解析ツールはほぼ例外なくlibpcapを土台に作られています。そのため、tcpdumpは単なる一ツールというより「パケット解析の祖先」と呼ぶべき存在で、現在もLinux・BSD・macOSサーバーで日常的に使われています。本記事ではその基礎と現在地を整理します。
この記事の目次
- tcpdumpを構成する三要素
- Van Jacobsonとlibpcapの系譜
- 実務での使われ方
- Wireshark・tshark・eBPF系との位置関係
- まとめ
tcpdumpを構成する三要素

tcpdumpは大きく三つの層から成り立っています。最下層はlibpcapで、OSのネットワーク機構から生のパケットを取り出すためのプラットフォーム差異を吸収するライブラリです。Linuxではraw socket、BSD系ではBPFデバイス、Windowsでは別系統のNpcapが裏で使われ、アプリケーションからは同じAPIで叩けるようになっています。WiresharkやSnortと共通している基盤がここです。
中間層はBerkeley Packet Filter(BPF)で、tcpdumpの引数として渡す「port 80」や「tcp[13] & 2 != 0」といった式をカーネル内のフィルタプログラムにコンパイルし、興味のないパケットを早い段階で捨てる仕組みになっています。最上層がコマンドライン本体で、フィルタ結果を-X(バイト列)、-A(ASCII)、-w(ファイル保存)といったオプションで整形して出力します。三層構造のおかげで、tcpdumpは軽量でありながら大量パケットを捌けるツールに仕上がっています。
Van Jacobsonとlibpcapの系譜

tcpdumpを生んだのは、TCP混雑制御アルゴリズム(Van Jacobsonアルゴリズム)でも知られるヴァン・ジェイコブソンと、クレイグ・レレ(Craig Leres)、スティーブン・マッキャン(Steven McCanne)らLBLのネットワークグループです。1988年に公開された初期版は、当時の貴重なネットワーク解析手段として瞬く間にUnix界隈に広まりました。1992年にはBPFの論文「The BSD Packet Filter」が発表され、tcpdumpはその応用例として最も成功した実装になっています。
1998年にはパケット捕捉部分がlibpcapとして独立し、独自にライブラリ化されたことで、GUI解析ツールのEthereal(後のWireshark)、侵入検知のSnort、軽量パケット監視のngrepなど派生ツールが続々と誕生しました。現在はThe Tcpdump Groupがメンテナンスを引き継ぎ、新しいプロトコル(HTTP/2、QUIC、IPv6拡張ヘッダなど)への対応やセキュリティ修正が継続されています。30年以上にわたり業界標準であり続けている、稀有なオープンソースの一つです。
実務での使われ方

tcpdumpが活躍するのは、何らかの通信トラブルで「アプリ側のログだけでは原因が分からない」場面です。Webサーバーから外部APIへリクエストしたとき、本当にパケットが出ているのか、相手から応答が返っているのか、RSTで切られていないか、TLSのハンドシェイクのどこで止まっているかをパケットそのもので確かめれば、責任範囲が明確になります。「host api.example.com and port 443」程度のフィルタを書いて流すだけで、多くの誤解が一瞬で解けます。
DNSの不調調査も典型的な使い方で、port 53でキャプチャすればクエリと応答、NXDOMAINや遅延の有無が即座に見えます。MTU不整合によるフラグメント問題、Path MTU Discoveryの失敗、SYN-ACKが返るのにアプリには届かないといった層をまたぐ事象も、tcpdumpでパケットを取ってWiresharkに食わせれば、原因がインフラ・OS・アプリのどこにあるかを切り分けられます。障害対応中は-wでpcapに保存し、後でWiresharkや解析チームに渡すパターンが定番です。
Wireshark・tshark・eBPF系との位置関係

GUIで詳細を見るならWiresharkが圧倒的に強く、TLSセッションの再構成、HTTP/2のストリーム展開、プロトコルごとの色分けやフォロー機能は他に代えがたいものがあります。しかしWiresharkは本番サーバーには入れにくく、またGUIの操作前提なのでリモート作業には向きません。そのため「本番ではtcpdumpで-wしてpcap収集、ローカルに転送してWiresharkで開く」という二段構えが定石になっています。tsharkはWiresharkのCLI版で、自動化向きです。
近年はeBPFを利用したpwru、bpftrace、Cilium HubbleなどKernel計測寄りのツールも増え、L7プロトコル単位のメトリクスを低オーバーヘッドで取れるようになりました。とはいえ、まず「何が起きているか」を肉眼で確認する道具としてのtcpdumpの地位は揺らがず、ネットワークエンジニアやSREにとって、覚えておけば一生使えるベース技術として残り続けています。
まとめ
tcpdumpはパケットキャプチャの祖先であり、libpcapとBPFという基盤を世に送り出した功労者です。現代の華やかな解析ツールはほぼ全てこの仕組みの上に立っており、サーバーでネットワーク不調を切り分けたい人にとって学習コストの低い最初の一手であり続けています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント