前文回顧:
- 自學網絡協議(一):HTTP請求與響應——GET和POST真的不一樣嗎?
- 自學網絡協議(二):OSI第一層——物理層Physical layer
- 自學網絡協議(三):OSI第二層——機器通信那點事
- 自學網絡協議(四):OSI第三層——網絡層的作用(上)
前面說OSI第3層的作用是“互連網絡”。
我們也開始了IP的學習,IP —— Internet Protocol,即“互聯網協議”,它毫無疑問是網絡協議中主要的協議簇。
而IP地址,它實際上分爲兩部分 —— 網絡地址 & 機器地址。
實際上,我們在互聯網上定位一個主機,就類似於去一個小區找人:首先通過網絡地址找到這個人是哪個小區的,再用主機地址(機器地址)從小區中找到這個人。
那麼,我們怎麼知道IP地址中的哪個部分代表什麼呢?
子網掩碼
子網掩碼 算是一個“額外的信息”了。它和IP地址是密不可分的。因爲正是子網掩碼指明瞭IP地址的哪一部分是網絡地址,哪一部分是主機地址。
還記得ifconfig / ipconfig
嗎?它不僅包含了MAC地址,還有IP地址和子網掩碼:enp0s3(以太網接口)、inet(IP地址)、netmask(子網掩碼)
我們看到,子網掩碼和IPV4的IP地址格式一致——4個字節,用點分十進制表示,是因爲IPV6格式的地址不需要子網掩碼。
子網掩碼中爲1的二進制位代表IP地址中的網絡部分。
因爲二進制只由0、1組成,因此:子網掩碼中爲0的二進制位代表IP地址的主機部分。
如IP地址192.168.0.1
與子網掩碼255.255.0.0
相關聯。
255.255.0.0 -> 11111111.11111111.00000000.00000000
192.168.0.1 -> 11000000.10101000.00000000.00000001
如上,二進制中黃色部分代表IP的網絡地址,其餘代表主機地址。
然而,上述只是非常簡單的一個例子。衆所周知,分割經常會發生在一個字節的中間:
255.255.240.0 -> 11111111.11111111.1111 0000.00000000
192.168.0.1 -> 11000000.10101000.0000 0000.00000000
這次分割又變成了這樣!
其實,子網掩碼中字節可以取的值是特定的。這是由於子網掩碼中0和1的排列造成的。
與子網掩碼相關的問題
二進制位的連續性
事實上,在二進制子網掩碼中,爲1的位必須在左邊,爲0的位必須在右邊,不能混用0和1
所以… 子網掩碼這樣寫:11111111.11100011.00000000.00000000
是錯的!
!
也就是說,子網掩碼的4個字節中的每一個字節能取的值將始終是以下值:
00000000 -> 0
10000000 -> 128
11000000 -> 192
11100000 -> 224
11110000 -> 240
11111000 -> 248
11111100 -> 252
11111110 -> 254
11111111 -> 255
好的,看來我們有必要實踐一下,如何確定與子網掩碼相關的IP地址範圍。
IP地址範圍是指由相關聯的IP地址和子網掩碼所確定的一組地址,從最小的到最大的。
我們知道,一個網絡中,往往不只有一臺主機。就像你一個小區裏面,雖然我Mxc用戶可以通過查找我的網絡地址和主機地址來確定,但我也很想知道,這個小區可以容納多少住戶,這些住戶的可用地址又是在哪個範圍裏的。
IP地址範圍的計算 —— 計算第一個和最後一個地址
我們還是將目光放向了192.168.0.1
和255.255.240.0
相關聯。
要知道,屬於同一網絡的所有主機,他們的網絡地址的所有位都是相同的!
對於這個例子,顯然,他們的網絡地址都等於11000000.10101000.0000
然而,其中主機地址是可以變化的
在這個網絡中,主機地址可以取很多值 —— 這取決於我們將主機地址的某些爲設置爲0還是1。
總的來說,他們(這些IP地址)將是:
如此,我們通過改變IP地址中主機地址的位,就找到了此網絡中所有可被主機所用的IP地址。
網絡的第一個IP地址是主機地址所有位皆爲0的地址;
網絡的最後一個IP地址是主機地址所有位皆爲1的地址;
那麼問題又來了,此網絡中有多少個真正可用IP地址?
- 若主機地址只有一位,那麼只有兩種選擇:0或1
- 若主機地址有兩位,那就有2的2次方個可能的地址(00、01、10、11)
- …
以此類推,要找到網絡中的地址數量,只需知道主機地址的二進制位數即可。
而IP地址中的主機地址是由子網掩碼定義的,也就是說,網絡中的可用主機數取決於子網掩碼!
那麼,我們完全可以定義:網絡中可用的IP數=2的“子網掩碼中0的個數”次方個。
網絡地址和廣播地址
在由相關聯的 IP 地址和子網掩碼所確定的 IP 地址範圍中,有兩個是特殊的:第一個 IP 地址和最後一個 IP 地址。
- 地址範圍中的第一個 IP 地址是這個網絡的地址本身,此地址不能爲某個主機所用。
- 地址範圍中的最後一個 IP 地址是一個特殊地址,即廣播地址。該地址也不能爲某個主機所用。(實際上,它用於標識該網絡中的所有主機)
當我們向某網絡的廣播地址發送消息時,此網絡上的所有主機都將收到此消息。
因此,假設一個網絡有 16 個可用的 IP 地址,網絡中的主機卻只能使用 14 個地址,因爲第一個和最後一個將保留給該網絡的地址和廣播地址。這條規則對於任何網絡都是如此,總是有 2 個不能爲主機所用的地址。
上一個例子,就是相關聯的 IP 地址 192.168.0.1
和子網掩碼 255.255.240.0
的示例中,網絡中的主機可以使用的地址數是 4096(2的12次方) - 2 = 4094 個,因此理論上此網絡可以容納 4094 臺主機。