[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 網絡管理 > 互聯網技術 > 正文
IP基礎--4.RIP協定
http://www.study-area.net/menu1.htm (2001-06-04 10:08:00)
    Routing Information protocol 顧名思義是給封包路由所用的它通常是用於router和router之間的資料交換。 

不過在我們討論這個協定之前先讓我們重溫一下router的功用。因為IP Routing可以說是internetworking的最重要和最雜的概念了解清晰一點絕對是有利無害的。 

重溫router 

在前面的“網路概論”裡面我們已經接觸過bridge和router了。我們知道Bridge是工作於Data Link層級的也就是說它在決定是否轉送封包的時候是以目的地硬體位址為依據而這些硬體地址是不能改變的。只要封包前往的區段不是在相同的來源區段就會進行轉送。但router則工作於Network層級這帶給我們一個非常有用的方便就是可以通過人手來指定網路位址因為這些地址不同硬體地址是可以改變的。在一個連接1000台主機的網路裡面bridge可能要追蹤1000個節點才能做出決定但使用router只需追蹤十來個或更少的地址(或網路地址)就可以了。 

而真正令到router更具擴充性的原因是bridge需要檢測網路上每一個封包以決定是否需要轉送而router只需要在意直接傳給自己的封包因為發送端在封包送出之前已經決定好封包是否需要轉送了(前面討論ARP的文章已經為你解釋了這個動作)。 

由此可見router的確比bridge高效得多。而且bridge會轉送所有的廣播封包而router則有條件地和有選擇性的對廣播封包進行轉遞同時也會丟棄不明地址的封包這樣可以大大減少網路的交通流量。 

路由表格 

其實在每一台機器上面有著各自的一個Routing Table記錄著一些路由資訊的如果您在您的Windows98下面輸入 

C:\>route PRINT

Active Routes:

  Network Address          Netmask  Gateway Address        Interface  Metric
          0.0.0.0          0.0.0.0     192.168.0.17     192.168.0.15       1
        127.0.0.0        255.0.0.0        127.0.0.1        127.0.0.1       1
      192.168.0.0    255.255.255.0     192.168.0.15     192.168.0.15       1
     192.168.0.15  255.255.255.255        127.0.0.1        127.0.0.1       1
    192.168.0.255  255.255.255.255     192.168.0.15     192.168.0.15       1
        224.0.0.0        224.0.0.0     192.168.0.15     192.168.0.15       1
  255.255.255.255  255.255.255.255     192.168.0.15     192.168.0.15       1


您就可以看到機器目前所使用的路由表格了。上面記錄了有哪些網路它們的netmask和通往該網路的router地址以及使用的網路界面還有一個Metric號碼(這個讓我們待會再說)。如果您看不懂哪些網路號碼和IP號碼在下建議你回卷到前面的IP地址章節裡面復習一下否則您會越看越糊塗。而且我也不打算重解釋這些號碼的含義了。 

我們從第一行可以知道該機器的Default Gateway為192.168.0.17因為這行的網路和mask都全部為0也就概指所有網路了也就是說凡是有封包要傳給路由表格所不包括的網路其封包就會傳給Default Gateway了。另外我們在第三行看到機器所屬的網路和其gateway指向自己本身(您可以用winipcfg來查看機器本身的IP來印一下)。這裡我們使用gateway這個詞其實指的就是router如果要了解這兩者的差別前面的“網路概論”也已經說過了。 

上面只是一個非常簡單的路由表格而已如果機器所連的網路越多安裝的界面越多路由表格也越雜。如果您的機器有撥接連線當您成功連上ISP之後您再跑一次 route PRINT你就會發現多了通往ISP網路的路由設定了而且Default Gateway也使用了ISP那邊的IP。原因是使用撥接連線內定是會使用Remote Default Gateway的除非您網路本身連得上internet否則您就無法和外面的世界溝通了。不過如果網路本身連得上internet還打去ISP幹啥呢 

建立起自己的router 

讓我們先看看router是怎麼工作的 

分層級IP的路由 
指定一個IP地址 
if 我有這個目的地的路由 
從路由表中取得下一站的地址 
將封包傳給下一站 
else 
決定目的地網路號碼 
if 我有這個網路的界面 
決定我的界面上這個網路的子網路遮罩 
else 
從這個網路的層級決定它的子網路遮罩 
endif 
利用遮罩套在目的地位址上取得子網路 
if 我有這個子網路的界面 
將封包直接送往目的地 
else if 我的路由表格包含這個子網路的記錄 
從路由表格中取得下一站的地址 
將封包傳給下一站 
else if 我的路由表格中有一筆預設路由 
從路由表格中取得下一站的地址 
將封包傳給下一站 
else 
宣這個目的地無效 
endif 
endif 


不分層級IP的路由 
指定一個IP地址 
在路由表格中尋找與此地址相符的最長遮罩預定值 
從路由表格中取得下一站的地址 
將封包傳給下一站 
if 對比不成功 
宣這個目的的無法達到 
endif 

看上去不分層級的路由比分層級的路由簡單得多。而事實上卻是相反的這需要您在 router 上進行更雜的設定。 

如果您的機器有兩片網卡被設定為不同的網路然後它們各連接另外一台或多台機器那麼您自己也可以親身的驗一下router的工作哦很簡單只要您在那台機器上面安裝一個NT或Linux確定兩張網卡都設定好並且同時工作然後在NT上面的網路設定之TCP/IP協定內容裡將“路由”之“啟用IP轉送”打勾夠就可以了在Linux上面呢只要你確定IP Forwording被成功的編進Kernel以及被設定為啟動狀態也就可以了。 

下面先讓我們看看兩個網路之間的路由設定是怎樣的 


 

由上圖我們可以看到192.168.0.0這個網路的所有機器其gateway都指向192.168.0.254這個IP也就是router上面連接到這個網路的界面。同樣192.168.1.0這個網路其gateway則是192.168.1.254。 

通常一個router可以同時連接好幾個網路只要界面設定好就沒問題了。同時許多網路也有超過一個router和其它的網路連接那麼各主機的路由表格就要一一設定好通往各網路的gateway了。如果您還記得“網路概論”裡介紹的bridge和router之間的分別的話您應該知道router還可以連接不同形態的網路呢 

 

由上圖我們可以看到當有一個封包從網路A經過網路B送到網路C的時候其Software Address(即IP地址)永遠不變但Hardware Address(即MAC地址)卻隨著所經網路而有所不同。如果您對上一章所說的ARP協定沒忘記的話應該知道為什麼會如此。要維護這個router的路由資料相信是一個很簡單的事情。 

如果這兩個網路往外也只連接不多的網路各router上面的路由資料也不會很雜這樣的情況之下我們可以使用靜態路由也就是以手動方式為每台機器設定事先計算好的路由。靜態路由的主要好處是它的可預測性而且對router或網路連線做成的負擔不多所佔頻寬較少。 

當我們在internet上面routing的時候所經過的router當然會多很多啦下面讓我們看看一個簡化了的internet路由圖示 


 

正如您可能想像的在internet的環境中要保存一份完整的路由表格殊非輕易而且您也不可能盡知道所有網路的路由路徑。那麼我們把這些路由資料的更新交給了router本身去管理了這樣router和router之間就需要一些協定來交換信息了。 

事實上供router使用的協定也有很多種且也分為Exterior Gateway Protocol 和 Interior Gateway Protocol兩大類。在Internet上面負責大型網路之間的路由使用的是Exterior協定最常使用的是BGP(Border Gateway Protocol)協定。相對的在比較少的網路之間使用的會是Interior協定其中最普遍的是RIP協定。 

路由資料交換 

在眾多的路由協定中RIP可以說是最簡單和最原始的協定了它是一種所謂的距離向量(distance-vector)協定。使用RIP的路由器凡是它知道如何路由的目的地都會被羅列出來同時也列出到達各目的地的距離。至於距離的遠近則使用一個metric數值來表示數值越高距離越遠。這個metric值通常是以hop數的多寡來定但其它協定或許還會參考一些雜的網路成本計算諸如網路負載頻寬延遲等等其它相關因素。當路由器發現有多條路徑可以到達目的地的時候就會參考這個metric值了其中最低數字的往往被當成是最佳路徑。 

正如我們知道路由協定是供路由器和路由器之間交換路由資料用的。當路由器上面的路由資訊改變的時候就會向其相鄰的路由器送出更新信息。用RIP協定的路由器通常會每隔30秒就會更新一次其路由表格如果其路由資訊是從別的路由器“學”來的話就會自動的將metric增加一個數值當這個數值達到“無窮”值的時候(通常會被設定為16)就表示這條路徑為“unreachable”同時也會將之從路由表中刪除。 

下面讓我們以一個小型路由網路的例子來更好的看看RIP是怎樣進行路由表格更新的(我強烈建議您將這圖畫出來以備後面討論時參考所需) 


 

當路由器剛設定好並連接上網路的時候各自都有一個“初始路由表”裡面只包含與其直接相連的網路的路由信息 

Router 1   Router 2   Router 3   Router 4   Router 5   Router 6 
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G 

3 1,1 
1,1 1 

4 1,2 
1,2 
1,2 2 

6 1,3 
1,3 
1,3 3 
7 1,4 
1,4 4 


8 1,5 
1,5 
1,5 
1,5 6 
8 1,6 
1,6 


上表中NetID就是router所知道如何到達的網路而“M”值我們暫時將之看成metric數值“G”指的是通往該網路的下一個要經的router名字。這時我們看到M都為1而G都指向router自己。 

好了各router經過一輪資料交換之後然後將從相鄰router“學”來的路由加入到自己的路由表格中並且metric值也相應的增加“1”。這時我們看到各router的路由表將會變成這樣 

Router 1   Router 2   Router 3   Router 4   Router 5   Router 6 
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G 




7  1,1 
2,2 
1,1 
2,2 
2,4  1 






8 1,2 
1,2 
2,1 
1,2 
2,3 
2,3 
2,5 
2,5  1 





8 2,2 
1,3 
2,2 
1,3 
1,3 
2,5 
2,5  1 




8  2,1 
1,4 
2,5 
2,5 
1,4 
2,5  1 






8 2,2 
2,2 
2,4 
1,5 
1,5 
2,3 
1,5 
1,5  2 




8  2,3 
2,5 
2,3 
1,6 
2,5 
1,6  


或許您初初比較這兩個表的時候會無所適從但其實也不是很難的我們先找到相鄰的router之路由表然後比較本身的路由表看看有沒有新的NetID有則加到自己的路由表中並且“M”增加“1”而“G”則跟隨所“學”的router之名字。如果有相同的NetID則相加metric值如果得出來的值比自己還低則抄過來M也加1如果比自己的值高則保留自己的。 

我們以router1來看看與之相鄰的router分別是router2和router4。它們的路由表分別是 


Router 2   Router 4 
Net ID M,G Net ID M,G 


4 1,2 
1,2 
1,2 3 
7 1,4 
1,4 


而router1自己的路由表則是這樣的 

Router 1 
Net ID M,G 

3 1,1 
1,1 


和router2比較可以發現NetID 2和4是新的那麼router1將之抄過來M加1成了2然後G指向router2成了2。其中NetID1相同將router2的metric值加1等於2比自己的高保留自己的。 

和router4比較可以發現NetID 7新的那麼router1將之抄過來M加1成了2然後G指向router4成了4。其中NetID3相同將router4的metric值加1比自己的高保留自己的好了。 

那麼經過整理之後就得出 

Router 1 
Net ID M,G 




7  1,1 
2,2 
1,1 
2,2 
2,4  



好了到了自己動手練習的時候了看看您能不能為各router算一算會否最終得出下面的路由表 

Router 1   Router 2   Router 3   Router 4   Router 5   Router 6 
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G 







8 1,1 
2,2 
1,1 
2,2 
3,2 
3,2 
2,4 
3,2  1 






8 1,2 
1,2 
2,1 
1,2 
2,3 
2,3 
2,5 
2,5  1 






8 2,2 
1,3 
2,2 
3,2 
1,3 
1,3 
2,5 
2,5  1 






8 2,1 
3,1 
1,4 
2,5 
2,5 
3,5 
1,4 
2,5  1 






8 2,2 
2,2 
2,4 
1,5 
1,5 
2,3 
1,5 
1,5  1 






8 3,3 
2,3 
3,5 
2,5 
2,3 
1,6 
2,5 
1,6  


如果您第一次未能算出正確的答案也不要緊啦想當初老師要我們算的時候全班也沒一個算對啦~~~ ^_^ 或許您的智商要比我們高些吧如果您夠細心的話或許能夠看出G下面的名字永遠只有相鄰的router而M下面的數值則取決於所“學”的次數。如果有超過一條路徑到達同一個目的地而且metric值也一樣在實際應用中router只會聽取最先獲得的路由信息。 

不過在非RIP協定中它們也有各自的規矩這裡也不再詳細討論了而且每種協定都有其優缺點這裡也不作論述了。有興趣的朋友大可自己多找些資料回來研究。 

另外您可以在Windows系統下面使用一個叫 tracert 的命令來追蹤路由路徑。如果您在internet上面跟陌生人聊天他忽然告訴您哦我知道您住哪裡了您或許覺得好神奇但只要你知道對方的IP地址使用上面這個命令您最終可以得到對方所連接的router名稱。如果這個router的名稱資料齊全的話(如TaiPei-R01-P11.BR.HiNet.NET )也不難估到對方的位置啦。在Linux上面這個命令則叫做traceroute您自己可以試試哦~~~ 

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
TCP/IP基礎 (2001-07-22 16:08:16)
IP基礎--8.TCP封包 (2001-06-04 14:08:00)
IP基礎--7.IP封包 (2001-06-04 13:04:00)
IP基礎--6.ICMP協定 (2001-06-04 12:10:00)
IP基礎--5.DNS協定 (2001-06-04 11:00:00)
IP基礎--4.RIP協定 (2001-06-04 10:08:00)
IP基礎--3.ARP協定 (2001-06-04 09:04:00)
IP基礎--2.DHCP協定 (2001-06-04 08:10:00)
IP基礎--1.IP地址 (2001-06-04 07:00:00)
 

★  樊強制作 歡迎分享  ★