■ ルーティングプロトコル・おさらい
いつまでたっても終わらないレイヤ3の話はまだ続く。
ほんと、長いですよね。
それだけ重要だ、ということだよ。
さて、障害地点を回避して、パケットを送り届けなければならない。
いきなりですね。
確かにずーっと不通のままでしたら、パケットが届きませんもんね。
うむ。障害地点を回避する、新しいルートを設定する必要があるわけだ。
ルータ間で自動的に情報交換を行い、新ルートを設定する方法が…。
ルーティングプロトコルってわけですね。
そうだ。
ルーティングプロトコルは、それらの方法を決定している。その仕様によって、3種類に分けられる。
ディスタンスベクタ |
|
---|---|
リンクステート |
|
拡張ディスタンスベクタ |
|
[Table32-02:ルーティングプロトコルの種類・2]
この3種類だ。
今回は、この中のディスタンスベクタ型ルーティングプロトコル、RIPを説明する。 ▼ link
あーるあいぴー?
■ RIP
リップと読んでくれ。
これは、一番最初にできたルーティングプロトコルで、もっともわかり易い。
よって、これでルーティングプロトコルがどのように動作するかを知ってもらう。
なるほど。
他のルーティングプロトコルは説明してくれないんですか?
うむ。この3分間ネットワーキングではRIPだけを説明する。
他のはいずれ機会を見て説明する。
了解です。
さて、このRIPだが。
ディスタンスベクタ型と呼ばれるルーティングプロトコルだ。
ではネット君。ディスタンス(distance)とはなんだ?
でぃすたんす?
距離ですよね。
うむ。
では、ベクタ(vector)は?
ソフトウェアのダウンロードサイト。 ▼ link
…。
あれ?
「あれ?」じゃねぇ!
ベクタは、方向。つまりディスタンスベクタとは、距離と方向のことだ。
距離と方向。
そうだ。
宛先ネットワークの「距離と方向」の情報を交換するシステムのため、この名前がついている。
ははぁ。
ふむ。
「博士、そりゃなんなんですか?」という顔だな。
わかりますか?
うむ。
ネット君の疑問に答える前に、RIPのバージョンについて話しておこう。
RIPのバージョン?
RIPはもっとも古いルーティングプロトコルだ。
なので、時代に合わせて拡張した形が存在する。それがRIPバージョン2と呼ばれる。 ▼ link
ばーじょんつー。
うむ。前のバージョンは、RIPバージョン1と呼ばれる。
今回の説明は、このRIPv1だ。
はい。
■ ルーティングアップデート
さて、ルータが他のルータと情報を交換するわけだが。
この交換する情報のことをルーティングアップデートという。
るーてぃんぐあっぷでーと?
アップデートって、更新ですよね。
そうだ。
「ルート更新情報」とでも言うべきものかな。これを交換しあう。
[Figure33-01:ルーティングアップデート]
情報の交換ですね。
うむ。
ではこの情報交換で、どのような情報を交換するかというと、ルーティングテーブルをそのまま交換しあう。
ルーティングテーブルをそのまま?
そのままだ。
そうだな、相手に自分の知っている道を教えるため、地図を渡す、という感じかな。
ははぁ。
宛先ネットワーク | 次のルータ | メトリック | ポート |
---|---|---|---|
192.168.1.0 | 210.81.36.1 | 3 | 1番ポート |
91.0.0.0 | 210.81.36.1 | 6 | 1番ポート |
172.36.0.0 | 130.82.10.1 | 2 | 2番ポート |
221.194.38.0 | なし | 0 | 3番ポート |
[Table32-03:ルーティングテーブル]
なんどか出ているルーティングテーブルの例だが、このようなものを交換するわけだ。
これには、ディスタンス(メトリック)と、ベクタ(送信ポート)が記載されている。だから、ディスタンスベクタ型。
あ〜、なるほど。
距離方向型とはそういう意味なんですね。
これを、30秒に1回送る。
それにより、ルーティングの新しい情報を交換しあうわけだ。
30秒に1回ですか。
わりと頻繁ですね。
そうだな。ルータ側で変更も可能だ。
だが、ルート情報が間違っていると宛先にパケットが届かなくなってしまうからな。
ルート情報はなるべく最新にしておくことがよいだろう。
そういわれればそうですね。
そして、このアップデートを6回受け取らなかったら、そのルータは何らかの障害が発生したとみなす。
この場合、そのルータを使うルートを消してしまう。
6回。
ってことは、180秒ですか。
そうだ。
では実際、RIPのルーティングアップデートの中身を見てもらおう。
アップデートの中身?
■ RIPのルーティングアップデート
うむ、中身だ。
送られる実際の内容だな。こうなっている。
コマンド(1バイト) | バージョン(1バイト) | ZERO(2バイト) | |
アドレス識別子(2バイト) | ZERO(2バイト) | ||
宛先ネットワーク IPアドレス(4バイト) | |||
ZERO(4バイト) | |||
ZERO(4バイト) | |||
メトリック(4バイト) |
[Table33-01:RIPアップデート]
縦に積み重ねて送るんですか?
違う違う。
単に横が長くて入りきらないので、積み重ねただけだ。実際は、1行目の一番左から順に送っていく形になる。
なんだ、そうなんですか。
え〜っと、このZEROってのはなんですか?
そのまんま、ゼロだ。
その部分は特に特定の値を入れるわけではなく、単にゼロが入る。
無駄じゃないですか?
発達余裕と言え。
実際、RIPv2ではZEROの部分に拡張用の値が入る。
ははぁ。
この1行目を抜いた赤い部分がルート情報だ。
ルーティングテーブルのエントリの部分だけこの部分を繰り返す。
え〜っと。
ってことは、上の表の場合は、1ルート分?
そうだ。コマンドとバージョンとZEROの4バイトを除いた、残り20バイトの部分がルート情報だ。
例えば、3ルート分送りたかったら、20 x 3 = 60 の60バイトと先頭4バイト必要だ。
ってことは、3ルートで64バイト必要ってことですね。
そういうことだ。
RIPではルーティングテーブルをそのまま交換するので、ルーティングテーブルにあるルート情報につき20バイト必要になる、ということだ。
なるほど。
さて、ではRIPはどのように動作するかを説明しよう。
はい。
■ RIPの動作
あまり複雑な形を説明しても長くなるだけなので。
3つのルータで説明しよう。
[Figure32-02:RIPの動作] ▼
はわ〜。
RIPはメトリックにホップ数を使う事を言い忘れてたな。
宛先ネットワークまでに通過するルータの数だ。
だから、直接接続されているネットワークのメトリックが0なんですね。
うむ。
RIPは簡単に言うと、アップデートを受け取ったら、自分の知らないネットワークをテーブルに追加する。
ふむふむ。
その際、中継ルータを送ってきたルータに、送信ポートをアップデートを受け取ったポートに、メトリックに1を足すことを行う。
メトリックに1を足す?
うむ。1つルータを中継するわけだからな。
では、例え話をしてみよう。ネット君の前の座席にはA君が座っている。
A君が「私の3つ前の席にはB君が座っています」と教えてくれた。ネット君とB君の距離は?
4つ席が離れてますね。
うむ。それはA君を含めて、4つ席が離れていると考えたわけだ。
B君からA君まで3つ。A君からネット君まで1つ。よって、距離4。そうだろう?
あぁ、だからメトリックに1を足すってことですか。
そうだ。
さらに、ネット君がB君の何か伝えたい場合、どうする?
前に座っているA君に、メモを渡します。
いいぞ、ネット君。
つまり、A君が中継役だってことだな。それに、前に座っているA君に渡す、つまり前のポートからメモを送信するということになる。
ははぁ。なるほど。
そう考えるとわかりますね。
さて次は、知っているネットワークの情報をアップデートで教えてもらった場合の例だ。
先ほどの例のルータBとルータCを繋いだ形の例だ。
[Figure32-03:RIPの動作・情報の更新]
最適ルート…。
そう、最適ルートだ。
RIPでは、すでにテーブルに存在するネットワークについて、新たな情報がアップデートで来た場合。
来た場合?
新しい方がメトリックが小さい場合、そちらをテーブルに載せる。
新しい方がメトリックが大きいならば、それは無視する。
よりメトリックが小さい方が、ルーティングテーブルに載るんですね。
最適ルートだからな。
メトリックが同じ場合は?
同じ場合は、前からあった方が優先される。
もしくは、両方ともテーブルに載せてしまう。これはルータの設定次第だ。
なるほど。
■ ルーティングループ
さて、RIPの動きはわかってもらえたと思うが。
残念ながらRIPには、正確にはディスタンスベクタには致命的な欠点がある。
致命的な欠点?
セキュリティホールですか?
そんなインターネットエク…
ゴホンゴホン。
風邪ですか?
あぁ、うん。大丈夫だ。
セキュリティホールではない。
それは、ルーティングループと呼ばれる欠点だ。
るーてぃんぐるーぷ?
[Figure32-04:ルーティングループ] ▼
このような状態のことだ。
ルーティングアップデートがループしてしまうからな。
ルータCに、ルータCを経由するルートを教えてるんですものね。
確かにおかしくなりますよね。
うむ。
何故このようなことが起きるかといえば、ルートの変更情報がすぐに伝わらないことに原因がある。
う〜ん。
そうか、上の場合、192.168.200.0に繋がらなくなった事を、ルータBがアップデートを送る前に送ってしまっていれば解決するのか。
そうだ。
すべてのルータが同じ情報を持つまでの時間がかかるという欠点が、ディスタンスベクタにはある。これを、コンバージェンスが遅いという。
コンバージェンスが遅い。
なるほど。
解決策はもちろんとられている。
まずは、スプリットホライズン。
すぷりっとほらいずん?
[Figure32-05:スプリットホライズン]
ルートを教えてもらったルータには、そのルートよりよいルート以外は教えない。
よりよい近道なら教えるが、それ以外は教えない、という方法だ。
なんか、当たり前のような気がしますが。
そうだな。そうかもしれん。
もう1つ、ルーティングループを回避する方法を説明しよう。
[Figure32-06:ホールドダウンタイマ]
「ルートの変更情報がすぐに伝わらないのなら、全員に伝わるまで待とう」
ホールドダウンタイマと呼ばれる方式だ。
ほーるどだうん。
抱え込みタイマー?
そうだな、他のルータから来たアップデートを「まだ全員に伝わってないから」と抱え込んでしまう。
このホールドダウンタイム中に来たアップデートは無視する。
なるほど。
RIPはこれらルーティングループの問題や、コンバージェンスの遅さなどの欠点があるので、どちらかというと小中規模のネットワーク向けだな。
コンバージェンスが遅いと、大きいネットワークでは大変そうですものね。
よし。今回はこれで終了だ。
ルータの話も今回で終了だ。
長かったですね。
そうだな。
くどいようだが、ルータこそがインターネットワークの中核なのだから、長くなって当然だ。
そう考えれば、当然といえば当然ですね。
うむ。
次回からもレイヤ3の話がもうちょっと続くぞ。
了解。
3分間ネットワーキングでした〜♪
- RIP
-
[Routing Information Protocol]
1988年リリース。
- RIPだけ
- OSPF、EIGRP、BGP4は30分間で行う予定です。
- ソフトウェアのダウンロードサイト
- わりとお世話になってます。
- RIPバージョン2
-
[Routing Information Protocol version 2]
1998年リリース。
RIP2、RIPv2などと表記される。
プレフィックス長(サブネットマスク)をアップデートに含む、マルチキャストが可能になる、などの拡張がされている。RFC2453で規定。
- ルーティングアップデート
- [routing update]
- 6回受け取らなかった…
- この6回=180秒のことを、デッドアウトタイム[deadout time]といいます。
- そのルータを使うルートを…
-
実際は、120秒後にルーティングテーブルから消去します。
その間に相手ルータが復旧してアップデートが届いた場合は消去しません。
この時間のことをガベージコレクションタイム[garbage-collection time]といいます。
- RIPv2では…
- RIPv2では、サブネットマスクやネクストホップなどがこの部分に入ります。
- ルーティングテーブルを…
-
最大で25ルート分。
つまり、(25 x 20) + 4 = 504バイト。
- 図
-
ルータとルータを結ぶのもネットワークであることに注意。
左図の場合、192.168.1.0と192.168.2.0はルータ間を結ぶネットワークである。
- セキュリティホール
-
[security hole]
セキュリティ上問題とされる弱点。ソフトウェアの開発ミスなどにより作られる。
悪意のあるユーザからデバイスを不正に操作されてしまう危険性がある。
ウィルスなどが感染の手口として使用することも。
- ルーティングループ
-
[routing loop]
- 図
-
ルートを消去する場合、テーブルから削除する場合もあるが、そのルートは最大値のメトリックを持つ、という形にする場合もある。
RIPの最大値は16。
- スプリットホライズン
-
[split-horizon]
- ホールドダウンタイマ
-
[holddown timer]
- ネット君の今日のポイント
-
- RIPはディスタンスベクタ型ルーティングプロトコルである。
- ルーティングアップデートという情報を交換する。
- ルーティングテーブルをアップデートとして送る。
- 30秒に1回、アップデートを送る。
- コンバージェンスが遅い。
- RIPのメトリックはホップ数である。
- アップデートで送られてきたルーティングテーブルを自分のものと比べて、テーブルを更新する。
- ルーティングループが発生する可能性がある。
- そのため、スプリットホライズン、ホールドダウンタイマなどを使う
- RIPはディスタンスベクタ型ルーティングプロトコルである。