Featured image of post ルーティングとは?パケットが宛先に届く仕組みをやさしく解説【第24回】

ルーティングとは?パケットが宛先に届く仕組みをやさしく解説【第24回】

この記事でわかること

  • ルーティングとは何か、スイッチとルーターの違い
  • ルーターが転送先を決めるときに参照する「ルーティングテーブル」の見方
  • デフォルトゲートウェイとは何か、なぜ必要か
  • ネクストホップとホップ数の考え方
  • TTL(Time To Live)がパケットの無限ループを防ぐ仕組み
  • tracerouteコマンドで経路を実際に確認する方法

はじめに

前回の記事でNATを学び、「プライベートIPしか持たないデバイスがどうやってインターネットと通信するか」がわかりました。

では、そのパケットは具体的にどうやって目的地まで届くのでしょうか。自宅のパソコン(192.168.1.10)からGoogleのサーバー(142.250.185.46)まで、ネットワークは無数にまたがっています。1台のルーターが「全世界の宛先への経路」を把握しているわけではありません。

答えはリレーです。パケットは複数のルーターを1台ずつ経由しながら、少しずつ宛先へ近づいていきます。このリレーの仕組みを「ルーティング」と呼びます。


スイッチとルーターの違い

ルーティングを理解するために、まずスイッチとルーターの役割の違いをおさらいしておきます。

スイッチ ルーター
活躍する場所 同じネットワークの内側 ネットワークとネットワークの間
判断に使うアドレス MACアドレス(物理アドレス) IPアドレス(論理アドレス)
主な役割 同じネットワーク内でパケットを届ける 異なるネットワーク間でパケットを転送する

スイッチは「同じビルのフロア内に荷物を届ける社内便」、ルーターは「別の都市や別の国に荷物を送る宅配業者」に例えられます。フロア内の配達はスイッチが、フロアをまたいだり建物を出る荷物はルーターが担います。


ルーティング(Routing)とは

英単語を分解してみましょう。

  • Route(ルート):「道」「経路」という意味。「ルート確認」「通勤ルート」と同じ使い方です
  • -ing(〜ing):「〜すること」を表す英語の語尾

合わせると「経路を決めること」です。

ルーターはパケットを受け取るたびに「このパケットを次にどこへ転送するか」を判断します。このプロセス全体をルーティングと呼びます。

郵便局の仕分けセンターのイメージが近いです。全国の仕分けセンターに荷物が届くたびに、作業員が宛先の住所を見て「北海道宛てはこのトラックへ、沖縄宛てはあちらのトラックへ」と振り分けていきます。ルーターも同じように、宛先IPアドレスを見て転送先を決めています。


ルーティングテーブル——ルーターの「地図」

ルーターは「ルーティングテーブル(Routing Table)」という一覧表を内部に持ち、転送先を判断するときに参照します。

  • Routing(ルーティング):経路を決めること
  • Table(テーブル):「表」「一覧」という意味

ルーティングテーブルは、いわばルーターの地図です。「このネットワーク宛てのパケットが来たら、次はここへ転送しろ」という対応が書き込まれています。

実際のルーティングテーブルは次のような形をしています。

宛先ネットワーク サブネットマスク ネクストホップ 出口ポート
192.168.1.0 /24 直接 eth0
192.168.2.0 /24 192.168.1.254 eth0
10.0.0.0 /8 192.168.1.253 eth0
0.0.0.0 /0 192.168.1.1 eth0

各列の意味はこうです。

  • 宛先ネットワーク:このネットワーク宛てのパケットが来たら、この行のルールを使う
  • サブネットマスク(プレフィックス長):宛先の一致を判断するためのマスク。前回の記事で学んだものです
  • ネクストホップ:次にどのルーターへ転送するか。「直接」は同じネットワーク内に届けられるという意味
  • 出口ポート:どの物理ポートからパケットを送り出すか

ルーターの判断プロセス

パケットが届いたとき、ルーターは次の手順で転送先を決めます。

① パケットの宛先IPアドレスを確認する

② ルーティングテーブルのエントリと照合する
   宛先IPアドレスが「宛先ネットワーク」に含まれるか調べる

③ 一致するエントリが複数あれば、最も範囲が狭いものを優先する
   (これを「ロンゲストマッチ(最長一致)」と呼びます)

④ 選ばれたエントリの「ネクストホップ」にパケットを転送する

⑤ どのエントリにも一致しなければ、最下行の「0.0.0.0/0」で転送する

「最も範囲が狭いエントリを優先する」という点がポイントです。

宛先が 192.168.1.50 のとき、192.168.1.0/240.0.0.0/0 の両方が条件に合います。しかしルーターは範囲が狭い(より具体的な) 192.168.1.0/24 を選びます。「東京都渋谷区への荷物」と「どこかわからない荷物」の2つのルールが当てはまるとき、より具体的な「東京都渋谷区」のルールを使う——それと同じ発想です。


デフォルトゲートウェイ——「わからなければここへ」

ルーティングテーブルの最下行に 0.0.0.0/0 というエントリがあります。これがデフォルトルートです。どのエントリとも一致しなかったパケットは、すべてこのエントリに従って転送されます。

0.0.0.0/0 はすべてのIPアドレスに一致する最も範囲が広いエントリです。他のどのエントリにも勝てないため、必ず「最後の受け皿」として機能します。

パソコンの設定に「デフォルトゲートウェイ」という項目があります。英単語の意味はこうです。

  • Default(デフォルト):「初期設定」「何も指定しないときに使われる設定」という意味。「ゲームのデフォルト設定に戻す」と同じ使い方です
  • Gateway(ゲートウェイ):Gate(ゲート)= 門・入り口、Way(ウェイ)= 道 → 「出入り口」という意味

デフォルトゲートウェイは「宛先がわからないパケットをとりあえず送り届ける出口」です。

自宅のパソコンは 192.168.1.0/24 のネットワーク内については把握しています。しかしその外——インターネット上の無数のネットワーク——については何も知りません。だからこそ「わからないものはすべてルーターに渡す」という設定が必要です。

家庭のパソコンのデフォルトゲートウェイには、ほぼ必ず 192.168.1.1192.168.0.1 のような自宅ルーターのIPアドレスが設定されています。

パソコン:「宛先が 142.250.185.46 のパケット……どこかわからない」
      ↓
デフォルトゲートウェイ(192.168.1.1)に転送
      ↓
自宅ルーター:「ISPから教わった経路情報がある」→ さらに先へ転送
      ↓
ルーターを何台も経由しながら…
      ↓
Googleのサーバーに到着

駅を出たあと「とりあえず大通りまで行けば、あとはわかる」という感覚に近いです。パソコンにとってのデフォルトゲートウェイは、自宅ルーターという「とりあえず向かう大通り」です。


ネクストホップとホップ——バトンをつなぐリレー

  • Next(ネクスト):「次の」という意味
  • Hop(ホップ):「ぴょんと跳ぶ」という意味。ルーター1台ぶんの転送を「1ホップ」と数えます

パケットが宛先に届くまで、何台ものルーターを1ホップずつ経由します。

パソコン → ルーターA → ルーターB → ルーターC → 目的のサーバー
          1ホップ目   2ホップ目   3ホップ目

各ルーターは「次のルーター(ネクストホップ)はここだ」という情報だけを持ちます。最終的な目的地まで一気に見通す必要はありません。郵便の仕分けセンターと同じで、「次の仕分けセンターに送ればよい」だけです。自宅から沖縄に荷物を送るとき、東京の仕分けセンターは「次は大阪へ」と知っていれば十分です。大阪から先は大阪の仕分けセンターが判断します。

自宅からGoogleのサーバーまで、多いときは20ホップを超えることもあります。


TTL——パケットが迷子にならないための仕組み

ルーティングの設定に誤りがあると、パケットがルーターAとルーターBの間を永遠に行き来し続ける「ルーティングループ」が発生することがあります。放置するとネットワーク全体が渋滞します。

これを防ぐのが TTL(Time To Live) です。

  • Time(タイム):「時間」
  • To(トゥー):「〜のための」
  • Live(ライブ):「生きる」「存在し続ける」

直訳すると「生き続けられる時間」ですが、実際には時間ではなくルーターを通過できる「残り回数」です。

パケットが生まれるとき、TTLには初期値(OSによって異なりますが、64や128が多い)がセットされます。ルーターを1台通過するたびに、TTLの値が1ずつ減らされます。TTLが0になったパケットはその場で破棄されます。

パソコン(TTL=64)→ ルーターA(TTL=63)→ ルーターB(TTL=62)→ …
                                                         TTL=0になったら破棄

何百回ループしても、いずれTTLが0になってパケットは消えます。ネットワーク上に永遠に漂い続けるパケットは存在できない——そういう設計になっています。


静的ルーティングと動的ルーティング

ルーティングテーブルの作り方には2種類あります。

静的ルーティング(Static Routing)

  • Static(スタティック):「静的な」「固定の」「変化しない」という意味

管理者が手動でルーティングテーブルに経路を書き込む方法です。シンプルで動作が予測しやすいですが、ネットワーク構成が変わるたびに人が設定を変更しなければなりません。

家庭用ルーターは基本的にこちらです。「インターネットへの出口はプロバイダーのルーター1台だけ」という単純な構成なので、静的ルーティングで十分です。

動的ルーティング(Dynamic Routing)

  • Dynamic(ダイナミック):「動的な」「変化する」「自動で更新される」という意味

ルーター同士が自動で情報を交換し合い、ルーティングテーブルを自動更新する方法です。どこかのルーターや回線が故障しても、迂回路を自動で見つけ直します。

インターネットの中核を支える大規模なルーターは「BGP(Border Gateway Protocol)」という動的ルーティングのプロトコルを使っており、世界中のルーターが何十万もの経路情報をリアルタイムで交換し合っています。


tracerouteでルーティングを実際に見てみよう

パケットが実際にどのルーターを経由しているかを表示するコマンドがあります。

Windowsの場合

tracert google.com

Mac・Linuxの場合

traceroute google.com

実行すると、次のような出力が得られます(数値は環境によって変わります)。

 1  192.168.1.1     1 ms     ← 自宅のルーター(デフォルトゲートウェイ)
 2  10.130.x.x      5 ms     ← プロバイダーの機器
 3  203.0.113.10   12 ms     ← ISPのルーター
 4  203.0.113.20   14 ms     ← ISPのバックボーンルーター
 5  72.14.x.x      18 ms     ← Googleのネットワーク
 6  142.250.x.x    20 ms     ← Googleのサーバー付近

左の数字が「ホップ番号(何台目のルーターか)」、その右の時間が「そのルーターまでのパケットの往復時間(ms = ミリ秒)」です。

* * * と表示される行があることもあります。そのルーターが応答を返さない設定になっているだけで、パケット自体は通過しています。通過していいけれど居場所は教えない——セキュリティ上の設定です。

自宅から試してみると、1ホップ目に自宅ルーターのIPアドレスが表示され、2ホップ目以降でプロバイダーの機器が現れるはずです。ホップを追うにつれて応答時間(ms)が少しずつ増えていく様子が、パケットが遠くへ旅していることを視覚的に教えてくれます。


まとめ

  • **ルーティング(Routing)**は「パケットをどの経路で転送するかを決めること」。スイッチがネットワーク内を担うのに対し、ルーターはネットワーク間を担う
  • ルーターはルーティングテーブル(経路の一覧表)を参照して転送先を決める。複数のエントリが条件に合うときは、最も範囲が狭いエントリが優先される(ロンゲストマッチ)
  • デフォルトゲートウェイは「行き先がわからないパケットをとりあえず送り届ける出口」。家庭のパソコンには自宅ルーターのIPアドレスが設定される
  • パケットは複数のルーターを1ホップずつリレーしながら目的地に届く
  • TTLはルーターを通過するたびに1ずつ減り、0になるとパケットが破棄される。ルーティングループによる無限転送を防ぐ安全弁
  • tracert(Windows)・traceroute(Mac/Linux)を使うと、パケットが経由するルーターの一覧と応答時間を実際に確認できる