2014/07/30

One ping only

レッド・オクトーバーを追え」を見たのはずいぶん昔の話ですが、その中でもずっと覚えているシーンで"One ping only"という台詞があります。
艦長が何かの呼びかけ(回頭せよとか交信せよとかそんなの)に応じず、静かに"One ping only."とだけ命令を出すシーンです。その後レッドオクトーバー号から"ピンー…"というソナー音が響くシーンに続き、なるほどまさにPingだなぁと子供ながらに思ったわけです。

このping、ネットワークの話では相手ホストまで通信が到達するかどうか確かめるコマンドで、ネットワークエンジニアだけでなくこの業界の人なら常識でしょう。
さて某所で
── pingが通ったのだからサービスは起動しているはず
── え?pingってネットワークが生きてるかだけでポート番号とかサービスは関係無いんじゃないの?
という会話を聞いたことがあります。確かにpingはポート番号のあるサービスに対して死活確認は出来ないような気がしてました。しかし切迫したトラブルの場で「実際どうなんだ!」と聞かれると確信を持って答えられません。
そこできっちり調べると、PingはIPで通信し、ICMPのType8、Echo要求を送るコマンドということです(Echo応答はType0です)。
IPもICMPもL3のプロトコル、ということ。ICMPはIPの上位プロトコルなのでL4?と思いそうなのが少し混乱します。確かにパケットのデータ構造的にはL4のTCPと同じような位置にICMPがあるはずですが、とにかくIP+ICMPでL3の通信となるらしいです。なのでL4のTCPの概念であるポート番号だとかは認識できないんです。

次に似たような話を聞いたら
── pingはL3のコマンドだからネットワークのリンクアップしか確認できませんよ
とカッコいく横槍を入れてやりましょう。

ちなみにIPアドレス+ポート番号に到達するか確認を行うにはWindowsなら「portqry」というツールを使うと良いらしいです。

Amazon EC2を使ってみました。仮想マシンを作って起動し、IPに対してPingを打つといきなりPingが通りません。
でもSSHは繋がります。
何でかというとデフォルト設定がSSH用のTCPポート22番だけ許可で、なんとICMPは遮断しています。
もちろん設定でICMPを許可すればPingも通ります。
上記の会話と逆でPingが通らないのにSSHには繋がるという状況にちょっとびっくり。

0 件のコメント:

コメントを投稿