## 概要
tcpdump はコマンドラインのパケットキャプチャツールであり、[[libpcap]] を基盤エンジンとする。[[Van Jacobson]] 自身が tcpdump を開発しており、[[BPF]] はその実装需要から生まれた側面がある。BPF は tcpdump のフィルタ式を高速実行することを主目的として設計された。(Source: [[@1993__USENIX__The BSD Packet Filter A New Architecture for User-level Packet Capture]])
## BPF/libpcap との関係
BPF はカーネル内でパケットフィルタリングを行うアーキテクチャであり、ユーザ空間がフィルタ式をコンパイルしてカーネルへ渡し、カーネルが検証・実行する分割モデルを確立した。[[libpcap]] はこの `bpf(4)` インターフェースを抽象化した可搬性ライブラリで、tcpdump はその上に構築されている。(Source: [[@1993__USENIX__The BSD Packet Filter A New Architecture for User-level Packet Capture]])
## 運用上のオーバーヘッド
『詳解 システム・パフォーマンス 第2版』第10章は、tcpdump 等によるパケットキャプチャは CPU・ストレージへのオーバーヘッドが高いため観察的分析としては最後の手段であるとする。ネットワークのカーネルコードパスは毎秒数百万ものパケットを処理するために余分なオーバーヘッドに敏感であり、tcplife(8) のような状態変化イベントに基づく BPF ツールの方がパケットごとのスニッフィングよりオーバーヘッドが大幅に低く、本番環境で継続実行できるとされる。ツールメソッドの出発点としては、tcpdump は短時間のみ使うことが推奨される。Wireshark は tcpdump のダンプファイルをインポートしてグラフィカルに分析できる。(Source: [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]] §10.5.1, §10.5.6, §10.6.9, §10.6.14)
## 関連
- ソース: [[@1993__USENIX__The BSD Packet Filter A New Architecture for User-level Packet Capture]] / [[@2023__OReillyJapan__詳解 システム・パフォーマンス 第2版 - Chapter 10 ネットワーク]]
- 概念: [[BPF]]
- エンティティ: [[libpcap]] / [[Van Jacobson]]