• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • IP選路的原理

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    開始討論IP選路之前,首先要理解內核是如何維護路由表的。路由表中包含的信息決定了IP層所做的所有決策。在3.3節中,我們列出了IP搜索路由表的幾個步驟:1)搜索匹配的主機地址;2)搜索匹配的 網絡 地址;3)搜索默認表項(默認表項一般在路由表中被指定為一個

      開始討論IP選路之前,首先要理解內核是如何維護路由表的。路由表中包含的信息決定了IP層所做的所有決策。在3.3節中,我們列出了IP搜索路由表的幾個步驟:1)搜索匹配的主機地址;2)搜索匹配的網絡地址;3)搜索默認表項(默認表項一般在路由表中被指定為一個網絡表項,其網絡號為0)。匹配主機地址步驟始終發生在匹配網絡地址步驟之前。IP層進行的選路實際上是一種選路機制,它搜索路由表并決定向哪個網絡接口發送分組。
      這區別于選路策略,它只是一組決定把哪些路由放入路由表的規則。IP執行選路機制,而路由守護程序則一般提供選路策略。

    簡單路由表

      首先來看一看一些典型的主機路由表。在主機svr4上,我們先執行帶-r選項的netstat命令列出路由表,然后以-n選項再次執行該命令,以數字格式打印出IP地址(我們這樣做是因為路由表中的一些表項是網絡地址,而不是主機地址。如果沒有-n選項,netstat命令將搜索文件/etc/networks并列出其中的網絡名。這樣會與另一種形式的名字—網絡名加主機名相混淆)。


      第1行說明,如果目的地是140.252.13.65(slip主機),那么網關(路由器)將把分組轉發給140.252.13.35(bsdi)。這正是我們所期望的,因為主機slip通過SLIP鏈路與bsdi相連接,而bsdi與該主機在同一個以太網上。

      對于一個給定的路由器,可以打印出五種不同的標志(flag):U該路由可以使用。G該路由是到一個網關(路由器)。如果沒有設置該標志,說明目的地是直接相連的。H該路由是到一個主機,也就是說,目的地址是一個完整的主機地址。如果沒有設置該標志,說明該路由是到一個網絡,而目的地址是一個網絡地址:一個網絡號,或者網絡號與子網號的組合。D該路由是由重定向報文創建的(9.5節)。M該路由已被重定向報文修改(9.5節)。標志G是非常重要的,因為由它區分了間接路由和直接路由(對于直接路由來說是不設置標志G的)。其區別在于,發往直接路由的分組中不但具有指明目的端的IP地址,還具有其鏈路層地址(見圖3-3)。當分組被發往一個間接路由時,IP地址指明的是最終的目的地,但是鏈路層地址指明的是網關(即下一站路由器)。我們在圖3-4已看到這樣的例子。在這個路由表例子中,有一個間接路由(設置了標志G),因此采用這一項路由的分組其IP地址是最終的目的地(140.252.13.65),但是其鏈路層地址必須對應于路由器140.252.13.35。理解G和H標志之間的區別是很重要的。G標志區分了直接路由和間接路由,如上所述。但是H標志表明,目的地址(netstat命令輸出第一行)是一個完整的主機地址。沒有設置H標志說明目的地址是一個網絡地址(主機號部分為0)。當為某個目的IP地址搜索路由表時,主機地址項必須與目的地址完全匹配,而網絡地址項只需要匹配目的地址的網絡號和子網號就可以了。另外,大多數版本的netstat命令首先打印出所有的主機路由表項,然后才是網絡路由表項。

      參考記數Refcnt(Referencecount)列給出的是正在使用路由的活動進程個數。面向連接的協議如TCP在建立連接時要固定路由。如果在主機svr4和slip之間建立Telnet連接,可以看到參考記數值變為1。建立另一個Telnet連接時,它的值將增加為2,依此類推。

      下一列(“use”)顯示的是通過該路由發送的分組數。如果我們是這個路由的唯一用戶,那么運行ping程序發送5個分組后,它的值將變為5。最后一列(interface)是本地接口的名字。輸出的第2行是環回接口(2.7節),它的名字始終為lo0。沒有設置G標志,因為該路由不是一個網關。H標志說明目的地址(127.0.0.1)是一個主機地址,而不是一個網絡地址。由于沒有設置G標志,說明這是一個直接路由,網關列給出的是外出IP地址。

      輸出的第3行是默認路由。每個主機都有一個或多個默認路由。這一項表明,如果在表中沒有找到特定的路由,就把分組發送到路由器140.252.13.33(sun主機)。這說明當前主機(svr4)利用這一個路由表項就可以通過Internet經路由器sun(及其SLIP鏈路)訪問其他的系統。建立默認路由是一個功能很強的概念。該路由標志(UG)表明它是一個網關,這是我們所期望的。這里,我們有意稱sun為路由器而不是主機,因為它被當作默認路由器來使用,它發揮的是IP轉發功能,而不是主機功能。

    HostRequirementsRFC文檔特別說明,IP層必須支持多個默認路由。但是,許多實現系統并不支持這一點。當存在多個默認路由時,一般的技術就成為它們周圍的知更鳥了,例如,Solaris2.2就是這樣做的。

      輸出中的最后一行是所在的以太網。H標志沒有設置,說明目的地址(140.252.13.32)是一個網絡地址,其主機地址部分設為0。事實上,是它的低5位設為0。由于這是一個直接路由(G標志沒有被設置),網關列指出的IP地址是外出地址。

    netstat命令輸出的最后一項還隱含了另一個信息,那就是目的地址(140.252.13.32)的子網掩碼。如果要把該目的地址與140.252.13.33進行比較,那么在比較之前首先要把它與目的地址掩碼(0xffffffe0,3.7節)進行邏輯與。由于內核知道每個路由表項對應的接口,而且每個接口都有一個對應的子網掩碼,因此每個路由表項都有一個隱含的子網掩碼。

    主機路由表的復雜性取決于主機所在網絡的拓撲結構。

    1)最簡單的(也是最不令人感興趣的)情況是主機根本沒有與任何網絡相連。TCP/IP協議仍然能用于這樣的主機,但是只能與自己本身通信!這種情況下的路由表只包含環回接口一項。

    2)接下來的情況是主機連在一個局域網上,只能訪問局域網上的主機。這時路由表包含兩項:一項是環回接口,另一項是局域網(如以太網)。

    3)如果主機能夠通過單個路由器訪問其他網絡(如Internet)時,那么就要進行下一步。一般情況下增加一個默認表項指向該路由器。

    4)如果要新增其他的特定主機或網絡路由,那么就要進行最后一步。在我們的例子中,到主機slip的路由要通過路由器bsdi就是這樣的例子。

    我們根據上述IP操作的步驟使用這個路由表為主機svr4上的一些分組例子選擇路由。

    1)假定目的地址是主機sun,140.252.13.33。首先進行主機地址的匹配。路由表中的兩個主機地址表項(slip和localhost)均不匹配,接著進行網絡地址匹配。這一次匹配成功,找到表項140.252.13.32(網絡號和子網號都相同),因此使用emd0接口。這是一個直接路由,因此鏈路層地址將是目的端的地址。

    2)假定目的地址是主機slip,140.252.13.65。首先在路由表搜索主機地址,并找到一個匹配地址。這是一個間接路由,因此目的端的IP地址仍然是140.252.13.65,但是鏈路層地址必須是網關140.252.13.65的鏈路層地址,其接口名為emd0。

    3)這一次我們通過Internet給主機aw.com(192.207.117.2)發送一份數據報。首先在路由表中搜索主機地址,失敗后進行網絡地址匹配。最后成功地找到默認表項。該路由是一個間接路由,通過網關140.252.13.33,并使用接口名為emd0。

    4)在我們最后一個例子中,我們給本機發送一份數據報。有四種方法可以完成這件事,如用主機名、主機IP地址、環回名或者環回IP地址:

    ftpsvr4ftp140.252.13.34ftplocalhostftp127.0.0.1

    在前兩種情況下,對路由表的第2次搜索得到一個匹配的網絡地址140.252.13.32,并把IP報文傳送給以太網驅動程序。正如圖2-4所示的那樣,IP報文中的目的地址為本機IP地址,因此報文被送給環回驅動程序,然后由驅動程序把報文放入IP輸出隊列中。

    在后兩種情況下,由于指定了環回接口的名字或IP地址,第一次搜索就找到匹配的主機地址,因此報文直接被送給環回驅動程序,然后由驅動程序把報文放入IP輸出隊列中。

    上述四種情況報文都要被送給環回驅動程序,但是采用的兩種路由決策是不相同的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>