Web教材一覧ネットワークTCP/IP(目次)

経路制御(ルーティング)

学習のポイント

ルータはOSI参照モデルのネットワーク層,TCP/IPのIP層に対応した機器であり,相手のホストへの経路を選択する機能を持ちます。その最適化を図るのが経路制御(ルーティング)です。ここでは,経路を選択する動作と経路制御をどのようによって実現するのかを理解します。

キーワード

経路制御(ルーティング)、IPヘッダ、IPアドレス、TTL、ICMP、ping、traceroute(tracert)、経路表、ルーティングテーブル、デフォルトルート、静的経路制御、動的経路制御、ルーズルーティング、ストリクトルーティング、ソースルーティング、経路制御アルゴリズム、ルーティングプロトコル、メトリック、RIP、ホップ数、OSPF、経路MTU探索、エリア分割、IS-IS、BGP、AS、AS番号、経路ベクトル型


経路制御の概要

IPヘッダ

IPによりパケットを送信するときは,データの前にIPヘッダを付加します。IPヘッダのフォーマットは次の通りです。なお,IPの最新バージョンはIPv6ですが,未だIPv4が広く用いられていますので,ここではIPv4を用います(IPv6に関しては後述します)。

IPヘッダの図
始点IPアドレス/終点IPアドレス
始点とは送信元,終点は送信先(宛先)のことです。
上位プロトコル
このパケットを、上位層(トランスポート層)のどのプロトコル(TCPかUDPかなど)に渡すかを指定します。
TTL(生存期間)
IPでは,パケットは多くのルータを経由します。状況によっては,経路ががループになっていて,目的のホストに到着せず永久にループを巡回するようなことがあると,送信の制御もできないし,ネットワークに負荷がかかってしまいます。それを防ぐために,ルータを1回経由するたび(それをホップといいます)に,TTL(Time To Live)の値を1だけ減らし,それが0になったらパケットを破棄します。

経路制御のイメージ

インターネット(ネットワーク層のプロトコルであるIP)は、経路制御(ルーティング)というバケツリレーの方式を採用しています。
 ルータは、自分が接続しているネットワークのIPアドレスを知っています。ルータAが宛先のIPアドレスを知らないときは、ネットワークに接続している他のルータBに聞きます。ルータBも知らなければ、さらにルータBに接続しているルータCに聞きます。このようにバケツリレーをしているうちに、いつかはそのIPアドレスを知っているルータにたどりつきます。
 バケツリレーとは非効率な方法ですが、この方法では多くの迂回路ができるので、通信網の一部に故障があっても、相手と接続できる確率が高くなるのです。もっともアテもなくバケツリレーしたのでは非効率なので、いろいろな工夫がなされています。

IPでは、相手までの経路がわかっただけです。それで、次のようなことが発生する可能性があります。これがIP層の限界で、それを解決するにはTCPなど上位層のプロトコルが必要になります。

ICMP(Internet Control Message Protocol)

経路の一部に故障が発生したとき、故障の個所を見つけて経路を変更します。故障時の通知には、手作業で行うICMPと、経路制御アルゴリズムによる自動経路修復(後述)があります。ここではICMPの説明をします。

ICMPは,障害が発生したときに通知をするネットワーク層に相当するプロトコルです。次のようなコマンドで実行されます。

pingコマンド

インターネット接続や無線LANで接続ができないとき、その状況を確認するのに、最もよく用いらられるコマンドです。エコー要求(Echo Request)を出すとネットワークの状況や情報を知らせるエコー応答(Echo Response)が得られます。
 pingは、echoやipconfigなどの基本的機能を組み合わせたコマンドです。

エコー要求/エコー応答
エコー(echo)とは、指定した文字列を画面表示する命令のことです。エコー要求(Echo Request)は知りたい情報をシステムに要求する機能、エコー応答(Echo Response)はそれを画面表示する機能です。これだけで、送信先(サーバ)と接続している(パケットが送れる)かどうかの確認ができます。

エコー応答を次のような形式で表示することができます。ICMPプロトコルにより、あえてping操作をしなくても自動的に表示するのが通常です。

到達不能メッセージ(Destination Unreachable)
宛先に到達できないとき,送信元のホストに到達不能メッセージが送られます。
  • Netwowork Unreachable:途中のルータで宛先のIPアドレスを見つけられなかった。
  • Host Unreachable:宛先のネットワークには到達したが,宛先IPアドレスを持つホストが存在しない。あるいはネットワークに接続されていない。
ipconfig
パソコンとルータの接続状況、ルーターのIPアドレスなど、ネットワークの状況を調べるコマンドです。
netstat
自分のPCからどこにTCP接続している相手先とプロトコルおよびTCPの状態を調べるコマンドです。自分のPCのローカルIPアドレスとポート番号、通信先のIPアドレス、ポート番号(上位プロトコル、HTTPなど)、TCPの状態(正常接続中か否か)が表示されます。
また、指定期間内の受信パケット数、エラー数などの統計資料を得ることもできます。

traceroute(tracert)コマンド

宛て先への経路の特定や経路を表示するコマンドです。pingコマンドでも行きつけたときにはその経過を得ることができますが、つながらなかったときには結果が得られません。宛先のサーバは正常に稼働しているので、経路中に何か問題が起こっている可能性が高いというような場合に使われます。

時間経過メッセージ(Time Exceeded)
TTL(Tome To Live:生存時間)が0になったとき,送信元のホストに送られます。これを用いて,経由するルータと時間経過を知ることができる traceroute(UNIX)や tracert(Windows)コマンドがあります。

経路制御の例

ホスト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 10.1.1.30 (同一ネットワーク内)のとき

自分の経路表のアから,ホストBは同一ネットワークにあることがわかるので,ARPによりホストBのMACアドレスを得て,直接送ります。

送信先がホストC 10.1.2.15 (隣のネットワークのとき)

ホスト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へ送ります。

送信先がホストD 10.1.3.15 (複雑な経路)のとき

ホスト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は後述)。

RIP(Routing Information Protocol)

距離ベクトル型のプロトコルです。
 ここでの距離とは、受信先IPアドレスに到着するまでのルータ経由回数(ホップ数)のことです。また,経路表での「次のルータのIPアドレス」のことを方向といい,距離と方向を合わせて距離ベクトルといいます。
 RIPは,距離(ホップ数)が最小となる距離ベクトルを求めて,経路表を作成する方法です。

RIPの概念図

各ルータ定期的(例えば30秒ごと)に経路情報をブロードキャストします。この経路情報が180秒(すなわち5回分)到着しなかったら,そのルータからの経路は接続が切れたものとして,経路表に通信不能のフラグをつけます。
 RIPは,その情報により,各ネットワークに達するまでのルータを経由する回数(ホップ)を計算します。

ネットワーク1
ルータAからネットワーク1へは,ルータAを通るだけ(ホップ数は①)ですので,経路表では,ネットワーク1への方向は,ルータAのネットワーク1側のIPアドレス 10.1.1.1 となります。
ネットワーク2
同様にネットワーク2への方向は,ルータAのネットワーク2側のIPアドレス 10.1.2.1 になります。
ネットワーク3
ネットワーク3へは,ルータA→ルータBの経路(ホップ数②)とルータA→ルータC→ルータDの経路(ホップ数②)の2つがありますが,そのうち,ホップ数の小さいルータA→ルータBの経路を採用して,ネットワーク3への方向は,ルータAから見えるルータBのIPアドレス 10.1.2.2 であるとします。
ネットワーク4
練習問題とします。

RIP2

RIP2はRIPに次のような改良をしたものです。

RIPでの故障発見と対応

下図で,ルータAはルータBに経路情報を通知し,ルータBはルータAとルータCに,ルータAからの情報に距離を1加えた情報を通知します。

RIPが正常のとき

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

無限カウントの図

無限カウントになるのを防ぐために,次のような対策がとられています。

OSPF(Open Shortest Path First)

OSPFの特徴は、全ルータの情報を相互参照できることにあります。すなわち、各経路の地図(トポロジー)を知ることにより、適切な選択ができます。

OSPFの仕組み

RIPの無限カウント対策をしても,次の赤線のようなループがあるときは,対処が困難になります。それに対処するには,ルータの接続関係をリンク状態といいますが,リンク状態を分析してループの検出する必要があります。

単純なループであれば,ブリッジやルータに装備されているスパニングツリー機能で対処できますが,ここではもっと複雑なループを対象とします。また,経路制御の観点からの考察にします。

ループが存在する場合の図

定時間間隔(10秒どと)にHELLOパケットを送信します。これが来なくなれば切断されたと判断します。切断あるいは回復になると,リンク状態更新パケットを送信して,他のルータに状態の変化を伝えます。

OSPFでは,リンク状態(トポロジー)を経路情報として交換します。それにより,どのネットワークとどのルータと接続しているかが各ルータに通知されます。また,経路距離をホップ数だけでなく,各リンクの状態やMTU(下記)などの重み付けをしたメトリックを作り,そのメトリックが最小(最大)になるように経路を選択します。

OSPFの欠点は、高性能ルータが必要になること、関係するルータ数が大きくなると複雑度が急増することにあります。高性能化は技術進歩でカバーできますが、ルータ数に関してはエリア分割が必要です。

経路MTU探索

パケットを効率よく送るにはパケットの長さを大きくするのがよいので、送受信にあたり、双方で扱える最大の長さMSS(Maximum Segument Size)をTCPヘッダで伝えあうのが一般的です。
 MTU(Maximum Transmission Unit)とは,データリンクで送信できるパケットの最大長です。MTUは、データリンクの種類によってMTUが異なるので、ルータの設定値以上長いパケットがくると、パケットを分割(フラグメンテーション)して転送します。これはルータの負荷を高くするし、通信効率を下げるので、送信元が事前に経路中のの最小MTUを調べる必要があります。

この最小MTUを探すことを経路MTU探索といいます。手作業では次のようになります。
 パケットを分割禁止のオプションにして送信すると、それより小さいMTUのルータはMTUの値を入れたICMPの到達不可能メッセージを戻します。パケット長さを変えて繰り返せば、経路中の最小のMTU値を見つけることができます。
 この最小MTU値でよいならば、パケットの長さを短くして送信し、不適切ならばその経路を経路表で不利用として、他の経路を選択しなおします。

エリア分割

リンク状態のデータを解析するための計算は複雑なので,ネットワークの規模が大きくなると,負荷が大きくなってしまいます。それを低減するために,OSPFではエリアという概念を取り入れます。ネットワーク同士やホスト同士をまとめてエリアとすることにより,ネットワーク全体を階層構造化し,そのエリアでの最適化を図ります。それをリンクステートアルゴリズムといいます。

IS-IS(Intermediate System to Intermediate System)

OSPFと同様なプロトコルですが、OSPFがTCP/IP系に準拠しているのに対して、IS-ISはOSI基本参照モデルに準拠したプロトコルです。IPv4とIPv6を同じプロトコルで使えるとか、分割方式がOSPFよりも自由にエリア分割をすることができるなどの利点はあるのですが、伝送データがOSIパケットで、IPパケットは使ないという他プロトコルとの連携が制限される欠点があり、利用は限定的です。それで、ここでは省略します。
 なお、IS-ISの拡張版のIntegrated IS-ISではIP上でも動作するようになっています。


BGP(Border Gateway Protocol)

ISPより向こうのインターネット、すなわちバックボーンではAS(Autonomous System)を構成単位としたネットワークになっています。→参照:バックボーン回線

BGPの区分

ASをまたぐ経路情報交換プロトコルをEGPといい、そこでの代表的な経路制御アルゴリズムにBGPがあります。
 BGPは、
   AS内を対象 内部BGP(interior BGP)
   AS間を対象 外部BGP(exterior BGP)
に分かれます。
 AS内であれば、RIPやOSPFでもよいのですが、内部BGPを使うこともあります。それは各ASでのポリシーによります。
 ここでは、外部BGPを想定し、それをBGPといいます。

AS番号

通常の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は、そこでの交換プロトコルとしても利用されます。


本シリーズの目次へ