ルータはOSI参照モデルのネットワーク層,TCP/IPのIP層に対応した機器であり,相手のホストへの経路を選択する機能を持ちます。その最適化を図るのが経路制御(ルーティング)です。ここでは,経路を選択する動作と経路制御をどのようによって実現するのかを理解します。
経路制御(ルーティング)、IPヘッダ、IPアドレス、TTL、ICMP、ping、traceroute(tracert)、経路表、ルーティングテーブル、デフォルトルート、静的経路制御、動的経路制御、ルーズルーティング、ストリクトルーティング、ソースルーティング、経路制御アルゴリズム、ルーティングプロトコル、メトリック、RIP、ホップ数、OSPF、経路MTU探索、エリア分割、IS-IS、BGP、AS、AS番号、経路ベクトル型
IPによりパケットを送信するときは,データの前にIPヘッダを付加します。IPヘッダのフォーマットは次の通りです。なお,IPの最新バージョンはIPv6ですが,未だIPv4が広く用いられていますので,ここではIPv4を用います(IPv6に関しては後述します)。
インターネット(ネットワーク層のプロトコルであるIP)は、経路制御(ルーティング)というバケツリレーの方式を採用しています。
ルータは、自分が接続しているネットワークのIPアドレスを知っています。ルータAが宛先のIPアドレスを知らないときは、ネットワークに接続している他のルータBに聞きます。ルータBも知らなければ、さらにルータBに接続しているルータCに聞きます。このようにバケツリレーをしているうちに、いつかはそのIPアドレスを知っているルータにたどりつきます。
バケツリレーとは非効率な方法ですが、この方法では多くの迂回路ができるので、通信網の一部に故障があっても、相手と接続できる確率が高くなるのです。もっともアテもなくバケツリレーしたのでは非効率なので、いろいろな工夫がなされています。
IPでは、相手までの経路がわかっただけです。それで、次のようなことが発生する可能性があります。これがIP層の限界で、それを解決するにはTCPなど上位層のプロトコルが必要になります。
経路の一部に故障が発生したとき、故障の個所を見つけて経路を変更します。故障時の通知には、手作業で行うICMPと、経路制御アルゴリズムによる自動経路修復(後述)があります。ここではICMPの説明をします。
ICMPは,障害が発生したときに通知をするネットワーク層に相当するプロトコルです。次のようなコマンドで実行されます。
インターネット接続や無線LANで接続ができないとき、その状況を確認するのに、最もよく用いらられるコマンドです。エコー要求(Echo Request)を出すとネットワークの状況や情報を知らせるエコー応答(Echo Response)が得られます。
pingは、echoやipconfigなどの基本的機能を組み合わせたコマンドです。
エコー応答を次のような形式で表示することができます。ICMPプロトコルにより、あえてping操作をしなくても自動的に表示するのが通常です。
宛て先への経路の特定や経路を表示するコマンドです。pingコマンドでも行きつけたときにはその経過を得ることができますが、つながらなかったときには結果が得られません。宛先のサーバは正常に稼働しているので、経路中に何か問題が起こっている可能性が高いというような場合に使われます。
ホスト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に送ることができるのです。
経路表の作成方法には,静的経路制御(スタティックルーティング)と動的経路制御(ダイナミックルーティング)があります。
静的経路制御では,手作業で経路表を作成します。ネットワークの規模が大きくなると作業が困難になりますし,更新があったり,経路でのルータにトラブルがあったりすると,その対応が不十分になる危険があります。
動的経路制御は,ルータが経路制御アルゴリズムに基づいて自動的に情報を収集し,経路表を更新する方法です。静的経路制御と比べて、ルータに負荷がかかりますが、逐次改善ができること、経路の障害発生などに即応できる利点があります。
上述の「経路制御の例」のようにデフォルトルートを設定する制御方式をルーズルーティングといいます。それに対して経路表にない場合はキャンセルする方式をストリクトルーティングといいます。
バケツリレーではなく、送信元(ソース)で送信先までの中継ルータを指定する方式をソースルーティングといいます。中継ルータの故障で接続できなくなる確率が高くなりますが、盗聴される危険性が排除されます。さらに、送信先までの全経路を指定するストリクト・ソース・ルーティング、途中までを指定するルーズ・ソース・ルーティングに区分されます。
この経路情報は、IPヘッダのオプション項目に記入されます。
ルーティングプロトコルともいいます。送信先への経路は多数ありますが、最適な経路を算出する方法です。主として動的経路制御で用いられます。
最適経路とは、最短の経路で遅延や損失がないことですが、その尺度をメトリックといいます。経路制御アルゴリズムとは、メトリックを定義して、各経路の測定により点数をつけて、最大(最小)の経路を見つけることだといえます。
対象 制御アルゴリズム プロトコル プロトコル層
IGP 距離ベクトル型 RIP UDP
リンク状態型 OSPF IP
IS-IS IP
EGP 経路ベクトル型 BGP TCP
インターネットは、キャリアやISPグループがそれぞれ自律的に管理するネットワークの集合体になっています。それをAS(Autonomous System:自律システム)といいます。
→(参照:バックボーン回線
経路情報の交換を行うプロトコルは、ASの内部(LANや同一ISPグループ内)を対象にするIGP(Interior Gateway Protocol)とASの外部(海外や遠隔地など)を対象にするEGP(Exterior Gateway Protocol)に大別されます。
この項ではIGPを対象にします(EGPは後述)。
距離ベクトル型のプロトコルです。
ここでの距離とは、受信先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とした情報を・・・というように,無限カウントに陥ってしまいます。
無限カウントになるのを防ぐために,次のような対策がとられています。
OSPFの特徴は、全ルータの情報を相互参照できることにあります。すなわち、各経路の地図(トポロジー)を知ることにより、適切な選択ができます。
RIPの無限カウント対策をしても,次の赤線のようなループがあるときは,対処が困難になります。それに対処するには,ルータの接続関係をリンク状態といいますが,リンク状態を分析してループの検出する必要があります。
単純なループであれば,ブリッジやルータに装備されているスパニングツリー機能で対処できますが,ここではもっと複雑なループを対象とします。また,経路制御の観点からの考察にします。
定時間間隔(10秒どと)にHELLOパケットを送信します。これが来なくなれば切断されたと判断します。切断あるいは回復になると,リンク状態更新パケットを送信して,他のルータに状態の変化を伝えます。
OSPFでは,リンク状態(トポロジー)を経路情報として交換します。それにより,どのネットワークとどのルータと接続しているかが各ルータに通知されます。また,経路距離をホップ数だけでなく,各リンクの状態やMTU(下記)などの重み付けをしたメトリックを作り,そのメトリックが最小(最大)になるように経路を選択します。
OSPFの欠点は、高性能ルータが必要になること、関係するルータ数が大きくなると複雑度が急増することにあります。高性能化は技術進歩でカバーできますが、ルータ数に関してはエリア分割が必要です。
パケットを効率よく送るにはパケットの長さを大きくするのがよいので、送受信にあたり、双方で扱える最大の長さMSS(Maximum Segument Size)をTCPヘッダで伝えあうのが一般的です。
MTU(Maximum Transmission Unit)とは,データリンクで送信できるパケットの最大長です。MTUは、データリンクの種類によってMTUが異なるので、ルータの設定値以上長いパケットがくると、パケットを分割(フラグメンテーション)して転送します。これはルータの負荷を高くするし、通信効率を下げるので、送信元が事前に経路中のの最小MTUを調べる必要があります。
この最小MTUを探すことを経路MTU探索といいます。手作業では次のようになります。
パケットを分割禁止のオプションにして送信すると、それより小さいMTUのルータはMTUの値を入れたICMPの到達不可能メッセージを戻します。パケット長さを変えて繰り返せば、経路中の最小のMTU値を見つけることができます。
この最小MTU値でよいならば、パケットの長さを短くして送信し、不適切ならばその経路を経路表で不利用として、他の経路を選択しなおします。
リンク状態のデータを解析するための計算は複雑なので,ネットワークの規模が大きくなると,負荷が大きくなってしまいます。それを低減するために,OSPFではエリアという概念を取り入れます。ネットワーク同士やホスト同士をまとめてエリアとすることにより,ネットワーク全体を階層構造化し,そのエリアでの最適化を図ります。それをリンクステートアルゴリズムといいます。
OSPFと同様なプロトコルですが、OSPFがTCP/IP系に準拠しているのに対して、IS-ISはOSI基本参照モデルに準拠したプロトコルです。IPv4とIPv6を同じプロトコルで使えるとか、分割方式がOSPFよりも自由にエリア分割をすることができるなどの利点はあるのですが、伝送データがOSIパケットで、IPパケットは使ないという他プロトコルとの連携が制限される欠点があり、利用は限定的です。それで、ここでは省略します。
なお、IS-ISの拡張版のIntegrated IS-ISではIP上でも動作するようになっています。
ISPより向こうのインターネット、すなわちバックボーンではAS(Autonomous System)を構成単位としたネットワークになっています。→参照:バックボーン回線
ASをまたぐ経路情報交換プロトコルをEGPといい、そこでの代表的な経路制御アルゴリズムにBGPがあります。
BGPは、
AS内を対象 内部BGP(interior BGP)
AS間を対象 外部BGP(exterior BGP)
に分かれます。
AS内であれば、RIPやOSPFでもよいのですが、内部BGPを使うこともあります。それは各ASでのポリシーによります。
ここでは、外部BGPを想定し、それをBGPといいます。
通常のIPパケットでは、IPヘッダのIPアドレスで送信先ホストを探しますが、AS間ではIPパケットにBGPヘッダを付加し、その中のAS番号で送信先ホストが存在する送信先ASを探します。
AS番号は2バイトあるは4バイトで、IPアドレスと同じ付与機関から割り当てられ、世界で一意になっています(これにもグローバルAS番号、プライベートAS番号があります)。
BGPでは,相手のASに通信が到達するまでに通過するAS番号をすべて収集してASリストを作り,その経路が最小のものを採用します。これを経路ベクトルといいます。
RIPはホップ数(経路に存在するルータ数)をメトリックにしていますが、BGPでもデフォルトではホップ数をメトリックにしています。それ以外にAS内のルート情報に付加されたパスアトリビュートをメトリックに加えることもできます。
動的経路制御の情報伝送は、RIPはUDP、OSPFではIPを用いていますが、BGPでは信頼性を重視してTCPを用いています。しかし、定期的なルーティングアップデートは行わず、変更発生時にのみ差分アップデートを行っています。
EGPでは、AS事業者間での相互接続をする設備をIXといいます。BGPは、そこでの交換プロトコルとしても利用されます。