将一个121.1.0.0/22的网络,划分成4个相同大小的子网,每个网络中包含多少IP地址,每个网段的网络地址、子网掩码、起始IP地址、结束IP地址分别是什么?
IP地址和子网掩码是一一对应关系,可以通过子网掩码数26计算得出子网掩码为255.255.255.192
IP地址:202.106.1.0
子网掩码:11111111 11111111 11111111 11000000
255 255 255 192=2^7+ 2 ^6
解决方案:
计算网络地址121.1.0.0/22划分为4个相同大小子网后,每个子网包含多少IP地址:
根据子网掩码,可以得出子网掩码为255.255.252.0,可以计算出每个子网的主机数为2^10-2 = 1022。
而四个子网是等大小的,所以每个子网的主机数为1022/4= 255。
每个子网的网络地址、子网掩码、起始IP地址、结束IP地址:
首先,计算出新的子网掩码为255.255.252.0,具体计算可以如下:
将 255.255.255.0 转为二进制是:11111111.11111111.11111111.00000000 根据子网掩码可以计算出网络地址为 121.1.0.0/22 现在需要我们将这个网络地址进行划分,可以通过子网掩码得出子网的大小和范围,并根据子网地址来计算每个子网的地址范围。
子网划分: 需要4个子网,可以计算出子网掩码为 255.255.255.192,掩码二进制为 11111111.11111111.11111111.11000000
网络地址:121.1.0.0/22 子网掩码:255.255.255.192/18 (11111111.11111111.11111111.11000000) 每个子网主机数:255
子网A 替换二进制首位的多余 0 为 1,可得最初掩码为:11111111.11111111.11111100.00000000。 它转换为十进制为:255.255.252.0,它规定了子网内的 IP 信标应当致。 也就是说明了 3216128 个连续的 IP 解析地址为这样的子网。
子网0:121.1.0.0/22[0-102]
子网开始地址:121.1.0.0 子网结束地址:121.1.0.102 子网子网掩码:11111111.11111111.11111100.00000000 网络地址:121.1.0.0 广播地址:121.1.3.255
子网B 子网开始地址:121.1.0.103 子网结束地址:121.1.0.205 子网子网掩码:11111111.11111111.11111100.00000000 网络地址:121.1.0.128 广播地址:121.1.3.255
子网C 子网开始地址:121.1.0.206 子网结束地址:121.1.0.308 子网子网掩码:11111111.11111111.11111100.00000000 网络地址:121.1.0.256 广播地址:121.1.3.255
子网D 子网开始地址:121.1.0.309 子网结束地址:121.1.0.411 子网子网掩码:11111111.11111111.11111100.00000000 网络地址:121.1.0.384 广播地址:121.1.3.255
如何判断一个字符串是否为合法的IP地址:
可以通过如下代码判断一个字符串是否为合法的IP地址:
import java.util.Scanner;
public class MyTest {
public static void main(String[] args) {
/*
* 如何判断一个字符串是否为合法的IP地址。
*/
Scanner sc=new Scanner(System.in);
String test=sc.nextLine();
// ip地址最短7位最长15位
if (test.length() < 7 || test.length() > 15) {
System.out.println("不合法,长度不对");
} else {
String[] TheFigures = test.split("\\.");
if (TheFigures.length!= 4) {
System.out.println("不合法,不是4个串-------"+TheFigures.length);
} else {
//对每个字符串进行判断是否是规定的数字
boolean flag=true;//定义一个标志位
long sum=0;
for(int i=0;i<TheFigures.length;i++) {
char [] cr=TheFigures[i].toCharArray();
//遍历每个串里的字符
for (char chr:cr) {
char ling='0';
int ch=chr-ling;
if(ch<0 | ch>9) {
flag=false;
System.out.println("不合法,有非数字---ASCII值为"+ch+"字符是"+chr);
break;
}
}
sum=sum+Integer.parseInt(TheFigures[i]);
if(flag) {
int figInt=Integer.parseInt(TheFigures[i]);
if(figInt<0 || figInt>255) {
flag=false;
break;
}
}
}
if(flag && sum!=0 ) {
System.out.println("合法啦!");
}else {
System.out.println("不合法!");
}
}
}
}
}
该代码将输入的字符串按 . 分隔为 4 段,然后对每段进行一一判断。具体判断方式如下:
首先判断输入的字符串长度是否为 7~15 位,如果是,继续判断下去。
将输入的字符串按 . 分开,如果分开后的数组元素不为 4,那么该 IP 地址非法。
依次对每个元素做如下判断:
判断字符串是否只有数字组成,如果仅由数字组成,继续判断下去。 将字符串转换为整型,并判断整型数值是否是 0~255 之间。
如果 2、3 步判断通过,说明输入的 IP 地址是一个合法的 IP 地址。
哪一个是子网172.25.0.64/26中的最后一个可用地址:
根据该子网的掩码位数为 26,计算出掩码为 255.255.255.192。
因为子网掩码为 26,所以可以将 IP 地址按位分别分为三段:第一段 172.25.0 ,第二段 64,第三段从 0 开始递增。一般情况下,每个子网都有两个地址是不能使用的,一般是网络地址和广播地址。而网络地址通常是每个子网的第一个 IP 地址,一般就是子网 IP 地址中除了最后一段的 0 这一段。因此,每个子网最后一个可用地址应该是子网中最后一个能够使用的 IP 地址,来自第二段加上最后一段的 1(得出的答案是:172.25.0.127)。
22位网络地址分成4个网段那就是24位网络地址,具体计算可以参考shell脚本之IP计算器:https://sunsite.blog.csdn.net/article/details/125216252