系列TCP/IP協議-靜態IP選路(007)

林灣村龍貓發表於2019-04-28

一、引言

選路是IP層最重要的功能之一。該選路規則核心一點是每一個主機都維護了一張路由表。IP層進行的選路實際上是一種選路機制,它搜尋路由表並決定向哪個網路介面傳送分組。

二、原理

在路由表中,是有一定的搜尋規則來確定資料包傳送網路埠的:

  • 先搜尋搜尋匹配的主機地址;
  • 沒有找到,搜尋匹配的網路地址;
  • 再沒有找到,搜尋預設表項(預設表項一般在路由表中被指定為一個網路表項,其網路號為 0)。

可以使用netstat -rn列出當前主機的路由表:

圖1. 當前主機的路由表項
說明,每一行表示一個路由表項,第一行中的第一列為0.0.0.0,這是一個預設路由表表項。每個主機都有一個或多個預設路由。

  • 第1列(Destination):指明目的地,搜尋該列。
  • 第2列(Gateway):該網路/主機的閘道器地址。
  • 第3列(Genmask):該主機/網路的子網掩碼。
  • 第4列(Flags):標誌位,有5種不同的標誌位
    • U:有該值表示當前路由表項可用,沒有表示不可用;
    • G:有該值表示當前路由是到一個閘道器(路由器),沒有表示目的地與該主機是直接相連的;
    • H:有該值表示當前表項的目的地是一個主機(中間可能跳轉多次,不一定直接相連),沒有該值表示當前路由表項的目的地是一個網路。
    • D:有該值表示該表項由路由重定向報文建立,沒有不是;
    • M:有該值表示該表項由路由重定向報文修改,沒有不是。
  • 第5列(MSS):Default maximum segment size for TCP connections over this route.
  • 第6列(Window):Default window size for TCP connections over this route.
  • 第7列(irtt):Initial RTT (Round Trip Time). The kernel uses this to guess about the best TCP protocol parameters without waiting on (possibly slow) answers.
  • 第8列(Ifac):該路由表項屬於哪個網路介面(一臺主機可以有多個網路介面)

三、路由表的建立

從來沒有說過這些路由表是如何被建立的,這裡介紹如何建立路由表。通常有三種方式來建立路由表-route(主動新增)、ICMP重定向差錯資料包(被動修改)、ICMP路由發現請求/應答資料包(主動詢問)。

1. 路由表可以是在系統初始化的時候通過route命令來新增預設路由。

圖2. route新增路由命令
這是一種手動新增方式。

2. 通過ICMP重定向差錯資料包

當IP資料包應該被髮送到另一個路由器時,收到資料包的路由器就要傳送ICMP重定向差錯報文給ICMP資料包的傳送端。ICMP重定向資料包只能有路由器生成,主機接收使用。

圖3.ICMP差錯重定向資料包產生過程

  • 主機想傳送一份IP資料包給R2,但通過查詢路由表只找到R1的表項。主機將IP資料包傳送給R1
  • R1通過網路埠A接收到該IP資料包;
  • R1查詢自己路由表到R2的表項,發現轉發埠也是A。這時候傳送一份ICMP差錯重定向資料包給IP資料包的源(主機)。
  • R1將IP資料包轉發給R2。
  • 主機收到R1發過來的ICMP差錯重定向資料包後,根據資料包修改自己的相應的路由表項。這時候從主機傳送IP資料包給R2就能直接傳送過去了。

重定向一般用來讓具有很少選路資訊的主機逐漸建立更完善的路由表。主機啟動時路由表中可以只有一個預設表項。一旦預設路由發生差錯,預設路由器將通知它進行重定向,並允許主機對路由表作相應的改動。

ICMP差錯重定向資料包格式如下:

圖4. ICMP差錯重定向資料包結構

ICMP重定向資料包的接收者必須檢視三個IP地址:( 1 )導致重定向的IP地址(原IP資料包的目標地址); ( 2 )傳送重定向報文的路由器的IP地址(主機路由表該表項中的下一跳地址);( 3 )應該採用的路由器IP地址(要修改的IP地址)。

3. ICMP路由發現請求/應答資料包

主機在引導以後要廣播或多播傳送一份ICMP路由器請求報文。一臺或更多臺路由器響應一份路由器應答報文。另外,路由器定期地廣播或多播傳送它們的路由器應答報文,允許每個正在監聽的主機相應地更新它們的路由表。

圖片5. ICMP路由器請求資料包
圖6. ICMP路由器應答資料包

IP地址必須是傳送路由器的某個地址。優先順序是一個有符號的 32 bit整數,指出該IP地址作為預設路由器地址的優先等級,這是與子網上的其他路由器相比較而言的。值越大說明優先順序越高。優先順序為 0 x 8 0 0 0 0 0 0 0說明對應的地址不能作為預設路由器地址使用,儘管它也包含中通告報文中。優先順序的預設值一般為 0。

都看到這裡了,要不要掃二維碼關注一下微信公眾號林灣村龍貓

微信公眾號rudy_tan_home

相關文章