B類地址第一個可分派的網路號為什麼不是128.0?

謝希仁《計算機網路》中講的,B類地址第一個可分派的網路號是128.1,為什麼不是128.0?


A類的第一個地址也是不可用的,比如0.0.0.0/8 ,第一個可用地址1.0.0.0/8。


這是個不錯的問題,發現網路就是有很多細節的地方容易忽略。至少這個問題我之前並沒有特別注意過,但是當看到了之後發現竟然一時答不上來。

關於全0和全1,以前就是關注子網的主機位地址,分別代表子網的網路號和廣播地址。但是網路地址全0是怎麼回事缺忽略了。

維基百科上關於分類網路的內容中都沒有詳細說明
https://zh.wikipedia.org/zh/%E5%88%86%E7%B1%BB%E7%BD%91%E7%BB%9C

然後查了 RFC 791 - Internet Protocol
在Page24 有這樣一個說明

Address Formats:

High Order Bits Format Class
--------------- ------------------------------- -----
0 7 bits of net, 24 bits of host a
10 14 bits of net, 16 bits of host b
110 21 bits of net, 8 bits of host c
111 escape to extended addressing mode

最早的RFC對IP地址的分類只到C,並將IP地址中的Bit分為三類,分別是High order, net, host。

然後更為關鍵的是下面的一句話

A value of zero in the network field means this network.

也就是說net全0表示本網路,因此真正可用的net值應該是從1開始。

那麼這樣說來因為這條規則而無法使用的網路號是:
A: 0.0.0.0/8
B: 128.0.0.0/16
C: 192.0.0.0/24

根據RFC791說明的標註繼續在RFC 790 - Assigned numbers中找到了更為詳細的說明

Class A Networks

Internet Address Name Network References
---------------- ---- ------- ----------
000.rrr.rrr.rrr Reserved [JBP]

Class B Networks

Internet Address Name Network References
---------------- ---- ------- ----------
128.000.rrr.rrr Reserved [JBP]

A類和B類地址都明確說了0.x.x.x及128.0.x.x都是保留地址,而在C類中應該是RFC文檔出現了明顯的錯誤,因為192.000.001開頭的地址不可能同屬兩行,顯然這裡要說明的是192.0.0.x也是保留地址。

Class C Networks

Internet Address Name Network References
---------------- ---- ------- ----------
192.000.001.rrr Reserved [JBP]
192.000.001.rrr-223.255.254.rrr Unassigned [JBP]

沒有繼續考證三十幾年前的這個規則是否被其他文檔所修改,但是如果說謝希仁的書里是這樣寫的,那麼我想參考的依據應該就是這個。

--------------------------------------------

我只是考證了來源,但是不代表這個規則現在仍然是正確的。
因為我在APNIC的whois資料庫里查了一下128.0.0.1這個地址,發現128.0.0.1-128.0.0.255這段地址已經有明確的歸屬,國家是NL。而後面128.0.1.0/24這段同樣也分掉了,國家是RO。

而192.0.0.1這個地址查出來是沒有被分配的。
可以用下面這個鏈接自己看一下:
APNIC - Query the APNIC Whois Database

我猜測是因為192.0.0不能用只浪費了一個C,而128.0不能用,卻整整浪費了一個B,在IPv4地址緊缺的情況下無疑有些過於浪費了。而當時這個網路位全0的問題實際上在子網掩碼出現後已經解決,並沒有實際的意義,所以就重新把128.0這段地址放出來了。

----------------------------------

再次更新,終於找到了最準確的答案。
在 RFC 3330 - Special-Use IPv4 Addresses 里有關於這兩段地址的明確說明

128.0.0.0/16 - This block, corresponding to the numerically lowest of
the former Class B addresses, was initially and is still reserved by
the IANA. Given the present classless nature of the IP address
space, the basis for the reservation no longer applies and addresses
in this block are subject to future allocation to a Regional Internet
Registry for assignment in the normal manner.

192.0.0.0/24 - This block, corresponding to the numerically lowest of
the former Class C addresses, was initially and is still reserved by
the IANA. Given the present classless nature of the IP address
space, the basis for the reservation no longer applies and addresses
in this block are subject to future allocation to a Regional Internet
Registry for assignment in the normal manner.

這個RFC發表於2002年,對於這兩段地址明確表示因為無類地址空間的原因,不再需要保留,地址將在今後進行分配。

所以如果說你看的那本謝希仁的書如果是2002年以後出版的或者更新的,那麼就是書存在更新不及時的問題,沒有按照IETF最新的RFC的要求進行更改。


結合A類地址來理解,為什麼A類地址前8位不能是全0?因為A類前8位全0代表「本網路」那麼B類的「本網路」怎麼表達呢?前16位全0嗎?那和A類就衝突了,所以B類「本網路」應該是第2位元組全0,同理,C類第3位元組不能為0,第2位元組可以為0,也就是192.0.1


這類型的問題就類似子網劃分中的全零子網和全一子網的問題.下面給個例子你自己理解一下.
如果是我理解錯了,請指正
零子網和全一子網


推薦閱讀:

TCP連接建立後,下行和上行經過的路由器是一樣的嗎?
ipv9是什麼,是騙局還是真的有其事?
TCP網路編程,從socket到消息包,發送接收都是bit,傳輸中兩端怎麼知道哪些bit組成一個協議?
HTTP協議里的請求頭有什麼用?

TAG:IPv4 | 計算機網路 | TCPIP |