RIPの動作
目次
ルーティングテーブルができるまで
例として、図のネットワークを考えます。ルータは自分に直接接続されているネットワークは、特にスタティックルーティングやダイナミックルーティングの設定を行わなくても知っています。ですから、この時点でルーティングテーブルには、直接接続のネットワークのエントリが存在します。
ここで、ルータAとルータBでRIPを起動し、すべてのインタフェースでRIPを有効にします。すると、ルータAは30秒に1回ルーティングテーブルのエントリを各インタフェースからブロードキャストを使って送信します。このとき、ホップ数を1増やします。後ほど、RIPのパケットのフォーマットについて解説しますが、1つのRIPパケットの中に25個までのネットワークのエントリを含めることができます。
RIPパケットに含まれる各エントリを(ネットワークアドレス,ホップ数)で表現することにします。つまり、ルータAからは、(10.0.0.0,1)と(20.0.0.0,1)のエントリを含んだRIPパケットを送信することになります。ここでホップ数が1となっているのは、直接接続の場合のホップ数を0とみなしているためです。直接接続のホップ数をいくつにするかは、ベンダによって多少違いがあります。シスコルータでは、この例のように直接接続のホップ数を0としています。
ルータBも同様に、各インタフェースから30秒ごとにルーティングテーブルのエントリをブロードキャストします。
ルータAからのRIPパケットを受け取ったルータBはベルマンフォードアルゴリズムと呼ばれるアルゴリズムに従って、RIPパケットの各エントリを自分のルーティングテーブルに追加するかどうかを判断します。ベルマンフォードアルゴリズムについては、後述しますが、ルータBは、ルータAからのRIPパケットに含まれる(10.0.0.0,1)のエントリを自身のテーブルに追加します。このときのネクストホップアドレスは、RIPv1ではIPヘッダに含まれる送信元IPアドレスになり、RIPv2では各エントリのネクストホップアドレスもRIPパケットの中に記述されているので、そのアドレスを使います。
ルータAも同様に、ルータBから受け取ったRIPパケットの(30.0.0.0,1)のエントリを自身のルーティングテーブルに追加します。
これで、ルータA、ルータBともにネットワーク上のすべての経路をルーティングテーブル上に認識することができました。この状態を収束(コンバージェンス)状態というわけです。コンバージェンスのあとも、ルータA、ルータBは30秒ごとにブロードキャストを行っています。
ルートの削除
また、ネットワークの障害の検知は、30秒ごとの定期的なブロードキャストによるアップデートによって行います。もし、あるエントリのアップデートを一定時間受信することができなければ、そのエントリのネットワークはダウンしたとみなして、ルーティングテーブルから削除されます。障害とみなす時間は、RIPタイマーによって決められています。RIPのタイマーについては、あとの項で詳述します。
ここで、1点注意ですが上記の説明では、スプリットホライズンを一切考えていません。通常は、スプリットホライズンによって直接接続のエントリは、そのインタフェースを通じて送信されないようになっています。スプリットホライズンについても、あらためて詳しく解説します。
ルートの追加
そして、さらにルータCを追加した場合を考えましょう。ルータCでも、ルータA、ルータBと同様にRIPを起動してすべてのインタフェースでRIPを有効にします。(※ここからの説明もスプリットホライズンを考えません)すると、ルータCは、(30.0.0.0,1)と(40.0.0.0,1)のエントリをブロードキャストします。
ルータBは、ルータCから受け取ったエントリのうち、(40.0.0.0,1)を自分のルーティングテーブルに追加します。そして、ルータBの30秒に1回のタイミングで、ルータBの持つ2つのインタフェースから(10.0.0.0,2)、(20.0.0.0,1)、(30.0.0.0,1)、(40.0.0.0,2)のエントリをブロードキャストします。
ルータBからのブロードキャストを受信したルータAは(40.0.0.0,2)のエントリをルーティングテーブルに採用し、ルータCは(10.0.0.0,2)、(20.0.0.0,1)のエントリを採用します。これにより各ルータのルーティングテーブルにすべてのエントリが表われたので、コンバージェンス状態となりました。
ルータAの送信について書いていませんが、ルータAも他のルータと同じく、ルータAのタイミングで30秒に1回ルーティングテーブルのエントリをブロードキャストしています。