要根据子网前缀的长度计算IP范围,我们需要了解子网前缀长度与子网掩码之间的关系,以及如何通过子网掩码来确定IP地址的网络部分和主机部分。以下是根据子网前缀长度计算IP范围的步骤:
-
确定子网前缀长度:
子网前缀长度(也称为CIDR前缀长度)表示在IP地址中,网络部分占据的位数。例如,/24
表示网络部分占据前24位。 -
计算子网掩码:
根据子网前缀长度,我们可以计算出子网掩码。子网掩码是一串连续的1,后跟一串连续的0,其长度与IP地址的位数相同(对于IPv4地址是32位)。例如,对于/24
前缀长度,子网掩码是255.255.255.0
(即11111111.11111111.11111111.00000000
)。 -
确定网络地址:
网络地址是子网中第一个IP地址,它通过将IP地址与子网掩码进行按位AND运算得到。例如,如果IP地址是192.168.1.1
,子网掩码是255.255.255.0
,则网络地址是192.168.1.0
。 -
计算广播地址:
广播地址是子网中最后一个IP地址,它通过将网络地址的主机部分全部设置为1得到。例如,对于/24
前缀长度的网络,广播地址是网络地址的最后一段 + 255
(在二进制下是全部为1)。所以,如果网络地址是192.168.1.0
,则广播地址是192.168.1.255
。 -
确定可用的IP地址范围:
可用的IP地址范围是从网络地址的下一个地址开始,到广播地址的前一个地址结束。例如,对于网络地址192.168.1.0
和广播地址192.168.1.255
,可用的IP地址范围是192.168.1.1
到192.168.1.254
。 -
考虑特殊地址:
在网络中,网络地址和广播地址通常不分配给主机使用,因为它们有特殊的用途。网络地址用于标识子网本身,而广播地址用于向子网内的所有设备发送广播消息。
综上所述,根据子网前缀的长度计算IP范围涉及确定子网掩码、网络地址、广播地址,并考虑特殊地址的用途。通过这些步骤,我们可以准确地计算出任何给定子网前缀长度的IP地址范围。
//对应ip的32位4部分 a.b.c.d
//子网前缀长度
//计算ip范围的方法实现
//CIDR前缀长度
//a.b.c.d/n 例如220.115.200.0/21
//第一步 将ip转为二进制编码 a,b,c,d
//-------------------------------数字转二进制 start--------------------------------------
//转二进制的方法 先列出8位1 各自代表的值 128 64 32 16 8 4 2 1
//以a为例计算,从高位开始减 依次尝试减去128 64 32 16 8 4 2 1
//temp=a;
//计算第8位a-128 >=0 则第8位为1,当前计算记录值temp减去128;否则第8位为0,当前计算值减去0,也就是不变 220为(220.115.200.0/21中的第一位) 220-128=92 >0 1000 0000 temp=92
//计算第7位temp-64 >=0 则第7位为1,当前计算记录值减去64;否则第7位为0,当前计算值减去0,也就是不变 92-64=28>0 1100 0000 temp=28
//计算第6位temp-32 >=0 则第6位为1,当前计算记录值减去32;否则第6位为0,当前计算值减去0,也就是不变 28-32=-4<0 1100 0000 temp=28
//计算第5位temp-16 >=0 则第5位为1,当前计算记录值减去16;否则第5位为0,当前计算值减去0,也就是不变 28-16=12 >0 1101 0000 temp=12
//计算第4位temp-8 >=0 则第4位为1,当前计算记录值减去8;否则第4位为0,当前计算值减去0,也就是不变 12-8=4>0 1101 1000 temp=4
//计算第3位temp-4 >=0 则第3位为1,当前计算记录值减去4;否则第3位为0,当前计算值减去0,也就是不变 4-4=0==0 1101 1100 temp=4-4=0
//计算第2位temp-2 >=0 则第2位为1,当前计算记录值减去2;否则第3位为0,当前计算值减去0,也就是不变 0-2=-2<0 1101 1100 temp=0
//计算第1位temp-1 >=0 则第1位为1,当前计算记录值减去1;否则第3位为0,当前计算值减去0,也就是不变 0-1=-1<0 1101 1100 temp=0
//200转成二进制表示为10110100
//-------------------------------数字转二进制 end --------------------------------------
//4个数字都转换 220.115.200.0 =》 11011100 1110011 11001000 00000000
//子网掩码 即前n个是1 220.115.200.0/21 中21个1 11111111 11111111 11111000 00000000
//第二步 ip二进制和子网掩码二进制 进行与运算(相同位都为1,则结果为1,否则为0)
// 11011100 01110011 11001000 00000000
// 11111111 11111111 11111000 00000000
//结果11011100 01110011 11001000 00000000
//将结果转为10进制
//----------------------------------------------2进制转10进制的方法----------------------------------------
//当前位的值乘以2(位数-1)的次方, 例如11011100 :1*2^7+1*2^6+0*2^5+1*2^4+1*2^3+1*2^2+0*2^1+0*2^0=220
//以此类推 11011100 01110011 11001000 00000000 =》 220.115.200.0
//起始地址为 220.115.200.0
//第三步 计算ip地址范围的结束地址
// 起始地址对应二进制的后(32-n)位全部设置为1. ) 11011100 01110011 11001000 00000000的32-21=11位设置为1
//11011100 01110011 11001000 00000000 => 11011100 01110011 11001111 11111111 再转为10进制 =》 220.115.207.255
//其中最后一位需要减1 220.115.207.255=》220.115.207.254
//大功告成 ip范围为 220.115.200.0-220.115.207.254