劃分子網
分類的IP地址也稱爲兩級IP地址(網絡號,主機號)。這樣的分類有幾點不好的地方:
- IP地址空間利用率低。試想A類地址能表示(2^31)個網絡地址,全球的主機數遠不止如此。
- 每個物理網絡都分配一個網絡號,會使得路由表過大。
- 二級地址不夠靈活。
劃分子網就是爲了解決這些問題的。具體的思路如下:
- 一個擁有許多物理網絡的單位,可以將所屬的物理網絡劃分成子網,這樣的子網只對單位內可見,對外仍然表現爲一個網絡。
- 方法是,從IP地址的主機號中借用部分來作爲子網號。於是變成3級地址:
- 發送到本網絡的數據報,仍是將此數據報交付給本單位的對外的路由器,路由器再根據子網號找到對應的網絡,然後把數據交付給主機。
注意:劃分子網是在原來的IP地址的主機號進行劃分,而不改變IP地址原有的網絡號。
子網掩碼
那麼數據到了本網絡的路由器,路由器又是怎麼把數據交付到對應的子網的呢?這就要使用到子網掩碼了。子網掩碼的原理很簡單:子網掩碼中用1來代替原IP地址中的網絡號和子網號,用0來代替主機號。將子網掩碼與數據報的目的IP地址相與,便可以得出目的IP所在的子網號。 如下圖的網絡地址的計算
不管網絡有沒有劃分子網,只要把子網掩碼與IP地址相與,就可以立即得出網絡地址,這樣在路由器處理分組的時候就可以採取同樣的算法。即使網絡沒有劃分子網,使用子網掩碼也可以方便的查找出路由表,一般這種網絡使用默認的子網掩碼。子網掩碼是犧牲主機號來擴展網絡號的,也就是說,劃分子網雖然增加了靈活性,但是減少了能在網絡上連接的主機數。
子網內的分組轉發中,路由表相比之前的二級地址的路由表多了一項子網掩碼,下圖就是一個示例:
- 從數據報首部提出目的主機的IP地址D。
- 對路由器直接相連的網絡,用子網掩碼與目的網絡地址D相與,得出網絡地址,再看是否存在相應的網絡地址,存在則直接交付,否則間接交付
- 如果路由表中有到目的地址爲D的特定主機路由,則將數據交付給該條目的下一跳地址。否則轉4
- 對路由表中的每一個子網掩碼,都與D相與,如果得出的網絡號N與該行的目的地址網絡相同,則將數據交付給下一跳路由。否則轉5.
- 如果路由表中有設置默認路由,那麼將數據交付給指明的默認路由器地址。否則轉6
- 分組轉發出錯。
實際上,對子網的分組轉發,就是在之前IP的分組互轉發的基礎上,多了跟子網掩碼計算的步驟。
CIDR構成超網
爲了使得32位的網絡地址能物盡其用,IEFT提出了無分類編址的方式。它消除了傳統的分類IP地址跟劃分子網的概念,改用網絡前綴來標識網絡號。並且把網絡前綴都相同的IP地址,組成一個CIDR地址塊。CIDR在IP地址後面加上斜槓,表示網絡前綴所佔的位數。這樣三級分類地址又回到了二級分類:
將主機號全部置0或者置1,可以得出該地址塊的地址範圍:
同樣的,CIDR也可以使用主機號來構成子網,且其掩碼的規則跟之前的一樣。一個CIDR中有很多地址塊,所以路由表中可以用地址塊來查找目的網絡,這樣的地址稱爲路由聚合。通常我們在網絡前綴後面加一個星號用來表示CIDR的地址:
當網絡前綴不是8的倍數的時候,就需要將數值轉換成二進制數,來找到對應的網路前綴。將劃分的子網的網絡前綴以二進制數寫出表示,可以很清楚的看出路由聚合的概念:
一系到四系的路由可以聚合成ISP的路由,而一系的所有主機可以聚合成206.0.68.0/23這個路由。
ICMP協議(網際控制報文協議)
爲了有效轉發IP數據報和提高交付成功的機會,在網絡層使用ICMP協議。該協議允許主機或者路由器報告差錯情況以及提供異常情況的報告。ICMP報文主要分爲差錯報告,詢問報文。
ICMP差錯報告報文共有4種:
- 終點不可達,當主機或者路由器不能交付數據的時候,發送此報文。
- 時間超過,當路由器收到TTL = 0的報文時。報此錯誤
- 參數問題,略
- 路由重定向,略
常用的ICMP詢問報文爲:
- 回送請求回答
- 時間戳請求和回答
應用:ping命令。