歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux route 命令工作原理

  也許你知道如何在Linux系統上用命令netstat或route來查找(甚至是增加/刪除)已經存在的路由。但是在你做這些操作的時候你可能並不知道IP路由是如何工作的。本文將幫助你理解IP路由的原理,以及它是如何工作的。IP路由涉及到IP數據報文的轉發。如果主機與目的主機直接相連,那麼主機可以直接發送IP報文到目的主機,這個過程比較簡單。例如,通過點對點的鏈接或通過網絡共享。如果主機與目的主機沒有直接相連,那麼主機會將IP報文發送給默認的路由器,然後由路由器來決定往哪發送IP報文。

  IP路由涉及到IP數據報文的轉發。如果主機與目的主機直接相連,那麼主機可以直接發送IP報文到目的主機,這個過程比較簡單。例如,通過點對點的鏈接或通過網絡共享。如果主機與目的主機沒有直接相連,那麼主機會將IP報文發送給默認的路由器,然後由路由器來決定往哪發送IP報文。

  路由原理

  一個普通的主機與路由器之間的根本區別在於,主機不會將一個報文從一個接口轉發到另一個接口,而路由器可以轉發報文。

  如今,大多數的多用戶系統都可以被配置,從而被當作路由器來用。因此,一個普通路由算法可以被用在路由器上,同樣也可以用在一台普通主機上。當一台主機可以用作路由器時,我們通常說這台主機嵌入了路由器的功能。這種具備嵌入路由器功能的主機平常不會轉發報文,除非我們對它進行了配置,使它開啟這種功能。

  IP層維護著一張路由表,當收到數據報文時,它用此表來決策接下來應該做什麼操作。當從網絡側接收到數據報文時,IP層首先會檢查報文的IP地址是否是主機自身的地址相同。

  如果數據報文中的IP地址是主機自身的地址,那麼報文將被發送到傳輸層相應的協議中去。如果報文中的IP地址不是主機自身的地址,並且主機配置了具備路由的功能,那麼報文將被轉發;否則,報文就被丟棄。

  路由表中的數據一般是以條目形式存在。一個典型的路由表條目包含以下主要的條目項:

  ● 目的IP地址:此字段表示目標的IP地址。這個IP地址可以是某一台主機的地址,也可以是一個網絡地址。如果這個條目包含的是一個主機地址,那麼它的主機ID標記為非零;如果這個條目包含的是一個網絡地址,那麼它的主機ID被標記為零。

  ● 下一個路由器的IP地址:為什麼我們使用“下一個”的說法,是因為下一個路由器並不總是最後的目的路由器,但它很可能是一個中間路由器。條目給出下一個路由器的地址是用來轉發從相應接口收到的IP數據報文。

  ● 標志:這個字段提供了另一組重要信息,如目的IP地址(之前提到的)是一個主機地址還是一個網絡地址。此外,從標志中可以得知下一個路由器(之前提到的)真的是一個路由器還是一個直接相連的接口。

  ● 網絡接口規范:一些數據報文的網絡接口規范,這個規范跟隨報文一起傳播。

  基本的路由是如何工作的?

  因此,如果我們現在想簡單而形象地描述路由過程,我們將會看到:一旦主機(被配置成具備路由功能)的IP層接收到從網絡側來的數據報文,它將核實數據包中的目的IP地址,如果此IP不是主機的IP地址,那麼包將通過路由表轉發。

  如果任何條目的第一個字段完全匹配目的IP地址(主機)或部分匹配目的IP地址(網絡),那麼它將指示下一個路由器的IP地址。這是一個重要的信息,因為這些信息直接告訴主機(具備路由功能的)數據包應該轉發到哪一個“下一個路由器”去。而條目中所有其它的字段將提供更多輔助的信息來為路由轉發做決定。

  在上一段中我們對路由轉發過程建立了基本的了解,但如果我們試圖深入了解更多的東西,就必須看看以下關於路由表算法的一些詳細信息。

  ● 首先,路由表會去搜索一個“目的IP地址”字段與數據報文中目的IP地址完全相同的條目。這就意味著IP地址的主機ID與網絡ID完全的匹配。如果找到,則數據包被發送到相應接口或中間路由器。

  ● 如果沒有找到一個完全的匹配IP,那麼就接著搜索相匹配的網絡ID。如果找到,那麼該數據報文會被轉發到指定的路由器。所以我們看到,這個網絡上的所有主機都通過這個路由表中的單個(這個)條目來管理。

  ● 如果上述兩個條件都不匹配,那麼該數據報文將轉發到一個“默認路由器”。

  ● 如果上述步驟失敗,即沒有默認路由器,那麼該數據報文最終無法被轉發。任何無法投遞的數據報文都將產生一個ICMP主機不可達或ICMP網絡不可達的錯誤,並將此錯誤返回給生成此數據報文的應用程序。

  有時人們會問,為什麼路由表中會有兩種類型的條目?有了更精確的主機條目為什麼還需要網絡相關的條目?嗯…在路由表中包含與網絡相關的路由條目是一個很大的優點。其優點在於,擁有一個與完整網絡相關的條目,能夠避免包含此網絡中所有單獨的主機條目(這個數據量非常巨大)。這使得路由表的大小降到一個可收受的數量級,這樣就非常好。

  查看路由表信息的命令

  你可以使用netstat命令查看路由表信息,如下所示:

  \$ netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 其輸出提供目的IP地址和網關相關的詳細信息。標志“U”表明該路由器可達;“G”表明該路由器與一個網關(路由器)相連。如果這個標志沒有被設置,那麼我們可以認為主機與目標是直接相連的。

  Gateway : The gateway address or ’*’ if none set.

  Genmask : The netmask for the destination net; 255.255.255.255 for a host destination and 0.0.0.0 for the default route

  靜態路由的配置:

  ip router 目的網絡 掩碼{網關地址 接口}

  例子:

  (1) ip router 192.168.1.0 255.255.255.0 s0/0

  解析: 這句話的意思是,路由器見到了目的網段為192.168.1.0的網段,就將這個數據包從接口s0/0中發送出去。

  (2) ip router 192.168.1.0 255.255.255.0 192.168.2.0

  解析: 這句話的意思是:在HOSTA上,路由器見到了目的網段為192.168.1.0的數據包,就將數據包發送到192.168.2.0網段上。也就是要想去往192.168.1.0,就要經過192.168.2.0

Copyright © Linux教程網 All Rights Reserved