tcpdumpでネットワーク状況を知る!

2008年12月5日(金)
津川 知朗

tcpdumpの活用例

 tcpdumpは、実際にはどのような場面で活用されるのでしょうか。筆者の経験では、主に以下の2つの場面において活用されてきました。

・ネットワーク通信を行うプログラムのデバッグや設定の確認
・ネットワークプロトコルの解析

 プログラムのデバッグや設定の確認などは、通常、プログラムや機器が出力するデバッグ情報などのログを基にして、発生している問題の原因の特定を行います。しかし、ネットワーク通信を行うプログラムやネットワーク機器の場合、それらのログから得られる情報だけでは原因を特定することができず、どうしても実際にネットワーク上を流れる通信パケットの様子を観察したい場合があります。

 例えば、筆者の経験ではNetwork Address Port Translation(以下、NAPT)機器の初期設定を行っている時に、通信がうまくいかない問題が発生したことがありました。この時、NAPT機器が出力するログからは原因を特定することができなかったため、適当なWebサーバーと通信を行い、そのWebサーバ上でtcpdumpを実行してパケットの流れを観察しました。その結果、NAPT機器でのグローバルIPアドレスへの変換に問題があるため、サーバと正常に通信を行うことができていないことを確認し、該当個所の設定を修正しました。

 もう1つの実例を紹介しましょう。ネットワーク通信を行うプログラムを使用している際に、あるTCPのオプションを有効にした場合と無効にした場合、アプリケーションプログラムの挙動が大きく変化すると言う現象が見られたことがありました。そこで、問題となっているTCPオプションの有効/無効のそれぞれの場合において、tcpdumpをあらかじめ実行した状態でプログラムを動作させ、プログラム間で行われている通信内容を閲覧してこの現象の原因を調査しました。

ネットワークプロトコルの解析

 tcpdumpはネットワークプロトコルの解析を行う際にもしばしば活用されます。TCP、UDP、HTTP、FTPなど標準的なネットワークプロトコルの挙動は、Request For Comment(RFC)で確認することができます。しかし、細部(ネットワーク通信を行う上では、通常あまり問題にならない個所)に関しては、実装依存であることも多く、特定のプロトコルに修正を加えて通信速度などの性能の向上を図る場合には、実際に通信が行われている様子を観察することが不可欠となります。

 例えば、筆者の経験ではTCPの通信速度の性能を改善する方法について検討する際に、現在広く使用されているいくつかのTCPバージョンを用いて通信し、送信ホストでのデータパケットの送信、およびACKパケットの到着の様子を観察しました。そして、それらの結果から広帯域ネットワークにおいて通信速度を低下させている原因を調査し、その解決策を検討しました。

 このように、tcpdumpはさまざまな場面で活用することができます。しかし、tcpdumpは通信内容をすべて閲覧することができるという性質上、しばしば他人の通信の盗聴などに悪用されます。メールの送受信や制限のかかっているWebページの閲覧、Webショッピングで使うパスワードやクレジットカード番号のようなユーザにとって重要な情報に関する通信のパケットであっても、サーバとユーザの通信方法によっては、tcpdumpを使えばそれらの情報を容易に取得することができてしまいます。したがって、tcpdumpを使用する際には他人の通信内容を盗聴することにならないよう十分に注意して使用する必要があります。

大阪大学
大阪大学 大学院情報科学研究科。研究の専門分野はTCP/IPネットワークで、C++プログラマー。現在の主な活動としては、オープンソースソフトウエアとして、ネットワーク関連のC++ライブラリの実装、公開を行っている。http://sourceforge.jp/projects/clxcpp/ http://d.hatena.ne.jp/tt_clown/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています