Mímisbrunnr知恵の泉

← コンピュータネットワーク 一覧

🎓 レベル:標準 | 重要度:A(必須) 📎 前提:サブネット化とCIDR・VLSM

要点(BLUF)

ルーティングテーブルの中身

ルータは「どのネットワークへは、どこへ渡せばよいか」の表を持ちます。

Router# show ip route
Codes: C - connected, S - static, O - OSPF, D - EIGRP
C    192.168.1.0/24 is directly connected, Gi0/0
S    10.0.0.0/8 [1/0] via 192.168.1.254
O    172.16.5.0/24 [110/20] via 192.168.1.253
S*   0.0.0.0/0 [1/0] via 192.168.1.254

各行の読み方:

転送の意思決定(3段階の優先順位)

宛先 172.16.5.10 を転送するとき、ルータは次の順で考えます。

graph TD
  A["宛先IPを受信"]
  B["テーブルで一致する経路を全て探す"]
  C["最長プレフィックス一致を選ぶ(ロンゲストマッチ)"]
  D["同じ宛先を複数の情報源で学んでいたらADが小さい方"]
  E["同じ情報源内ならメトリックが小さい方"]
  F["次ホップへ転送"]
  A --> B --> C --> D --> E --> F

1. ロンゲストマッチ

10.1.1.1 宛てに対し 10.0.0.0/810.1.0.0/16 の両方が一致するなら、より具体的な /16 を選びます。プレフィックスが長いほど宛先を細かく指しており、優先されます。

import ipaddress
dest = ipaddress.ip_address("10.1.1.1")
routes = ["10.0.0.0/8", "10.1.0.0/16", "0.0.0.0/0"]
matches = [r for r in routes if dest in ipaddress.ip_network(r)]
best = max(matches, key=lambda r: ipaddress.ip_network(r).prefixlen)
print("matched:", matches)
print("longest-prefix winner:", best)

実行結果:

matched: ['10.0.0.0/8', '10.1.0.0/16', '0.0.0.0/0']
longest-prefix winner: 10.1.0.0/16

2. アドミニストレーティブディスタンス(AD)

異なるプロトコルが同じ宛先・同じプレフィックス長を教えたとき、どの情報源を信じるか。AD(小さいほど信頼)で決めます。

情報源AD
直結(connected)0
静的(static)1
EIGRP90
OSPF110
RIP120

3. メトリック

同じプロトコル内で複数経路があるとき、プロトコル固有のコスト(OSPFは帯域ベースのコスト、RIPはホップ数)で最小を選びます。

ルーティングと転送は別物

なぜ各ルータが独立に判断してよいのか(設計の直観)

パケットには「最終目的地IP」だけが書かれ、全経路は書かれません。各ルータが自分のテーブルで次の1ホップだけを決め、それを宛先まで連鎖させます。これは中央管制なしで地球規模に拡張できる設計で、途中の経路が変わっても、各ルータがテーブルを更新するだけで自動的に追従します(ホップバイホップ転送)。

⚠️ よくある誤解

対応 lab

関連