網路層與路由#

網路層負責跨網段的資料傳輸,核心功能是路由選擇。本章涵蓋網關、靜態路由、動態路由和 NAT 技術。

網關的角色#

什麼是網關#

網關(Gateway) 是連接不同網段的設備,通常是路由器的一個網口。

┌─────────────────────────────────────────────────────────────┐
│  區域網 A(192.168.1.0/24)                                  │
│  ┌─────┐  ┌─────┐  ┌─────┐                                 │
│  │ PC1 │  │ PC2 │  │ PC3 │                                 │
│  └──┬──┘  └──┬──┘  └──┬──┘                                 │
│     └────────┴────────┴──────┬─────────────────────────────│
│                              │                              │
│                       ┌──────┴──────┐                       │
│                       │  網關       │                       │
│                       │ 192.168.1.1 │                       │
│                       └──────┬──────┘                       │
└──────────────────────────────┼──────────────────────────────┘
                               │
                          [外部網路]

網關位址必須和本機在同一網段。例如 192.168.1.0/24 網段的網關通常是 192.168.1.1

路由器的本質#

路由器本質上是一台有多個網卡的設備,每個網卡連接一個區域網:

              ┌─────────────────────────────────┐
              │           路由器                │
              │  ┌───┐  ┌───┐  ┌───┐  ┌───┐   │
              │  │eth0│ │eth1│ │eth2│ │eth3│   │
              │  └─┬─┘  └─┬─┘  └─┬─┘  └─┬─┘   │
              └────┼──────┼──────┼──────┼──────┘
                   │      │      │      │
               區域網A 區域網B 區域網C 區域網D

- 每個網口都是所連接區域網的網關
- 路由器負責在不同網段之間轉發資料包

MAC 與 IP 的變化規則#

轉發過程中的變化#

項目經過路由器時說明
MAC 位址一定會變每跳都更新為下一跳的 MAC
IP 位址看情況轉發網關不變,NAT 網關會變

歐洲十國遊模式(轉發網關)#

IP 位址全程不變,只有 MAC 位址在每一跳更新:

sequenceDiagram
    participant A as PC-A<br/>192.168.1.101
    participant RA as 路由器A
    participant RB as 路由器B
    participant B as PC-B<br/>192.168.4.101

    A->>RA: MAC: PC-A → 路由器A<br/>IP: 192.168.1.101 → 192.168.4.101
    Note over RA: MAC 改寫,IP 不變
    RA->>RB: MAC: 路由器A → 路由器B<br/>IP: 192.168.1.101 → 192.168.4.101
    Note over RB: MAC 改寫,IP 不變
    RB->>B: MAC: 路由器B → PC-B<br/>IP: 192.168.1.101 → 192.168.4.101

玄奘西行模式(NAT 網關)#

IP 位址會被轉換:

sequenceDiagram
    participant A as PC-A<br/>192.168.1.101
    participant NAT as NAT 路由器
    participant B as 外部伺服器<br/>203.0.113.50

    A->>NAT: 來源IP: 192.168.1.101<br/>目標IP: 203.0.113.50
    Note over NAT: NAT 轉換<br/>來源IP 改為公網IP
    NAT->>B: 來源IP: 183.134.189.34(公網)<br/>目標IP: 203.0.113.50
    B->>NAT: 來源IP: 203.0.113.50<br/>目標IP: 183.134.189.34
    Note over NAT: 反向轉換<br/>目標IP 還原為內網IP
    NAT->>A: 來源IP: 203.0.113.50<br/>目標IP: 192.168.1.101

私有 IP 位址(如 192.168.x.x)無法在公網路由,必須轉換為公網 IP。

路由表與路由規則#

路由表結構#

# 查看路由表
ip route show
route -n

# 典型輸出
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/8 via 192.168.1.254 dev eth0

每條路由規則包含:

欄位說明範例
目標網段想去哪裡10.0.0.0/8
出口設備從哪個網口出去dev eth0
下一跳下一個路由器位址via 192.168.1.254

設定靜態路由#

# 加入路由
ip route add 10.176.48.0/20 via 10.173.32.1 dev eth0

# 刪除路由
ip route del 10.176.48.0/20

# 加入預設路由
ip route add default via 192.168.1.1

策略路由#

除了根據目標 IP 路由,還可以根據其他條件選擇路由表:

# 建立路由表
echo "200 custom" >> /etc/iproute2/rt_tables

# 根據來源位址選擇路由表
ip rule add from 192.168.1.0/24 table 200

# 在自訂表中設定路由
ip route add default via 10.0.0.1 table 200
策略路由應用場景

雙線接入:公司有兩條互聯網線路

  • 來自 192.168.1.x 的流量走電信線路
  • 來自 192.168.2.x 的流量走聯通線路
ip rule add from 192.168.1.0/24 table telecom
ip rule add from 192.168.2.0/24 table unicom

ip route add default via 電信網關IP table telecom
ip route add default via 聯通網關IP table unicom

動態路由協定#

為什麼需要動態路由#

  • 網路拓撲可能變化
  • 手動維護路由表太複雜
  • 需要自動發現最優路徑

兩類核心演算法#

演算法原理代表協定適用場景
距離向量每個路由器告知鄰居到所有目標的距離RIP, BGP簡單網路, 跨域
鏈結狀態每個路由器廣播自己的鏈結狀態,各自計算最短路徑OSPF, IS-IS資料中心, 企業網

OSPF 協定#

OSPF(Open Shortest Path First) 是內部網關協定(IGP),廣泛用於資料中心:

flowchart TD
    S1["1. 發現鄰居:向鄰居發送 Hello 包"] --> S2["2. 建立鄰接關係:交換資料庫描述"]
    S2 --> S3["3. 同步鏈結狀態資料庫:所有路由器擁有相同的網路拓撲視圖"]
    S3 --> S4["4. 計算最短路徑:使用 Dijkstra 演算法"]
    S4 --> S5["5. 更新路由表:根據計算結果更新"]

當存在多條相同代價的路徑時,OSPF 支援負載均衡,這對高可用性很重要。

BGP 協定#

BGP(Border Gateway Protocol) 是外部網關協定,用於自治系統(AS)之間:

flowchart LR
    subgraph AS100["AS 100 - 企業網路"]
        R1["路由器1"] -. "iBGP" .- R2["路由器2"]
    end
    subgraph AS200["AS 200 - 電信骨幹"]
        R3["骨幹路由器"]
    end
    subgraph AS300["AS 300 - 雲服務商"]
        R4["雲端路由器"]
    end
    AS100 -- "eBGP" --- AS200
    AS200 -- "eBGP" --- AS300

BGP 的特點:

  • 考慮策略而非純粹的距離
  • 可以控制哪些路由對外公開
  • 是互聯網的骨幹協定

NAT 網路位址轉換#

NAT 類型#

類型說明應用場景
SNAT來源位址轉換內網訪問外網
DNAT目標位址轉換外網訪問內網服務
NAPT埠號位址轉換多內網主機共用一個公網 IP

NAPT 工作原理#

內網                          NAT 路由器                     外網
┌─────────┐                  ┌────────────┐               ┌─────────┐
│192.168.1.10:5000│ ───────→ │            │ ────────────→ │         │
│                 │          │ 轉換表:    │  公網IP:10001  │ Web伺服器│
│192.168.1.20:6000│ ───────→ │ 10001→1.10:5000│ ─────────→ │         │
│                 │          │ 10002→1.20:6000│            │         │
└─────────────────┘          └────────────┘               └─────────┘

- NAT 路由器維護轉換表,記錄內外網位址和埠號的對應關係
- 回傳的資料包根據轉換表反向轉換

Linux NAT 設定#

# 開啟 IP 轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

# SNAT:內網訪問外網
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

# DNAT:將外網 8080 埠映射到內網 192.168.1.100:80
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80

路由選擇流程#

當一個資料包需要轉發時,路由器的決策流程:

flowchart TD
    A[1. 提取目標 IP 位址] --> B[2. 查詢路由表<br/>尋找最長匹配前綴]
    B --> C{找到匹配項?}
    C -->|是| D[3. 確定出口和下一跳]
    C -->|否| E{有預設路由?}
    E -->|是| D
    E -->|否| F[丟棄封包]
    D --> G[4. ARP 解析下一跳的 MAC 位址]
    G --> H[5. 更新 MAC 頭<br/>從指定埠發送]

每經過一個路由器,IP 頭的 TTL 減 1。當 TTL 為 0 時丟棄資料包,防止無限循環。

常用診斷指令#

# 查看路由表
ip route show
netstat -rn

# 追蹤路由路徑
traceroute www.google.com
mtr www.google.com

# 查看 NAT 轉換表(Linux)
conntrack -L

# 測試連通性
ping -c 4 192.168.1.1

本章小結#

概念關鍵點
網關連接不同網段的設備,是路由器的網口
路由表包含目標網段、出口設備、下一跳三要素
靜態路由手動設定,適合簡單網路
動態路由OSPF 用於內部,BGP 用於自治系統間
NAT位址轉換,解決 IP 位址不足問題
MAC 變化每跳必變;IP 變化取決於是否 NAT