こんにちは、木佐貫です。
唐突ですが僕は「原理」とか「本質」って言葉が好きです。(なんの告白だ!)
子供の時から漠然とですが、
「世の中は実はシンプルな法則で満ちていて、複雑極まりない世の中も実はシンプルに説明できてるのじゃないのかな」と考えていました。
そして、そんな究極の法則ってやつがきっとあるはずという気持ちから学生時代は物理学を専攻していました。
世の中を支配する究極の法則
それにとてつもないエレガントさやロマンを感じちゃっていたわけです。
(プログラムを書く人は「短く簡潔なコード」ほど美しいと感じるでしょ? あれみたいな感じです)
社会に出てそんな気持ちも忘れて“現実的”な仕事に没頭する中で、久しぶりに「原理」とか「本質」が大切だよね、ってことを思い出すきっかけになったのがネットワークのパケットキャプチャーです。
普段当たり前のように使っているインターネットの具体的な中身の観察。
インターネットを「川」に例えるなら、「水」の動きを観察するって感じでしょうか。
本日はインターネットという「川」を観察できるWireSharkというツールのお話。
さして面白い話でもなく、技術屋のメモとしてどうぞ。
WireSharkで通信量を測定してみる
WireSharkを使うのは初めてでしたが、パケットキャプチャーの老舗ソフトみたいなものなのですぐに測定する方法も分かるだろうと思っていたのですが、ドンピシャなサイトも見つからず、試行錯誤したのでその内容をご紹介します。
試行錯誤の結果なのでもっと良い方法が見つかれば追記しますね。
■WireSharkのインストール、初期設定
インストールや初期設定についてはいろいろな紹介サイトがありますのでそちらにお任せします。
例えば以下のサイトなんかがわかりやすかったです。
http://beginners-network.com/wireshark.html
■通信量の測定
で、通信量の測定ですが、統計した情報の表示やグラフ表示機能があり、そちらから通信量を知ることができそうです。
しかし、これは測定結果全体の統計を表示しているだけで、狙った通信以外の通信も合算されています。
したがって、
1.測定範囲の期間を絞る
2.パケットをフィルターし、測定対象の通信に限定する。
3.上記の絞込を行った結果の統計情報を表示する
というアプローチを取ることにしました。
1.測定範囲の期間を絞る
まず、パケットキャプチャーをしつつ、想定したい通信を行います。
今回は高画質の動画を配信した場合のネットワーク負荷を測定したかったため、サンプル動画を配信しました。
このとき、配信開始~配信終了の時間をメモしておきます。
測定データを流し終わったらキャプチャーは止めてしまって構いません。
次に、測定データの開始と終了時のパケット番号を調べます。
[Statistics]->[IO Graph]をクリックすうと、いま測定した通信がグラフ化されます。
[View as time of day]にチェックを入れると横軸を時刻で表示してくれて便利です。
また、グラフをクリックすると該当するパケットが選択されます。
想定データの開始、終了時間や配信サーバのIPアドレスなどから開始と終了付近のパケット番号をメモします。
2.パケットをフィルターし、測定対象の通信に限定する。
WireSharkは様々なフィルター機能が用意されています。
例えば、「あるIPアドレスからの通信で、パケット番号(frame number)の○番~□番までを表示」みたいなことが簡単にできます。
まぁ、難しいことは僕はまだわからないので取り敢えず「パケットを右クリック」->「Prepare as」->「and Selected」をクリックしてみてください。
自動的にフィルタールールが登録されます。
WireSharkのこの機能が秀逸なのが、「No」列を右クリックするとパケット番号(frame number)でのフィルタールールを追加してくれ、「Source」列を右クリックして追加するとSourceIPでのフィルタールールを追加してくれる点です。
具体的には今回は以下のフィルタールールになりました。
((frame.number == 3195) && (frame.number == 12653)) && (ip.src == 74.125.12.115)
ただ、これだとフィルターを適用しても何も表示されません。
これは「frame.numberが3195かつ12653のパケットを表示する」という意味になっており、そんなパケットがないのでなにも表示されなくなってしまします。
なので、以下の赤字のように修正します。で「Apply」をクリックします。
((frame.number >= 3195) && (frame.number <= 12653)) && (ip.src == 74.125.12.115)
こんな感じで、右クリック->フィルター登録+微調整をすると細かなフィルターの文法を覚えなくてもなんとなくで使えます。
3.上記の絞込を行った結果の統計情報を表示する
上記の手順で通信量を測定したいデータのみを表示することができました。
あとは統計情報を表示するのですが、その前に「Edit」->「Make All Displayed Packets」をクリックします。
すると今表示されているパケットすべてにマーキングが施されます。
この状態で「Statistics」->「Summary」をクリックします。
すると以下のとおり、「キャプチャー全体」「表示されているパケット」「マーキングされたパケット」についての統計情報が表示されます。
表示される統計情報は以下のものです。
・パケット数
・キャプチャーした時間(秒)
・平均パケット数(数/秒)
・平均パケットサイズ(Byte/個)
・バイト
・平均バイト数(byte/sec)
・平均bps(Mbps/sec)
マーキングしなくてもフィルターをしたらDisplayedに表示されるのですが、マーキングは色々と使えるテクニックなのでご紹介しました。
あと、流れているパケットを見ているだけでも面白いですよね
(そんなやつはいないか(;・∀・)
お役に立てたら幸いです。
ありがとうございました!