1、引言
選路是IP層最重要的功能之一。該選路規則核心一點是每個主機都維護了一張路由表。IP層進行的選路其實是一種選路機制,它搜索路由表並決定向哪一個網絡接口發送分組。微信
2、原理
在路由表中,是有必定的搜索規則來肯定數據包發送網絡端口的:網絡
先搜索搜索匹配的主機地址;
沒有找到,搜索匹配的網絡地址;
再沒有找到,搜索默認表項(默認表項通常在路由表中被指定爲一個網絡表項,其網絡號爲 0)。
能夠使用netstat -rn
列出當前主機的路由表: this
說明,每一行表示一個路由表項,第一行中的第一列爲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):該路由表項屬於哪一個網絡接口(一臺主機能夠有多個網絡接口)
3、路由表的建立
歷來沒有說過這些路由表是如何被建立的,這裏介紹如何建立路由表。一般有三種方式來建立路由表-route(主動添加)、ICMP重定向差錯數據包(被動修改)、ICMP路由發現請求/應答數據包(主動詢問)。code
1. 路由表能夠是在系統初始化的時候經過route
命令來添加默認路由。
這是一種手動添加方式。
2. 經過ICMP重定向差錯數據包
當IP數據包應該被髮送到另外一個路由器時,收到數據包的路由器就要發送ICMP重定向差錯報文給ICMP數據包的發送端。ICMP重定向數據包只能有路由器生成,主機接收使用。 cdn
主機想發送一份IP數據包給R2,但經過查找路由表只找到R1的表項。主機將IP數據包發送給R1
R1經過網絡端口A接收到該IP數據包;
R1查找本身路由表到R2的表項,發現轉發端口也是A。這時候發送一份ICMP差錯重定向數據包給IP數據包的源(主機)。
R1將IP數據包轉發給R2。
主機收到R1發過來的ICMP差錯重定向數據包後,根據數據包修改本身的相應的路由表項。這時候從主機發送IP數據包給R2就能直接發送過去了。
重定向通常用來讓具備不多選路信息的主機逐漸創建更完善的路由表。主機啓動時路由表中能夠只有一個默認表項。一旦默認路由發生差錯,默認路由器將通知它進行重定向,並容許主機對路由表做相應的改動。blog
ICMP差錯重定向數據包格式以下: 接口
ICMP重定向數據包的接收者必須查看三個IP地址:( 1 )致使重定向的IP地址(原IP數據包的目標地址); ( 2 )發送重定向報文的路由器的IP地址(主機路由表該表項中的下一跳地址);( 3 )應該採用的路由器IP地址(要修改的IP地址)。圖片
3. ICMP路由發現請求/應答數據包
主機在引導之後要廣播或多播傳送一份ICMP路由器請求報文。一臺或更多臺路由器響應一份路由器應答報文。另外,路由器按期地廣播或多播傳送它們的路由器應答報文,容許每一個正在監聽的主機相應地更新它們的路由表。 ip
IP地址必須是發送路由器的某個地址。優先級是一個有符號的 32 bit整數,指出該IP地址做爲默認路由器地址的優先等級,這是與子網上的其餘路由器相比較而言的。值越大說明優先級越高。優先級爲 0 x 8 0 0 0 0 0 0 0說明對應的地址不能做爲默認路由器地址使用,儘管它也包含中通告報文中。優先級的默認值通常爲 0。路由
都看到這裏了,要不要掃二維碼關注一下微信公衆號林灣村龍貓 。