Subnetting/Supernetting and Classless Addressing 靜宜大學資工系 蔡奇偉 副教授 2006
大綱 子網化 (SUBNETTING) 超網化 (SUPERNETTING) 無級式定址 (CLASSLESS ADDRSSING)
子網化 (Subnetting) 將一網路分成數個較小的子網路,每個子網路有自己的子網路位址。 IP 位址設計為兩個階層 子網化採用三個階層 網路代碼 (net ID) 主機代碼 (host ID) 子網化採用三個階層 地點 (site) 子網代碼 (subnet ID) 主機代碼
Figure 5-1 一個二階層式的網路 (未子網化) 某個組織有一個 B 級位址 141.14.0.0,這是一個二階層的定址方法,所以其實際網路只有一個 (如下圖)。網路上的電腦屬於同一個網路,不再細分成不同的群組。
三階層架構 加入子網使原來 IP 位址系統中,增加一個新的分層。這三層分別為地點、子網及主機。地點是第一層,子網是第二層,主機是第三層,用來定義連接到子網路上的一台電腦。 使用子網時 IP 封包的路徑選擇過程分為三個步驟: 1. 送到目的地點 2. 送到目的子網路 3. 最後送到目的主機
Figure 5-2 一個三階層式的網路(子網化)
Figure 5-3 使用子網與沒有使用子網的位址
子網遮罩 網路遮罩:用來找出網路位址。 子網遮罩 (subnet mask):用來找出子網路位址。 早期使用 0 和 1 混合組成的非連續子網遮罩。 現今已改用連續子網遮罩,即一串的 1 之後接一串的 0。
Figure 5-5 預設遮罩與子網遮罩 01001000 (72) 11000000 (192) 01000000 (64)
找出子網位址 直接做法 快速做法 給予一個位址,我們可以如前一章找網路位址一般,將子網遮罩應用到位址上遮取出子網位址。這有兩種方法: 我們使用位址與遮罩的二進制表示法,然後二者做位元 AND 運算,以獲得子網位址。 快速做法 1. 如果遮罩位元組之值為 255,則直接拷貝位址的對應位元組。 2. 如果遮罩位元組之值為 0,則將位址所對應之位元組之值設為 0。 3. 如果遮罩位元組之值不是 255 也不是 0,則進行 AND 的運算以求結果。
問題 解答 如果目的位址為 200.45.34.56,子網遮罩為255.255.240.0,則子網路位址為何? 11001000 00101101 00100010 00111000 11111111 11111111 11110000 00000000 11001000 00101101 00100000 00000000 所以子網位址是 200.45.32.0.
問題 如果目的位址為 19.30.84.5,而遮罩為 255.255.192.0,則,則子網位址為何? 解答
子網的數目 子網的個數可以從預設遮罩後面多出來的 1 數目而得。例如,下圖中多出來 1 的個數為 3,那麼子網的數目為 23 = 8 。 每個子網的位址數目 每個子網內的位址個數可以從計數子網遮罩內 0 的數目而得。例如,下圖中 0 的個數為 13,所以此子網內的位址個數為 213 = 8192。
設計子網 Step 1: 決定子網的數目 設計的第一步,是決定使用單位所需的子網個數。其決定因素如下:網路所在的地點 (建築物或樓層數)、部門的數目、每個子網要有多少主機等等。為了讓遮罩動作正確,子網的數目最好為 2 的次方 (0、2、4、8 等等)。注意,0 是指不用子網的意思。
Step 2: 找出子網的遮罩 第二步是找出一個連續性的子網遮罩。使用以下的規則,可以很容易找到: 1. 找出預設遮罩內 1 的數目。 2. 找出定義子網所需 1 的數目。 3. 將前面二項的 1 數目加在一起。 4.以 32 減去步驟 3 中 1 的數目,即為 0 的數目。
Step 3: 找出每個子網位址的範圍 在決定子網遮罩之後,網管者可以找出每個子網的位址範圍。有兩個方法可以用來找到每個子網位址的範圍。 方法一: 是從第一個子網開始。第一個子網的第一個位址,即該位址區塊的第一個位址。然後,將每個子網內位址的數目加起來,以得到最後一個位址。接著,將此位址加 1,就找到下一個子網的第一個位址。如此重複上面的步驟。 方法二: 是從最後一個子網開始。最後一個子網的最後一個位址,是此位址區塊的最後一個位址。然後,使用遮罩以得到這個子網的第一個位址。接著,將此位址減 1,以到最後第二個子網的最後一個位址。如此重複上面步驟。
問題 解答 某公司被核給一 C 級地點位址 201.70.64.0,此公司需要 6 個子網,試設計之。 需 6 個子網,6 不是 2 的次方。下一個 2 次方數字為 8 (23),所以子網遮罩內另外需要 3 個 1。 子網遮罩 1 的數目為 27 (24+3)。 0 的數目為 5 (32-27)。
我們用方法一來找出位址的範圍,從第一個子網開始。 子網遮罩為 11111111 11111111 11111111 11100000 (或 255.255.255.224)。 子網數目為 8。 每個子網的位址數目為 25 (32) 我們用方法一來找出位址的範圍,從第一個子網開始。 a. 這個子網的第一個位址為 201.70.64.0 (區塊的第一個位址)。 b. 此子網最後一個位址為 201.90.64.0 + 31 = 201.70.64.31。 9. 現在找第 2 個子網的範圍: a. 此子網的第一個位址為 201.70.64.32。 b. 此子網的最後一個位址為其第一個位址加 31,即 201.70.64.63。
10. 其他子網範圍依類似步驟即可求出,下圖說明整個步 驟,可以很容易用程式做。 Figure 5-8 10. 其他子網範圍依類似步驟即可求出,下圖說明整個步 驟,可以很容易用程式做。
問題 解答 某公司被核給一 B 級地點位址 181.56.0.0,此公司需要 1000 個子網,試設計之。 需要 1000 個子網。1000 不是 2 的次方。下一個 2 次方數字為 1024 (210),所以子網遮罩內另外需要 10 個 1。 子網遮罩 1 的數目為 26 (16+10)。 0 的數目為 6 (32-26)。
我們用方法二來找出位址的範圍,從第 1024 個子網開始。 子網遮罩為 11111111 11111111 11111111 11000000 (或255.255.255.192). 子網數目為 1024。 每個子網的位址數目為 26 (64), 我們用方法二來找出位址的範圍,從第 1024 個子網開始。 a. 這個子網的最後一個位址為 181.56.255.255 (區塊的最後一個位址)。 b. 以遮罩從最後一個位址遮取此子網的第一個位址為181.56.255.192。 9. 現在找第 1023 個子網的範圍: a. 此子網的最後一個位址為 181.56.255.191。 b. 以遮罩從最後一個位址遮取此子網的第一個位址為181.56.255.128。
10. 其他子網範圍依類似步驟即可求出,可以很容易用程式做,下圖說明各個子網與其範圍。 Figure 5-9 10. 其他子網範圍依類似步驟即可求出,可以很容易用程式做,下圖說明各個子網與其範圍。
可變長度的子網遮罩 假定某地點使用 C 級位址需要 5 個子網,每個子網所需的電腦個數分別為 60、60、60、30、和 30。如果用 2 個位元的子網遮罩,只能形成 4 個子網,並不符合需求。也不能用 3 個位元的子網遮罩,因為這樣形成 8 個子網,每子網 32 個位址。 欲解決這個問題,需要使用不同長度的子網。這種組態,需要使用兩個不同的遮罩,一個接一個使用。第一次使用 26 個 1 的遮罩 (255.255.255.192) 將網路分成 4 個子網,然後用 27 個 1 的遮罩 (255.255.255.224) 到其中一個子網,將之分成 2 個小子網,如下圖所示。
Figure 5-10 大小不同的子網
超網化 (Supernetting) 雖然,A 級與 B 級的位址已經用盡,C 級位址仍然有剩。然而,C 級位址最多只有 256 個位址可以使用,對中型機構而言,都是不夠用的。 解決之道是便用超網 (supemetting)。要做超網,需要申請多個 C 級位址,以合併成一個較大的網路。下圖展示由 4 個 C 級位址結合而成的超網。
Figure 5-11 由 4 個 C 級所組成的超網
由連續區塊組成超區塊 Rules: 區塊個數必須是 2 的次方。 必須是連續的區塊,其中沒有間隙。 超區塊的第一個位址的第三個位元組必須可以被區 塊數目整除。換句話說,如果區塊數是 N,則第三 個位元組必須能整除 N。
問題 一公司需要 600 個位址,以下哪一組 C 級區塊,可以用來形成一個超網路。 198.47.32.0 198.47.33.0 198.47.34.0 198.47.32.0 198.47.42.0 198.47.52.0 198.47.62.0 198.47.31.0 198.47.32.0 198.47.33.0 198.47.34.0 198.47.32.0 198.47.33.0 198.47.34.0 198.47.35.0
解答 不行;只有三個區塊,至少要 4 個區塊才是 2 的次方。 不行;區塊間不連續。 不行;第一個區塊中的 31 無法被 4 整除。 可行;三項需求都達到。這間公司得到 1024 個位址,超出需求許多,但我們別無選擇。
超網遮罩 (Supernet Mask) 當一個使用單位將數個區塊合併成一個超區塊時,我們必須知道區塊的第一個位址與超區塊的遮罩。只有第一個位址並無法定義範圍;我們需要一個超網遮罩,以找出有多少區塊被合併成一個超區塊。 超網的遮罩與子網遮罩剛好相反。這是說,C 級的子網遮罩其 1 的數目比其預設遮罩多。而 C 級的超網遮罩其 1 的數目比其預設遮罩少。
Figure 5-12 子網遮罩、預設遮罩、超網遮罩之比較
問題 解答 欲將 16 個 C 級區塊做成一個超網,其超網遮罩為何? 有 16 個區塊,超網遮罩 1 的個數比預設遮罩少 4 個 1,所以超網遮罩為 11111111 11111111 11110000 00000000 或 255.255.240.0
問題 超網的第一個位址為 205.16.32.0,超網遮罩為255.255.248.0,某路由器收到 3 個封包,其目的位址如下: 205.16.37.44 205.16.42.56 205.17.33.76 哪個封包屬於該超網?
解答 使用超網遮罩試著找出第一個位址。 205.16.37.44 AND 255.255.248.0 205.16.32.0 只有第一個位址屬於這個超網。
問題 解答 某超網的第一個位址為 205.16.32.0,其超網遮罩為 255.255.248.0,這個超網有多少區塊?其位址範圍為何? 此超網有 21 個 1,預設遮罩有 24 個 1,差別為 3,所以此超網共有 23 = 8 個區塊。這些區塊為 205.16.32.0 到 205.16.39.0。第一個位址為 205.16.32.0,最後一個位址為 205.16.39.255,全部的位址數為 8256 = 2048。
無級式定址 (Classless Addressing) 網際網路官方在 1996 年訂定。 無級式定址的觀念是使用可變長度的區塊(variable-length block),這些區塊不再有級別。 一個區塊範圍可以從很小到非常大。 無級定址架構把整個位址空間 (232) 分成若干不同大小的區塊,因此申請單位可以分配到一個適合的大小。
區塊內位址之個數 每個區塊內的位址數目必須是 2 的次方 (2、4、8 等),這樣一個家庭可以給 2 個位址,小商家可以給 16 個位址,而大的使用單位或許可以給 1024 個位址。 起始位址 起始位址必須可以被位址數目整除。例如,如果一個區塊包含 4 個位址,則起始位址必須可以被 4 整除,如果區塊的位址少於 256 個,我們只需檢查最右邊的位元組。如果位址少於 65,536 個,只需檢查最右邊兩個位元組,依此類推。
問題 解答 以下何者可為包含 16 個位址之區塊的起始位址? a. 205.16.37.32 b. 190.16.42.44 c. 17.17.33.80 d. 123.45.24.52 解答 只有 a 和 c 合格,205.16.37.32 的 32 可以被 16整除,17.17.33.80 的 80 可以被 16整除。
問題 解答 以下何者可為包含 1024 個位址之區塊的起始位址? a. 205.16.37.32 b. 190.16.42.0 c. 17.17.32.0 d. 123.45.24.52 解答 只有 c 合格。要被 1024 整除,位址最右邊位元組必須為 0,而最右的第二位元組必須能被 4 整除,所以只有 17.17.32.0 符合條件。
遮罩 A.B.C.D/n 當使用單位被分配一個位址區塊時,它被給予第一個位址和遮罩,這兩個訊息就可以定義整個區塊。 我們知道遮罩是由左邊的一些 1 及右邊的一些 0 組成。例如,我們可以只說遮罩為 27 個 1,而不需說成 255.255.255.224。我們將 1 的數目,放在無級式位址的後面,用以表示遮罩。這種表示法稱為斜線表示法 (slash notation) 或 CIDR (classless interdomain routing,無級式領域間路徑選擇) 表示法。 A.B.C.D/n
前置位元與後置位元 前置位元 (prefix) 是位址範圍內共同的部分 (類似netid),而前置位元長度即為前置位元的長度,也就是斜線表示法中的 n。 後置位元 (suffix) 是位址會變化的部分 (類似 hostid),後置位元長度即為 32 – n。
問題 解答 某小單位被給予一個區塊,其起始位址與前置位元長度為 205.16.37.24/29,試問區塊的範圍為何? 起始位址為 205.16.37.24。找出最後位址的方法,是保持前面 29 個位元不變,將最後 3 個位元改為 1: 起始位址: 11001111 00010000 00100101 00011000 結束位址: 11001111 00010000 00100101 00011111 所以總共有 8 個位址。
我們可以用另一種方法找出上一頁問題的位址範圍。從後置位元長度 32 – 29 = 3,所以 23 = 8 個位址。而第一個位址為 205 我們可以用另一種方法找出上一頁問題的位址範圍。從後置位元長度 32 – 29 = 3,所以 23 = 8 個位址。而第一個位址為 205.16.37.24,所以最後一個位址為 205.16.37.31 (24 + 7 = 31)。
前置位元長度與遮罩 Class A Class B Class C /n 遮罩 /1 128.0.0.0 /9 255.128.0.0 /17 255.255.128.0 /25 255.255.255.128 /2 192.0.0.0 /10 255.192.0.0 /18 255.255.192.0 /26 255.255.255.192 /3 224.0.0.0 /11 255.224.0.0 /19 255.255.224.0 /27 255.255.255.224 /4 240.0.0.0 /12 255.240.0.0 /20 255.255.240.0 /28 255.255.255.240 /5 248.0.0.0 /13 255.248.0.0 /21 255.255.248.0 /29 255.255.255.248 /6 252.0.0.0 /14 255.252.0.0 /22 255.255.252.0 /30 255.255.255.252 /7 254.0.0.0 /15 255.254.0.0 /23 255.255.254.0 /31 255.255.255.254 /8 255.0.0.0 /16 255.255.0.0 /24 255.255.255.0 /32 255.255.255.255 Class A Class B Class C
某位址為167.199.170.82/27,其網路位址為何? 問題 解答 前置位元長度為 27 位元,所以保留前面 27 位元,將後面 5 個位元改為 0。5 位元只影響最後一個位元組,最後位元組為 01010010,改最後 5 位元為 0 後為01000000 即 64,所以網路位址為 167.199.170.64/27。
問題 解答 某組織被給予一位址區塊 130.34.12.64/26。該組織想要有 4 個子網,各個子網的位址與範圍為何? 後置位元長度為 6,所以此區塊內的位址總數為 26 = 64 如果想要建 4 個子網,那麼每個子網有 16 個位址。
我們需要 4 個子網,表示要加 2 個 1 到地點的前置位元,因此子網前置位元為 /28。 Subnet 1: 130.34.12.64/28 to 130.34.12.79/28. Subnet 2 : 130.34.12.80/28 to 130.34.12.95/28. Subnet 3: 130.34.12.96/28 to 130.34.12.111/28. Subnet 4: 130.34.12.112/28 to 130.34.12.127/28. 參見下圖
Figure 5-15