1. 程式人生 > >路由子系統——基本概念與高階路由

路由子系統——基本概念與高階路由

本文討論IPv4的路由子系統。(IPv6對路由的處理不同)。

基本概念

關於路由子系統

路由子系統工作在三層,用來轉發入口流量。
路由子系統主要涉及 路由器、路由、路由表等概念。

  • 路由器: 配備多個網路介面卡(NIC),並且能利用自身網路資訊進行入口流量轉發的裝置。
  • 路由: 流量轉發,決定目的地的過程
  • 路由表:轉發資訊庫,該庫中儲存路由需要本地接收還是轉發的資訊, 以及轉發流量時所需要的資訊。(即,資訊庫用來判斷,要不要轉發,如果要轉發,向哪裡轉發).

    路由器有多張網絡卡,但有多張網絡卡的裝置不一定就是路由器
      實際上,出於以下等目的,非路由器可能有多張網絡卡。
    高可用性: 在某個NIC故障時,主機可以利用其他NIC繼續工作。
    更強的路由能力

    : 不同NIC連線不同區域網,但是不轉發區域網間流量。
    多路傳輸: 多個NIC進行捆綁,提高網路載荷。

地址

定向廣播

  • 子網廣播:目的地址為本地子網的廣播包。
  • 定向廣播:目的地址為遠端子網的廣播包。
    定向子網廣播針對ICMP ECHO REQUEST做特殊處理,以避免惡意攻擊。

可路由地址與不可路由地址
可路由地址: 一般的全球地址
不可路由地址: 本地地址 + 私有地址
不可路由地址,私有地址和本地環回地址不可路由。 當局域網(私有地址)的主機要與非該區域網的主機通訊時,需要通過NAT來隱藏不可路由的子網。

主地址 與 輔助地址

  出於如下一些目的,同一NIC可能需要配置多個IP。

  • 一臺主機上執行多項服務,而不同服務可能需要不同IP。(這也可以作為簡單的防火牆)
  • 由於硬體缺乏等原因,需要通過一塊NIC將兩個子網連線起來。

  同一NIC可以配備多個IP地址,每個IP地址都需要相對應的提供子網掩碼(使用者沒配置時,系統會自動提供)。(只有配置了子網掩碼,才能識別出那些地址通過該介面可達)。
  在linux中,同一 NIC 上的IP地址被劃分為 主IP地址 和 輔助IP地址。 一個子網掩碼只能有一個 主IP地址。
  當子網覆蓋的地址範圍發生重疊時,有可能出現 同一個地址 既對應某個子網掩碼的輔助地址, 又對應於另一個子網掩碼的主地址。舉個例子: 在介面eth0上原先有兩個地址:10.0.0.1/24, 10.0.0.2/24. 其中10.0.0.1/24 對應子網掩碼10.0.0.255的主地址; 當我們想eth0再新增一個地址 10.0.0.3/25 時, 10.0.0.3/25 既關聯到子網掩碼10.0.0.255的輔助地址, 又關聯到子網掩碼10.0.0.127的主地址。

路由表

特殊路由

  當路由器收到一個封包時,該封包有兩個流向: 本地接收 或 轉發。
  linux預設有兩張路由表,分別針對上面兩種流向的封包。

  • 用於本地地址的路由表:從該表查詢成功,則表明封包發給自己,需要傳遞到相鄰的更高層協議。
  • 用於其他地址的路由表:該表資料項可使用者手動插入 , 或者有路由協議動態插入。

路由型別與動作:

+ 轉  發:預設動作,當封包與路由表中的表項想匹配時,執行此動作
+ 黑  洞:丟棄封包
+ 不可到達:丟棄封包,生成ICMP主機不可達訊息
+ 禁  止:丟棄封包,生成ICMP被過濾訊息
+ 放  棄:與策略路由聯合使用

路由快取

路由表中的項可能達到幾十萬條,因此需要較小的路由快取表。
Linux將路由快取分為兩部分:

  1. 協議相關的快取 ——快取框架部分
  2. 協議無關的快取(DST)——巢狀在第一部分

路由表 VS 路由快取 
  路由表使用子網地址的集合, 而路由快取項與單個IP地址關聯。(因此他們使用的查詢演算法也不同)

查詢

最大字首匹配:到達一個目的地址可能有多條路由,需要使用貪心匹配

.