図1 3台のルーターで四つのLANをつなぐ 各ルーターのルーティング・テーブルが正しく設定されていれば,ルーターを経由してPC1からPC2へパケットが届くはず。
図1 3台のルーターで四つのLANをつなぐ 各ルーターのルーティング・テーブルが正しく設定されていれば,ルーターを経由してPC1からPC2へパケットが届くはず。
[画像のクリックで拡大表示]
図2 ルーターの設定を間違ってしまった ルーターBのルーティング・テーブルの設定を間違い,LAN(4)がルーターAの先にあると登録してしまった。このとき,PC1からPC2へpingを打つとルーターAとルーターBの間でパケットが何度もピンポンのようにやりとりされるはずだ。このパケットはどうなってしまうのだろうか。
図2 ルーターの設定を間違ってしまった ルーターBのルーティング・テーブルの設定を間違い,LAN(4)がルーターAの先にあると登録してしまった。このとき,PC1からPC2へpingを打つとルーターAとルーターBの間でパケットが何度もピンポンのようにやりとりされるはずだ。このパケットはどうなってしまうのだろうか。
[画像のクリックで拡大表示]
図3 見慣れないメッセージが表示された PC1からPC2へpingを打つと,見慣れないメッセージが表示された。
図3 見慣れないメッセージが表示された PC1からPC2へpingを打つと,見慣れないメッセージが表示された。
[画像のクリックで拡大表示]
図4 ピンポン状態になったパケットをキャプチャしてみたら 図2の構成でLAN(2)を流れるパケットをキャプチャしたら,合計512個のパケットが流れていた。このパケットの中身を詳しく見ると,TTLの値が1ずつ減っていた。また,最後のパケットはルーターBから送信元パソコン(PC1)へのICMPの時間超過メッセージ・パケットだった。
図4 ピンポン状態になったパケットをキャプチャしてみたら 図2の構成でLAN(2)を流れるパケットをキャプチャしたら,合計512個のパケットが流れていた。このパケットの中身を詳しく見ると,TTLの値が1ずつ減っていた。また,最後のパケットはルーターBから送信元パソコン(PC1)へのICMPの時間超過メッセージ・パケットだった。
[画像のクリックで拡大表示]


若手部員 貴子さん
  前回はLANスイッチ同士をループ状につなぐと,LANがダウンしてしまうことを確認したわね。でも,インターネットはループになっているはずよね。大丈夫なのかしら。  

若手部員 宇田くん
  たしかに,インターネットだと目的地にパケットが到達するまでに複数の経路があったりするから,ループになってIPパケットがぐるぐる回りそうだよ。調べてみよう。  


宇田:インターネットでは,物理的にはループができているように見えるよ。

貴子:ループができているなら,パケットがぐるぐる回る現象が発生してもおかしくないわね。

宇田:物理的にループができていても,ルーターがきちんとパケットをあて先に転送してくれるから,問題は起こらないよ。

貴子:宇田くん,さえているわね。

宇田:そもそも,インターネットは米国が軍事的なネットワークとして開発したんだ。もし,どこかの拠点や中継回線が故障しても,ネットワーク全体としては止まらず,動作を続けるように設計されているんだ。

貴子:インターネットは,複数の経路があるので,拠点や回線に障害が発生しても,通信を継続できるのね。でも,複数の経路があるということは,ループができるわけよね。

宇田:だから,ルーターがきちんと仕事をこなす必要があるんだ。ルーターは受け取ったIPパケットをあて先に向けて転送するんだ。

貴子:何か,今日の宇田くんは先生みたい。どこかで勉強したの?

宇田:ここだけの話だけれど,昨日,ある企業のルーターの設定をしたときに間違ってしまったんだ。

貴子:また,客先でミスしたのね。

宇田:あとでクレームがあって,特定のLANからインターネットへアクセスできないって言われたんだ。

貴子:どうしてそうなったの?

宇田:同じような設定ばかりで,気を抜いたら間違ったみたいなんだ。

貴子:そりゃあ,同じ企業だったら,同じようなアドレスばかりで間違うかも知れないけれど,プロなんだからダメじゃない。

宇田:それで急いで直しに行って,そのあと平謝りで・・・。おまけに,トラブル原因のレポートも書かされたんだ。

貴子:どうりで,詳しいと思ったわ。

インターネットはループが当たり前

 インターネットでは,あて先まで到達する経路が複数あったりする。つまり,配線形態としてはループになっている。このループ状態にあるネットワークで,あて先までIPパケットを届ける重要な仕事をこなすのがルーターである。宇田くんの説明をもう少し補足しておこう。

 ルーターに到着したIPパケットは,あて先IPアドレスを手掛かりに,目的地にたどり着く道順(経路)を探し出し,その方向にIPバケットを転送する。このときに,ルーターは経路を探すための経路制御情報の表,すなわちルーティング・テーブルを使う。

 ルーティング・テーブルには,あて先のアドレス,あて先ネットワークまでの距離,あて先へ向かう物理的な出入り口(インタフェース)などの情報が書かれている。これで,物理的にはループがインターネットにできていても,ルーターがIPパケットをあて先の方向だけに向かって転送するので,正しい相手にパケットを届く。

 しかし,このルーティング・テーブルの作り方を間違ってしまうと,相手にパケットが正しく届かなくなったりする。

貴子:ルーターが正常に動作していればいいけれど,ルーターの設定を間違ったりすると,うまくパケットが転送されなくなりそうね。宇田くんみたいにそそっかしい人が,ルーティング・テーブルを間違って設定してしまった場合とかね。

宇田:もちろん,そのときはパケットの転送がうまくいかないよ。だから,客先で障害が出たんだよ。

ルーティング・テーブルが重要

 例えば,図1のような3台のルーターがつながるネットワークで考えてみよう。各ルーターには,ルーティング・テーブルが設定されている。ルーターAのルーティング・テーブルには,ルーターと直接つながるLAN(1)とLAN(2)の情報,およびルーターB経由でたどり着けるLAN(3)やLAN(4)の経路情報が書かれている。

 ほかのルーターも同様に,正しい経路情報が設定されていれば,PC1からPC2へのIPパケットは,ルーターA,ルーターB,ルーターCを経由してPC2へ到着する。

宇田:ルーター設定を間違えたら,IPパケットが行き場を失ってしまうよね。

貴子:その行き場を失ったIPパケットは,どうなるのかしら。消えてしまうのかな。それとも,あて先を求めてネットワークをぐるぐる回り続けるのかしら?

宇田:それはよくわからないな。

貴子:それじゃあ,再現実験をしてみましょうよ。ルーターを3台用意して,ルーターBのルーティング・テーブルをわざと間違って設定してみましょう(図2)。

宇田:この実験だとPC1からPC2へ向けて送出されたIPパケットは,ルーターBでルーターCに転送するのが正しい設定だよね。ここでわざとPC2の属するネットワーク(LAN(4))は,LAN(1)の方にあると誤った設定にしてみるわけだね。そうすると,ルーターBはルーターAにIPパケットを戻すはずだ。

貴子:再度ルーターAに戻ってきたIPパケットはルーターBへ転送されるから,ルーターAとBの間でピンポンのようにIPパケットが往復しそうね。

宇田:じゃあ,さっそく実験してみよう。PC1からPC2へ向けてpingコマンド*を実行しよう。

pingで見慣れないエラーが出た

貴子:あら,見慣れないエラーが出ているわ(図3)。これってどういう意味があるのかしら。

宇田:パケットをキャプチャ*しておいたから,そちらも見てみようよ(図4)。

貴子:同じパケットがルーターAとルーターBの間で,行ったり来たりしているわ。

宇田:まったく同じパケットがピンポンしているんだな。

貴子:ちょっと待って。よく見ると,まったく同じじゃないわ。IPヘッダーのTTL*という情報が1ずつ減っているわよ。

宇田:本当だ。最初は127だったのが(図4(1)),ルーターで転送されるのに従って1ずつ減っているね(図4(2),(3))。

貴子:そして最後には,ICMP*の時間超過というパケットがルーターBからPC1へ返信されているわ(図4(4))。

宇田:この時間超過って,いったい何なんだろうか。時間がなくなったってどういう意味なんだ?

IPパケットには寿命がある

 IPでは,パケットの生存時間が決められており,その値はIPヘッダー中のTTLという領域に記述される。ルーターを通過するたびにTTLの値が1だけ引かれる。つまり,多数のルーターを経由するとTTLの値がどんどん減っていき,最後には0になる。

 今回の実験のように,ルーターAとルーターBの間でピンポンのように行き来したIPパケットは,ルーターがパケットを転送するごとにTTLの値が減り,最後には0になる。

 すると,ルーターはIPパケットを廃棄する。このとき,パケットを廃棄したルーターBはICMPの時間超過メッセージを,pingパケットの送信元であるPC1へ返信したのである。

 このように,IPではパケットの生存時間(寿命)が必ず記述され,迷子のIPパケットが意味もなく長時間にわたってネットワークをさまようことを防いでいる。

寿命が尽きたパケットは捨てられる

貴子:TTLという用語を調べたら,IPパケットには寿命があることがわかったわ。要するにルーターを経由するごとにTTLの値は1ずつ減って,0になるとルーターがそのパケットを捨ててしまうのよ。

宇田:じゃあ,最後の時間超過っていうのは何なのかな。

貴子:それは,パケットの寿命が尽きてルーターがパケットを捨てたことを送信元のPC1へ通知したのよ。

宇田:だから,pingコマンドを実行したPC1では「TTL expired in transit.」という見慣れないメッセージが表示されたんだね(図3参照)。

貴子:しかも「Reply form」のあとに続くIPアドレスはルーターBのIPアドレスよ。つまり,ルーターBからエラー・メッセージが返ってきたのよ。pingコマンドの実行結果をよく読めば,パケットをキャプチャしなくても,理由がわかったんだわ。

宇田:そうだね。あまり見ることはないかも知れないけれど,このエラー表示を覚えておくと,トラブル原因を探すときの手がかりになりそうだね。

貴子:ルーティング・テーブルの設定を間違えてピンポン状態になっても,IPパケットがネットワークを永遠にさまよい続けることはないのね。

宇田:ルーティング・テーブルの設定って大事なんだね。

貴子:それにしても,IPってよく考えられているわね。宇田くんみたいにいい加減な人が,ルーティング・テーブルを設定しても,被害が出にくいように考えられているんだから。


寄稿者:ネットワークエンジニア集団 みずおか組

●水岡 祥二 NPOアイタック代表理事
●出口 雄一 株式会社タケキ IT教育事業部
●久保 幸夫 情報・通信エンジニア