host id, network, netmask, 搞亂我了。在電腦手動設定 ip 時, 除了 ip 還會填入 netmask, 這些資訊和 host id, network, netmask 是如何建立起來的?
你還停留在 class A, B, C 這個以 classful 分類的觀念嗎?
man inet_ntoa
Classful network addresses are now obsolete
已經告訴我們, 這已經不用了, 所以還是費點心思來把 Classless Inter-Domain Routing (CIDR) 搞懂。
怎麼從輸入的 ip, netmask 得到這些資訊呢?
ip: 192.168.6.60
netmask: 255.255.255.252
以上述為例, ip 是不能亂輸入的, 如果 netmask 是這樣, 那合法的 ip 只有 192.168.6.61, 192.168.6.62。
先找出 host (使用 xor 運算) 和 network (使用 and 運算)
host = 0xffffffff ^ 192.168.6.60 = 3
cidr network = 192.168.6.60 & 255.255.255.252 = 192.168.6.60
host 的 3 是兩個 bit 的意思。
若 netmask 改為 255.255.255.0 則會得到
0xffffffff ^ 255.255.255.0 = 0xff
表示 host 有 8 個 bits。
兩個 bit 全 0 或是全 1 不能使用, 所以只剩下 01, 10 可用, 也就是 1,2。
在 or 上 network 就是
192.168.6.61
192.168.6.62
所以合法的 ip 只能設定這兩個。
再舉一個例子:
ip: 192.168.6.70
mask: 255.255.255.192
host: 0xffffffff ^ 255.255.255.192 = 3f => 6 個 bits
network: 192.168.6.70 (0xc0a80646) & 255.255.255.192 (0xffffffc0) = 192.168.6.64 (0x0xC0A80640)
host 在 6 bits 之間: 000001 ~ 111110 => 1 ~ 126
再和 network or 起來就是合法 ip : 192.168.6.65 ~ 192.168.6.126
我在 windows xp 裡頭的 ip 設定測試過, 結果是一樣的。計算過程要以 host order 計算, 免得出錯。拿出你的計算機吧!
ref:
第二章、基礎網路概念
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。