1. 程式人生 > >子網劃分為什麼全0全1子網號不能使用?CIDR為什麼能使用全0全1子網號?

子網劃分為什麼全0全1子網號不能使用?CIDR為什麼能使用全0全1子網號?

1.子網劃分為什麼全0全1子網號不能使用?

看看RFC950提到的原因:
假設我們有一個網路:192.168.0.0/24,我們現在需要兩個子網,那麼按照RFC950,應該使用使用兩位子網號,即/26,得到兩個可以使用的子網192.168.0.64/26和192.168.0.128/26
對於主網路192.168.0.0/24,網路地址是192.168.0.0,廣播地址是192.168.0.255
對於子網192.168.0.0/26(子網號全0),網路地址是192.168.0.0,廣播地址是192.168.0.63
對於子網192.168.0.64/26,網路地址是192.168.0.64,廣播地址是192.168.0.127
對於子網192.168.0.128/26,網路地址是192.168.0.128,廣播地址是192.168.0.191
對於子網192.168.0.192/26(子網號全1),網路地址是192.168.0.192,廣播地址是192.168.0.255

  可以看出,對於第一個子網,網路地址和主網路的網路地址是重疊的,對於最後一個子網,廣播地址和主網路的廣播地址也是重疊的。這樣的重疊將導致極大的混亂。比如,一個發往192.168.0.255的廣播是發給主網路的還是子網的?這就是為什麼在當時不建議使用全0和全1子網。

2.CIDR為什麼能使用全0全1子網號?

  在嚴格按照TCP/IP A.B.C.D給IP地址分類的環境下,為了避免二意性,全0和全1網段都不能使用。這種環境叫作Classful。在這種環境下,子網掩碼只在所定義的路由器內有效,掩碼資訊到不了其它路由器。例如RIP-1在做路由廣播時便不帶掩碼資訊,收到路由廣播的路由器因為無從知道這個網路的掩碼,只能按照標準TCP/IP的定義賦予它一個掩碼。
  但在Classless的環境下,掩碼任何時候都和IP地址成對地出現,這樣,前面談到的二意性就不會存在。是Classful還是Classless取決於路由器執行的路由協議,一個路由器可同時執行Classful和Classless路由協議。RIP是Classful,OSPF、EIGRP、BGP4是Classless,它們可以同時執行在同一臺路由器上。
  以上面的情況為例。在子網劃分下,一個發往192.168.0.255的廣播不能確認是發給主網路的還是子網;然而採用CIDR後,由於CIDR在路由時採取最長字首匹配,目的地址192.168.0.255和地址塊192.168.0.192/26的字首匹配長度最長,所以廣播發送到192.168.0.192/26地址塊。