IP分類及網路掩碼

2021-04-12 12:51:16 字數 3977 閱讀 6021

ip

位址分類

分類

最低

最高

網路位

主機位a

0.0.0.0

127.255.255.255

7

24

b

128.0.0.0

191.255.255.255

14

16

c

192.0.0.0

223.255.255.255

21

8

d

224.0.0.0

239.255.255.255

28

n/a

e

240.0.0.0

247.255.255.255

27

n/a

位址從0.0.0.0 --- 247.255.255.255

被分成5 類.

一,如何判斷乙個ip位址屬於哪一類

對於ip

位址而言.以

192.168.9.1

為例,

最有意義的是

192

,只有這個數字能反映出這個ip是

c類位址,其他的反映不出來.

192. 198. 9. 1--------- 10

進製表示法

c0a80901--------- 16

進製表示法

我們假令這個最有意義的位為

msb那麼:

a :msb

∈[0,127] --- [0x00, 0x7f] --- [0000 0000,0111 1111] 第8位為0 --- 0*** ***x

b :msb

∈[128, 191] --- [0x80, 0xbf] --- [1000 0000,1011 1111] 第7位為0 --- 10xx ***x

c :msb

∈[192, 223] --- [0xc0, 0xdf] --- [1100 0000,1101 1111] 第6位為0 --- 110x ***x

d :msb

∈[224, 239] --- [0xe0, 0xef] --- [1110 0000,1110 1111] 第5位為0 --- 1110 ***x

e :msb

∈[240, 247] --- [0xf0, 0xf7] --- [1111 0000,1111 1110]

j通過二進位制的規律可以得出以下**

:

// ***************====

判斷ip

位址所屬的分類

***************==== //

char class;

if( (msb&0x80) == 0x00)// 1000 0000

else if( (msb&0xc0) == 0x80)// 1100 0000

else if ( (msb&0xe0) == 0xc0)// 1110 0000

else if ( (msb&0xf0) == 0xe0)// 1111 0000

else

ok,

那麼這個

msb如何取得呢?

因為我們所見到的

ip都是

192.168.9.1

類似這樣的格式,我們就必須取得

10進製表示方式裡頭的最有意義的高位。 乙個

sockaddr

的定義是這樣的

:

struct sockaddr_in adr_inet;

memset(adr_inet, 0, sizeof(adr_inet));// 清零

// create sockaddr

adr_inet.sin_family = af_inet;

adr_inet.sin_port = htons(5500);

adr_inet.sin_addr.s_addr = htons(「192.168.9.1」);

// 這裡就是獲得這個最有意義的高位!

msb = *(unsigned char*)&adr_inet.sin_addr.s_addr;

ip的儲存結構

19216891

&adr_inet.sin_addr.s_addr

開始獲得該結構的記憶體位址, 即

192的位址

19216891

(unsigned char*)&adr_inet.sin_addr.s_addr

把該位址轉換為

unsigned char*,

也就是說新的指標是指向單獨的

192,

而不再是可以取到整個ip了

19216891

*(unsigned char*)&adr_inet.sin_addr.s_addr

取新指標指向的資料.

19216891

指標真的很神奇j,

二,ip的分割

乙個ip

位址是32位.

以192.168.9.1

為例,

它的16

進製是c0 a8 09 01

這個ip

位址實際由兩個部分組成

: 網路位址,

主機位址 a

類位址

0

7-bits(網路位址)

24-bits(主機位址)

b類位址

1 0

14-bits(網路位址)

16-bits(主機位址)

c類位址

1 1

021-bits(網路位址)

8-bits(主機位址)

這是a,

b,c三類位址的組成結構

, d,

e我不知道j

那麼這樣提取出來它們的網路位址和主機位址呢?

這裡就有個網路掩蓋碼的概念

, 何謂網路掩碼?

網路掩碼就是乙個數字而已,

它的用處是把網路位址從

ip裡頭提取出來。

對於不同的分類有與之對應的不同的網路掩碼,

比如說c類ip

的網路掩碼是

0xff ff ff 00

那麼a,b

類ip對應的網路掩碼是什麼?

我也不知道j

好象是255.0.0.0—-0xff000000

和255.255.0.0---0xffff0000

網路位址實際是通過

ip位址和網路掩碼進行

與運算得出來的。

192.168.9.1 ---- 0x c0 a8 09 01

(0xc0a80901 &

0xffffff00

)*****> 0xc0 a8 09 01

網路位址是

0xc0 a8 09

主機位址是

0x 01

l和前面三個圖好象不大一樣,暈了,沒搞明白!

ip位址的分類及子網掩碼介紹

ipv4網路使用32位位址,以點分十進位制表示,如192.168.0.0。位址格式為 ip位址 網路位址 主機位址 或 ip位址 網路位址 子網位址 主機位址。最初設計網際網路絡時,為了便於定址以及層次化構造網路,每個ip位址包括兩個標識碼 id 即網路id和主機id。同乙個物理網路上的所有主機都使...

詳解 IP的分類 定址規則及子網掩碼

詳解 ip的分類 定址規則及子網掩碼 隨著電腦技術的普及和網際網路技術的迅猛發展,網際網路已作為二十一世紀人類的一種新的生活方式而深入到尋常百姓家。談到網際網路,ip位址就不能不提,因為無論是從學習還是使用網際網路的角度來看,ip位址都是乙個十分重要的概念,internet的許多服務和特點都是通過i...

IP分類及特殊IP

基本的ip位址是分成8位乙個單元 稱為8 位位組 的32位二進位制數。二進位制與十進位制大家都懂吧。為了方便人們的使用,對機器友好的二進位制位址轉變為人們更熟悉的十進位制位址。ip位址中的每乙個8 位位組用0 255之間的乙個十進位制數表示。這些數之間用點 隔開,這是所謂的點 十進位制格式。因此,最...