多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
6ewMyirQFL
地址范围224.0.0.1-239.255.255.254
5.E类IP地址
以“11110”开始,为将来使用保留。
E类地址保留,仅作实验和开发用。
全零<“0.0.0.0”)地址指任意网络。
全“1”的IP地址<“255.255.255.255”)是当前子网的广播地址。
kavU42VRUs
3.2子网掩码简介
通过IP地址的二进制与子网掩码的二进制进行与运算进行定某个设备的网络地址,
也就是说通过子网掩码分辨一个网络的网络部分和主机部分子网掩码一旦设置,网络地址和主机地址就固定了。
相对于使用子网掩码来识别网络地址,早期的使用类别进行网络地址的分类存在着地址大量浪费的不足。
子网一个最显著的特征就是具有子网掩码。
与IP地址相同,子网掩码的长度也是32位,也可以使用十进制的形式。
例如,为二进制形式的子网掩码:
111111*********11111111100000000,采用十进制的形式为:
255.255.255.0。
y6v3ALoS89
用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。
在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。
M2ub6vSTnP
3.3ip地址的计算
定义子网掩码的步骤为:
A、确定哪些组地址归我们使用。
比如我们申请到的网络号为“210.73.a.b”,该网络地址为C类IP地址,网络标识为“210.73.a”,主机标识为“.b”。
0YujCfmUCw
B、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。
比如我们现在需要12个子网,将来可能需要16个。
用第三个字节的前四位确定子网掩码。
前四位都置为“1”<即把第三字节的最后四位作为主机位,其实在这里有个简单的规律,非网络位的前几位置1原网络就被分为2的几次方个网络,这样原来网络就被分成了2的4次方16个子网),即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。
eUts8ZQVRd
C、把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:
“11111111.11111111.11110000.00000000”sQsAEJkW5T
D、把这个数转化为间断十进制形式为:
“255.255.240.0”这个数为该网络的子网掩码。
子网掩码一共分为两类。
一类是缺省子网掩码,一类是自定义子网掩码。
缺省子网掩码即未划分子网,对应的网络号的位[1][2]都置1,主机号都置0。
GMsIasNXkA
A类网络缺省子网掩码:
255.0.0.0
B类网络缺省子网掩码:
255.255.0.0
C类网络缺省子网掩码:
255.255.255.0
自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:
子网号、子网主机号。
形式如下:
TIrRGchYzg
未做子网划分的ip地址:
网络号+主机号
做子网划分后的ip地址:
网络号+子网号+子网主机号
也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。
子网掩码是32位二进制数,它的子网主机标误用部分为全“0”。
利用子网掩码可以判断两台主机是否中同一子网中。
若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。
7EqZcWLZNX
3.4子网划分简介
子网的划分,实际上就是设计子网掩码的过程。
子网掩码主要是用来区分IP地址中的网络ID和主机ID,它用来屏蔽IP地址的一部分,从IP地址中分离出网络ID和主机ID.子网掩码是由4个十进制数组成的数值"中间用"。
"分隔,如255.255.255.0。
若将它写成二进制的形式为:
11111111.11111111.11111111.00000000,其中为"1"的位分离出网络ID,为"0"的位分离出主机ID,也就是通过将IP地址与子网掩码进行"与"逻辑操作,得出网络号。
lzq7IGf02E
例如,假设IP地址为192.160.4.1,子网掩码为255.255.255.0,则网络ID为192.160.4.0,主机ID为0.0.0.1。
计算机网络ID的不同,则说明他们不在同一个物理子网内,需通过路由器转发才能进行数据交换。
zvpgeqJ1hk
每类地址具有默认的子网掩码:
对于A类为255.0.0.0,对于B类为255.255.0.0,对于C类为255.255.255.0。
除了使用上述的表示方法之外,还有使用于网掩码中"1"的位数来表示的,在默认情况下,A类地址为8位,B类地址为16位,C类地址为24位。
例如,A类的某个地址为12.10.10.3/8,这里的最后一个"8"说明该地址的子网掩码为8位,而199.42.26.0/28表示网络199.42.26.0的子网掩码位数有28位。
NrpoJac3v1
如果希望在一个网络中建立子网,就要在这个默认的于网掩码中加入一些位,它减少了用于主机地址的位数。
加入到掩码中的位数决定了可以配置的于网。
因而,在一个划分了子网的网络中,每个地址包含一个网络地址、一个子网位数和一个主机地址,1nowfTG4KI
四课程设计过程
4.1主流程图
图3-1 主流程图
4.2验证ip地址合法性流程图
图3-2 验证ip地址合法性流程图
4.3验证子网掩码合法性流程图
图3-3 验证子网掩码合法性流程图
4.4验证ip是否属于某个子网流程图
fjnFLDa5Zo
图3-4 验证ip是否属于某个子网流程图
五课程设计小结
这次课程设计,感触颇深!
课程设计是学生考试前最后一个重要学习环节,是学习深化与升华的重要过程。
经过这次课程设计,我发现现在学习的知识远远不够,经过自学以及向同学们学习才得以完成这次课程设计。
这次课程设计,加强了自己掌握和理解计算机网络理论原理的能力,培养了自己的实际动手能力与综合设计能力,并提高了自己的技术素质。
课程设计一向是我比较喜欢的实践工程,因为从中会学到许多东西,既检验了我们前段时间理论知识的学习效果,又锻炼了我的动手实践能力。
tfnNhnE6e5
此次课程设计任务是写一个判断ip地址的合法性和判断这个ip地址是否为某一个子网,书上所采用的参加为用vc++编写程序,这段时间时间我一直在学习java,我把c++里所体现的思想用java写了出来,并用上了正则表达式等方法来完成这次实验,花了一天多时间就完成了程序的编写,遇到了不少问题,不过都解决了,总体上说收获不大,程序是我已经学过的,不过是应用一下而已,收获比较大的地方是关于计算机网络的知识,这次课程设计,让我明白了ip地址和子网掩码的关系,明白了子网的划分。
收获很大。
HbmVN777sL
希望以后还会有这样的机会锻炼自己。
也希望老师们能多为学生们提供类似的机会,只有这样的锻炼机会多了,才能提高我们的动手实践能力,以后在就业中才会更适应软件公司的需要。
V7l4jRB8Hs
六参考文献
⑴张尧学;计算机网络与Internet教程;北京:
清华大学出版社,2018.2
⑵吴功宣;计算机网络课程设计;北京:
机械工业出版社,2007.12
附加主要源代码及说明
packageqiu.ip。
importjava.util.regex.Matcher。
importjava.util.regex.Pattern。
/**
*计算机网络课程设计--IP地址的合法性及子网判断
*湖南文理学院计算机科学与技术学院
*/
publicclassIp_Test{
/*
*使用正则表达式判断ip地址是否正确
*/
privatestaticbooleanisIp(Stringst>{
Stringregex0="(2[0-4]\\d>"+"|(25[0-5]>"。
//这里表示从200开始的数83lcPA59W9
Stringregex1="1\\d{2}"。
//这里是100-200数的约定
Stringregex2="[1-9]\\d"。
//不能以0打头的二位数
Stringregex3="\\d"。
//0-9一位数
Stringregex="("+regex0+">|("+regex1+">|("+regex2+">|("mZkklkzaaP
+regex3+">"。
//每一个点分十进数都可以取上面的值
regex="("+regex+">.("+regex+">.("+regex+">.("+regexAVktR43bpw
+">"。
//加上"."
Patternp=Ppile(regex>。
//预编译这个正则表达式,使速度更快ORjBnOwcEd
Matcherm=p.matcher(st>。
//进行匹配
returnm.matches(>。
//返回匹配结果
}
/*
*使用正则表达式判断子网掩码是否正确
*/
privatestaticbooleanisMask(Stringst>{//正则表达式列出了所有情况2MiJTy0dTT
Stringre="(254|252|248|240|224|192|128|0>\\.0\\.0\\.0|"gIiSpiue7A
+"255\\.(254|252|248|240|224|192|128|0>\\.0\\.0|"
+"255\\.255\\.(254|252|248|240|224|192|128|0>\\.0|"uEh0U1Yfmh
+"255\\.255\\.255\\.(254|252|248|240|224|192|128|0>"。
IAg9qLsgBX
Patternp=Ppile(re>。
Matcherm=p.matcher(st>。
returnm.matches(>。
}
/*
*判断ip地址是否属于某一个网络
*/
privatestaticbooleango(Strings1,Strings2,Strings3>{WwghWvVhPE
String[]s33=s3.split("\\.">。
//ip地址变数组
String[]s22=s2.split("\\.">。
//子网掩码变数组
Stringok=""。
Stringre_ok=""。
for(inti=0。
ii++>{
intint_ip=Integer.parseInt(s33[i]>。
//字符串转换成整形
intint_mask=Integer.parseInt(s22[i]>。
intre1=(int_ip&int_mask>。
//每个点分10进制数都进行与运算
Stringre=String.valueOf(re1>。
//整数转换成字符串
if(i!
=3>{//前三个点分10进制数后面加上"."
ok=re+"."。
re_ok+=ok。
}else{
re_ok+=re。
//最后一个点分10进制数不加"."
}
}
System.out.println("ip地址和子网掩与运算之后的结果为:
"+re_ok>。
System.out.println("网络号为:
"+s1>。
System.out
.println("---------------------------------------------------------------">。
asfpsfpi4k
returnre_ok.equals(s1>。
//比较字符串是否相同
}
publicstaticvoidmain(String[]args>{
//判断参数是否为3个
if(args.length!
=3>{
System.out.println("参数错误!
请重新输入">。
System.exit(0>。
}
System.out
.println("---------------------------------------------------------------">。
ooeyYZTjj1
//判断子网地址是否正确
if(isIp(args[0]>>{
System.out.println("子网地址正确!
为:
"+args[0]>。
}else{
System.out.println("子网地址不正确("+args[0]+">!
请重试...">。
BkeGuInkxI
System.exit(0>。
}
//判断子网掩码是否正确
if(isMask(args[1]>>{
System.out.println("子网掩码正确!
为:
"+args[1]>。
}else{
System.out.println("子网掩码不正确("+args[1]+">!
请重试...">。
PgdO0sRlMo
System.exit(0>。
}
//判断ip地址是否正确
if(isIp(args[2]>>{
System.out.println("ip地址正确!
为:
"+args[2]>。
}else{
System.out.println("ip地址不正确("+args[2]+">!
请重试...">。
3cdXwckm15
System.exit(0>。
}
System.out
.println("---------------------------------------------------------------">。
h8c52WOngM
//判断ip地址是否属于这个网络
if(go(args[0],args[1],args[2]>>{
System.out.println("OK!
ip地址("+args[2]+">属于这个网络("+args[0]v4bdyGious
+">">。
}else{
System.out.println("对不起!
ip地址("+args[2]+">不属于这个网络("+args[0]J0bm4qMpJ9
+">">。
}
System.out
.println("---------------------------------------------------------------">。
XVauA9grYP
}
}
调试运行
1编译工具及相关说明
编译环境:
Windows平台上的jdk1.6。
使用开发工具为elipse。
使用方法:
在eclipse上新建工程TestIp,在工程中新建一个类Test_Ip,编写代码,使用三个参数运行这个程序。
bR9C6TJscw
2开发中遇到的问题及解决办法
1.遇到的第一个问题:
面向对像的思想,java是完