Day 5: ルーティング

今日学ぶこと

  • ルーティングの基本概念
  • 静的ルーティングと動的ルーティング
  • ルーティングテーブルの読み方
  • 距離ベクトル型プロトコル(RIP)
  • リンクステート型プロトコル(OSPF)
  • パスベクトル型プロトコル(BGP)
  • デフォルトゲートウェイとtraceroute

ルーティングとは

ルーティングとは、パケットを送信元から宛先まで最適な経路で転送する仕組みです。ルーターはルーティングテーブルに基づいて、パケットを次のルーター(ネクストホップ)に転送します。

flowchart LR
    subgraph NetA["ネットワークA\n192.168.1.0/24"]
        PC["PC\n192.168.1.10"]
    end
    subgraph NetB["ネットワークB\n10.0.0.0/24"]
        R1["ルーターA"]
    end
    subgraph NetC["ネットワークC\n172.16.0.0/24"]
        R2["ルーターB"]
    end
    subgraph NetD["ネットワークD\n203.0.113.0/24"]
        Server["サーバー\n203.0.113.50"]
    end
    PC -->|"1. デフォルトGW"| R1
    R1 -->|"2. ネクストホップ"| R2
    R2 -->|"3. 直接接続"| Server
    style NetA fill:#3b82f6,color:#fff
    style NetB fill:#f59e0b,color:#fff
    style NetC fill:#8b5cf6,color:#fff
    style NetD fill:#22c55e,color:#fff

ルーティングの基本動作

  1. パケットを受信する
  2. 宛先IPアドレスをルーティングテーブルと照合する
  3. 最長一致(Longest Prefix Match) で最適な経路を選択する
  4. ネクストホップにパケットを転送する
  5. 一致するルートがなければパケットを破棄(またはデフォルトルートに転送)

ルーティングテーブル

ルーティングテーブルは、ルーターが持つ経路情報のデータベースです。

# Show routing table (Linux)
ip route show

# Example output:
# default via 192.168.1.1 dev eth0
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
# 10.0.0.0/8 via 192.168.1.254 dev eth0

# Show routing table (Windows)
route print

# Show routing table (macOS)
netstat -rn

ルーティングテーブルの構成要素

要素 説明
宛先ネットワーク パケットの宛先 192.168.1.0/24
ネクストホップ 次に転送するルーターのIP 10.0.0.1
出力インターフェース パケットを送出するインターフェース eth0
メトリック 経路のコスト(小さい方が優先) 10
経路の種類 直接接続、静的、動的(RIP、OSPFなど) OSPF

最長一致(Longest Prefix Match)

ルーターは、宛先IPアドレスに最も長く一致するプレフィックスの経路を選択します。

例:宛先が 192.168.1.100 の場合

ルーティングエントリ プレフィックス長 ネクストホップ 選択
0.0.0.0/0 /0 10.0.0.1
192.168.0.0/16 /16 10.0.0.2
192.168.1.0/24 /24 10.0.0.3 選択

/24 が最も長く一致するため、ネクストホップ 10.0.0.3 が選択されます。


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

flowchart TB
    subgraph Routing["ルーティングの種類"]
        Static["静的ルーティング\n管理者が手動で設定"]
        Dynamic["動的ルーティング\nプロトコルが自動学習"]
    end
    subgraph DProtocols["動的ルーティングプロトコル"]
        DV["距離ベクトル型\nRIP"]
        LS["リンクステート型\nOSPF, IS-IS"]
        PV["パスベクトル型\nBGP"]
    end
    Dynamic --> DProtocols
    style Static fill:#3b82f6,color:#fff
    style Dynamic fill:#22c55e,color:#fff
    style DV fill:#f59e0b,color:#fff
    style LS fill:#8b5cf6,color:#fff
    style PV fill:#ef4444,color:#fff
    style Routing fill:#1e293b,color:#fff
    style DProtocols fill:#1e293b,color:#fff

静的ルーティング

管理者がルーティングテーブルを手動で設定する方式です。

# Add a static route (Linux)
sudo ip route add 10.0.0.0/8 via 192.168.1.254

# Add a static route (Windows)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.254

# Delete a static route (Linux)
sudo ip route del 10.0.0.0/8
メリット デメリット
設定がシンプル ネットワーク変更時に手動で更新が必要
CPUやメモリの負荷が少ない 大規模ネットワークでは管理が困難
セキュリティが高い(予測可能) 障害時の自動切り替えができない
帯域幅を消費しない スケーラビリティが低い

動的ルーティング

ルーティングプロトコルを使って、ルーター間で経路情報を自動的に交換する方式です。

メリット デメリット
ネットワーク変更に自動対応 設定が複雑
障害時に経路を自動切り替え CPU・メモリを消費
大規模ネットワークに対応 帯域幅を消費
管理コストが低い セキュリティリスク(経路の改ざんなど)

距離ベクトル型プロトコル:RIP

RIP(Routing Information Protocol)

RIPは最もシンプルな動的ルーティングプロトコルです。メトリックとしてホップ数(通過するルーター数)を使用します。

特徴 詳細
アルゴリズム Bellman-Ford
メトリック ホップ数(最大15。16は到達不能)
更新間隔 30秒ごとにルーティングテーブル全体をブロードキャスト
収束速度 遅い
バージョン RIPv1(クラスフル)、RIPv2(クラスレス、マルチキャスト)
flowchart LR
    subgraph RIPExample["RIPの経路選択"]
        A["ルーターA"] -->|"1ホップ"| B["ルーターB"]
        B -->|"1ホップ"| D["ルーターD\n(宛先)"]
        A -->|"1ホップ"| C["ルーターC"]
        C -->|"1ホップ"| E["ルーターE"]
        E -->|"1ホップ"| D
    end
    style A fill:#3b82f6,color:#fff
    style B fill:#22c55e,color:#fff
    style C fill:#f59e0b,color:#fff
    style D fill:#ef4444,color:#fff
    style E fill:#f59e0b,color:#fff
    style RIPExample fill:#1e293b,color:#fff

上の例では、A→B→D(2ホップ)とA→C→E→D(3ホップ)のうち、RIPはホップ数が少ない A→B→D を選択します。ただし、帯域幅や遅延は考慮しません。

RIPの問題点

  • カウント・トゥ・インフィニティ: 障害発生時、ルーター間でメトリックが際限なく増加する問題
  • 収束が遅い: ネットワーク変更が全体に伝わるまで時間がかかる
  • スケーラビリティ: 最大15ホップの制限があり、大規模ネットワークには不向き

対策として、スプリットホライズンルートポイズニングホールドダウンタイマーなどが使われます。


リンクステート型プロトコル:OSPF

OSPF(Open Shortest Path First)

OSPFは、企業ネットワークで最も広く使われている動的ルーティングプロトコルです。ネットワーク全体のトポロジーマップを構築し、ダイクストラのアルゴリズム(SPF) で最短経路を計算します。

特徴 詳細
アルゴリズム Dijkstra(SPF)
メトリック コスト(帯域幅に基づく。100Mbps基準)
更新方式 トポロジー変更時のみ(LSA: Link State Advertisement)
収束速度 速い
エリア構造 階層的(バックボーン Area 0 + 通常エリア)

OSPFのエリア構造

OSPFは大規模ネットワークを効率的に管理するため、エリアという単位に分割します。

flowchart TB
    subgraph Area0["Area 0(バックボーン)"]
        ABR1["ABR 1"]
        ABR2["ABR 2"]
        Core["コアルーター"]
        ABR1 --- Core --- ABR2
    end
    subgraph Area1["Area 1"]
        R1["ルーター1"]
        R2["ルーター2"]
        R1 --- R2
    end
    subgraph Area2["Area 2"]
        R3["ルーター3"]
        R4["ルーター4"]
        R3 --- R4
    end
    ABR1 --- R1
    ABR2 --- R3
    style Area0 fill:#ef4444,color:#fff
    style Area1 fill:#3b82f6,color:#fff
    style Area2 fill:#22c55e,color:#fff
  • Area 0(バックボーンエリア): すべてのエリアが接続される中心エリア
  • ABR(Area Border Router): エリア間を接続するルーター
  • 各エリア内で独立してSPF計算を実行するため、大規模ネットワークでも効率的

OSPFの動作手順

  1. 隣接関係の確立: Helloパケットで近隣ルーターを発見
  2. LSAの交換: ルーターが自身のリンク状態情報をフラッディング
  3. LSDBの構築: 全ルーターが同一のLink State Database(LSDB)を構築
  4. SPF計算: ダイクストラのアルゴリズムで最短経路ツリーを計算
  5. ルーティングテーブル更新: 計算結果をルーティングテーブルに反映

RIP vs OSPF

特徴 RIP OSPF
アルゴリズム Bellman-Ford Dijkstra
メトリック ホップ数 コスト(帯域幅ベース)
最大規模 15ホップ 事実上無制限
更新方式 定期的(30秒) 変更時のみ
収束速度 遅い 速い
帯域幅消費 大きい 小さい
設定の難易度 簡単 中程度

パスベクトル型プロトコル:BGP

BGP(Border Gateway Protocol)

BGPは、インターネットの骨格を支えるルーティングプロトコルです。AS(Autonomous System:自律システム) 間の経路制御を行います。

特徴 詳細
種類 EGP(Exterior Gateway Protocol)
用途 AS間のルーティング(インターネットの骨格)
メトリック パス属性(AS_PATH、NEXT_HOP、LOCAL_PREFなど)
プロトコル TCP ポート179
現行バージョン BGP-4

AS(自律システム)とは

ASは、単一の管理組織が運用するネットワークの集合です。各ASには一意のASN(AS Number) が割り当てられます。

flowchart LR
    subgraph AS1["AS 65001\nISP A"]
        R1["ルーターA"]
    end
    subgraph AS2["AS 65002\nISP B"]
        R2["ルーターB"]
    end
    subgraph AS3["AS 65003\n企業C"]
        R3["ルーターC"]
    end
    R1 <-->|"eBGP"| R2
    R2 <-->|"eBGP"| R3
    R1 <-->|"eBGP"| R3
    style AS1 fill:#3b82f6,color:#fff
    style AS2 fill:#8b5cf6,color:#fff
    style AS3 fill:#22c55e,color:#fff

BGPの経路選択

BGPは単純なメトリックではなく、複数のパス属性に基づいてベストパスを選択します。

優先順位 属性 説明
1 LOCAL_PREF ローカル優先度(高い方が優先)
2 AS_PATH 経由するASの数(短い方が優先)
3 ORIGIN 経路の起源(IGP > EGP > Incomplete)
4 MED Multi-Exit Discriminator(低い方が優先)
5 eBGP > iBGP 外部BGPを優先
6 IGPメトリック ネクストホップへの内部コスト
7 ルーターID 最も小さいIDを優先(タイブレーカー)

iBGP と eBGP

  • eBGP(External BGP): 異なるAS間で使用
  • iBGP(Internal BGP): 同一AS内で使用

デフォルトゲートウェイ

デフォルトゲートウェイは、同一ネットワーク外の宛先にパケットを送信する際に使うルーターのアドレスです。ルーティングテーブルに一致するエントリがない場合、デフォルトゲートウェイにパケットを転送します。

デフォルトルート: 0.0.0.0/0 → デフォルトゲートウェイ
# Check default gateway (Linux)
ip route | grep default

# Check default gateway (Windows)
ipconfig | findstr "Default Gateway"

# Check default gateway (macOS)
netstat -rn | grep default

tracerouteでパケットの経路を追跡

traceroute(Windowsではtracert)は、パケットが宛先に到達するまでに通過するルーターを表示するツールです。

動作原理

  1. TTL=1のパケットを送信 → 最初のルーターが「Time Exceeded」を返す
  2. TTL=2のパケットを送信 → 2番目のルーターが「Time Exceeded」を返す
  3. TTL=nのパケットを送信 → 宛先に到達するまで繰り返す
sequenceDiagram
    participant PC as PC
    participant R1 as ルーター1
    participant R2 as ルーター2
    participant Dest as 宛先サーバー
    PC->>R1: TTL=1のパケット
    R1-->>PC: ICMP Time Exceeded(10ms)
    Note over PC: Hop 1: ルーター1のIP
    PC->>R1: TTL=2のパケット
    R1->>R2: TTL=1に減少
    R2-->>PC: ICMP Time Exceeded(25ms)
    Note over PC: Hop 2: ルーター2のIP
    PC->>R1: TTL=3のパケット
    R1->>R2: TTL=2に減少
    R2->>Dest: TTL=1に減少
    Dest-->>PC: ICMP Port Unreachable(40ms)
    Note over PC: Hop 3: 宛先に到達
# Traceroute (Linux/macOS)
traceroute example.com

# Example output:
# 1  192.168.1.1     1.234 ms  0.987 ms  1.102 ms
# 2  10.0.0.1        5.432 ms  4.876 ms  5.123 ms
# 3  172.16.0.1     12.345 ms 11.876 ms 12.098 ms
# 4  93.184.216.34  25.678 ms 24.567 ms 25.234 ms

# Traceroute (Windows)
tracert example.com

tracerouteの読み方

要素 説明
ホップ番号 何番目のルーターか
IPアドレス そのルーターのIPアドレス
応答時間(3回分) RTT(Round Trip Time)。3回測定
* * * 応答なし(ファイアウォールでブロック等)

パケットがインターネットを旅する流れ

flowchart LR
    subgraph Home["自宅ネットワーク"]
        PC["PC\n192.168.1.10"]
        GW["ルーター\n192.168.1.1"]
    end
    subgraph ISP["ISPネットワーク"]
        ISP1["ISPルーター1"]
        ISP2["ISPルーター2"]
    end
    subgraph IX["インターネット交換点"]
        IXR["IXルーター"]
    end
    subgraph Dest["宛先ネットワーク"]
        DR["宛先ルーター"]
        Server["Webサーバー"]
    end
    PC --> GW --> ISP1 --> ISP2 --> IXR --> DR --> Server
    style Home fill:#3b82f6,color:#fff
    style ISP fill:#f59e0b,color:#fff
    style IX fill:#8b5cf6,color:#fff
    style Dest fill:#22c55e,color:#fff
  1. 自宅ネットワーク: PCからデフォルトゲートウェイ(ルーター)へ
  2. ISPネットワーク: ISPのルーターを経由
  3. インターネット交換点(IX): ISP間の接続ポイント(BGPで経路制御)
  4. 宛先ネットワーク: 宛先のサーバーに到達

まとめ

本日の学習内容

トピック ポイント
ルーティング パケットを最適な経路で宛先に転送する仕組み
ルーティングテーブル 宛先ネットワーク、ネクストホップ、メトリックなどを保持
最長一致 最も長いプレフィックスに一致する経路を選択
静的 vs 動的 静的は手動設定、動的はプロトコルで自動学習
RIP ホップ数ベース。シンプルだが大規模には不向き
OSPF コスト(帯域幅)ベース。エリア構造で大規模対応
BGP AS間のルーティング。インターネットの骨格
traceroute TTLを利用して経路上のルーターを特定

キーポイント

  1. 最長一致(Longest Prefix Match) がルーティングの基本原則
  2. RIPはシンプルだが15ホップの制限があり、小規模向け
  3. OSPFはエリア構造とSPFアルゴリズムで企業ネットワークに最適
  4. BGPはAS間の経路制御でインターネット全体を支えている
  5. tracerouteはTTLを1ずつ増やしてICMP Time Exceededで経路を特定

練習問題

基礎レベル

  1. 静的ルーティングと動的ルーティングのメリットをそれぞれ2つ挙げてください。
  2. RIPのメトリックは何で、最大値はいくつですか?
  3. デフォルトゲートウェイの役割を説明してください。

中級レベル

  1. 以下のルーティングテーブルがある場合、宛先 10.1.2.100 のパケットはどこに転送されますか?
    宛先            ネクストホップ
    10.0.0.0/8      192.168.1.1
    10.1.0.0/16     192.168.1.2
    10.1.2.0/24     192.168.1.3
    0.0.0.0/0       192.168.1.254
    
  2. OSPFがRIPよりも大規模ネットワークに適している理由を3つ説明してください。
  3. tracerouteの出力で * * * が表示される原因を3つ挙げてください。

チャレンジレベル

  1. BGPのAS_PATH属性を使った経路選択について、以下のシナリオで説明してください。AS100のルーターがAS200(宛先ネットワーク10.0.0.0/24)への経路を2つ持っています。
    • 経路1: AS_PATH = AS300 AS200(AS300経由)
    • 経路2: AS_PATH = AS400 AS500 AS200(AS400、AS500経由)
  2. OSPFのコスト計算について、以下のネットワークでルーターAからルーターDへの最短コスト経路を求めてください(基準帯域幅 = 100Mbps)。
    • A → B: 100Mbps リンク
    • B → D: 10Mbps リンク
    • A → C: 1Gbps リンク
    • C → D: 100Mbps リンク
  3. あなたのPCから 8.8.8.8(Google DNS)へのtracerouteを実行し、各ホップがどのような役割のルーターか推測してください。(実際にコマンドを実行して結果を分析)

参考リンク


次回予告

Day 6: DNS では、ドメイン名の仕組み、DNS名前解決のプロセス、DNSレコードの種類(A、AAAA、CNAME、MX、NS、TXT)、再帰クエリと反復クエリの違い、そしてdig/nslookupコマンドを使った実践的なDNSトラブルシューティングを学びます。