收藏本页 电工之家_电工基础知识学习网站
当前位置:电工之家 > 计算机 > 正文

ip范围转换为子网掩码及算法

时间:2016-04-28 19:00 来源:电工之家 作者:编辑部

ip范围转换为子网掩码及算法
在网络应用中,经常需要将子网掩码转换为IP范围,以便进行进一步的计算.
以下是转换的原理及代码:   
一 子网掩码的作用, 就是将某个IP地址划分为'子网编号'和'主机地址'
   掩码格式       [子网编号:26bit               ]主机地址:6bit
   172.16.2.64/26 [10101100 00010000 00000010 01]000000
   172.16.2.96/26 [10101100 00010000 00000010 01]100000
   6bit的主机地址, 可以容纳63个编号. 则上面两个掩码的范围是
   掩码格式       IP范围
   172.16.2.64/26 [172.16.2.64 - 172.16.2.127]
   172.16.2.96/26 [172.16.2.96 - 172.16.2.127] *上一条的子集
 
二 算法   
typedef struct
{
u_int32_t min;
u_int32_t max;
}ip_range_t;
int str2iprange( ip_range_t *ipr, char *sipr)
{
char sip[16];
char smask[3];
sscanf( sipr, "%[^/]/%s", sip, smask);
ipr->min = ntohl(inet_addr( sip));
ipr->max = (ipr->min & ~( (0x1 << (32 - atoi(smask))) - 1)) + ( (0x1 << (32 - atoi(smask))) - 1);
}
三 测试   
ip_range_t ipr;
str2iprange( &ipr, "172.16.2.94/24");
struct in_addr min = { htonl( ipr.min)};
printf("%s - ", inet_ntoa( min));
struct in_addr max = { htonl( ipr.max)};
printf("%s /n", inet_ntoa( max));
输出结果:
172.16.2.94 - 172.16.2.127
END

IP地址202.112.14.137的子网掩码为什么是255.255.255.224?
如果这个掩码为255.255.255.224是因为它划分了2的三次方即8个子网,减去网络地址和广播地址部分,只能有6个子网。
8位被掩码借去3位还剩下5位,即2的5次方为32,
同样也应该减去网络地址和广播地址,即为30个主机。
所以这样的掩码是分为6个子网。每个子网可有30台主机。

题型:一个主机的IP地址是202.112.14.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址。
常规办法是把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后即可得到网络地址。其实大家只要仔细想想,可以得到另一个方法:255.255.255.224的掩码所容纳的IP地址有256-224=32个(包括网络地址和广播地址),那么具有这种掩码的网络地址一定是32的倍数。而网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地址在这个范围内,因此略小于137而又是32的倍数的只有128,所以得出网络地址是202.112.14.128。而广播地址就是下一个网络的网络地址减1。而下一个32的倍数是160,因此可以得到广播地址为202.112.14.159。可参照下表来理解本例。
子网络 2进制子网络域数 2进制主机域数的范围 2进制主机域数的范围
第1个子网络 000 00000 thru 11111 .0 thru.31
第2个子网络 001 00000 thru 11111 .32 thru.63
第3个子网络 010 00000 thru 11111 .64 thru.95
第4个子网络 011 00000 thru 11111 .96 thru.127
第5个子网络 100 00000 thru 11111 .128 thru.159
第6个子网络 101 00000 thru 11111 .160 thru.191
第7个子网络 110 00000 thru 11111 .192 thru.223
第8个子网络 111 00000 thru 11111 .124 thru.255

题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。比如一个子网有10台主机,那么对于这个子网需要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。因为13小于16(16等于2的4次方),所以主机位为4位。而
256-16=240
所以该子网掩码为255.255.255.240。
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为:
14+1+1+1=17
17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。