Day 04 我們一路追到這裡:
PC A
↓
Default Gateway
↓
Router 收到 Packet
Router 拆掉這一段的 Ethernet Header 之後,看到裡面的:
Destination IP
接下來才是真正的問題:
Router 知道最終目的地的 IP,但它怎麼知道「下一站」要往哪裡?
答案就是:
Routing Table
今天不急著背一堆 Route 名稱。
我們繼續追同一包資料,看 Router 到底怎麼做決定。
Day 04 為了先理解 Default Gateway,只需要看到「PC → Router → 另一個 Network」。
今天要看 Router 怎麼選下一站,所以我們把網路再延伸一段:
PC A
192.168.1.10/24
│
▼
Router A
G0/0:192.168.1.1/24
G0/1:192.168.2.1/24
│
│ 192.168.2.0/24
│
▼
Router B
G0/0:192.168.2.2/24
G0/1:10.0.0.1/24
│
▼
Server
10.0.0.20/24
這張圖先省略中間可能存在的 Switch。
原因跟 Day 04 一樣:
Switch 有可能存在,也可能沒有;今天要追的是 Router 的 Layer 3 決策。
現在 PC A 要把資料送給:
10.0.0.20
PC A 已經知道這不是自己的網段,所以先把 Frame 交給 Default Gateway:
192.168.1.1
也就是 Router A。
接下來換 Router A 接手。
Router A 收到 Frame 後,會先處理這一段的 Layer 2 封裝。
再往裡面看 IP Packet:
Source IP = 192.168.1.10
Destination IP = 10.0.0.20
現在 Router A 要回答:
10.0.0.20 要從哪裡送出去?
它不會憑感覺猜。
它會查自己的:
Routing Table
看到:
Destination IP = 10.0.0.20
不代表 Routing Table 一定要有:
10.0.0.20 → 下一站
Router 通常會用「網段」來記路。
例如:
10.0.0.0/24
→ 下一跳 192.168.2.2
意思是:
只要目的 IP 屬於 10.0.0.0/24,就先往 192.168.2.2 送。
所以:
10.0.0.20
10.0.0.50
10.0.0.200
都可以匹配同一條 Route。
這也是為什麼前面一直在練:
IP
Subnet Mask
Network
因為 Router 真正拿來做路由比對的核心,不只是單一主機 IP,而是目的網段。
先看 Router A 自己的介面:
G0/0:192.168.1.1/24
G0/1:192.168.2.1/24
只要介面有正確設定,而且處於可用狀態,Router 就知道這些 Network 是直接連在自己身上的:
192.168.1.0/24
192.168.2.0/24
這就是:
Connected Route
可以先記成:
這個 Network 直接接在我的介面上,所以我本來就知道怎麼到。
到了 Packet Tracer 或 Cisco IOS 裡,之後執行:
show ip route
可能會看到類似:
C 192.168.1.0/24 is directly connected, GigabitEthernet0/0
L 192.168.1.1/32 is directly connected, GigabitEthernet0/0
C 192.168.2.0/24 is directly connected, GigabitEthernet0/1
L 192.168.2.1/32 is directly connected, GigabitEthernet0/1
這裡先認兩個字母就好:
C = Connected
直接連在 Router 上的 Network
L = Local
Router 自己這個介面的 IP
例如:
C 192.168.1.0/24
代表整個:
192.168.1.0/24
直接連在這個 Router 上。
而:
L 192.168.1.1/32
指的是 Router 自己 G0/0 的 IP。
今天知道看到 C、L 不用慌就夠了。
現在回到我們真正的目的地:
10.0.0.20
Router A 直接連著的是:
192.168.1.0/24
192.168.2.0/24
但 Server 所在的是:
10.0.0.0/24
這個 Network 在 Router B 後面:
Router A
│
│ 192.168.2.0/24
▼
Router B
│
▼
10.0.0.0/24
所以 Router A 不會因為「看得到 Router B」就自動知道 Router B 後面還有哪些 Network。
它需要另外知道:
要去 10.0.0.0/24,先往 Router B 走。
工程師可以在 Router A 加一條:
10.0.0.0/24
→ 下一跳 192.168.2.2
這就是:
Static Route
注意,Static Route 不是:
192.168.2.2
這一個 IP。
它是一整條路由規則:
目的網段 下一跳
10.0.0.0/24 → 192.168.2.2
前面在回答:
哪些 Destination IP 要套用這條路?
後面在回答:
符合之後,下一站先交給誰?
Cisco IOS 上可以寫成:
ip route 10.0.0.0 255.255.255.0 192.168.2.2
今天不急著背指令。
先把它翻成白話:
如果目的地屬於 10.0.0.0/24,就先把 Packet 往 192.168.2.2 送。
這裡的:
192.168.2.2
就是:
Next-hop IP
也就是 Router B。
現在 Router A 已經選到:
10.0.0.0/24
→ 192.168.2.2
但它還要確認:
192.168.2.2 要從哪個介面出去?
Router A 本來就有:
192.168.2.0/24
→ G0/1
這條 Connected Route。
而:
192.168.2.2
就在:
192.168.2.0/24
裡面。
所以 Router A 知道:
要找 192.168.2.2
→ 從 G0/1 出去
到這裡,Layer 3 的「下一站」已經決定好了。
這裡就接回 Day 03、Day 04。
Router A 知道:
Next-hop IP
=
192.168.2.2
但 Ethernet Frame 還需要:
Destination MAC
所以如果 ARP Cache 裡還沒有 Router B 的 MAC,Router A 會在 192.168.2.0/24 這一段做 ARP:
Who has 192.168.2.2?
Router B 回覆自己的 MAC。
接著 Router A 才能重新建立新的 Ethernet Frame。
這一次會變成:
Source MAC
=
Router A G0/1 的 MAC
Destination MAC
=
Router B G0/0 的 MAC
但裡面的 IP Packet,先不考慮 NAT 等會改寫位址的情況,仍然是:
Source IP = 192.168.1.10
Destination IP = 10.0.0.20
所以 Day 04 的觀念又回來了:
Destination IP
→ 最終目的地
Destination MAC
→ 目前這一跳要交給誰
現在 Packet 來到 Router B。
Router B 的介面是:
G0/0:192.168.2.2/24
G0/1:10.0.0.1/24
所以它本來就會知道:
10.0.0.0/24
→ directly connected
Router B 一看 Destination IP:
10.0.0.20
就會發現:
這個目的地就在我直接連著的 10.0.0.0/24。
因此它不需要再找另一台 Router。
如果這段是 Ethernet,而且還不知道 Server 的 MAC,就再 ARP:
Who has 10.0.0.20?
拿到 Server 的 MAC 後,再建立下一個 Ethernet Frame,把資料送出去。
所以整條路其實一直在重複同一個節奏:
看 Destination IP
↓
查 Routing Table
↓
決定出口 / Next Hop
↓
如果需要,ARP 找這一跳的 MAC
↓
建立新的 Layer 2 Frame
↓
送出去
這裡很容易混在一起。
Day 04 才剛學:
Default Gateway
Day 05 又會看到:
Default Route
名字很像,但它們不是同一件事。
站在 PC A 的角度:
Default Gateway
=
目的地不在本地網段時
先交給哪台 Router
例如:
PC A
Default Gateway = 192.168.1.1
站在 Router 的 Routing Table 角度:
Default Route
=
沒有更精準的 Route 可以匹配時
最後使用的兜底路線
IPv4 會看到:
0.0.0.0/0
所以可以先這樣分:
Default Gateway
→ 主機:不同網段先交給誰?
Default Route
→ Router:沒有更精準路線時往哪走?
兩個都可能指向「下一台 Router」,但概念和所在位置不同。
假設 Routing Table 裡有:
192.168.1.0/24 → directly connected
192.168.2.0/24 → directly connected
10.0.0.0/24 → 192.168.2.2
0.0.0.0/0 → ISP Router
如果 Destination IP 是:
8.8.8.8
前面幾條都不符合。
最後還有:
0.0.0.0/0
可以匹配。
這條就是 Default Route。
它的概念可以先記成:
其他不知道怎麼走的目的地,就走這條。
假設 Routing Table 裡已經有:
10.0.0.0/8 → Router X
10.0.0.0/24 → Router Y
0.0.0.0/0 → Router Z
目的地是:
10.0.0.20
它其實可以匹配:
10.0.0.0/8
10.0.0.0/24
0.0.0.0/0
Router 會選 Prefix 最長、範圍最精準的:
10.0.0.0/24
這叫:
Longest Prefix Match
可以先記:
多條已存在的 Route 都能匹配目的 IP 時,先走最精準的那一條。
例如:
/24
會比:
/8
精準。
而:
/0
就是最不精準、最後兜底的 Default Route。
先不要把它們跟 Longest Prefix Match 混在一起。
今天先抓一個大方向:
Longest Prefix Match
→ 封包真的要轉送時
多條已在 Routing Table 裡的 Route 都符合
要選哪個 Prefix
而之後會學到的:
Administrative Distance
Metric
比較偏向:
同一個目的網段如果從不同來源學到多條路,Router 要怎麼決定哪些路比較可信、比較好。
這部分留到後面學 Dynamic Routing 時再拆。
今天只要先不要把:
Longest Prefix Match
AD
Metric
當成同一件事情就好。
目前我們讓 Router A 知道:
10.0.0.0/24
→ 192.168.2.2
的方法,是工程師手動設定 Static Route。
但如果公司有:
10 台 Router
50 台 Router
100 台 Router
每一條路都人工維護就會變得很麻煩。
所以 Router 也可以透過 Routing Protocol 彼此學習路由。
CCNA 後面會碰到:
OSPF
這種就是 Dynamic Routing。
今天先知道:
Connected Route
→ Router 從自己的介面自然知道
Static Route
→ 工程師人工設定
Dynamic Route
→ Router 透過 Routing Protocol 學到
就夠了。
現在整條資料流可以接起來了。
Destination IP = 10.0.0.20
↓
發現不同網段
↓
找 Default Gateway
↓
ARP 找 Router A 的 MAC
↓
Frame 送給 Router A
收到 Frame
↓
看到 Destination IP = 10.0.0.20
↓
查 Routing Table
↓
匹配 10.0.0.0/24
↓
Static Route 指向 192.168.2.2
↓
Next Hop = Router B
↓
如果需要,ARP 找 Router B 的 MAC
↓
重新建立 Ethernet Frame
↓
送給 Router B
收到 Packet
↓
Destination IP = 10.0.0.20
↓
查 Routing Table
↓
10.0.0.0/24 是 Connected
↓
如果需要,ARP 找 Server 的 MAC
↓
重新建立 Ethernet Frame
↓
送到 Server
看到這裡,Routing Table 就不再是一張憑空出現的表。
它其實只是 Router 每次收到 Packet 後,用來回答:
這個 Destination IP,下一步要往哪裡?
Routing Table
→ Router 用來決定目的網段往哪裡走
Connected Route
→ 直接連在 Router 介面上的 Network
Local Route
→ Router 自己介面的 IP
Static Route
→ 工程師人工設定的路由規則
Next-hop IP
→ 下一台要交給的 Router IP
Default Route
→ 沒有更精準 Route 時的兜底路線
Longest Prefix Match
→ 多條 Route 都符合時,選最精準的 Prefix
再把 Day 04 的觀念一起帶著:
IP
→ 最終要去哪裡
MAC
→ 這一跳要交給誰
Routing Table
→ 下一跳應該往哪裡