■ ICMP Type 11
おいおい。
まあ、なんにしても潜水艦は空を飛ばないよな。
いやまぁ、そうですけど。
ノリが悪いですよ、博士。
ふむ。ネット君に付き合っていては、容量がいくらあっても足りんのでな。
メガバイト単位のHTMLファイルなど誰も見たいとは思わないだろう。
またリアルな話ですね。
自分だって、悪ノリすることあるのに…。
(ギロリ)
いえ、はい、なんでもないです…。
うむ、ではICMPの話を続けよう。
今回は、タイプ11の話だ。
タイプ | 説明 | 意味 |
---|---|---|
0 | Echo Reply | Echo応答 |
3 | Destination Unreachable | 宛先到達不能 |
5 | Redirect | 最適経路通知 |
8 | Echo Request | Echo要求 |
11 | Time Exceeded | 時間超過によるパケット破棄 |
[Table35-01:ICMPのタイプ]
タイプ11というと、Time Exceededですね。
[exceed]は「超過する、上回る」だから。
そのまま時間超過という意味になるな。
上の表の説明では、「時間超過によるパケット破棄」となってますが。
うむ。
「送ったパケットは時間切れなので破棄しました」という事を送信元に伝えるメッセージが、Time Exceededなのだよ。
時間切れを伝える?
大体「時間切れ」ってなんです?
■ TTL
「時間切れ」は「時間切れ」だ。
例えば、ルーティングループが発生してしまったとする。そうなると、そのループに巻き込まれたパケットは永遠にそのループを回り続ける。
永遠に、ですか。
他にも、障害のせいで宛先を見つけられず、ずーっとルータ間を転送される羽目になるパケットも存在する。
これは、帯域のムダでしかない。
そうですね。
ぐるぐる回ってるだけで消えないパケットが存在するんですよね。邪魔モノですよね。
うむ。
なのでパケットはある一定時間以上ネットワーク内に存在したら破棄される、というお約束が作られている。この一定時間のことを「TTL」という。
たいむ、とぅ、らいぶ?
住む時間?
生存時間と訳してくれ。
IPヘッダは以下の通りだったな。
ビット数 | 名前 | 説明 |
4 | バージョン | IPのバージョン |
4 | ヘッダ長 | IPヘッダの長さ |
8 | サービスタイプ | 上位プロトコルによって割り当てられた重要度 |
16 | データ長 | IPヘッダとセグメント・データを合わせた長さ |
16 | ID | 大きいデータを分割した際につける識別番号 |
3 | フラグ | 分割する際に使用するフラグ |
13 | フラグメント・オフセット | 分割を繋ぎあわせる時に使う |
8 | TTL | パケットの生存時間。無限ループを防ぐ |
8 | プロトコル | 使用している上位プロトコルの番号 |
16 | ヘッダ・チェックサム | IPヘッダのエラーチェック |
32 | 送信元IPアドレス | 送信元の論理アドレス |
32 | 宛先IPアドレス | 宛先の論理アドレス |
32 | オプション | なくてもよい。 |
[Table20-02:IPヘッダ]
このように、IPヘッダ内に8ビット(1バイト)の領域がTTLに取られている。
これは生存時間と名前がつけられているが、時間ではない。
時間ではない?
じゃあ、なんなんです?
TTLで表される数字は、時間ではなく通過ゲートウェイ数だ。
TTLで表された数だけ、ゲートウェイを通過できる。
??
ゲートウェイって?
まあ、ルータと考えてもらって間違いない。
TTLが2だったばあい、そのパケットは2個先のルータまで届くのだよ。
[Figure36-01:TTL]
ははぁ。
ルータを通過する度に1ずつ減って、0になるとその場で破棄されるんですね。
そういうことだ。
生存「時間」と言っても、何秒とか何ミリ秒とかではなく、「通過ルータ数」だ、という点を間違えないように。
了解です。
そして、TTL=0になりパケットを破棄するルータは、送信元にICMP タイプ11を送り返す。
「時間切れによりパケットを破棄しました」と伝えるためにだ。
なるほど。
だから[Time Exceeded]なんですね。
つまり、以下のような動きをするのだよ。
[Figure36-02:Time Exceeded]
タイプ3[Destination Unreachable]やタイプ5[Redirect]と似てますね。
■ traceroute
このタイプ11を使ったネットワークのチェック用のコマンドがある。
ネットワークチェック用のコマンド?
前回でてきた、pingみたいなのですか?
そうだ。
tracerouteというコマンドだ。
とれーするーと?
ルートをトレース(たどる・追跡する)?
うむ、その通り宛先までのルートを教えてくれるコマンドだ。
正確には、宛先に届くまでに経由するルータを教えてくれる。
ははぁ。
宛先に届くまでに、どのルータを通っていくか、を教えてくれるんですね。
うむ。
以下のような動作を行う。
[Figure36-03:Traceroute] ▼
ははぁ。
意図的にエラーメッセージ(時間切れ)をもらい、それを表にしていくんですね。上手くできてるなぁ。
うむ。
これによりどのルートをたどっていったかがわかるわけだ。
なるほど。
では実際に、Windowsでのコマンドを教えよう。
- c:\> tracert 宛先IPアドレス(宛先ドメイン名)
ふむふむ。
例えば、192.168.0.1宛にtracerouteをしてみた場合、以下のような結果がでる。
[Figure36-04:tracert結果]
Tracing route to 192.168.0.1 over a maximum of 30 hops
192.168.0.1へのルートのトレースをします。最大30ホップまでです。
ほっぷってなんです?
ホップとは中継するルータの数だ。
30個までの中継ルータを数えます、という意味になるな。
そういえば、ルーティングプロトコルのメトリックでもそんな言葉がでてましたね。
うむ、それと同じだ。
では、結果画面をもう少し見てみよう。
[Figure36-05:tracert結果詳細]
枠で囲まれた部分だが、Echoを送ってから、Exceededが返ってくるまでの時間だ。
上の画面の場合、10ミリ秒以下、という意味になる。
3つあるのは?
tracerouteは、3回のEcho要求を送る。
なので、それぞれの返ってくる時間を示しているのだな。
ははぁ。
では、後ろの192.168.0.1と下線があるのは?
そこの部分は、Echo応答もしくはExceededを返してきたルータ・ホストを示す。
この場合、192.168.0.1が返してきた、という意味になる。
なるほど。中継したルータがわかるんですね。
うむ。例えば。
- Tracing route to 172.16.10.1 over a maximum of 30 hops
- 1 <10ms <10ms <10ms 192.168.0.1
- 2 14ms 13ms 14ms 192.168.100.254
- 3 110ms 124ms 108ms 172.16.80.2
- 4 112ms 128ms 114ms 172.16.10.1
- Trace complete.
上のような結果が出た場合。
「4」は宛先ホストなので、1〜3の3つのルータを経由して宛先にたどり着いたことがわかる。
192.168.0.1、192.168.100.254、172.16.80.2の3つですね。
うむ。
さらに、Time Exceededが返ってくるまでの時間を見てみると。
「3」の所が遅いことがわかる。
そうですね。
そこだけ3ケタになってますものね。
つまり、そこがボトルネックになっていることがわかるわけだ。
このようにtracerouteは、ネットワークの状態を調べることもできる。
なるほど。
■ pathping
もう1つ、コマンドを紹介しよう。
それは、pathpingというコマンドだ。▼ link
ぱすぴん?
うむ。
パス、つまりルートを調べるtracerouteとpingを組み合わせたコマンドだ。
へぇ。
そりゃ便利なコマンドですねぇ。
そうだな。
だが、Windows2000とXPでしか使えないコマンドなので、注意が必要だ。
- c:\> pathping 宛先IPアドレス(宛先ドメイン名)
[Figure36-06:PathPing]
赤枠の中が、結果表示画面だ。
左から、ホップ、返ってくるまでの時間、ホストと宛先までの間で失われたパケット数、そのルータとルータ間で失われたパケット数、ルータのアドレス、となる。
なんかtracerouteと変わらない気がしますが。
いや、重要なポイントがある。
それは以下の赤枠の部分だ。
[Figure36-07:PathPing詳細]
ここには、上のアドレスのルータ(ホスト)と、下のアドレスのルータ(ホスト)間での接続状況がわかる。
?
つまり、途中のルータ間での情報も収集できる、という点がこのコマンドの強みなのだよ。
tracerouteはあくまでも、送信元とそのルータ間での情報しか手に入らない。
なるほど。
確かに便利ですね。
■ ICMPの功罪
さて、前回のping、今回のtraceroute、pathpingでネットワークの状態を確認できることはわかってもらえたと思う。
はいpingは宛先との接続状況を。
tracerouteでは、ルートの状況がわかりますよね。
うむ。
確かにこれらは非常に便利なコマンドであるし、使って手に入った情報も非常に有益だ。
ですね。
だが、これらの情報は、クラッカーのアタックにも役に立つ、ということも事実だ。
くらっかーのあたっく…。
悪用されるってことですか?
うむ、そうだ。
例えば、ping。pingを使うことによって、そのIPアドレスのホストが存在する/しないが判別する。
しますね。
たったそれだけの情報でも、ヘタをすると足がかりにされてしまう危険性もある。
かなり大袈裟に感じるかもしれないが、セキュリティの為には存在することを知られない、のが一番だからな。
知らない人間には攻撃しようがないですからね。
うむ。さらに、tracerouteの方が問題だ。tracerouteはルータのIPアドレスを表示してしまう。
ルータに攻撃をされてしまうのはかなり致命的な障害を起こす可能性がある。
ルータはインターネットワークの中核ですからね。
よって、tracerouteを防ぐために、Time Exceededを返さない設定にしてあるルータや、そもそもICMPをルーティングしない設定にしてあるルータも多い。
ははぁ。
今回のtracerouteの画面写真でホップが少ないのも、私の使っているプロバイダのルータがTime Exceededを返さない・ルーティングしない設定にしてある(らしい)ためだ。
なるほど。
それは博士もお困りですね。
うむ。はっきりいって今回は、かなり困った。
ともかく、他にもICMP自体を使ったアタックもある。smurfと呼ばれるサービス妨害などがそうだ。
悪辣ですねぇ。
まったくだ。
なので、ルータの管理者は、ICMPの運用に注意する必要がある。
ICMPは便利だけど、悪い人にとっても便利ってことですね。
その通りだ。
さて、今回はここらでお終いにしよう。
はい。
ずいぶんと長かったレイヤ3も今回で一度終了だ。
一度ってことはまたでてくるんですか?
その可能性もある、ということだ。
次回は、レイヤ4の話をする前に今までの話を踏まえたうえで、TCP/IPモデルの話をする。
TCP/IPモデル…。
OSI参照モデルとは違うんですか?
それは次回のお楽しみだ。
了解です。
3分間ネットワーキングでした〜♪
- 潜水艦は…
-
漫画文庫版「沈黙の艦隊」9巻のニューヨーク沖海戦。「ナイアガラ・フォールズ」
燃える展開だけど、無茶なものは無茶。
- メガバイト単位の…
- ちなみに今までの「3分間」で最大は、前回の第35回で33KB。
- TTL
- [Time To Live]
- WindowsとUnixの違い
- 左図で説明しているWindows版tracerouteは、ICMPのEcho要求を送っていますが、Unix版tracerouteはIPパケットを送ります。
- Windowsでのコマンド
- Unixでは、traceroute IPアドレスというコマンドになります。
- pathping
-
あまり知られていないコマンドかと思います。
通常のpingやtracerouteと違いQoSのチェックも可能。
詳しい使い方は参考リンクを参照のこと。
- クラッカー
-
[cracker]
システムのセキュリティを破り、 不正にコンピュータに侵入してデータを盗んだり破壊したりする人のこと。
一般的にはハッカー[hacker]と混同されている。
- アタック
-
[attack]
攻撃。
クラッカーがシステムに対してクラッキングを行うこと。
- smurf
- 攻撃目標のIPアドレスで大量のpingを行い、攻撃目標に大量のecho応答を送りつけることによって、回線の帯域を大きく消費させる攻撃。
- サービス妨害
-
[Denial of Service:DoS]
直接目標に侵入する攻撃ではなく、その目標が行っているサービスを妨害する攻撃。
例えばWebサーバに対してこれを行い、ページの閲覧ができないようにするなど。
SYN Flood、smurf、ping of deathなどがある。
- ネット君の今日のポイント
-
- パケットが無限にネットワーク内を巡回しないよう、TTLという値が設定されている
- TTLは通過できるゲートウェイの数である。
- TTLが0になった場合、パケットは破棄される
- パケットを破棄したルータは送信元にICMPタイプ11[Time Exceeded]を送り返す。
- Time Exceededを使い、宛先までのルートを調べるコマンドがtraceroute、pathpingである。
- traceroute、pathpingを使い、ネットワークのボトルネックなどを調べることができる。
- ICMPはクラッカーにも情報を教えてしまうことがあるため、その管理には注意が必要である。
- 参考リンク
-
- Microsoft Windows2000 Server ドキュメントhttp://www.microsoft.com/japan/windows2000/▲