Learning Objectives
- 說明子網路遮罩的作用,並在點分十進位遮罩與 CIDR 前綴長度之間轉換
- 用位址 AND 遮罩算出網路位址,並算出廣播位址與可用的主機位址範圍
- 用 2^n − 2 算出可用主機數,並說明 /31 與 /32 的例外
- 判斷兩個位址在某個遮罩下是否屬於同一個網段
- 從症狀找出遮罩設錯的主機
電腦怎麼知道網路部分有多長
上一課說,位址的前面是網路部分、後面是主機部分;可是 192.168.1.200 本身看不出分界在第幾個位元。
無類別(CIDR)之後,分界可以在任何位置,所以設定位址時一定要同時告訴電腦分界,這就是子網路遮罩(subnet mask)。
遮罩也是 32 位元:網路部分寫 1,主機部分寫 0,而且 1 一定連續排在前面。有兩種寫法:
| 點分十進位遮罩 | 二進位 | CIDR 寫法(前綴長度) |
|---|---|---|
| 255.0.0.0 | 11111111.00000000.00000000.00000000 | /8 |
| 255.255.0.0 | 11111111.11111111.00000000.00000000 | /16 |
| 255.255.255.0 | 11111111.11111111.11111111.00000000 | /24 |
| 255.255.255.192 | 11111111.11111111.11111111.11000000 | /26 |
| 255.255.255.252 | 11111111.11111111.11111111.11111100 | /30 |
CIDR 寫法只寫「前面有幾個 1」,192.168.1.200/24 就等於「位址 192.168.1.200、遮罩 255.255.255.0」。
Windows 的網路設定欄位寫「子網路遮罩」、Linux 與路由器多半用 /24,兩者是同一件事。
遮罩裡的十進位只會是這幾個值:0、128、192、224、240、248、252、254、255(分別是 0~8 個連續的 1)。
看到 255.255.0.255 這種 1 不連續的遮罩,就是寫錯了。
用 AND 算出網路位址與廣播位址
電腦判斷「網段」的方法很機械:把位址和遮罩逐位元 AND(兩個都是 1 才得 1),結果就是網路位址。
遮罩是 1 的地方保留原值,是 0 的地方一律變成 0,等於把主機部分清掉。以 192.168.1.200/26 為例,只看最後一段:
位址 200 = 11001000
遮罩 192 = 11000000
AND = 11000000 = 192 → 網路位址 192.168.1.192
主機部分全 1 = 11111111 = 255 → 廣播位址 192.168.1.255
| 項目 | 怎麼得到 | 192.168.1.200/26 |
|---|---|---|
| 網路位址 | 主機部分全部變 0 | 192.168.1.192 |
| 廣播位址 | 主機部分全部變 1 | 192.168.1.255 |
| 可用的主機位址 | 兩者之間 | 192.168.1.193~192.168.1.254 |
| 可用主機數 | 主機部分 n 位元:2^n − 2 | 2^6 − 2 = 62 |
減 2 是因為網路位址代表網段本身(寫在路由表裡),廣播位址用來送給網段內的所有主機,這兩個都不能設定給主機。
兩個例外:/31 只有 2 個位址,RFC 3021 允許用在點對點連線上,兩個都當主機位址(沒有廣播位址); /32 只有 1 個位址,用來在路由表或防火牆規則裡指定單一主機。
一個快速心算:主機部分剩幾個位元,網段就是 2 的幾次方個位址,而網路位址一定是這個大小的整數倍。 /26 每 64 個一段,所以網段從 .0、.64、.128、.192 開始;200 落在 192 那一段。
小測驗:網路位址與主機數
10.1.1.77/27 的網路位址與廣播位址是?
遮罩 255.255.255.240 等於哪個前綴長度?可用主機數是?
一個網段要放 100 台主機,容得下的最長前綴是?
下列哪一個不是合法的子網路遮罩?
兩台主機的遮罩不一樣會怎樣
主機送出封包前,會用自己的遮罩判斷對方在不在同一個網段:
- 在:用 ARP 問對方的 MAC,直接送。
- 不在:交給預設閘道。
如果同一條線上的兩台主機遮罩設得不一樣,它們對「同不同網段」的判斷就會不一致。例如:
| 主機 | 設定 | 它認為的網段 | 判斷對方 |
|---|---|---|---|
| PC1 | 192.168.1.10/24 | 192.168.1.0~.255 | 192.168.1.200 在同一網段,直接送 |
| PC2 | 192.168.1.200/25 | 192.168.1.128~.255 | 192.168.1.10 不在同一網段,要交給閘道 |
PC1 的 ping 可以送到 PC2,但 PC2 回覆時要交給閘道 192.168.1.1,而這個閘道根本不在 PC2 以為的網段裡,所以回覆送不出去。 結果是單向的:封包過得去、回不來。這類問題光看「ping 不通」很難判斷,要看封包紀錄裡封包停在哪一台。
小測驗:同不同網段
在 /26 之下,哪一對位址屬於同一個網段?
主機設定 192.168.1.200/25、預設閘道 192.168.1.1。它能把封包送到其他網段嗎?
A 是 10.0.0.5/24,B 是 10.0.0.130/25,兩台接在同一台交換器上、都沒有設定閘道。從 A ping B 的結果是?
重點整理
- 子網路遮罩用連續的 1 標出網路部分;CIDR 寫法
/n就是「前面有 n 個 1」。 - 位址 AND 遮罩=網路位址(主機部分全 0);主機部分全 1 是廣播位址;兩者之間是可用的主機位址。
- 可用主機數=2^n − 2(n 是主機部分的位元數);/31 用在點對點連線,兩個位址都可以用;/32 代表單一主機。
- 網段一定從自己大小的整數倍開始,心算時先找出「每幾個一段」。
- 主機用自己的遮罩判斷對方在不在同一個網段;同一條線上的遮罩不一致,會造成封包過得去、回不來的單向問題。閘道也必須在主機自己的網段裡。
下一課把一段位址切成好幾個子網路:等分切割、依需求切出大小不同的網段(VLSM),以及反過來把連續的網段合成一條路由。