IP層轉發分組的流程

分組轉發是指在互聯網絡中路由器轉發IP分組的物理傳輸過程與數據報轉發機制。根據分組的目的IP地址與源IP地址是否屬於同一個子網可分爲直接轉發和間接轉發算法

先簡單介紹一下路由器,從下圖(a)中能夠看出,路由器的主要工做就是爲通過路由器的每一個數據包尋找一條最佳的傳輸路徑,並將該數據有效地傳送到目的站點。因而可知,選擇最佳路徑的策略即路由算法是路由器的關鍵所在。爲了完成這項工做,在路由器中保存着各類傳輸路徑的相關數據——路由表(Routing Table),供路由選擇時使用,表中包含的信息決定了數據轉發的策略。在實際上的路由器中,像下圖中所示的「直接」和「其餘」的幾個字符並無出如今路由表中,而是被記爲0.0.0.0 。安全

能夠把整個的網絡拓撲簡化爲下圖(b)所示的那樣。在簡化圖中,網絡變成了一條鏈路,但每個路由器旁邊都註明其IP地址。使用這樣的簡化圖,可使咱們沒必要關心某個網絡內部的具體拓撲以及鏈接在該網絡上有多少臺主機,由於這些對於研究分組轉發問題並無什麼關係。這樣的簡化圖強調了在互聯網上轉發分組時,是從一個路由器轉發到下一個路由器。在路由表中,對每一條路由最主要的是如下兩個信息:(目的網絡地址,下一跳地址)網絡

  • 假設:有四個 A 類網絡經過三個路由器鏈接在一塊兒。每個網絡上均可能有成千上萬個主機。
  • 能夠想象,若按目的主機號來製做路由表,每個路由表就有 4 萬個項目,即 4 萬行(每一行對應於一臺主機),則所得出的路由表就會過於龐大。
  • 但若按主機所在的網絡地址來製做路由表,那麼每個路由器中的路由表就只包含 4 個項目(每一行對應於一個網絡),這樣就可以使路由表大大簡化。

IP層轉發分組的流程

根據目的網絡地址就能肯定下一跳路由器,這樣作的結果是:數據結構

* IP 數據報最終必定能夠找到目的主機所在目的網絡上的路由器(可能要經過屢次的間接交付)。

    * 只有到達最後一個路由器時,才試圖向目的主機進行直接交付。

特定主機路由less

* 雖然互聯網全部的分組轉發都是基於目的主機所在的網絡,但在大多數狀況下都容許有這樣的特例,即爲特定的目的主機指明一個路由。

    * 採用特定主機路由可以使網絡管理人員能更方便地控制網絡和測試網絡,同時也可在須要考慮某種安全問題時採用這種特定主機路由。

默認路由 (default route)ide

IP層轉發分組的流程

不是 N1 和 N2,就一概選擇默認路由,把數據報先間接交付路由器 R1,讓 R1 再轉發給下一個路由器。性能

必須強調指出測試

  • IP 數據報的首部中沒有地方能夠用來指明「下一跳路由器的 IP 地址」。設計

  • 當路由器收到待轉發的數據報,不是將下一跳路由器的 IP 地址填入 IP 數據報,而是送交下層的網絡接口軟件。3d

  • 網絡接口軟件使用 ARP 負責將下一跳路由器的 IP 地址轉換成硬件地址,並將此硬件地址放在鏈路層的 MAC 幀的首部,而後根據這個硬件地址找到下一跳路由器。

關於路由表

  • 路由表沒有給分組指明到某個網絡的完整路徑。

  • 路由表指出,到某個網絡應當先到某個路由器(即下一跳路由器)。

  • 在到達下一跳路由器後,再繼續查找其路由表,知道再下一步應當到哪個路由器。

  • 這樣一步一步地查找下去,直到最後到達目的網絡。

下圖爲分組轉發算法示意圖:

IP層轉發分組的流程

劃分子網和構造超網

上面所討論的是IP層怎樣根據路由表的內容進行分組轉發,而沒有涉及到路由表一開始是如何創建的以及路由表中的內容應如何進行更新。可是在進一步討論路由選擇以前,咱們還要先介紹劃分子網和構造超網這兩個很是重要的概念。

劃分子網

1)從兩級IP地址到三級IP地址

在早期,原來的兩級IP地址的設計不夠合理。

第一,IP地址空間的利用率有時很低。有的單位申請到了一個B類地址網絡,但所鏈接的主機數並很少,但是又不肯意申請一個足夠使用的C類地址,理由是考慮到從此可能的發展。第二,給每個物理網絡分配一個網絡號會使路由表變得太大於是使網絡性能變壞。第三,兩級IP地址不夠靈活。有時狀況緊急,一個單位須要在新的地點立刻開通一個新的網絡。可是在申請到一個新的IP地址以前,新增長的網絡是不可能鏈接到互聯網上工做的。

爲解決上述問題,從1985年起在IP地址中又增長了一個「子網號字段」,使兩級IP地址變成爲三級IP地址,它可以較好地解決上述問題,而且使用起來也很靈活。這種作法叫作劃分子網(subnetting) [RFC 950]。或子網尋址子網路由選擇 。劃分子網己成爲互聯網的正式標準協議。

劃分子網是經過借用IP地址的若干位主機位來充當子網地址從而將原網絡劃分爲若干子網而實現的。劃分子網的思路以下:

劃分子網時,隨着子網地址借用主機位數的增多,子網的數目隨之增長,而每一個子網中的可用主機數逐漸減小。

以C類網絡爲例,原有8位主機位,2的8次方即256個主機地址,默認子網掩碼255.255.255.0。借用1位主機位,產生2個子網,每一個子網有126個主機地址;借用2位主機位,產生4個子網,每一個子網有62個主機地址……每一個網中,第一個IP地址(即主機部分所有爲0的IP)和最後一個IP(即主機部分所有爲1的IP)不能分配給主機使用,因此每一個子網的可用IP地址數爲總IP地址數量減2;根據子網ID借用的主機位數,咱們能夠計算出劃分的子網數、掩碼、每一個子網主機數:

IP層轉發分組的流程

如上表所示的C類網絡中,若子網佔用7位主機位時,主機位只剩一位,不管設爲0仍是1,都意味着主機位是全0或全1。因爲主機位全0表示本網絡,全1留做廣播地址,這時子網實際沒有可用主機地址,因此主機位至少應保留2位。

總之,當沒有劃分子網時,IP地址是兩級結構.劃分子網後IP地址變成了三級結構。劃分子網只是把IP地址的主機號這部分進行再劃分,而不改變IP地址原來的網絡號。

2)子網掩碼

子網掩碼(subnet mask)又叫網絡掩碼、地址掩碼、子網絡遮罩,它是一種用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用。子網掩碼只有一個做用,就是將某個IP地址劃分紅網絡地址和主機地址兩部分。子網掩碼是一個32位地址,用於屏蔽IP地址的一部分以區別網絡標識和主機標識,並說明該IP地址是在局域網上,仍是在遠程網上。

子網掩碼的計算:

IP層轉發分組的流程

如上圖所示,IP地址,與掩碼進行與運算,獲得子網主機地址,可是須要注意的是,上圖只是該IP下的一個子網之一,172.16.0.0(10101100 00010000 0000 0000) 是一個B類地址,採用上圖的掩碼,255.255.240.0(11111111 11111111 11110000 00000000),進行與運算,那麼該IP的子網佔用主機位四位,也就是說,該網絡下,地址以11111111 11111111 0000 到 11111111 11111111 1111 開頭的,分屬於不一樣的子網,每一個子網能夠有0000 00000001 到 1111 11111111 (1 ~ 4094)臺不等數量的主機。

經過簡單的計算,讀者不可貴到這樣的結論:劃分子網增長了靈活性,但卻減小了可以鏈接在網絡上的主機總數。

若是沒有子網呢?使用子網掩碼能夠更便於查找路由表。如今互聯網的標準規定:全部的網絡都必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄。若是一個網絡不劃分子網,那麼該網絡的子網掩碼就使用默認子網掩碼。默認子網掩碼中I的位置和IP地址中的網絡號字段net-id正好相對應。所以,若用默認子網掩碼和某個不劃分子網的IP地址逐位相「與」(AND),就應當可以得出該IP地址的網絡地址來。這樣作能夠不用查找該地址的類別位就能知道這是哪一類的IP地址。

IP層轉發分組的流程

使用子網時分組的轉發

在劃分子網的狀況下,分組轉發的算法必須作相應的改動。

IP層轉發分組的流程

無分類編址CIDR(構造超網)

無分類域IBS路由選擇CIDR (Classless Inter-Domain Routing. CIDR的讀音是「sider" )。

1)網絡前綴

CIDR最主要的特色有兩個:

1. CIDR消除了傳統的A類、B類和C類地址以及劃分子網的概念。

CIDR把32位的IP地址劃分爲先後兩個部分。前面部分是「網絡前綴」(network-prefix)(或簡稱爲「前綴」),用來指明網絡,後面部分則用來指明主機。所以CIDR使IP地址從三級編址 (使用子網掩碼)又回到了兩級編址,但這己是無分類的兩級編址。其記法是{<網絡前綴>,<主機號>} 。CIDR還使用「斜線記法」(slash notation),或稱爲CIDR記法,即在IP地址後面加上斜線「/」,而後寫上網絡前綴所佔的位數。例如128.14.35.7/20。

2. CIDR把網絡前綴都相同的連續的IP地址組成一個「CIDR地址塊」。

咱們只要知道CIDR地址塊中的任何一個地址,就能夠知道這個地址塊的起始地址(即最小地址)和最大地址,以及地址塊中的地址數。例如,128.14.35.7/20=10000000 00001110 00100011 00000111,這個地址所在的地址塊中的最小地址和最大地址能夠很方便地得出:

IP層轉發分組的流程

因爲一個CIDR地址塊中有不少地址,因此在路由表中就利用CIDR地址塊來查找目的網絡。這種地址的聚合常稱爲路由聚合(route aggregation),它使得路由表中的一個項目能夠表示原來傳統分類地址的不少個(例如上千個)路由。這減小路由器了之間的路由選擇信息的交換,從而提升了整個互聯網的性能。

從上圖可看出,每個CIDR地址塊中的地址數必定是2的整數次幕。除最後幾行外,CIDR地址塊都包含了多個C類地址(是一個C類地址的2^n倍,n是整數),這就是「構成超網」這一名詞的來源。使用CIDR的一個好處就是能夠更加有效地分配IPv4的地址空間,可根據客戶的須要分配適當大小的CIDR地址塊。

2)最長前綴匹配

在使用CIDR時,因爲採用了網絡前綴這種記法,IP地址由網絡前綴和主機號這兩個部分組成,所以在路由表中的項目也要有相應的改變。這時,每一個項目由「網絡前綴」「下一跳地址」組成。可是在查找路由表時可能會獲得不止一個匹配結果。這樣就帶來一個問題:咱們應當從這些匹配結果中選擇哪一條路由呢?

正確的答案是:應當從匹配結果中選擇具備最長網絡前綴的路由。這叫作最長前綴匹配((longest-prefix matching),這是由於網絡前綴越長,其地址塊就越小,於是路由就越具體(more specific)。最長前綴匹配又稱爲最長匹配最佳匹配

3)使用二叉線索查找路由表

使用CIDR後,因爲要尋找最長前綴匹配,使路由表的查找過程變得更加複雜了。當跳由表的項目數很大時,須要設法減少路由表的查找時間。爲了進行更加有效的查找,一般是把無分類編址的路由表存放在一種層次的數據結構中,而後自上而下地按層次進行查找.這裏最經常使用的就是二叉線索(binary trie),它是一種特殊結構的樹。IP地址中從左到右的比特值決定了從根節點逐層向下層延伸的路徑,而二叉線索中的各個路徑就表明路由表中存放的各個地址。

下圖用一個例子來講明二叉線索的結構。圖中給出了5個IP地址。爲了簡化二叉線索的結構,能夠先找出對應於每個IP地址的惟一前綴(unique prefix)。所謂惟一前綴就是在表中全部的IP地址中,該前綴是惟一的。這樣就能夠用這些惟一前綴來構造二叉線索。在進行查找時,只要可以和惟一前綴相匹配就好了。

IP層轉發分組的流程

完成IP的分組轉發及路由選擇同時,爲了更有效地轉發IP數據報和提升交付成功的機會,所以須要配合網絡層 網際控制報文協議ICMP (Internet Control Message Protocol) [RFC 792]協議 。

可參考:http://www.javashuo.com/article/p-ovrcmmua-km.html「ICMP協議(網際控制報文協議)」

相關文章
相關標籤/搜索