RIP
基本編ではルーティングについて説明しましたが、本項ではルーティングの実現方法として最も基本的なRIPについて示します。
RIPの概要
基本編の「ルーティング」で下図のようにルーター間で教え合う方法をダイナミックルーティングと説明しました。

RIPはダイナミックルーティングを実現するルーティングプロトコルの1種です。
RIPではルーターが知っているサブネット情報を通常30秒間隔でブロードキャストします。例えばサブネットマスクが255.255.255.0のネットワークでIPアドレス172.16.1.1、172.16.2.1のインターフェースを持つルーターはサブネット番号である172.16.1.0、172.16.2.0のデータをUDPでブロードキャストします。これを受け取ったルーターは自身が知っているサブネット番号と受け取ったサブネット番号のデータをやはりUDPでブロードキャストします。

RIPを受け取ったルーターはデータにあるサブネットに送るためには送信元のIPアドレスに送ればよいと学習し、一定時間保持します。これをルーティングテーブルと言います。例えば上の図でルーターDのルーティングテーブルは以下になります。
サブネット | 宛先IPアドレス |
---|---|
172.16.1.0/24 | 172.16.3.1 |
172.16.2.0/24 | 172.16.3.1 |
172.16.3.0/24 | 直接送れる |
172.16.4.0/24 | 直接送れる |
172.16.5.0/24 | 直接送れる |
172.16.6.0/24 | 172.16.5.2 |
基本編の「ルーティング」で下図のようにルーター間で教えあう時に数字を1プラスしてルーターを何個通る必要があるか分かるようにしていると説明しました。これをホップ数と言います。

ルーターはブロードキャストにより受信した全てのルーティング経路に対してホップ数を1プラスしてルーティングテーブルに反映します。

このようにしてルーターを通る段数を加算しており、この段数を保持するためにルーティングテーブルにはホップ数も含まれていて例えばルーターBでは以下になります。
サブネット | 宛先IPアドレス | ホップ数 |
---|---|---|
172.16.1.0/24 | 172.16.5.1 | 2 |
172.16.2.0/24 | 172.16.5.1 | 2 |
172.16.3.0/24 | 172.16.5.1 | 1 |
172.16.4.0/24 | 172.16.5.1 | 1 |
172.16.5.0/24 | 直接送れる | 0 |
172.16.6.0/24 | 直接送れる | 0 |
ホップ数は最大15のため、途中に16台以上ルーターがあると通信出来ません。
尚、ホップ数はメトリックの一種です。RIP以外のルーティングプロトコルにもホップ数と似たカウントがありますが、それぞれ呼び方が違います。この総称がメトリックとなります。
経路制御
ルーターは2つ以上の同じサブネット番号を受信した場合、ホップ数の小さい方を有効にし、最短経路を通れるようにします。

ホップ数の小さいルーターからRIPが届かなくなった場合、次にホップ数の小さいものを有効にし、送信先を変えて通信が出来るようにします。RIPは30秒毎に送られますが、30秒過ぎたらすぐにルーティングテーブルから消すのではなく、一時的に届かなかった事も考慮して経路安定のため一定時間保持し続けます。このため、経路切り替えは数分かかり、一般的なコネクションはタイムアウトで切断されてしまいます。
RIPにはv1とv2があり、上記はRIPv1について述べています。
RIPv1は同一ネットワークアドレスでは同じサブネットマスクを使う事を前提としています。RIPv1ではルーティング情報をブロードキャストする際、サブネットマスクの情報は含んでいません。受信したルーターは自身に設定されているサブネットマスクからサブネット番号を計算してルーティングテーブルを作っています。
異なるネットワークアドレスのサブネットマスクは分からないため、異なるネットワークアドレスへRIPv1を送信する際はサブネット番号ではなくネットワークアドレスの情報を送ります。

これをアドレスの集約と言います。
RIPv2はv1と異なりルーティング情報を送る際、マルチキャストアドレスである224.0.0.9を使って送信します。このため、RIPv1のようにPC等無関係な機器まで受信しません。
又、サブネットマスクも合わせて送るため、同一ネットワークで異なるサブネットマスクにする事が可能です。あるサブネットでは100個のIPアドレスが必要、あるサブネットでは30個のIPアドレスが必要だった場合、RIPv1ではサブネットマスクを100個のIPアドレスが使える255.255.255.128で統一する必要があります。RIPv2では172.16.1.0/25と172.16.1.128/27のサブネットを作る事が可能であり、172.16.1.160以降を別のサブネットに割り当てる事が可能となるためIPアドレスを節約出来ます。
RIPバーション | アドレス範囲(172.16.1.xのx部分) | |||||||
---|---|---|---|---|---|---|---|---|
0〜 | 32〜 | 64〜 | 96〜 | 128〜 | 160〜 | 192〜 | 224〜 | |
RIPv1の場合 | 2つのサブネットで全て利用 | |||||||
RIPv2の場合 | 2つのサブネットで利用 | 余り |
同一ネットワークで異なるサブネットマスクにする事を可変長サブネットマスクと言います。
又、RIPv2ではアドレスの集約をしないようにして、異なるネットワークアドレスに対してもサブネット番号を送信する事が可能です。

RIPv1では送信元のIPアドレスを見て宛先IPアドレスを判断していましたが、RIPv2では宛先IPアドレスがネクストホップとしてUDPパケットの中に組み込まれています。
RIPでは相手から受信したサブネット番号はそのインターフェースに対しては送信しません。

これは意味がない事はすぐ分かると思いますが、重大な問題の回避にも役立っています。
例えば上の図でルーターAが故障して172.16.4.0の経路がダウンした場合、ルーターBはルーターCに対して172.16.4.0の経路を送信しません。しかし、ルーターDは既に172.16.4.0のルーティング情報を知っているため、スプリットホライズンがないとルーターCにルーティング情報を送信します。ルーターCはホップ数が多い経路は暫くの間無視しますが、時間が経つと172.16.4.0はルーターDに送ればよいとルーティングテーブルを書き換えてしまいます。

172.16.4.0のサブネット宛ての通信は、ルーターCはルーターDに、ルーターDはルーターCに送ればいいと勘違いしているため、フレームはルーターCとD間で回り続けます。
ルーターCもスプリットホライズンがないと更にルーターDに172.16.4.0の情報を送りますが、ルーターDでは一定時間経つと今まで知っていた情報は無効になって、ホップ数が1加算された経路が有効になったと思い、再度ルーティングテーブルをホップ数が1加算された状態で更新します。
このようにホップ数が1ずつ加算されるため16になった時点で経路は無効になりますが、1加算されるのが数分かかるため16になって無効になるまでフレームのループはかなりの時間発生してしまいます。
スプリットホライズンはこの問題を回避するために考えられました。
尚、スタティックルートを設定しRIPで送信する事も可能ですが、この際もスプリットホライズンが有効な場合、送信先が経路となるインターフェースに対してはサブネット番号を送信しません。
- 基本編「ルーティング」
- 追補版「RIP詳細」
- 設定編「RIPの設定 - Catalyst」
- トラブル対応「ルーティングテーブル反映不可」
- トラブル対応「サブネット追加で通信不可」