ネットワークの教科書NETWORK

第3章 データが届くしくみ3-3コース全体 19回中11本目

入門読了 約9分

ルーティングの基本 ― ルータはどうやって道を選ぶのか

ルータが次にどこへパケットを送るかをどう決めているのかを、ルーティングテーブルの読み方と最長一致のルールから理解する記事です。

結論

ルータは、ルーティングテーブルを見て一番近い経路へ転送する。それだけです

ルータは宛先までの道のりを丸ごと知っているわけではありません。手元のルーティングテーブル(経路の一覧表)を見て、 宛先IPアドレスに最も近い経路を1つ選び、そこへパケットを渡す。それだけを1ホップずつ繰り返すことで、パケットは目的地にたどり着きます。

駅の乗り換え案内に近い駅員は目的地までの全ルートを頭の中で持っているわけではありません。「次にどのホームへ行けばいいか」だけを案内します。 ルータも同じで、次にどのルータへ渡せばいいかだけを、テーブルを見て判断しています。
読み方

ルーティングテーブルの読み方

ルーティングテーブルは、次の4つの項目でできた表です。あるルータの実際のテーブルを例に、1行ずつ読んでいきます。

宛先ネットワークネクストホップ出力インタフェースメトリック
0.0.0.0/0203.0.113.1Gi0/01
10.0.0.0/8192.168.1.2Gi0/12
10.1.0.0/16192.168.1.6Gi0/21
10.1.2.0/24(直接接続)Gi0/30
192.168.1.0/24(直接接続)Gi0/10
  1. 1

    宛先ネットワーク

    この行がどの範囲の宛先を担当するかを示す。10.1.2.0/24 なら 10.1.2.0〜10.1.2.255 が対象。

  2. 2

    ネクストホップ

    次に渡す隣接ルータのIPアドレス。自分に直接つながっているネットワークには次のルータが不要なので「直接接続」になる。

  3. 3

    出力インタフェース

    パケットをどのポートから送り出すか。ネクストホップと対になっている。

  4. 4

    メトリック

    その経路のコスト(優先度の指標)。同じ宛先に複数の経路がある場合、値が小さい方が優先される。

たとえば宛先が 8.8.8.8 だったとします。このテーブルでは、ほかのどの行の宛先ネットワークにも当てはまらないため、 最後の受け皿である 0.0.0.0/0 の行が使われ、ネクストホップ 203.0.113.1 へ、Gi0/0 から送り出されます。

山場

複数の行が当てはまるときは「最長一致」

さきほどのテーブルで、宛先が 10.1.2.55 だったらどうでしょうか。実は次の4つの行すべてに当てはまります。

宛先ネットワーク(行)10.1.2.55に一致する?
0.0.0.0/0一致する(プレフィックス長 0)
10.0.0.0/8一致する(プレフィックス長 8)
10.1.0.0/16一致する(プレフィックス長 16)
10.1.2.0/24一致する(プレフィックス長 24)← 最長なのでこれが選ばれる

このように複数の行が同時に当てはまるとき、ルータはプレフィックス長が最も長い行(=最も範囲が狭く、宛先を限定できている行)を選びます。 これを最長一致(ロンゲストマッチ)と呼びます。この例では 10.1.2.0/24 が選ばれ、 直接接続の Gi0/3 からそのまま届けられます。

なぜ長い方を選ぶのかプレフィックス長が長いほど、その行は宛先を狭く・正確に言い当てています。番地でいえば「東京都」より「東京都千代田区一丁目1番」の方が、 より具体的で正確な行き先だと分かるのと同じ発想です。

では宛先が 10.5.9.20 だったらどうでしょうか。当てはまるのは 10.0.0.0/8(プレフィックス長8)と0.0.0.0/0(プレフィックス長0)の2行だけです(10.1.0.0/1610.1.2.0/24 は 2オクテット目が10.5と一致しないため対象外)。ここでも最長一致が働き、プレフィックス長が長い 10.0.0.0/8 の行が選ばれ、 ネクストホップ 192.168.1.2 へ渡されます。

受け皿

デフォルトルート(0.0.0.0/0)

0.0.0.0/0 は、プレフィックス長が0、つまり「全てのIPアドレス」に一致する特別な行です。 ほかのどの行にも当てはまらなかったときに使われる、最後の受け皿として機能します。

プレフィックス長が0なので、最長一致のルールに従えば常に一番優先度が低くなります。 具体的な経路(/8/24 など)が1つでも一致すれば、そちらが必ず優先されます。 家庭用ルータでは「インターネットへの出口」がこのデフォルトルートに設定されています。

作り方

ルーティングテーブルは誰が作るのか:スタティックとダイナミック

ルーティングテーブルの中身は、大きく2つの方法で作られます。

スタティックルーティング(静的経路)

管理者が手作業で1行ずつ設定する方式です。経路が変わらない小規模なネットワークや、 「とりあえずこっちへ送る」というデフォルトルートの指定によく使われます。設定はシンプルですが、 回線障害などで経路が使えなくなっても自動では切り替わりません。

ダイナミックルーティング(動的経路)

ルータどうしがルーティングプロトコルという共通の手順で経路情報を教え合い、テーブルを自動的に作る方式です。 回線が切れれば、別のルータから聞いた情報をもとに自動で経路を組み替えます。規模が大きいネットワークほど、 手作業では追いつかないためこちらが使われます。代表的なプロトコルは次の3つです。

名前方式主な役割
RIP距離ベクトル型ホップ数だけで経路を判断する。小規模網向けの古いプロトコル
OSPFリンクステート型ネットワーク全体の地図を共有し、最短経路を計算する。組織内(AS内)で使う
BGPパスベクトル型組織と組織(AS間)で経路情報を交換する。インターネットの経路制御を支える

深入りはしませんが、RIP・OSPFは同じ組織のネットワークの中(AS内)で使うIGP、 BGPは組織と組織の間(AS間)で使うEGPという住み分けだけ覚えておけば十分です。

安全装置

TTLとループ防止

ルーティングテーブルの設定を誤ると、パケットがルータ間をぐるぐる回り続けるルーティングループが起きることがあります。 これを防ぐしくみがTTL(Time To Live)です。

  1. 1

    送信元がTTLに初期値を入れる

    初期値はOSによって異なる(例:Linuxは64、Windowsは128)。

  2. 2

    ルータを1台通過するたびに1減る

    ホストを経由しても減らない。減るのはルータ(L3の転送機器)を通るときだけ。

  3. 3

    0になったら破棄

    その時点のルータがパケットを破棄し、ICMPの「Time Exceeded」を送信元へ返す。

これにより、経路の設定ミスでループが起きても、パケットは有限回のホップで必ず消滅します。ネットワーク全体が 同じパケットで埋め尽くされる事態を防いでいるのが、この地味な1カウントダウンです。

実践

経路を自分の目で見る

自分のPCのルーティングテーブルと、実際に通る経路をコマンドで確認してみます。

ip route自分のPCが持つルーティングテーブルを見る(Linux)
$ ip route
default via 203.0.113.1 dev eth0
10.0.0.0/8 via 192.168.1.2 dev eth1 metric 2
10.1.0.0/16 via 192.168.1.6 dev eth2
10.1.2.0/24 dev eth3 proto kernel scope link src 10.1.2.1
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1

# 先頭の default が 0.0.0.0/0(デフォルトルート)に対応します。
# Windowsは route print、macOSは netstat -rn で同じ内容が見られます。
traceroute / tracert宛先までに実際にどのルータを通っているかを見る
$ traceroute 8.8.8.8
 1  203.0.113.1        1.203 ms   ← 自宅ルータ
 2  198.51.100.9       5.446 ms   ← プロバイダ
 3  198.51.100.14     12.882 ms   ← プロバイダの先
 4  8.8.8.8           14.001 ms   ← 目的地

# TTLを1, 2, 3…と1ずつ増やしながら送り、
# 各ルータが「TTL超過」で返す応答から1ホップずつ経路を割り出しています。
練習

練習問題(全5問)

選んでから「採点する」を押すと、解説つきで答え合わせができます。

Q1ルーティングテーブルの「ネクストホップ」が表しているものは?
Q2ルーティングテーブルに次の3行があるとき、宛先 10.1.2.55 のパケットはどの行で転送される? ① 10.0.0.0/8 ② 10.1.0.0/16 ③ 10.1.2.0/24
Q3宛先 10.5.9.20 に対して、ルーティングテーブルに 0.0.0.0/0(デフォルトルート)と 10.0.0.0/8 の両方が一致する場合、どちらが選ばれる?
Q4TTLが0になったパケットはどうなる?
Q5OSPFの説明として正しいものは?
次の回

コースを読み進める