2008年4月20日

tcpdumpのいろは(2)

ひえぇえええ、すごく間が空いてしまった。

さてさて、tcpdumpだがまずはデータを取得しなくてはいけない。そう、tcpdumpの解析は「まずダンプが取れて何ぼ」なのだ。

で、最初に一言重要な事を

tcpdumpが気楽に取れると思うな

一例を挙げよう。1Gbpsのネットワークカードが1枚あって、そいつが通信しているさまを取得したいとする。どうやるのかはともかく、どういう原理かはともかく、それができるとしよう。

すると、1Gbpsなので、全力全開でデータ通信されると、1Gbps…つまり8秒で1Gbyteのデータが取れる計算になる。もちろん、実際はネットワーク利用効率の問題とか、そもそもパケットをキャプチャするソフトがそんなに早く動作するのか、とかいろいろ要因はあってそこまでのデータ増量にはならないのだが、それでも 10-12秒で1Gbyteの量にはなるのだ。

当たり前だが、HDDもその速度に対応しなくてはいけない。PCのバス(PCI-Expressとか xPCIとか)は、NICの流量とHDDの流量の両方を流せるだけの速度が必要になる。同様にメモリだってかなりの容量がないと瞬間風速に耐えられないし、そのメモリはかなり速くなくてはいけない…。なので、普通はEthernet Switchの高いのを間に噛ませて、パケット duplication (パケットを別のポートにもべたコピーで送る機能がある、高いスイッチを使うということだ)した上で、パケットキャプチャ専用マシンを用意する。

ちゃんとしたプロは*データ取得用に Raid0 を組んだり、SSD(Solid State Disk)つまり RamDiskの化け物を用意したりする。そうしないと意味のあるデータが取れないのだ。HDDの速度に引っ張られてNICの送受信速度が変化してしまい、結果としてtcpdumpを取得しなかった場合には起こっていた現象が起こらなくなった…と言うのでは本末転倒だ。
*) 「ちゃんとしたプロは」と言うということは、「ちゃんとしていないプロ」が世の中に満ち溢れていて、全然役に立たないデータを取ってきて「さぁ、見てくれ」と言う馬鹿者が多い事をも意味する。
つまり、こういう特別な環境が無い場合、disk cache がどうにか対処できる時間程度しかパケットキャプチャはできない事を意味する。かなりリッチな環境でも5分取れたら良い方だろう。5分程度、負荷がかなり軽い環境であっても数Gbyteのデータにはなる。

高速なHDD (USB2接続なんか論外だ)を、きちんとデフラグした上で(できればファイルシステムを再フォーマットするのが望ましい)、キャプチャ専用に準備して欲しい。


今回は別件が忙しいので、とりあえずここまでっ!!