Learning Objectives
- 說明 IPv4 位址是 32 位元,並在點分十進位與二進位之間換算
- 分辨位址的網路部分與主機部分,說明它們各自決定什麼
- 說明舊制 A、B、C 類的分法,以及它為什麼被 CIDR 取代
- 認得 RFC 1918 私有位址與常見的特殊位址(0.0.0.0、127.0.0.0/8、169.254.0.0/16、255.255.255.255)
- 從設定錯誤的位址找出兩台電腦為什麼不通
每台主機都需要一個 IP 位址
前幾課的交換器用 MAC 位址找到同一個區域網路上的設備。可是 MAC 位址是網路卡出廠時決定的, 從號碼看不出設備在哪裡;網際網路上有數十億台設備,路由器不可能記住每一張網卡。
所以網路層另外給每個介面一個 IP 位址。它像郵遞地址:前半段說「在哪一區」,後半段說「是那一區的哪一戶」。 路由器只要看前半段就知道往哪裡送,不必認識每一台主機。(計算機概論第 30 課介紹過 TCP/IP 的分層,這一課往下看位址本身。)
這一課講的是 IPv4,規格在 1981 年的 RFC 791:
| 特性 | 內容 |
|---|---|
| 長度 | 32 個位元(4 個位元組) |
| 寫法 | 每 8 位元一段,換成 0~255 的十進位,用點隔開,叫點分十進位(dotted decimal),例如 192.168.1.10 |
| 總數 | 2^32 = 4,294,967,296 個,大約 43 億 |
| 後繼 | IPv6(128 位元),第 13 課介紹 |
43 億看起來很多,但扣掉保留的範圍、再分給全世界的業者與組織,早就不夠用了。這也是後面「私有位址」與第 12 課 NAT 出現的原因。
點分十進位與二進位
電腦裡的位址是 32 個 0 和 1;點分十進位只是方便人讀的寫法。每一段 8 個位元,從左到右的權重是:
| 位元 | 第 1 個 | 第 2 個 | 第 3 個 | 第 4 個 | 第 5 個 | 第 6 個 | 第 7 個 | 第 8 個 |
|---|---|---|---|---|---|---|---|---|
| 權重 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二進位轉十進位:把是 1 的位元的權重加起來。00001010 = 8 + 2 = 10。
十進位轉二進位:從 128 開始往下減,減得下去就寫 1。以 192 為例:192 ≥ 128 寫 1,剩 64;64 ≥ 64 寫 1,剩 0;其餘寫 0,得到 11000000。
所以 192.168.1.10 的二進位是:
11000000.10101000.00000001.00001010
192 168 1 10
每一段最大是 8 個 1,也就是 128+64+…+1 = 255,所以每段的範圍是 0~255;192.168.1.256 不是合法的位址。
網路部分、主機部分,以及舊制的 A、B、C 類
IP 位址分成兩部分:
- 網路部分(前面的位元):同一個網段裡的主機都一樣,路由器靠它決定往哪裡送。
- 主機部分(後面的位元):網段裡每台主機都不同。
192.168.1.10 如果前 24 位元是網路部分,網段就是 192.168.1.x,.10 是這個網段裡的第 10 號主機;
同一個網段的電腦可以直接送(第 8 課的 ARP),不同網段就要交給路由器。網路部分有幾個位元要另外說明,下一課的子網路遮罩就是在做這件事。
早期(RFC 791)用位址開頭的幾個位元決定分界,這叫分類式(classful)位址:
| 類別 | 開頭位元 | 第 1 段範圍 | 網路部分 | 每個網段的主機數 |
|---|---|---|---|---|
| A | 0 | 0~127 | 前 8 位元 | 2^24 − 2 = 16,777,214 |
| B | 10 | 128~191 | 前 16 位元 | 2^16 − 2 = 65,534 |
| C | 110 | 192~223 | 前 24 位元 | 2^8 − 2 = 254 |
| D | 1110 | 224~239 | (群播用) | |
| E | 1111 | 240~255 | (保留) |
主機數要減 2,是因為主機部分全為 0 的位址代表網段本身、全為 1 的是廣播位址,這兩個不能給主機(下一課詳細說明)。
分類式的問題:大小只有三種,差距太大。一個需要 2,000 台主機的組織,C 類(254 台)不夠,只好拿一個 B 類(65,534 台),六萬多個位址就這樣閒置;
另一方面,網際網路上的 C 類網段越來越多,每一個都要在路由表裡占一條。1993 年的 RFC 1519 提出 CIDR(Classless Inter-Domain Routing,無類別域間路由),
網路部分的長度可以是任意位元數,寫成 192.168.1.0/24 這樣的形式(2006 年由 RFC 4632 更新)。現在的網路都是無類別的,
A、B、C 類只剩歷史意義;你還是會在舊文件或設備的預設值看到它。
小測驗:位址的結構
下列哪一個是合法的 IPv4 位址?
11000000.10101000.00001010.00000001 的點分十進位是?
依舊制分類,150.20.1.1 是哪一類?
分類式位址被 CIDR 取代,主要的原因是什麼?
私有位址與特殊位址
並不是每個位址都能在網際網路上使用。1996 年的 RFC 1918 保留了三段私有位址(private address), 任何組織都可以在內部自由使用、不必申請;網際網路上的路由器不轉送它們,所以不同組織重複使用也不會衝突:
| 範圍 | CIDR | 常見用途 |
|---|---|---|
| 10.0.0.0~10.255.255.255 | 10.0.0.0/8 | 大型組織、雲端內部網路 |
| 172.16.0.0~172.31.255.255 | 172.16.0.0/12 | 企業、校園 |
| 192.168.0.0~192.168.255.255 | 192.168.0.0/16 | 家用路由器 |
注意 172 這段只到 172.31,172.32.0.1 已經不是私有位址。家裡的電腦拿到 192.168.x.x,要上網時由路由器換成業者給的公有位址,這是第 12 課的 NAT。
另外還有幾段特殊位址(IANA 的特殊用途位址登錄表 RFC 6890 有完整清單):
| 位址 | 意義 |
|---|---|
| 0.0.0.0 | 「還沒有位址」或「本機的所有介面」;例如 DHCP 取得位址前,封包的來源就是 0.0.0.0 |
| 127.0.0.0/8 | 迴路位址(loopback),最常用 127.0.0.1;送出去的封包不離開本機,用來測試自己電腦上的程式 |
| 169.254.0.0/16 | 鏈路本地位址(link-local,RFC 3927);電腦拿不到 DHCP 位址時自己挑一個,只能和同一條鏈路上的設備通訊。看到電腦是 169.254.x.x,通常代表 DHCP 出了問題 |
| 255.255.255.255 | 有限廣播:送給同一個區域網路上的所有主機,路由器不轉送 |
| 192.0.2.0/24、198.51.100.0/24、203.0.113.0/24 | 文件與教材專用(RFC 5737),這門課的範例也用它們 |
小測驗:私有與特殊位址
下列哪一個不是 RFC 1918 的私有位址?
在自己的電腦上執行網頁伺服器,用瀏覽器連 http://127.0.0.1:8000,封包會送到哪裡?
設定主機位址 192.168.1.0/24 時被拒絕,原因是?
重點整理
- IPv4 位址是 32 位元,每 8 位元寫成一段 0~255 的十進位,用點隔開;換算靠權重 128、64、32、16、8、4、2、1。
- 位址分成網路部分(決定在哪個網段)與主機部分(決定是哪一台);同網段直接送,不同網段交給路由器。
- 舊制 A、B、C 類用開頭位元決定網路部分的長度,大小只有三種,浪費位址也讓路由表變大,已被 CIDR 取代。
- 私有位址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16(RFC 1918);網際網路上不轉送。
- 特殊位址:0.0.0.0(還沒有位址)、127.0.0.0/8(迴路)、169.254.0.0/16(拿不到 DHCP 時自己挑的)、255.255.255.255(有限廣播)。
這一課的「前 24 位元是網路部分」是先講好的。下一課說明怎麼用子網路遮罩與 /24 這種寫法告訴電腦分界在哪裡,並算出網段的網路位址、廣播位址與可用主機數。