RIP
基本編ではルーティングについて説明しましたが、本項ではルーティングの実現方法として最も基本的なRIP(Routing Information Protocol)について説明します。
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プラスして、ルーターを何個通る必要があるかわかるようにしていると説明しました。これを、ホップ数と言います。
つまり、RIPでは経由したルーターの数を示すホップ数をメトリック(経路の近道を判断する数字)として使っていて、RIPで送信します。
通常、ルーターはブロードキャストにより受信したすべてのルーティング経路に対してメトリックを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台以上ルーターがあると通信できません。
経路制御
ルーターは、2つ以上の同じサブネット番号を受信した場合、ホップ数の小さい方を有効にし、最短経路を通れるようにします。
ホップ数の小さいルーターからRIPが届かなくなった場合、次にホップ数の小さいものを有効にし、送信先を変えて通信ができるようにします。RIPは30秒ごとに送られますが、30秒過ぎたらすぐにルーティングテーブルから消すのではなく、一時的に届かなかったことも考慮して、経路安定のため一定時間保持し続けます。このため、経路切り替えは数分かかり、一般的なコネクションはタイムアウトで切断されてしまいます。
RIPv1
RIPには、v1(バージョン1)とv2(バージョン2)があります。
RIPv1は、同一ネットワークアドレスでは同じサブネットマスクを使うことを前提としています。RIPv1でルーティング情報をブロードキャストする際、サブネットマスクの情報は含んでいません。受信したルーターは、自身に設定されているサブネットマスクからサブネット番号を計算して、ルーティングテーブルを作っています。
異なるネットワークアドレスのサブネットマスクはわからないため、異なるネットワークアドレスへRIPv1を送信する際はサブネット番号ではなく、ネットワークアドレスの情報を送ります。
これを、アドレスの集約と言います。
つまり、クラスに基づいてネットワークアドレスを判断し、ネットワークアドレスが異なるとアドレスの集約をするということです。このため、CIDRには対応していません。これを、クラスフルルーティングと呼びます。
RIPv2
RIPv2はv1と異なり、ルーティング情報を送る際にマルチキャストアドレスである224.0.0.9を使って送信します。このため、RIPv1のようにパソコンなど無関係な機器まで受信しません。
また、サブネットマスクも合わせて送るため、同一ネットワークで異なるサブネットマスクにすることが可能です。あるサブネットでは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〜159 | 160〜255 | |
RIPv1の場合 | 2つのサブネットですべて利用 | |
RIPv2の場合 | 2つのサブネットで利用 | 余り(別に割り当て可能) |
同一ネットワークで異なるサブネットマスクにすることを、VLSM(Variable Length Subnet Mask:可変長サブネットマスク)と言います。
また、RIPv2ではアドレスの集約をしないようにして、異なるネットワークアドレスに対してもサブネット番号を送信することが可能です。
つまり、クラスに基づいたネットワークアドレスが異なってもアドレスの集約をしないようにできるため、CIDRに対応しています。
RIPv1では送信元のIPアドレスを見て宛先IPアドレスを判断していましたが、RIPv2では宛先IPアドレスがネクストホップとしてUDPパケットの中に組み込むことが可能になっています。
RIPv1とRIPv2の違い
これまで説明したRIPv1とRIPv2の違いをまとめると、以下になります。
- RIPv2は、ブロードキャストではなくマルチキャストで送信する。
- RIPv2は、VLSMに対応している。
- RIPv2は、CIDRに対応している。
- RIPv2は、ネクストホップアドレスを送信できる。
スプリットホライズン
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の動作やパケット構造などを詳細に説明しています。
- 設定編「RIPの設定 - Catalyst」
- CatalystでのRIPv1とRIPv2の設定方法を説明しています。
- トラブル対応「ルーティングテーブル反映不可」
- RIPv1でVLSMが使えないことによるトラブル事例と、対処方法を説明しています。
- トラブル対応「サブネット追加で通信不可」
- スプリットホライズンが原因によるトラブル事例と、対処方法を説明しています。