## 概要 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]]