文章目錄
4.3 劃分子網和構造超網
4.3.1 劃分子網
4.3.1.1 從兩級 IP 地址到三級 IP 地址
在 ARPANET 的早期,IP 地址的設計確實不夠合理:
- IP 地址空間的利用率有時很低。
- 給每一個物理網絡分配一個網絡號會使路由表變得太大因而使網絡性能變壞。
- 兩級的 IP 地址不夠靈活。
三級 IP 地址
- 從 1985 年起在 IP 地址中又增加了一個“子網號字段”,使兩級的 IP 地址變成爲三級的 IP 地址。
- 這種做法叫做劃分子網 (subnetting) 。
- 劃分子網已成爲互聯網的正式標準協議。
劃分子網的基本思路
- 劃分子網純屬一個單位內部的事情。單位對外仍然表現爲沒有劃分子網的網絡。
- 從主機號借用若干個位作爲子網號 subnet-id,而主機號 host-id 也就相應減少了若干個位。
- 凡是從其他網絡發送給本單位某個主機的 IP 數據報,仍然是根據 IP 數據報的目的網絡號 net-id,先找到連接在本單位網絡上的路由器。
- 然後此路由器在收到 IP 數據報後,再按目的網絡號 net-id 和子網號 subnet-id 找到目的子網。
- 最後就將 IP 數據報直接交付目的主機。
一個未劃分子網的 B 類網絡 145.13.0.0
劃分爲三個子網後對外仍是一個網絡
劃分子網後變成了三級結構
- 當沒有劃分子網時,IP 地址是兩級結構。
- 劃分子網後 IP 地址就變成了三級結構。
- 劃分子網只是把 IP 地址的主機號 host-id 這部分進行再劃分,而不改變 IP 地址原來的網絡號 net-id。
- 優點
- 減少了 IP 地址的浪費
- 使網絡的組織更加靈活
- 更便於維護和管理
- 劃分子網純屬一個單位內部的事情,對外部網絡透明,對外仍然表現爲沒有劃分子網的一個網絡。
4.3.1.2 子網掩碼
- 從一個 IP 數據報的首部並無法判斷源主機或目的主機所連接的網絡是否進行了子網劃分。
- 使用子網掩碼 (subnet mask) 可以找出 IP 地址中的子網部分。
規則
- 子網掩碼長度 = 32 位
- 子網掩碼左邊部分的一連串 1,對應於網絡號和子網號
- 子網掩碼右邊部分的一連串 0,對應於主機號
IP 地址的各字段和子網掩碼
默認子網掩碼
子網掩碼是一個重要屬性
- 子網掩碼是一個網絡或一個子網的重要屬性。
- 路由器在和相鄰路由器交換路由信息時,必須把自己所在網絡(或子網)的子網掩碼告訴相鄰路由器。
- 路由器的路由表中的每一個項目,除了要給出目的網絡地址外,還必須同時給出該網絡的子網掩碼。
- 若一個路由器連接在兩個子網上,就擁有兩個網絡地址和兩個子網掩碼。
子網劃分方法
- 有固定長度子網和變長子網兩種子網劃分方法。
- 在採用固定長度子網時,所劃分的所有子網的子網掩碼都是相同的。
- 雖然根據已成爲互聯網標準協議的 RFC 950 文檔,子網號不能爲全 1 或全 0,但隨着無分類域間路由選擇 CIDR 的廣泛使用,現在全 1 和全 0 的子網號也可以使用了,但一定要謹慎使用,確認你的路由器所用的路由選擇軟件是否支持全 0 或全 1 的子網號這種較新的用法。
- 劃分子網增加了靈活性,但卻減少了能夠連接在網絡上的主機總數。
B 類地址的子網劃分選擇(使用固定長度子網)
例4-2 已知 IP 地址是 141.14.72.24,子網掩碼是 255.255.192.0。試求網絡地址。
例4-3 上例中,若子網掩碼改爲 255.255.224.0,試求網絡地址,討論所得結果。
注意:不同的子網掩碼得出相同的網絡地址,但不同的掩碼的效果是不同的。
4.3.2 使用子網時分組的轉發
- 在不劃分子網的兩級 IP 地址下,從 IP 地址得出網絡地址是個很簡單的事。
- 但在劃分子網的情況下,從 IP 地址卻不能唯一地得出網絡地址來,這是因爲網絡地址取決於那個網絡所採用的子網掩碼,但數據報的首部並沒有提供子網掩碼的信息。
- 因此分組轉發的算法也必須做相應的改動。
在劃分子網情況下路由器轉發分組的算法
- 從收到的分組的首部提取目的 IP 地址 D。
- 先用各網絡的子網掩碼和 D 逐位相“與”,看是否和相應的網絡地址匹配。若匹配,則將分組直接交付。否則就是間接交付,執行(3)。
- 若路由表中有目的地址爲 D 的特定主機路由,則將分組傳送給指明的下一跳路由器;否則,執行 (4)。
- 對路由表中的每一行,將子網掩碼和 D 逐位相“與”。若結果與該行的目的網絡地址匹配,則將分組傳送給該行指明的下一跳路由器;否則,執行 (5)。
- 若路由表中有一個默認路由,則將分組傳送給路由表中所指明的默認路由器;否則,執行 (6)。
- 報告轉發分組出錯。
例4-4 已知互聯網和路由器 R1 中的路由表。主機 H1 向 H2 發送分組。試討論 R1 收到 H1 向 H2 發送的分組後查找路由表的過程。
過程如下:
-
H1 首先檢查主機 128.30.33.138 是否連接在本網絡上。如果是,則直接交付;否則,就送交路由器 R1,並逐項查找路由表。
-
H1 把分組傳送到路由器 R1,然後逐項查找路由表。
4.3.3 無分類編址 CIDR
4.3.3.1 網絡前綴
劃分子網在一定程度上緩解了互聯網在發展中遇到的困難。然而在 1992 年互聯網仍然面臨三個必須儘早解決的問題:
- B 類地址在 1992 年已分配了近一半,眼看就要在 1994 年 3 月全部分配完畢。
- 互聯網主幹網上的路由表中的項目數急劇增長(從幾千個增長到幾萬個)。
- 整個 IPv4 的地址空間最終將全部耗盡。
IP 編址問題的演進
- 1987 年,RFC 1009 就指明瞭在一個劃分子網的網絡中可同時使用幾個不同的子網掩碼。
- 使用變長子網掩碼 VLSM (Variable Length Subnet Mask)可進一步提高 IP 地址資源的利用率。
- 在 VLSM 的基礎上又進一步研究出無分類編址方法,它的正式名字是無分類域間路由選擇 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特點
- CIDR 消除了傳統的 A 類、B 類和 C 類地址以及劃分子網的概念,因而可以更加有效地分配 IPv4 的地址空間。
- CIDR 使用各種長度的“網絡前綴”(network-prefix)來代替分類地址中的網絡號和子網號。
- IP 地址從三級編址(使用子網掩碼)又回到了兩級編址。
無分類的兩級編址
-
無分類的兩級編址的記法是:
-
CIDR 使用 “斜線記法”(slash notation),它又稱爲 CIDR 記法,即在 IP 地址面加上一個斜線 “/”,然後寫上網絡前綴所佔的位數(這個數值對應於三級編址中子網掩碼中 1 的個數)。例如: 220.78.168.0/24
CIDR 地址塊
- CIDR 把網絡前綴都相同的連續的 IP 地址組成 “CIDR 地址塊”。
- 128.14.32.0/20 表示的地址塊共有 2^12 個地址(因爲斜線後面的 20 是網絡前綴的位數,所以這個地址的主機號是 12 位)。
- 這個地址塊的起始地址是 128.14.32.0。
- 在不需要指出地址塊的起始地址時,也可將這樣的地址塊簡稱爲 “/20 地址塊”。
- 128.14.32.0/20 地址塊的最小地址:128.14.32.0
- 128.14.32.0/20 地址塊的最大地址:128.14.47.255
- 全 0 和全 1 的主機號地址一般不使用。
路由聚合
- 一個 CIDR 地址塊可以表示很多地址,這種地址的聚合常稱爲路由聚合,它使得路由表中的一個項目可以表示很多個(例如上千個)原來傳統分類地址的路由。
- 路由聚合有利於減少路由器之間的路由選擇信息的交換,從而提高了整個互聯網的性能。
- 路由聚合也稱爲構成超網 (supernetting)。
- CIDR 雖然不使用子網了,但仍然使用“掩碼”這一名詞(但不叫子網掩碼)。
- 對於 /20 地址塊,它的掩碼是 20 個連續的 1。 斜線記法中的數字就是掩碼中 1 的個數。
CIDR 記法的其他形式
-
10.0.0.0/10 可簡寫爲 10/10,也就是把點分十進制中低位連續的 0 省略。
-
10.0.0.0/10 隱含地指出 IP 地址 10.0.0.0 的掩碼是 255.192.0.0。此掩碼可表示爲:
-
網絡前綴的後面加一個星號 * 的表示方法,如 00001010 00*,在星號 * 之前是網絡前綴,而星號 * 表示 IP 地址中的主機號,可以是任意值。
常用的 CIDR 地址塊
構成超網
- 前綴長度不超過 23 位的 CIDR 地址塊都包含了多個 C 類地址。
- 這些 C 類地址合起來就構成了超網。
- CIDR 地址塊中的地址數一定是 2 的整數次冪。
- 網絡前綴越短,其地址塊所包含的地址數就越多。而在三級結構的IP地址中,劃分子網是使網絡前綴變長。
- CIDR 的一個好處是:可以更加有效地分配 IPv4 的地址空間,可根據客戶的需要分配適當大小的 CIDR 地址塊。
CIDR 地址塊劃分舉例
這個 ISP 共有 64 個 C 類網絡。如果不採用 CIDR 技術,則在與該 ISP 的路由器交換路由信息的每一個路由器的路由表中,就需要有 64 個項目。但採用地址聚合後,只需用路由聚合後的 1 個項目 206.0.64.0/18 就能找到該 ISP。
4.3.3.2 最長前綴匹配
- 使用 CIDR 時,路由表中的每個項目由“網絡前綴”和“下一跳地址”組成。在查找路由表時可能會得到不止一個匹配結果。
- 應當從匹配結果中選擇具有最長網絡前綴的路由:最長前綴匹配 (longest-prefix matching)。
- 網絡前綴越長,其地址塊就越小,因而路由就越具體 (more specific) 。
- 最長前綴匹配又稱爲最長匹配或最佳匹配。
最長前綴匹配舉例
4.3.3.3 使用二叉線索查找路由表
- 當路由表的項目數很大時,怎樣設法減小路由表的查找時間就成爲一個非常重要的問題。
- 爲了進行更加有效的查找,通常是將無分類編址的路由表存放在一種層次的數據結構中,然後自上而下地按層次進行查找。這裏最常用的就是二叉線索 (binary trie)。
- IP 地址中從左到右的比特值決定了從根結點逐層向下層延伸的路徑,而二叉線索中的各個路徑就代表路由表中存放的各個地址。
- 爲了提高二叉線索的查找速度,廣泛使用了各種壓縮技術。
用 5 個前綴構成的二叉線索
4.4 網際控制報文協議 ICMP
- 爲了更有效地轉發 IP 數據報和提高交付成功的機會,在網際層使用了網際控制報文協議 ICMP (Internet Control Message Protocol)。
- ICMP 是互聯網的標準協議。
- ICMP 允許主機或路由器報告差錯情況和提供有關異常情況的報告。
- 但 ICMP 不是高層協議(看起來好像是高層協議,因爲 ICMP 報文是裝在 IP 數據報中,作爲其中的數據部分),而是 IP 層的協議。
ICMP 報文的格式
4.4.1 ICMP 報文的種類
- ICMP 報文的種類有兩種,即 ICMP 差錯報告報文和 ICMP 詢問報文。
- ICMP 報文的前 4 個字節是統一的格式,共有三個字段:即類型、代碼和檢驗和。接着的 4 個字節的內容與 ICMP 的類型有關。
ICMP 差錯報告報文共有 4 種
- 終點不可達
- 時間超過
- 參數問題
- 改變路由(重定向)(Redirect)
ICMP 差錯報告報文的數據字段的內容
不應發送 ICMP 差錯報告報文的幾種情況
- 對 ICMP 差錯報告報文不再發送 ICMP 差錯報告報文。
- 對第一個分片的數據報片的所有後續數據報片都不發送 ICMP 差錯報告報文。
- 對具有多播地址的數據報都不發送 ICMP 差錯報告報文。
- 對具有特殊地址(如127.0.0.0 或 0.0.0.0)的數據報不發送 ICMP 差錯報告報文。
ICMP 詢問報文有兩種
- 回送請求和回答報文
- 時間戳請求和回答報文
下面的幾種 ICMP 報文不再使用:
- 信息請求與回答報文
- 掩碼地址請求和回答報文
- 路由器詢問和通告報文
- 源點抑制報文
4.4.2 ICMP 的應用舉例
PING (Packet InterNet Groper)
- PING 用來測試兩個主機之間的連通性。
- PING 使用了 ICMP 回送請求與回送回答報文。
- PING 是應用層直接使用網絡層 ICMP 的例子,它沒有通過運輸層的 TCP 或UDP。
Traceroute 的應用舉例
- 在 Windows 操作系統中這個命令是 tracert。
- 用來跟蹤一個分組從源點到終點的路徑。
- 它利用 IP 數據報中的 TTL 字段和 ICMP 時間超過差錯報告報文實現對從源點到終點的路徑的跟蹤。