IP地址、子网掩码和地址分类
http://blog.csdn.net/bluishglc/article/details/47909593?utm_source=tuicool&utm_medium=referral
?
實(shí)際工作中用到網(wǎng)絡(luò)知識(shí)的機(jī)會(huì)并不多,雖然以前學(xué)習(xí)過(guò),但是許久不用自然也就生疏了。最近拿到幾臺(tái)云上的虛擬機(jī),需要為它們建立一個(gè)VPC(虛擬私有云,就是一個(gè)虛擬的局域網(wǎng)),得益于虛擬化技術(shù),作為用戶,我們省去了絕大多數(shù)的網(wǎng)路配置和調(diào)試工作,唯一需要我們親自操刀主持的就是對(duì)網(wǎng)絡(luò)的劃分了。劃分網(wǎng)絡(luò)需要清楚三個(gè)基本概念:IP地址、子網(wǎng)掩碼和地址分類(lèi),是這三個(gè)要素一起決定了整個(gè)IP地址空間的劃分。關(guān)于這些可以參考文章最后附上的資料,本文正文是從三者之間的關(guān)聯(lián)關(guān)系上思考對(duì)一個(gè)網(wǎng)絡(luò)進(jìn)行劃分需要解決什么問(wèn)題。本文原文出處:http://blog.csdn.net/bluishglc/article/details/47909593?嚴(yán)禁任何形式的轉(zhuǎn)載,否則將委托CSDN官方維護(hù)權(quán)益!
32位的IP地址空間總計(jì)有40多億個(gè)可用IP地址,如果你是互聯(lián)網(wǎng)創(chuàng)建之初的設(shè)計(jì)者,你會(huì)怎么分配這些IP?你可能會(huì)說(shuō)一個(gè)一個(gè)地分吧,請(qǐng)求一個(gè)給一個(gè)。這不失為是一個(gè)方案,但是面對(duì)這么多的IP地址,這種“扁平”的管理方式真的有效嗎?如果是給一個(gè)組織甚至國(guó)家批量分配P呢?就像是在一個(gè)文件夾下管理40多億個(gè)文件一樣,這種處理方式真的明智嗎?顯然,當(dāng)時(shí)的設(shè)計(jì)者并沒(méi)有采取這種簡(jiǎn)單直白的做法,而是像我們管理大多數(shù)信息一樣對(duì)信息進(jìn)行了“分門(mén)別類(lèi)”,同樣是40多億個(gè)文件,如果按照某種規(guī)則或特征把它們分散放置到多個(gè)文件夾或子文件夾下一定會(huì)極大地方便管理。
于是問(wèn)題來(lái)了:怎么分?
如果把IP地址看作是一個(gè)家庭住址,那么在家庭住址中自然有省、市、街道、小區(qū)這樣的層級(jí)劃分,逐級(jí)縮小范圍后定位到一個(gè)門(mén)牌號(hào)上。如果我們給省、市、街道都編好號(hào),再和門(mén)牌號(hào)拼在一起,我們得到的這樣一長(zhǎng)串?dāng)?shù)字就可以唯一地標(biāo)識(shí)一個(gè)家庭住址,同樣,IP地址有32位的長(zhǎng)度,如此之長(zhǎng)的一個(gè)編碼,為什么不可以取出前幾位作為一個(gè)“區(qū)域”的地址,把剩余的幾位作為它在這個(gè)區(qū)域下的”相對(duì)“地址呢?這樣一個(gè)IP地址就可以視作兩部分,前面是它的“區(qū)域“地址,后面是它在這個(gè)”區(qū)域“內(nèi)的”相對(duì)“地址,是的,這正是子網(wǎng)掩碼所要解決的問(wèn)題,按照規(guī)范的叫法,通過(guò)子網(wǎng)掩碼標(biāo)識(shí)出的所謂的“區(qū)域“地址就網(wǎng)絡(luò)地址,也叫網(wǎng)絡(luò)標(biāo)識(shí),網(wǎng)絡(luò)ID或子網(wǎng)地址,而所謂的“相對(duì)“地址就主機(jī)地址。
這樣看上去好了很多,但是不知道你有沒(méi)有敏銳地察覺(jué)到子網(wǎng)掩碼對(duì)IP地址的劃分與我們舉例的家庭住址的劃分有一個(gè)明顯的不同,那就是前者只能劃分兩級(jí):網(wǎng)絡(luò)地址和主機(jī)地址,而后者則是多級(jí)劃分。子網(wǎng)掩碼只能實(shí)現(xiàn)兩級(jí)劃分帶來(lái)了一個(gè)問(wèn)題,那就是同樣一個(gè)IP:67.101.121.131,它的子網(wǎng)掩碼有可能是255.0.0.0,也可能是255.255.0.0,也可能是別的什么值,于是,對(duì)于一個(gè)給定的IP,特別是公網(wǎng)的IP,在不知道子網(wǎng)掩碼的時(shí)候會(huì)導(dǎo)致對(duì)該IP有多種不同的解讀,就像上面的例子,67.101.121.131可能是子網(wǎng)67.0.0.0下的一個(gè)主機(jī),也可能是子網(wǎng)67.101下的一個(gè)主機(jī),很顯然,這種歧義性導(dǎo)致這個(gè)IP還是不可用,是的,我們還是漏了點(diǎn)什么,讓這套描述機(jī)制暫時(shí)無(wú)法工作,我們需要找到問(wèn)題的原因并堵上這個(gè)窟窿。
這最后一個(gè)需要解決漏洞可以描述為:由于子網(wǎng)掩碼只具有”兩級(jí)“(網(wǎng)絡(luò)地址和主機(jī)地址)劃分能力,而它的切分粒度又可變(即如果切出的子網(wǎng)少,則子網(wǎng)可以容納的機(jī)器數(shù)量就多,如果子網(wǎng)多,則可以容納的機(jī)器數(shù)量就小)這種不確定的劃分方式必然會(huì)導(dǎo)致IP含義的不確定性,所以要解決這個(gè)問(wèn)題就必須要規(guī)定好:以哪些值為開(kāi)頭的IP它的子網(wǎng)掩碼默認(rèn)是255.0.0.0,以哪些值為開(kāi)頭的IP它的子網(wǎng)掩碼默認(rèn)是255.255.0.0,以此類(lèi)推。這實(shí)際上就是IP地址分類(lèi)。
補(bǔ)上地址分類(lèi)的概念之后,我們?cè)賮?lái)重新比較一個(gè)IP地址空間的劃分與我們舉例使用的家庭住址這類(lèi)具有典型層級(jí)關(guān)系的信息劃分之間有什么不同。如前面所述,最大的不同在于IP地址空間只能劃分兩個(gè)層級(jí),為了能夠適應(yīng)不同規(guī)模(粒度)的IP分配要求,IP地址空間必需要?jiǎng)澐殖龆喾N不同規(guī)模(粒度)的子空間,并且規(guī)定好哪些是大規(guī)模(粒度)的子空間,哪些是小規(guī)模(粒度)的子空間。然后,再結(jié)合IP地址和子網(wǎng)掩碼就可以準(zhǔn)確地定位了。可以說(shuō)IP地址、子網(wǎng)掩碼和地址分類(lèi)這三個(gè)要素一起實(shí)現(xiàn)了對(duì)IP地址空間的劃分與尋址,三者任何一個(gè)元素的缺失都會(huì)帶來(lái)邏輯上的漏洞。
最后一個(gè)問(wèn)題:同樣的,在一個(gè)局域網(wǎng)里,理論上我們也有需要切分出大小不等的子網(wǎng)的需求,這也需要對(duì)IP地址進(jìn)行分類(lèi),比如在10.0.0.0/8的網(wǎng)路里劃分10.0.0.0/16 ~ 10.127.0.0/16和10.128.0.0/24 ~10.191.255.0/24 等等 至于是否可行以及如何操作待有機(jī)會(huì)和網(wǎng)絡(luò)管理員請(qǐng)教一下。
最后,附上一個(gè)非常好用的網(wǎng)絡(luò)計(jì)算器:http://www.123cha.com/cidr/
參考資料
子網(wǎng)掩碼
子網(wǎng)掩碼是用來(lái)指明一個(gè)IP地址的哪幾位標(biāo)識(shí)的是主機(jī)所在的子網(wǎng)(也叫網(wǎng)絡(luò)標(biāo)識(shí)),以及哪些位標(biāo)識(shí)的是主機(jī)在網(wǎng)絡(luò)中的地址。子網(wǎng)掩碼不能單獨(dú)存在,它必須結(jié)合IP地址一起使用。
但是如果只有子網(wǎng)掩碼, 我們可以判斷出的信息是:它能表示多個(gè)子網(wǎng),以及每個(gè)子網(wǎng)下能有多少個(gè)主機(jī)!
子網(wǎng)掩碼通常有以下2種格式的表示方法:
1. 通過(guò)與IP地址格式相同的點(diǎn)分十進(jìn)制表示?
如:255.0.0.0 或255.255.255.128?
2. 在IP地址后加上”/”符號(hào)以及1-32的數(shù)字,其中1-32的數(shù)字表示子網(wǎng)掩碼中網(wǎng)絡(luò)標(biāo)識(shí)位的長(zhǎng)度?
如:192.168.1.1/24 的子網(wǎng)掩碼也可以表示為255.255.255.0
IP地址分類(lèi)
在一個(gè)局域網(wǎng)里,我們完全可以按照自己的意愿和需要來(lái)切分網(wǎng)絡(luò)地址,同樣也是定義3要素,?
地址分類(lèi),子網(wǎng)掩碼和IP地址。
IP默認(rèn)分配的子網(wǎng)掩碼每段只有255或0?
A類(lèi)IP地址 第一個(gè)字段的取值范圍:0-127? 默認(rèn)的子網(wǎng)掩碼:255.0.0.0
B類(lèi)IP地址的第一個(gè)字段的取值范圍:128-191? 默認(rèn)的子網(wǎng)掩碼255.255.0.0
C類(lèi)IP地址的第一個(gè)字段的取值范圍:192-223 ?默認(rèn)的子網(wǎng)掩碼? 255.255.255.0
?
已知IP地址和子網(wǎng)掩碼,用IP地址和子網(wǎng)掩碼相與即可得到網(wǎng)絡(luò)號(hào)
子網(wǎng)掩碼的最后面有幾個(gè)零,比如n個(gè),即可求出主機(jī)數(shù):pow(2,n)-2? (全零用于網(wǎng)絡(luò)地址,全1用于廣播地址)
子網(wǎng)掩碼中1的個(gè)數(shù)可以用于求子網(wǎng)的數(shù)目
比如IP地址為151.244.20.34 子網(wǎng)掩碼為255.255.255.224,這個(gè)IP是B類(lèi)IP,兩者相與,
網(wǎng)絡(luò)號(hào)為151.244.20.32
?
224用二進(jìn)制表示為11100000,后面有5個(gè)0,則主機(jī)數(shù)為pow(2,5)-2,其中全0用作網(wǎng)絡(luò)地址,全1為廣播地址
16-5=11,則子網(wǎng)數(shù)目為pow(2,11)-2? 其中全0用作網(wǎng)絡(luò)地址,全1為換回測(cè)試用
?下面的python程序可以判斷IP的類(lèi)別并求對(duì)應(yīng)的網(wǎng)絡(luò)號(hào):
s=raw_input(); s=s.split("."); mask=raw_input(); mask=mask.split("."); for i in range(0,4): s[i]=int(s[i]); mask[i]=int(mask[i]); if(s[0]>=0 and s[0]<=127): print "A IP"; flag=1; elif(s[0]<=192): print "B IP"; flag=2; elif(s[0]<=223): print "C IP"; flag=3; elif(s[0]>255): print "error"; if(flag is 1): i=0; res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]); if(flag is 2): res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]); if(flag is 3): res=[]; for i in range(0,4): res.append(mask[i]&s[i]); print "network number is %d.%d.%d.%d" %(res[0],res[1],res[2],res[3]);?
保留地址
在IP地址中專門(mén)保留了三個(gè)區(qū)域作為私有地址,其地址范圍如下:
| A | 10.0.0.0/8 (10.x.x.x) | 1 |
| B | 172.16.0.0/12 (172.16.x.x ~ 172.31.x.x) | 16 |
| C | 192.168.0.0、16 (192.168.x.x ~ 192.168.x.x) | 256 |
?
轉(zhuǎn)載于:https://www.cnblogs.com/coder-Sk/p/5234679.html
總結(jié)
以上是生活随笔為你收集整理的IP地址、子网掩码和地址分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript 01
- 下一篇: 阅读笔记一