この記事でわかること
- ルーティングとは何か、スイッチとルーターの違い
- ルーターが転送先を決めるときに参照する「ルーティングテーブル」の見方
- デフォルトゲートウェイとは何か、なぜ必要か
- ネクストホップとホップ数の考え方
- 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/24 と 0.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.1 や 192.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)を使うと、パケットが経由するルーターの一覧と応答時間を実際に確認できる