網路層與路由#

網路層負責跨網段的資料傳輸,核心功能是路由選擇。本章涵蓋網關、靜態路由、動態路由和 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 地址在每一跳更新:

PC-A (192.168.1.101) → 路由器A → 路由器B → PC-B (192.168.4.101)

封包經過路由器A後:
  MAC: 路由器A→路由器B 的 MAC
  IP:  192.168.1.101 → 192.168.4.101  (不變)

封包經過路由器B後:
  MAC: 路由器B→PC-B 的 MAC
  IP:  192.168.1.101 → 192.168.4.101  (不變)

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

IP 地址會被轉換:

PC-A (192.168.1.101) → NAT路由器 → PC-B (192.168.1.101)
     內網IP              公網轉換          內網IP

經過 NAT 後:
  源IP: 192.168.1.101 → 公網IP(如 183.134.189.34)
  目標IP: 看情況轉換

私有 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),廣泛用於資料中心:

┌─────────────────────────────────────────────────────────────┐
│  OSPF 工作原理                                               │
├─────────────────────────────────────────────────────────────┤
│  1. 發現鄰居:向鄰居發送 Hello 包                            │
│  2. 建立鄰接關係:交換資料庫描述                             │
│  3. 同步鏈結狀態資料庫:所有路由器擁有相同的網路拓撲視圖      │
│  4. 計算最短路徑:使用 Dijkstra 算法                         │
│  5. 更新路由表:根據計算結果更新                             │
└─────────────────────────────────────────────────────────────┘

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

BGP 協定#

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

    AS 100                    AS 200                    AS 300
┌──────────────┐         ┌──────────────┐         ┌──────────────┐
│   企業網路   │←─eBGP─→│   電信骨幹    │←─eBGP─→│   雲服務商   │
│              │         │              │         │              │
│ iBGP 內部同步 │         │              │         │              │
└──────────────┘         └──────────────┘         └──────────────┘

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