3 Minutes NetWorking
No.36

3Minutes NetWorking

第36回レイヤ3 ICMP(traceroute)

■ ICMP Type 11

ネット助手

探信音(ピンガー)ー!!

インター博士

おいおい。

ネット助手

浮上角(アップトリム(20°から最大!! 前部タンク全ブロー、機関全速!!

インター博士

まあ、なんにしても潜水艦は空を飛ばないよな

ネット助手

いやまぁ、そうですけど。
ノリが悪いですよ、博士。

インター博士

ふむ。ネット君に付き合っていては、容量がいくらあっても足りんのでな。
メガバイト単位のHTMLファイルなど誰も見たいとは思わないだろう。

ネット助手

またリアルな話ですね。
自分だって、悪ノリすることあるのに…。

インター博士

(ギロリ)

ネット助手

いえ、はい、なんでもないです…。

インター博士

うむ、ではICMPの話を続けよう。
今回は、タイプ11の話だ。

タイプ説明意味
0Echo ReplyEcho応答
3Destination Unreachable宛先到達不能
5Redirect最適経路通知
8Echo RequestEcho要求
11Time Exceeded時間超過によるパケット破棄

[Table35-01:ICMPのタイプ]

ネット助手

タイプ11というと、Time Exceededですね。

インター博士

[exceed]は「超過する、上回る」だから。
そのまま時間超過という意味になるな。

ネット助手

上の表の説明では、「時間超過によるパケット破棄」となってますが。

インター博士

うむ。
送ったパケットは時間切れなので破棄しました」という事を送信元に伝えるメッセージが、Time Exceededなのだよ。

ネット助手

時間切れを伝える?
大体「時間切れ」ってなんです?

■ TTL

インター博士

「時間切れ」は「時間切れ」だ。
例えば、ルーティングループが発生してしまったとする。そうなると、そのループに巻き込まれたパケットは永遠にそのループを回り続ける。

ネット助手

永遠に、ですか。

インター博士

他にも、障害のせいで宛先を見つけられず、ずーっとルータ間を転送される羽目になるパケットも存在する。
これは、帯域のムダでしかない。

ネット助手

そうですね。
ぐるぐる回ってるだけで消えないパケットが存在するんですよね。邪魔モノですよね。

インター博士

うむ。
なのでパケットはある一定時間以上ネットワーク内に存在したら破棄される、というお約束が作られている。この一定時間のことを「TTL」という。

ネット助手

たいむ、とぅ、らいぶ?
住む時間?

インター博士

生存時間と訳してくれ。
IPヘッダは以下の通りだったな。

ビット数名前説明
4バージョンIPのバージョン
4ヘッダ長IPヘッダの長さ
8サービスタイプ上位プロトコルによって割り当てられた重要度
16データ長IPヘッダとセグメント・データを合わせた長さ
16ID大きいデータを分割した際につける識別番号
3フラグ分割する際に使用するフラグ
13フラグメント・オフセット分割を繋ぎあわせる時に使う
8TTLパケットの生存時間。無限ループを防ぐ
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をしてみた場合、以下のような結果がでる。

tracert結果

[Figure36-04:tracert結果]

インター博士

Tracing route to 192.168.0.1 over a maximum of 30 hops
192.168.0.1へのルートのトレースをします。最大30ホップまでです。

ネット助手

ほっぷってなんです?

インター博士

ホップとは中継するルータの数だ。
30個までの中継ルータを数えます、という意味になるな。

ネット助手

そういえば、ルーティングプロトコルのメトリックでもそんな言葉がでてましたね。

インター博士

うむ、それと同じだ。
では、結果画面をもう少し見てみよう。

tracert結果詳細

[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アドレス(宛先ドメイン名)

pathping

[Figure36-06:PathPing]

インター博士

赤枠の中が、結果表示画面だ。
左から、ホップ、返ってくるまでの時間、ホストと宛先までの間で失われたパケット数、そのルータとルータ間で失われたパケット数、ルータのアドレス、となる。

ネット助手

なんかtracerouteと変わらない気がしますが。

インター博士

いや、重要なポイントがある。
それは以下の赤枠の部分だ。

pathping詳細

[Figure36-07:PathPing詳細]

インター博士

ここには、上のアドレスのルータ(ホスト)と、下のアドレスのルータ(ホスト)間での接続状況がわかる

ネット助手

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はクラッカーにも情報を教えてしまうことがあるため、その管理には注意が必要である。

3 Minutes NetWorking No.36

管理人:aji-ssz(at)selene.is.dream.jp