close

[轉貼] http://j796160836.pixnet.net/blog/post/26229058


IP/Subnet子網路切割表示法


引用:
以前讀網路概念時,看到IP/Subnet的教學,我的直覺就是「無趣」,因為一方面自己用不到,
二來是幹嘛推算這些無聊的二進位?尤其IP /Subnet表示法,
為何不用「*」號等DNS hostname這樣直覺的表示法呢?發明人是否故意要考驗初學者的腦袋轉換速度?
因此,我當時僅讀個概念,根本沒把背後所代表的深層知識理解。
後來在研究所莊東穎老師教的「系統與網路」課程堣S接觸到它,當時仍用IP暴力AND運算法混過去,
直到現在研究Proftpd的Class設定,必須針對連線來源IP的子網路作權限區別,
才再次重新拆解這種表示法的概念。假如當時的書本寫得像這樣簡單明瞭,腦袋瓜子就容易吸收了...


 


在IPv4的協定下,IP位址是由4個8位元組成的數字來表達,如200.1.1.130。
一個IP位址分為網路位址(Network Address)+主機位址(Host Address),
依網路位址所佔的位元數不同而分為A/B/C/D級網路。
IP數字的0及255是預設的主機及廣播位址無法使用,
所以每個數字可用的 IP位址變化只有254個(256-2),
這也就是一般C級網段的Gateway IP都預設x.x.x.254的緣故。
IPv4的位址因為ABCD型網段的配法而無法完全應用到254四次方那樣多的可用IP值,
隨著世界上主機數遞增,IP位址漸漸不夠用了!在IPv6的應用尚未完全普及之時,


就得利用切分子網路(Subnet)的方式來有效分配IP位址。


某台網路主機,它的IP及子網路表示法為200.1.1.130/28,從這樣簡短的字句,你該立刻看出什麼呢?


1.子網路的遮罩位址為何?
該數字28是代表遮罩IP位址的網路位址所佔位元數,即:11111111.11111111.11111111.11110000,
遮罩位元為1者是讓 IP通過(合法),0者為阻擋,所以從上述的32位元分布,我們得知它的網段型態是屬於C型位址,
因此十進位的遮罩位址就是 255.255.255.240(只需要求算右邊那四個1),即 128 + 64 + 32 + 16 = 240


2.可切成幾個子網路?
數字1是讓IP通過,所以只要注意1的位元變化組合(因為後面的0怎麼變化都會被擋住),
(1111)= 2^4 = 16,共有16種變化。


3.每個子網段有幾個IP值?
子網路ip數為 256/16 = 16 (有效IP為14,因為頭尾IP要去除)


4.每個子網路的IP起迄位址?
200.1.1.0-15,200.1.1.16-31,200.1.1.32-48,...,200.1.1.240-255
例如,主機IP為200.1.1.130/28的所在子網路起迄IP為: 130/16 = 8, 16 * 8 = 128,故在 200.1.1.128-143。


假如上述你都了解的話,讓我們反過來思考,用子網路IP起迄位址,反推出它的IP/Subnet表達格式?


例如,我們要讓某C級網段 (192.83.184.*)下的IP合法通過,這組子網路該怎麼用IP/Subnet格式表示呢?


首先,第四個IP值不遮封,因此遮罩IP位址的2進位是: 11111111.11111111.11111111.00000000 (255.255.255.0),
其網路位址位元數共24個,因此寫法是: 192.83.184.0/24,
依此類推,B級網段就是192.84.0.0/16,全部開放就是: 0.0.0.0/0。所以,從IP位址的二進位表示法的位元分布,
就可看出其背後的隱藏資訊,只要您能了解這些概念就可直接看出來,不需再作 IP(192.83.184.0)轉二進位的運算
(江湖一點訣)。


 


[死狐狸發言]
來看看
通常我們會得到ip區段/num
也就是如200.1.1.130/27,但我們要怎麼知道27代表的是255.255.255.224


在下通常不會用上面的分辨法(因為在下很懶)
在下有一個自創的方式…可能也有人會
就是,255這個東西其實就是num/8之後的商數
例:27/8... 商是3,所以255會有三個,也就是255.255.255
但,第四個要怎麼算??
沒錯,打開二進位是可以算,但有時候,我覺得0/1拿出來要怎麼放也是要想一下


我自創的算法就是
2^8-2^(8- (num mod 8))
mod----取餘數
所以num=27
 27/8=3====>255.255.255
 2^8-2^(8- (27 mod 8))=256-2^(8-3)=256-2^5=256-32=224
+)
 = 255.255.255.224
num=16
 16/8=2====>255.255
 2^8-2^(8 - (16 mod 8))=0...
+)
 =255.255.0.0


在下的懶人算法


只要有num,不管A/B/C/D層級的網路,都可以算出來
ipv6應該也是有類似的算法…只是,在下目前比較少遇到v6

arrow
arrow
    全站熱搜

    chyuanyiin 發表在 痞客邦 留言(0) 人氣()