子網路遮罩最直接的作用是判斷IP地址與另一個IP地址是否在同一個網段內。
下面先簡單看一個電腦上IP的基本配置
IP地址:192.168.0.5
子網路遮罩:255.255.255.0
預設閘道:192.168.0.1
如上的例子,IP地址、子網路遮罩、預設閘道。假如現在上邊的電腦A(IP地址192.168.0.5)要給電腦B(IP地址為192.168.0.22)發送資料,首先A將資料發到路由器,路由器經過判斷B的地址和A的地址在同一個網段內,然後路由器就將資料直接發送給B。
路由器具體使用子網路遮罩來判斷IP地址是先將這些IP地址和子網路遮罩都換成二進位,然後按照子網路遮罩的最長位元的1來比較。
第一步:轉換為二進位
A的IP地址:11000000,10101000,00000000,00000101
子網路遮罩:11111111,11111111,11111111,00000000
B的IP地址:11000000,10101000,00000000,00010110
第二步:按照子網路遮罩最長1來比較
看上邊的內容,子網路遮罩在左邊一共有24位為1,那這樣的意思就是如果兩個IP地址的前24位都相同的話,那這兩個IP地址就是在同一個網段內,看到我紅色標記的A和B的地址都相同,那這就說明A和B在同一個網段內。
再看一個例子,如果還是A地址的資料發到C地址,C的IP地址為192.168.56.21
第一步:轉換為二進位
A的IP地址:11000000,10101000,00000000,00000101
子網路遮罩:11111111,11111111,11111111,00000000
C的IP地址:11000000,10101000,00111000,00010101
第二步:按照子網路遮罩最長1來比較
看上邊的A和C,按照子網路遮罩的要求,如果C的前24位和A的前24位都相同的話,那麼A和C才是同一網段的,看上邊C的地址,我用藍色來標註不同的位元,這樣A 和C就不在同一個網段內,路由器就不能直接把A要發給C的資料直接經過一個路由器給發送過去,這樣路由器就要先將A的資料轉寄到另外一個路由器(一個不行就繼續往下發),然後再發到C上。
問題擴充:
一:上邊的例子中子網路遮罩為255.255.255.0,那麼能不能把子網路遮罩給修改呢,完全可以。
在上邊A和C的例子中,如果把子網路遮罩改成255.255.0.0,再看一下
A的IP地址:11000000,10101000,00000000,00000101
子網路遮罩:11111111,11111111,00000000,00000000
C的IP地址:11000000,10101000,00111000,00010101
這樣A和C就在同一個網段內了
二:擴充子網
在一個公司或者學校內部,已經分配好了網路號,按照內部行政結構的不同,再將網路分配成子網路號。
舉例:如果一個公司主機已經分配好的網路按照255.255.0.0的子網路遮罩來區分主機號,現在由於公司有兩個部門,想要按照部門來劃分成兩個子網路來,那麼可以簡單的用子網路遮罩來劃分。現在來考慮,有兩個部門,按照二進位的做飯,那麼只要有一位的數字0和1來區分就可以了。
按照255.255.0.0(11111111,11111111,00000000,00000000)來劃分,前邊了16位是網路號,按照子網路遮罩是按照最長1來匹配,那麼現在就在17位劃分位0和1來區分成兩個。那麼可以給一個部門的子網路遮罩劃分為255.255.128.0,另一個劃分為255.255.0.0,用二進位來比較一下
255.255.0.0: 11111111,11111111,00000000,00000000
255.255.128.0:11111111,11111111,10000000,00000000
這樣就簡單的將兩個部門來劃分開了
三:路由的時候選擇最長1來匹配
路由的時候為什麼選擇最長1來匹配,理由是這樣的:如果是在好幾個可以匹配的網段內(還是按照子網路遮罩)選擇最長的那個,可以很快的找到匹配。如果是按照最短的,那麼需要匹配的主機就多,還有一種可能是一個路由器轉寄不了,還要換另一個路由,很可能造成包在網路內迴圈,最後直至包被丟棄。
四:網關的概念
在開始的例子中提到預設閘道的概念,先來看網關的概念。
網關實質上是一個網路通向其他網路的IP地址,網關的IP地址是具有路由功能的裝置的IP地址,按照上邊的192.168.0.1網關的例子,網關就是有那麼一台機子或者是PC機或者是伺服器它的IP地址是192.168.0.0,這個裝置有路由功能。按照這個理論,一個裝置的IP必須和自己的網關在同一個網段內,這是必須的。
說完網關,再說預設閘道,預設二字就沒有太多解釋的了,這裡舉例說明:網關可能不止一個,有網關一、網關二等等,預設閘道就是選擇其中之一做為預設值。