ルータはOSI参照モデルのネットワーク層,TCP/IPのIP層に対応した機器であり,相手のホストへの経路を選択する機能を持ちます。その最適化を図るのが経路制御(ルーティング)です。ここでは,経路を選択する動作と経路制御をどのようによって実現するのかを理解します。
経路制御(ルーティング),MACアドレス,ARP,IPアドレス,ルーティングテーブル(経路制御表),スタティックルーティング(静的経路制御),ダイナミックルーティング(動的経路制御),ルーティングプロトコル,IGP,RIP,RIP2,距離ベクトル,経路距離,ホップ数,OSPF,リンク状態,メトリック,エリア,BGP,AS,IX
現在広く用いられているLANのプロトコルはイーサネット(Ethernet)です。パソコンをイーサーネットに接続するには,ネットワークインタフェースカードが必要ですが,ネットワークインタフェースカードには,MACアドレスが付けられています。

MACは,48ビット(6オクテット=6バイト)からなり,前半の24ビット(厳密には,先頭の3ビット目からの22ビット)がベンダ識別子(カード登録業者の番号でIEEEから与えられる),後半の24ビットはベンダがつける製品番号で,世界中で一意になります。
LAN内(正確には同一サブネットワーク内)では,MACアドレスを指定することにより,相手のホストと接続することができます。
ところが,インターネットでは相手のホストをIPアドレスで指定していますので,IPアドレスをMACアドレスに変換する必要があります。最も単純には,その対応表を個々のパソコンあるいは制御用のサーバに作成しておけばよいのですが,それでは新しいパソコンを接続するたびに対応表を書換えなければなりません。
ARPでは,知りたいIPアドレスを含んだARP要求パケットという電文をLAN内の全ホストにブロードキャストします。各ホストはそれを受けて自分のIPアドレスであれば,自分のMACアドレスをARP応答パケットで返信します。それにより,互いに通信ができるようになります。なお,MACアドレスからIPアドレスを知るには,RARP(Reverse ARP)を用います。
他ネットワーク間での接続にはルータが用いられます。ルータはIPアドレスを見て相手のホストを探し接続するのですが,それには,そのIPアドレスを持つホストを含むネットワークのルータを探して,ルータ同士を接続する必要があります。
単純には,すべてのネットワークIPアドレスとそのルータのIPアドレスの一覧表を持てばよいのですが,世界中には膨大なネットワークがあるので,そのようなことは不可能です。
IPアドレスを割り振った順序を逆に,プロバイダ→指定事業者→JPNIC→APNIC→ICANNと遡っていけば,必ず相手のネットワークへ到達することができますが,毎回そうしたのでは,上位の機関への通信が殺到してしまいます。
そこで,ルータによく接続する相手,最近接続した相手については対応表(ルーティングテーブル,経路制御表)を作成しておき,それに合致したものはそれを利用し,そのリストにない場合には上位のルータに接続する(デフォルトルートという)ようにしています。
すなわち,ルータが自分が知らない相手の場合には,他のルータに聞き,そのルータも知らなければさらに他のルータに聞くというような「たらいまわし」あるいは「バケツリレー」をしながら目的の相手を見つけるのです。これは迂遠なように見えますが,一部のルータや回線が故障していても,他の経路を迂回することにより,相手と接続できる確率が高くなります。インターネットはこの方法により信頼性を高めているのです。
ホストAのIPアドレスは 10.1.1.20 で,ネットワーク 10.1.1.0/24 に属しています。このネットワークのルータ1は 10.1.1.1 です。ホストAのルーティングテーブルは,次のようになっています。
ホストAのルーティングテーブル ネットワーク 接続ルータ 10.1.1.0/24 10.1.1.20 ア 自分のネットワークと自分のアドレス 0.0.0.0/0 10.1.1.1 (ルータ1)イ デフォルトルート
自分のルーティングテーブルのアから,ホストBは同一ネットワークにあることがわかるので,ARPによりホストBのMACアドレスを得て,直接送ります。
ホストAのルーティングテーブルには対象のネットワークがないので 0.0.0.0/0 のデフォルトルートによりルータ1に送ります。ルータは2つのネットワークに接続しているので,ネットワーク1側のIPアドレスとネットワーク2側のIPアドレスを持っています。ルータ1のルーティングテーブルは,次のようになっています。
ルータ1のルーティングテーブル ネットワーク 接続ルータ 10.1.1.0/24 10.1.1.1 ア ネットワーク1側 10.1.2.0/24 10.1.2.1 イ ネットワーク2側 10.1.3.0/24 10.1.2.2 ウ ルータ2 0.0.0.0/0 10.1.2.3 エ デフォルトルート(ルータ3)
ルータ1は,ホストAからの電文の送信先IPアドレス 10.1.2.15 とルータ1のルーテイングテーブルのイにより,ホストCがルータ1が属しているネットワーク2の中のホストであることを知り,ARPなどを用いて,ホストCへ送ります。p>
ホストAではデフォルトルートなのでルータ1へ行き,ルータ1ではウによりルータ2へ行きます。ルータ2のルーティングテーブルは次のようになっています。
ルータ2のルーティングテーブル ネットワーク 接続ルータ 10.1.2.0/24 10.1.2.2 ア ネットワーク2側 10.1.3.0/24 10.1.3.1 イ ネットワーク3側 10.1.1.0/24 10.1.2.1 ウ ルータ1 0.0.0.0/0 10.1.3.4 エ デフォルトルート(ルータ4)
ルータ2は,そのルーティングテーブルのイにより,ホストDが自分の属するネットワーク3の中にあることを知ります。このようにして,いくつかのルータを経由してホストDに送ることができるのです。
上記のように,LANやインターネットではルーティングテーブルが重要です。それに誤りがあると,通信ができなくなります。ルーティングテーブルの作成方法には,スタティックルーティングとダイナミックルーティングがあります。
スタティックルーティング(静的経路制御)では,手作業でルーティングテーブルを作成します。ネットワークの規模が大きくなると作業が困難になりますし,更新があったり,経路でのルータにトラブルがあったりすると,その対応が不十分になる危険があります。
ダイナミックルーティング(動的経路制御)は,ルータが自動的に情報を収集して,ルーティングテーブルを更新する方法です。次のようなルーティングプロトコルによるツールが利用されます。
区分(対象) プロトコル 下位 アルゴリズム IGP(LAN) RIP UDP 距離ベクトル(ホップ回数),クラスレス非対応 RIP2 UDP 距離ベクトル(ホップ回数) OSPF IP リンク状態(ループ検出),メトリック,エリア EGP(外部接続) BGP TCP 経路ベクトル(ループ検出)
ルーティングプロトコルには,主として企業内LANを対象にするIGP(Interior Gateway Protocol)と,主にインターネットを対象にするEGP(Exterior Gateway Protocol)に区分できます。そして,IGPには基本的なものにRIP/RIP2,現在広く用いられるようになったOSPFがあり,EGPの代表的なものにBGPがあります。
目的のIPアドレスに到着するまでのルータ経由回数をホップ回数といいますが,それを距離といいます。また,ルーティングテーブルでの「次のルータのIPアドレス」のことを方向といいます。そして,距離と方向を合わせて距離ベクトルといいます。RIPでは,距離が最小となる距離ベクトルを求めて,ルーティングテーブルを作成する方法です。

各ルータ定期的(30秒ごと)に経路情報をブロードキャストします。この経路情報が180秒(すなわち5回分)到着しなかったら,そのルータからの経路は接続が切れたものとして,ルーティングテーブルに通信不能のフラグをつけます。
RIPは,その情報により,各ネットワークに達するまでのルータを経由する回数(ホップ)を計算します。
RIP2はRIPに次のような改良をしたものです。
下図で,ルータAはルータBに経路情報を通知し,ルータBはルータAとルータCに,ルータAからの情報に距離を1加えた情報を通知します。

ところが,ネットワーク1とルータAの間が,何らかの原因で切断されたとします。ルータAはルータBに経路情報を流しませんが,ルータBは過去の情報をルータAに通知します。すると,ルータAはルータB経由で距離2でネットワーク1に接続できると思い,ルータAからネットワーク1へは距離3で接続できるとの経路情報を流します。それを受けてルータBは,距離を4とした情報を・・・というように,無限カウントに陥ってしまいます。

無限カウントになるのを防ぐために,次のような対策がとられています。
上記のような無限カウントの対策をしても,次の赤線のようなループがあるときは,対処が困難になります。それに対処するには,ルータの接続関係をリンク状態といいますが,リンク状態を分析してループの検出する必要があります。
単純なループであれば,ブリッジやルータに装備されているスパニングツリー機能で対処できますが,ここではもっと複雑なループを対象とします。また,経路制御の観点からの考察にします。

定時間間隔(10秒どと)にHELLOパケットを送信します。これが来なくなれば切断されたと判断します。切断あるいは回復になると,リンク状態更新パケットを送信して,他のルータに状態の変化を伝えます。
OSPFでは,リンク状態(トポロジー)を経路情報として交換します。それにより,どのネットワークとどのルータと接続しているかを,バケツリレーで各ルータに通知されます。また,経路距離をホップ数だけでなく,各リンクにメトリックという重み付けをして,そのメトリックが最小になるように経路を選択します。その最適化のアルゴリズムにより,ループの検出を行い,それによる無限ループを防ぐことができるのです。
リンク状態のデータを解析するための計算は複雑なので,ネットワークの規模が大きくなると,負荷が大きくなってしまいます。それを低減するために,OSPFではエリアという概念を取り入れます。ネットワーク同士やホスト同士をまとめてエリアとすることにより,ネットワーク全体を階層構造化し,そのエリアでの最適化を図ります。それをリンクステートアルゴリズムといいます。
MTU(Maximum Transmission Unit)とは,データリンクで送信できるパケットの最大長です。イーサーネットでは1,500オクテット,FDDIでは4,352オクテットというように,データリンクの種類によってMTUが異なるので,経路によってはルータがMTU分割をします。経路MTU探索では,その負荷を回避するために,宛先までの経路でMTUが最大な経路を探します。最初のデータの分割禁止フラグをオンにして送信すると,途中のルータで分割が必要になるとICMPの到達不可能メッセージにより,そのルータでのMTUが戻されます。その値を参照して最適経路を見出すのです。
ここまではルータ間がLAN接続している場合でした。社内LANならば大規模とはいっても,たいしたことはありませんが,インターネットでは,ネットワーク数もルータの数も無限に近いのです。インターネットへの接続では,通常はISPを介した接続になります。社内ネットワークをまとめたルータとISPのルータを,公衆回線や専用回線で接続するだけのことですが,ISP以降はどのようになっているのでしょうか。
企業のLANや家庭のパソコンからプロバイダを通してインターネットへつながる仕組み,インターネットがネットワークのネットワークである仕組みを簡単に説明します。

企業や個人がインターネットを利用するには,ISP(Internet Service Provider:プロバイダ)と契約します。ISPは,多数のアクセスポイントといくつかのNOC(Network Operation Center)を持っています。利用者のLANのルータやモデムは,なんらかの通信回線により,近くのアクセスポイントに接続しています。
アクセスポイントは,単純にいえば専用線,ダイアルアップ,ブロードバンドなどに対応したルータです。そこに到着した電文は,高速回線でNOCに集められます。NOCも単純にはルータですので,アクセスポイントとNOCは同じようなものだといえます。小さなISPは,大きなISPと契約しており,そこのNOCと接続しています。そのようにして,AS(Autonomous System)という地域的にまとまったネットワークが構成されます。
ASを代表するNOCは,他のASを代表するNOCと接続しています。そのとき,個々のAS間で個別に接続する形態もありますが,多数のASとの接続を容易にするために,IX(Inernet eXchange)という設備を中心にして接続しています。このようなAS間を結ぶ通信回線のことをバックボーン回線と呼ばれ,数十Gbpsの超高速回線が用いられます(NOC間の通信回線も含めてバックボーン回線ということもあります)。また,ASやIXを通して海外と接続されています。このような構成により,ネットワークのネットワークであるインターネットが構成されているのです。
IGPではIPのサブネットワークを対象にしますが,EGPではインターネット全体を対象にする必要があります。とはいえ,インターネット全体を対象とするのは事実上不可能です。それでIGPではISPや地域ネットワークなど,ある範囲をAS(Autonomous System)という単位でまとめてAS番号をつけています。
BGPでは,相手のASに通信が到達するまでに通過するAS番号をすべて収集してASリストを作り,その経路が最小のものを採用します。これを経路ベクトルといいますが,それによって経路を選択するのです。