網路層與路由#
網路層負責跨網段的資料傳輸,核心功能是路由選擇。本章涵蓋網關、靜態路由、動態路由和 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 |