2008年2月29日

tcpdumpのいろは(1)

/.Jのokky の日記に書いたようにtcpdumpの基本についてお客様に説明するためにまとめた。結局その資料は使えなかったわけではあるが、まとめたおかげでイヤンなバグを発見する事ができた。

で、そのままだともったいないので、まとめたものについて再度まとめなおしてここに掲載してみる事にした。もしかしたら他の人の役に立つかもしれないし、最低限でも自分の役には立つから (^^;)。同じ資料を作り直す事自体はともかく、構成から考え直すのはしんどいので。それに運がよければ、ここへのポインタだけ張っておけばOKとかいう手抜きができる場合も…。

さて、この話は大きく3つに分ける事ができる。
  1. tcpdumpの物凄く大雑把な基本原理。どうやってパケットはキャプチャされているのか、どういう制限があるのか、等。ようするに基本データが持っている特性を理解するって事ですね。あと、どういう風に取るべきかとかも。
  2. tcpdumpの結果の解析方法。ただし、今は Wireshark というとても賢いソフトがあるので、そいつに押し付けられる部分は説明しません。
  3. multi sessionを利用するプロトコルを解析する上での注意点。まぁ、よく知られている例として FTP なんぞを。多分、読んでいる分には当たり前の話に聞こえると思いますが、たまに忘れるので。


もうすでに出てきたが、Wireshark程度は扱えるようになっていることを前提とする。どうもWindows版のWiresharkにはフィルターロジック周りに微妙なバグがあるんじゃないか…と思うことがあるが…同じロジックを Linux 上の Wireshark に与えたときと結果が違うし…その辺りはあまり深く突っ込むつもりは無い。細かい話は確か何冊か Wireshark の使い方に関する本が出ているので、そちらを参照する事。ただし、内容に関しては保障しない。まだ読んでいないので。

Wiresharkはものすさまじくメモリ(仮想アドレス)を消費する。Windowsの32bit版ではあまり大きなキャプチャファイルの解析はできないだろう。64bit版OS…Linuxとか…が動いている環境を用意し、その上で 64bit版バイナリの Wireshark を利用する事をお勧めする。editcapとかを使って、キャプチャファイルを一旦分割し、tshark を使ってそれぞれにフィルタをかけ、最後に mergecapを使って結合しなおす…というノウハウは説明しない。ただ、この場合も結局テキストコンソールの環境がリッチな Linux の方が便利なので(でなければ、cygwin とかね)、やはりそれ系の環境を整えておく事をお勧めはする。


Ethernetの動作原理だの、ルーティングアルゴリズムだの、そういうことは説明しない。実はパケットをキャプチャする上でこれらの知識は必須なのだが、対象があまりにも広大すぎる上に、殆どの人にとって使う知識はその中のごく一部だから。
ただし、殆どの人が使う共通の項目がある、という意味ではない。AさんとBさんはそれぞれが全体の 0.1%ぐらいしか必要としないが、重なる部分は殆ど無い、と言う意味だ。これは、必要な知識のうち大半が Cisco とその他、WAN と LAN の違い、などに起因するからで、そんな環境を個人で持っている人は、こんなドキュメントは読む必要すらないからだ。

最後に。「これはうちの話じゃないか?!」と思う人がいるかもしれないが、完全に気のせいです。ネットワーク障害と言うのは、はっきりいうとどこでも、ここでも、そこでも同じように起こるもんです。もう一つついでに言うと、機材が分散しているためでしょうか、複数の機器間で設定が破綻して通信がおかしくなる、というケアレスミス・人的ミスはその道のプロのかたがたの環境の方が頻繁に起こるぐらいです。パケット解析を必要とする状況というのはそんなものです。

では、行ってみることにしましょう。

2008年2月17日

キターーーー

きたきたきた、来ましたよ。

久しぶりの大ヒットの予感。NHKが来年受信料を払って欲しいと思うなら、今年の紅白歌合戦にJEROを出すのはもう必須でございましょう。

出せないなら、受信料を必要としなくなるレベルまで、放送を縮小していいから。つーか、教育テレビとニュースだけで十分だ、君らは。2チャンネルも占有する必要なし。ハイビジョンだの何だのと言った研究もする必要なし。結局君達が研究したアナログハイビジョンはゴミでしかない事が世界的に証明されたわけだし。税金ですでに半分以上支払ってるんだから、それだけで十分まかなえる規模になりなさい。

嫌ならこいつを紅白に出すのジャーーーーー。

2008年2月6日

桃を食べよう・辞書を引こう

そう言っていた人がいた。

明文術という本を読んだ。文章を判りやすくするという視点に立って、どう書くべきか、注意点はどこか、間違いやすいのはどういうパターンかをきちんと書いてある優れた本だ。はっきり言って、ここ3年ぐらいに読んだ「文章の書き方」本の中で No.1 だ。

この本が唯一指摘を忘れているのが辞書を引けという一点だ。

文章が下手な人にはいくつも問題点があるが、その中に
単語の意味を判っていない
と言うのがある。わかりやすく書こうと当人は努力しているつもりなのだろうが、そもそも使っている単語の意味を間違えているのでは、意味は伝わらない。それなのに「忙しい」とかそういう屁理屈をつけて、辞書を引かないのだ。お前が忙しいのは辞書を引かず、間違った意味の単語を間違って使っているせいで、お前がこちらの意図を捻じ曲げるからだと、100億年程 滝壺の底に押し込めて説教してやりたいぐらいだ。

最近こんな事例があった。

お客様の所で障害が起こった。お客様は弊社製品の性だと考えたが、tcpdump等の解析結果とswitch の設定は、お客様側のネットワーク設定の不備を示していた。そこで、条件を変えてテストをする事になった。

弊社側の技術者は
再現性のあるテストを行ってください
と繰り返し書いてきた。しかし、弊社の担当官がこれを
テストをして事象を再現させてください
と勝手に書き直していた。判る人は判るだろうが、前者と後者は言っている事が全然違う。

前者はテスト結果として障害が起こった条件と起こらなかった条件を見比べた場合に、何が主要な制御要因か判るようにしてくれ、と言う意味だ。条件の比較によって弊社製品に問題が無い事が示せるならばそれはそれでよい。逆に弊社製品に問題があると判った場合は再現テストを弊社側で行い、製品内部の何が原因なのか突き止めて障害が起こらないようにする方法を見つける事もできる。そのためにも、条件をきちんと記録し、かつその条件をなんどでもリプレイ可能なものにしてくれ、と言っているわけだ。

しかし、後者は「事象が起これば良い」だけだ。なにが原因なのか分析できる必要は無いし、条件を同時に複数変えてもかまわない。これでは、ネットワークの設定が悪かったのか、弊社製品が悪かったのかすら区別できない。このような条件で実験を繰り返しても、ただ時間を無駄に過ごすだけだし、そのための労力はすべてゴミにしかならない。参考情報が無いに等しいからだ。

「再現する」事と「再現性がある」事の違いを理解していないお客様担当が、後者を前者と勘違いして文章を書き換えた事によって、お客様がどれだけの被害をこうむったか…考えるだけでぞっとする。

意味が一意に決まるように文章を書けたとしても、それだけでは明文にはならない。オリジナルの文章があるならば、その文章が何を言っているのかをきちんと理解できなくてはいけないし、使われている単語についても自分勝手な解釈ではなく国語辞典に基づいた意味で解釈し、また記述しなくてはいけない。私文ならばともかく、お客様相手の、技術的な文章に関しては、用語が示す概念の共有を必要とするので
言葉は変化するものだ
などという寝言も却下だ。そういう寝言は正しい意味をきちんと説明できるようになってから言っていただきたい。

国語辞典では私は広辞苑をお勧めする。広辞苑は不正確だ、とかいろいろ言う人がいるが、この場合は全然構わない。そもそも国語辞典のお勧めを聞いている段階がナンセンスだからだ。

国語辞典について「これ」という意見を持っている人は、私に「お勧め」を尋ねたりはしない。お勧めを尋ねるのは、国語辞典をろくに引いた事がない人だ。そういう人は、まず広辞苑の厚みにビビッてもらう必要がある。ここで岩波国語辞典などのより薄くて軽い辞典に移動したら、その段階で論外。この人は内容ではなく「軽さ」と「薄さ」で辞典を選んだからだ。

国語辞典は「自分が知らない言葉」の意味を調べるためにある。あなたがどんな言葉を知らないのか、どうして国語辞典を引く前に判ると言うのか?? そう考えると「日常よく使う xxxx 語を厳選」など…余計なお世話である。その「厳選からもれた」単語が引きたかったらどうしろというのだ?? 2冊目、3冊目としてならばともかく、1冊目の国語辞典は量こそすべてである。この点において広辞苑は合格だ。無駄に分厚く、無駄に単語量が多い。これにビビッてはならないのだ。

あとは、入手しやすさが決定要因だ。広辞苑はほとんどすべての本屋で手に入れる事ができる。ある一軒で入手できなくても3軒以内で確実に手に入る。普段使わない単語の、枝葉末節な部分に間違いがあるなど、入手のしやすさに比べたら誤差だ。

一旦、辞典を手に入れたら、自分が知っていると思っている単語でも引いてみよう。意外と正しい意味を理解していなかった事に気がつくはずだ。その上で、この本に従って分祖hを書いてみよう。時間が掛かるかもしれないから、まずは短いものからで構わない。案外、簡単に書ける上に、その文書を使った仕事はそれまでのような突っかかりが無く、すいすいと進む事に気がつくはずだ。

それは、仕事がなかなか進まないのはあなたの文章が悪かった証拠、である。