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は、サブネット番号を送信する。

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プラスしてルーティングテーブルに反映します。

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が届かなくなった場合、次にホップ数の小さいものを有効にし、送信先を変えて通信ができるようにします。RIPは30秒ごとに送られますが、30秒過ぎたらすぐにルーティングテーブルから消すのではなく、一時的に届かなかったことも考慮して、経路安定のため一定時間保持し続けます。このため、経路切り替えは数分かかり、一般的なコネクションはタイムアウトで切断されてしまいます。

RIPv1

RIPには、v1(バージョン1)とv2(バージョン2)があります。

RIPv1は、同一ネットワークアドレスでは同じサブネットマスクを使うことを前提としています。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ではアドレスの集約をしないようにして、異なるネットワークアドレスに対してもサブネット番号を送信することが可能です。

RIPv2は送信する情報にサブネットマスクも含めるため、クラスで分けられるネットワークであってもサブネット番号を送信できる。

つまり、クラスに基づいたネットワークアドレスが異なってもアドレスの集約をしないようにできるため、CIDRに対応しています。

RIPv1では送信元のIPアドレスを見て宛先IPアドレスを判断していましたが、RIPv2では宛先IPアドレスがネクストホップとしてUDPパケットの中に組み込むことが可能になっています。

RIPv1とRIPv2の違い

これまで説明したRIPv1とRIPv2の違いをまとめると、以下になります。

  • RIPv2は、ブロードキャストではなくマルチキャストで送信する。
  • RIPv2は、VLSMに対応している。
  • RIPv2は、CIDRに対応している。
  • RIPv2は、ネクストホップアドレスを送信できる。

スプリットホライズン

RIPでは相手から受信したサブネット番号は、そのインターフェースに対しては送信しません。

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が使えないことによるトラブル事例と、対処方法を説明しています。
トラブル対応「サブネット追加で通信不可
スプリットホライズンが原因によるトラブル事例と、対処方法を説明しています。