您的位置:首页 > 理论基础 > 计算机网络

IP分类及网络掩码

2006-11-12 01:49 162 查看
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 进制表示法
C0 A8 09 01 --------- 16 进制表示法
我们假令这个最有意义的位为msb 那么 :
A : msb ∈ [0, 127] --- [0x00, 0x7F] --- [0000 0000, 0111 1111] 第8位为0 --- 0xxx xxxx
B : msb ∈ [128, 191] --- [0x80, 0xBF] --- [1000 0000, 1011 1111] 第7位为0 --- 10xx xxxx
C : msb ∈ [192, 223] --- [0xC0, 0xDF] --- [1100 0000, 1101 1111] 第6位为0 --- 110x xxxx
D : msb ∈ [224, 239] --- [0xE0, 0xEF] --- [1110 0000, 1110 1111] 第5位为0 --- 1110 xxxx
E : msb ∈ [240, 247] --- [0xF0, 0xF7] --- [1111 0000, 1111 1110] J
通过二进制的规律可以得出以下代码 :
// =================== 判断IP地址所属的分类 =================== //
char class;
if( (msb&0x80) == 0x00) // 1000 0000
{
class = ‘A’;
}
else if( (msb&0xC0) == 0x80) // 1100 0000
{
class = ‘B’;
}
else if ( (msb&0xE0) == 0xC0) // 1110 0000
{
class = ‘C’;
}
else if ( (msb&0xF0) == 0xE0) // 1111 0000
{
class = ‘D’;
}
else
{
class = ‘E’;
}
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的存储结构
192
168
9
1
&adr_inet.sin_addr.s_addr 开始获得该结构的内存地址 , 即192的地址
192
168
9
1
(unsigned char*)&adr_inet.sin_addr.s_addr 把该地址转换为 unsigned char*, 也就是说新的指针是指向单独的 192, 而不再是可以取到整个IP了
192
168
9
1
*(unsigned char*)&adr_inet.sin_addr.s_addr 取新指针指向的数据.
192
168
9
1
指针真的很神奇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
0
21-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和前面三个图好象不大一样,晕了,没搞明白!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: