昨天文章講到了 AS 與 AS 之間的角色關係
而今天文章將來講這些角色關係之間的路由關係
首先,當路由器收到一個封包之後,會先看看 L3 的目的地(Dst. IP)是不是自己
如果是的話,就會把這個封包接起來自己處理
如果不是的話,就會看這個目的地 IP 在路由表中有沒有符合的路徑可以走
如果沒有的符合的話,就會出現 Destination Unreachable 這個 ICMP 錯誤
通常你網路有問題的時候 ping 就會看到這個錯誤
路由器轉送封包也是有一定原則的
會先以路由表裡 Mask 最長的為優先
這個專有名詞叫 Longest Prefix Match,也有人縮寫為 LPM
假設路由表裡面有三條紀錄,這邊為了好理解把 Mask 拆出來再寫一遍
假設 Distance (Metric) 都為 1 的情況下
Prefix | Mask | Destination | Distance |
---|---|---|---|
1.1.0.0/23 | 23 | eth0 | 1 |
1.1.0.0/24 | 24 | eth1 | 1 |
1.1.1.0/24 | 24 | eth2 | 1 |
假設今天路由器收到了一個目的地為 1.1.1.1 的封包,我們來看一下路由表的包含情況
有兩條路由包含了這個 IP
但因為有這個原則,會採用 Mask 最大的那一條,也就是1.1.1.0/24
因為 24 > 23
最終將這個收到的封包網 eth2 這個介面丟出去
這樣的規則可以讓路由器或電腦有效的將路由表的大小縮小,最終形成一個字典樹結構
讓我們在上面那張路由表加上一條預設路由,讓沒有 Match 到的封包往預設的接口送
就會形成一張這樣的圖
在這個情況下,B 這條路由只有當 C 或 D 其中一條路由失效的時候才會生效
因為 C 與 D 恰好涵蓋了整段 B 所涵蓋了範圍,所以不會使用到
上面都是 Distance 恰好一樣的情況下,那
讓我們來看一張新的路由表
Prefix | Mask | Destination | Distance |
---|---|---|---|
0.0.0.0/0 | 0 | eth0 | 1 |
1.1.0.0/24 | 24 | eth1 | 1 |
1.1.1.0/24 | 24 | eth1 | 1 |
1.1.1.0/24 | 24 | eth2 | 2 |
在這個情況下 1.1.1.0/24 有兩組一樣的匹配條件,但目的地與距離都不相同
這時候你的路由器會選擇距離最小的那一組,也就是往 eth1 送
而往 eth2 送的那一組會失效直到往 eth1 的那組失效,所以也可以被當作是備援路由
要記住,Longest Prefix Match 還是會先判斷,如果找到多組一樣的才會看距離
那如果如果有多條路由 Prefix 與距離都一樣呢?
這時候路由器就會平均的往這幾條路由的目的地送
我們知道了路由器怎麼根據路由表來轉送封包的了
那路由器怎麼有這些路由表的呢?
這就是由其他 AS 的路由器所互相交換的了
一般來說,我們可以查詢 whois 的方式,查到 AS 跟其他 AS 的輸入輸出規則
但這東西通常都會被忘記更新,而且還有其他的一些過濾規則,所以基本上都是參考用的
像是查詢筆者個人的 ASwhois AS207468
就可以看到以下的資訊
其中 import 與 export 就是路由輸出的規則
像這裡說從 AS206499 AS205591 AS 202409 AS31142 接收他們給的所有路由
(路由是誰發的不重要)
然後輸出給他們 AS-SEADOG007 這個 AS-SET 裡面的路由
當我們去查詢 AS-SEADOG007 這個 AS-SET,我們可以看到裡面包含了兩個 AS
也就是說,向上面那四個 AS 輸出由這個 AS-SET 所發出的路由(AS Origin == AS131668 or AS207468)
當然,這個是有寫出來的一些路由收發政策
首先 我們有 AS1 AS2 AS3 AS4 AS5 五個 AS
為了簡化情況,AS 3 與 AS 4 是 Transit Provider
每個 AS 都有一段 N.N.N.0/24 的網段
而且他們希望每個人都能連接的到
以下會是各個 AS 的Policy
根據這些 Policy 以下是每個 AS 所收到的路由表與收發情況
Prefix | Origin | Next-hop | Status |
---|---|---|---|
2.2.2.0/24 | AS2 | AS3 | Active |
3.3.3.0/24 | AS3 | AS3 | Active |
4.4.4.0/24 | AS4 | AS3 | Active |
5.5.5.0/24 | AS5 | AS3 | Active |
Prefix | Origin | Next-hop | Status |
---|---|---|---|
1.1.1.0/24 | AS1 | AS3 | Active |
1.1.1.0/24 | AS1 | AS4 | |
3.3.3.0/24 | AS3 | AS3 | Active |
3.3.3.0/24 | AS3 | AS4 | |
4.4.4.0/24 | AS4 | AS3 | |
4.4.4.0/24 | AS4 | AS4 | Active |
5.5.5.0/24 | AS5 | AS3 | |
5.5.5.0/24 | AS5 | AS4 | Active |
這邊有多筆重複的路由,因為 AS 2 連接了兩個上游,但有些狀態不是 Active
不是 Active 的原因在後面介紹 BGP 的章節會講到
Prefix | Origin | Next-hop | Status |
---|---|---|---|
1.1.1.0/24 | AS1 | AS1 | Active |
2.2.2.0/24 | AS2 | AS2 | Active |
2.2.2.0/24 | AS2 | AS4 | |
4.4.4.0/24 | AS4 | AS4 | Active |
5.5.5.0/24 | AS5 | AS4 | Active |
Prefix | Origin | Next-hop | Status |
---|---|---|---|
1.1.1.0/24 | AS1 | AS3 | Active |
2.2.2.0/24 | AS2 | AS2 | Active |
2.2.2.0/24 | AS2 | AS3 | |
3.3.3.0/24 | AS3 | AS3 | Active |
5.5.5.0/24 | AS5 | AS5 | Active |
Prefix | Origin | Next-hop | Status |
---|---|---|---|
1.1.1.0/24 | AS1 | AS4 | Active |
2.2.2.0/24 | AS2 | AS4 | Active |
3.3.3.0/24 | AS3 | AS4 | Active |
4.4.4.0/24 | AS4 | AS4 | Active |
假設今天有一個封包要從 1.1.1.1 走往 5.5.5.5
這時候 AS1 的 Router 查詢了路由表,發現要往 AS3 送
AS3 的路由器接到了包,查了他的路由表,發現要往 AS4 送
AS4 也查了他的路由表,發現要往 AS5 送
封包就這樣不知不覺地被轉到了目的地了
AS1 -> AS3 -> AS4 -> AS5
今天我們看到了 AS 彼此交換路由的原則,也看到了路由器是怎麼依照路由表來轉送封包的,這些背景知識介紹完後,我們終於可以開始進入安全的環節了
明天將會以不同的網路模型來談談可能存在的攻擊面向