Day 01 最後留了一個問題:
電腦要送資料以前,怎麼知道對方跟自己是不是在同一個網路?
因為這個判斷會直接決定下一步。
同網段
→ 直接在本地 LAN 找對方
不同網段
→ 先交給 Default Gateway
所以今天先不急著講 ARP、MAC、Routing Table。
先把最前面的判斷弄懂:
IP、Subnet Mask 和網段,到底是什麼關係?
假設我的電腦是:
192.168.1.50/24
可以先粗略想成:
192.168.1.0/24 = 中正路這一整段
192.168.1.50 = 這條路上的 50 號
所以:
192.168.1.50
是一台主機的 IP;
而:
192.168.1.0/24
代表的是一整個網段。
這兩個以前我很容易混在一起。
/24 到底在做什麼?/24 是 CIDR Prefix Length。
它代表:
IPv4 共 32 bits
前 24 bits = Network bits
後 8 bits = Host bits
也可以寫成 Subnet Mask:
255.255.255.0
換成二進位就是:
11111111.11111111.11111111.00000000
所以我現在會把 Subnet Mask 記成:
它在告訴電腦,IP 裡哪些 bits 是「網路」,哪些 bits 是「這個網路裡的主機」。
假設:
PC A:192.168.1.10/24
PC B:192.168.1.20/24
人用眼睛看,很容易說:
前三段都一樣,應該同網段吧。
但電腦不是靠感覺。
它會拿 IP 和 Subnet Mask 做 bitwise AND。
先不用把 bitwise 想得太可怕,今天只要知道結果:
192.168.1.10
AND 255.255.255.0
= 192.168.1.0
PC B 也算一次:
192.168.1.20
AND 255.255.255.0
= 192.168.1.0
兩邊得到相同的 Network Address:
192.168.1.0/24
所以 PC A 才能判斷:
PC B 跟我在同一個網段。
例如:
192.168.1.0/24
整個範圍是:
192.168.1.0 ~ 192.168.1.255
其中一般情況下:
192.168.1.0 = Network Address
192.168.1.255 = Broadcast Address
主機常用範圍則是:
192.168.1.1 ~ 192.168.1.254
所以我現在會把三個概念拆開:
IP
= 某一台主機的地址
Subnet Mask / CIDR
= 決定 Network bits 和 Host bits 怎麼切
網段
= 切完之後得到的一整個地址範圍
/26 為什麼不是背答案?如果看到:
192.168.1.0/26
代表:
前 26 bits = Network
後 6 bits = Host
所以一個 /26 總共有:
2^6 = 64
個地址。
如果從一個 /24 往下切,可以得到四個 /26:
192.168.1.0/26
192.168.1.64/26
192.168.1.128/26
192.168.1.192/26
為什麼起點剛好是 0、64、128、192?
因為 /26 還剩 6 個 Host bits,所以每一個 subnet 都有:
2^6 = 64
個 address。也就是每一段都佔 64 個位址,所以 Network Address 會每 64 往下一段:
0 → 64 → 128 → 192
每一段都是不同的網段。
這裡真正重要的不是背:
/26 = 64
而是知道:
Prefix 越長,Network bits 越多;留給 Host 的 bits 越少,每個網段能容納的地址也越少。
現在回到最開始的問題。
假設:
PC A:192.168.1.10/24
它要送給:
192.168.1.20
算完後發現:
兩邊都屬於 192.168.1.0/24
所以結論是:
同網段
→ 不需要先交給 Router
→ 可以在本地 LAN 找對方
但如果目標是:
10.0.0.20
那就不是 192.168.1.0/24。
所以:
不同網段
→ 不能直接把資料當成本地設備處理
→ 要先交給 Default Gateway
今天先停在這裡。
IP = 一台主機的地址
Subnet Mask = 決定 Network bits / Host bits 怎麼切
網段 = 一整個 IP 地址範圍
同網段或不同網段 = 決定封包下一步怎麼送
晚安