IP地址的合法性和子网判断
判断IP地址的合法性
判断IP地址的合法性每台计算机都有独⼀⽆⼆的编号,称为ip地址,每个合法的ip地址由‘.’分隔开的4个数字组成,每个数字的取值范围为0--255输⼊⼀个字符串,判断其是否为合法的IP地址,若是输出‘YES’,否则输出‘NO’第⼀种⽅法:p = input()ip = ip.split('.') #split()分割字符串,这⾥以 . 为分割处,⽣成数字列表if len(ip) == 4: #判断列表中元素个数是否为4for i in range(4): #遍历循环if ip[i].isdigit() == False or eval(ip[i]) > 255 or eval(ip[i]) < 0: #判断字符串是否全为数字print('No')break #停⽌循环else:if i == 3: #判断条件到循环最后⼀位print('Yes')else:print('No')'''str.isdigit()如果字符串str只包含数字(包括:Unicode数字,半⾓数字(单字节),全⾓数字(双字节),不包括罗马数字和汉字数字)则返回 True 否则返回 False。
'''第⼆种⽅法 s = input()def f(s):lists = s.split('.')if len(lists) != 4:return 'No'for i in range(4):try:tmp = int(lists[i])if tmp not in range(0,256):return 'No'except:return 'No'return 'Yes'print(f(s))。
IP地址的验证和认证方法
IP地址的验证和认证方法在互联网时代,IP地址起着至关重要的作用。
它是标识一台设备在网络上的唯一地址,通过IP地址我们可以实现设备之间的通信和信息传递。
然而,由于网络的开放性和匿名性,IP地址的验证和认证成为一个关键问题。
本文将探讨IP地址的验证和认证方法,以保障网络安全和数据的传输可靠性。
一、IP地址的验证方法1. IP地址格式验证IP地址由4组数字组成,每组数字范围在0-255之间,格式为X.X.X.X。
为了验证IP地址的有效性,我们可以采用正则表达式进行验证。
例如,正则表达式"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$"可以用于验证IP地址的格式是否正确。
2. IP地址合法性验证除了验证IP地址的格式,还需要验证其合法性。
合法的IP地址需要满足以下条件:首先,不能是保留地址,如127.0.0.1是保留地址用于本地回环测试;其次,不能是特殊地址,如0.0.0.0表示非法地址;最后,不能是私有地址,如10.0.0.0/8,172.16.0.0/12,192.168.0.0/16等用于内部网络的地址段。
3. IP地址可用性验证IP地址的可用性验证是指验证该IP地址是否可以达到目标主机。
常用的方法是通过PING命令来测试IP地址的连通性。
如果PING命令能够收到目标主机的响应,说明IP地址可用;反之,则不可用。
二、IP地址的认证方法1. 基于物理地址(MAC地址)认证MAC地址是网卡或网络适配器的唯一标识符,通过获取设备的MAC地址并与预先存储的MAC地址进行比对,可以实现对IP地址的认证。
这种方法适用于局域网内的设备认证,但不适用于互联网环境下的IP地址认证。
2. 基于数字签名认证数字签名是一种通过公钥和私钥对数据进行加密和验证的方法。
IP 地址的认证可以通过数字签名来实现,即将IP地址和相应的认证信息使用私钥加密生成数字签名,然后将数字签名与公钥一同传输给目标主机,目标主机使用公钥来验证数字签名的有效性。
IP地址种类与子网划分
IP地址、子网掩码详解第一章、IP地址的介绍一、IP地址的分类把整个Internet网堪称单一的网络,IP地址就是给每个连在Internet网的主机分配一个在全世界范围内唯一的标示符,Internet管理委员会定义了A、B、C、D、E五类地址,在每类地址中,还规定了网络编号和主机编号。
在TCP/IP协议中,IP地址是以二进制数字形式出现的,共32bit,1bit就是二进制中的1位,但这种形式非常不适用于人阅读和记忆。
因此Internet管理委员会决定采用一种"点分十进制表示法"表示IP地址:面向用户的文档中,由四段构成的32 比特的IP地址被直观地表示为四个以圆点隔开的十进制整数,其中,每一个整数对应一个字节(8个比特为一个字节称为一段)。
A、B、C类最常用,下面加以介绍。
本文介绍的都是版本4的IP地址,称为IPv4.1、A类地址:网络标识范围1~126,有27 -2=126个网段(减2是因为0不用,127留作它用)主机标识占3组8位二进制数,有224-2=16777216台主机(减2是因为全0地址为网络地址,全1为广播地址)。
缺省子网掩码:255·0·0·0换算成二进制为11111111·00000000·00000000·000000002、B类地址:网络标识范围128~191,有214 =16384个网段主机标识占2组8位二进制数,有216-2=65533台主机,适用于结点比较多的网络。
缺省子网掩码:255·255·0·0 换算成二进制为11111111·11111111·00000000·000000003、C类地址:网络标识范围192~223,有221 =2097152个网段主机标识占1组8位二进制数,有28-2= 254台主机,适用于结点比较少的网络。
IP地址与子网划分
IP地址与子网划分IP地址和子网划分是计算机网络中非常重要的概念。
IP地址是用于标识网络中设备的唯一地址,而子网划分则是将一个网络划分为多个子网,以提高网络管理和安全性。
本文将详细介绍IP地址的分类和子网划分的原理和应用。
一、IP地址的分类IP地址由32位二进制数表示,通常以四个十进制数(例如192.168.0.1)表示。
根据IP地址的规模和功能要求,通常可以分为以下几类:1. A类地址:从1.0.0.0到126.0.0.0,其中第一位为0,适用于大规模网络;2. B类地址:从128.0.0.0到191.255.0.0,其中前两位为10,适用于中等规模网络;3. C类地址:从192.0.0.0到223.255.255.0,其中前三位为110,适用于小规模网络;4. D类地址:从224.0.0.0到239.255.255.255,用于多点广播;5. E类地址:从240.0.0.0到255.255.255.255,保留为将来使用。
不同类别的IP地址可以容纳的主机数量不同,A类地址最多可容纳约16,777,214个主机,B类地址最多可容纳约65,534个主机,C类地址最多可容纳约254个主机。
二、子网划分的原理子网划分是将一个网络划分为多个子网,以便更好地管理和组织网络。
在进行子网划分时,需要使用子网掩码来确定网络地址和主机地址的边界。
子网掩码是一个32位的二进制数,用于将IP地址中的网络部分与主机部分进行划分。
子网掩码中所有网络部分的位都为1,所有主机部分的位都为0。
例如,对于一个C类地址的IP地址192.168.0.1,默认的子网掩码为255.255.255.0,表示前24位是网络部分,后8位是主机部分。
通过对子网掩码进行调整,可以将一个网络划分为多个子网。
例如,将默认的子网掩码255.255.255.0调整为255.255.255.128,表示前25位是网络部分,后7位是主机部分。
这样就将原网络划分为了两个子网,分别可以容纳128个主机。
计算机网络课程设计题目汇总
1. 帧的封装实现
2. 入侵检测初步研究
3. 员工宿舍组网设计
4. DHCP服务器的配置
5.小型HTTP服务器的设计与实现
5.多校区网络互联方案设计
6. 小型企业办公楼局域网构建
7. 组建大型网吧局域网
8. 校园综合大楼组网设计
9.网络安全设计与实施方案
10. 教师公寓组网方案
11. 中小型企业内部局域网组网设计
12. 基于VLAN的小型企业应用
13. 子网与路由器配置
14. 二层交换机组网方案
15. IP地址的合法性及子网判断
16.网络协议分析(HTTP,FTP,DHCP等)
17.网络程序设计
18.IP数据包解析
19.实现局域网内消息的广播发送
20.使用ARP发现局域网内活动主机
21.以太网帧发送,接收及解析
22.端口扫描程序设计
23.基于C/S结构的套接字程序设计(TCP)
24.基于C/S结构的套接字程序设计(UDP)
25.TCP段的发送和接收
26.IP包流量统计
27.简单动态网站设计与实现。
IP地址子网掩码、主机数、判断是否在同一个网内的问题释疑
我们都知道,IP是由四段数字组成,在此,我们先来了解一下3类常用的IPA类IP段0.0.0.0 到127.255.255.255B类IP段128.0.0.0 到191.255.255.255C类IP段192.0.0.0 到223.255.255.255XP默认分配的子网掩码每段只有255或0A类的默认子网掩码255.0.0.0一个子网最多可以容纳1677万多台电脑B类的默认子网掩码255.255.0.0一个子网最多可以容纳6万台电脑C类的默认子网掩码255.255.255.0一个子网最多可以容纳254台电脑我以前认为,要想把一些电脑搞在同一网段,只要IP的前三段一样就可以了,今天,我才知道我错了。
如果照我这说的话,一个子网就只能容纳254台电脑?真是有点笑话。
我们来说详细看看吧。
要想在同一网段,只要网络标识相同就可以了,那要怎么看网络标识呢?首先要做的是把每段的IP转换为二进制。
(有人说,我不会转换耶,没关系,我们用Windows自带计算器就行。
打开计算器,点查看>科学型,输入十进制的数字,再点一下“二进制”这个单选点,就可以切换至二进制了。
)把子网掩码切换至二进制,我们会发现,所有的子网掩码是由一串连续的1和一串连续的0组成的(一共4段,每段8位,一共32位数)。
255.0.0.011111111.00000000.00000000.00000000255.255.0.011111111.11111111.00000000.00000000255.255.255.011111111.11111111.11111111.00000000这是A/B/C三类默认子网掩码的二进制形式,其实,还有好多种子网掩码,只要是一串连续的1和一串连续的0就可以了(每段都是8位)。
如11111111.11111111.11111000.00000000,这也是一段合法的子网掩码。
子网掩码决定的是一个子网的计算机数目,计算机公式是2的m次方,其中,我们可以把m看到是后面的多少颗0。
详解Python判定IP地址合法性的三种方法
详解Python判定IP地址合法性的三种⽅法IP合法性校验是开发中⾮常常⽤的,看起来很简单的判断,作⽤确很⼤,写起来⽐较容易出错,今天我们来总结⼀下,看⼀下3种常⽤的IP地址合法性校验的⽅法。
IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)⽅法1:正则表达式判定法最简单的实现⽅法是构造⼀个正则表达式。
判断⽤户的输⼊与正则表达式是否匹配。
若匹配则是正确的IP地址,否则不是正确的IP地址。
复制代码代码如下:^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$下⾯给出相对应的验证ip的正则表达式:\d表⽰0~9的任何⼀个数字{2}表⽰正好出现两次[0-4]表⽰0~4的任何⼀个数字| 的意思是或者1\d{2}的意思就是100~199之间的任意⼀个数字2[0-4]\d的意思是200~249之间的任意⼀个数字25[0-5]的意思是250~255之间的任意⼀个数字[1-9]\d的意思是10~99之间的任意⼀个数字[1-9])的意思是1~9之间的任意⼀个数字\.的意思是.点要转义(特殊字符类似,@都要加\\转义)代码如下:import redef check_ip(ipAddr):compile_ip=pile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$') if compile_ip.match(ipAddr):return Trueelse:return False⽅法2:字符串拆解法把ip地址当作字符串,以.为分隔符分割,进⾏判断代码:#!/usr/bin/pythonimport os,sysdef check_ip(ipAddr):import sysaddr=ipAddr.strip().split('.') #切割IP地址为⼀个列表#print addrif len(addr) != 4: #切割后列表必须有4个参数print "check ip address failed!"sys.exit()for i in range(4):try:addr[i]=int(addr[i]) #每个参数必须为数字,否则校验失败except:print "check ip address failed!"sys.exit()if addr[i]<=255 and addr[i]>=0: #每个参数值必须在0-255之间passelse:print "check ip address failed!"sys.exit()i+=1else:print "check ip address success!"if len(sys.argv)!=2: #传参加本⾝长度必须为2print "Example: %s 10.0.0.1 "%sys.argv[0]sys.exit()else:check_ip(sys.argv[1]) #满⾜条件调⽤校验IP函数⽅法3:引⼊IPy类库IPy库是⼀个处理IP⽐较强⼤的第三⽅库IPy库的安装请⾃⾏查找。
IP地址合法性判断及子网检测_实验报告
IP地址合法性判断及子网检测_实验报告实验报告:IP地址合法性判断及子网检测一、实验目的:掌握IP地址的合法性判断方法和子网检测方法,深入理解IP地址和子网的概念,并能够灵活应用于实际网络环境。
二、实验原理:1.IP地址的合法性判断:IP地址是由32位二进制数组成的,采用点分十进制表示法,每8位二进制数组成一段,共4段。
合法的IP地址必须满足以下条件:-每一段的值在0~255之间;-每一段不能以0开头,除非该段的值为0;-每一段不能以255结尾。
2.子网检测:子网是将IP地址划分为多个子网,用于实现网络的划分和管理。
子网检测的核心是判断两个IP地址是否在同一子网内。
判断方法如下:-将两个IP地址与子网掩码进行与运算,得到的结果即为网络地址;-判断两个网络地址是否相同,若相同,则处于同一子网内。
三、实验步骤:1.IP地址合法性判断:-读入一个IP地址;-将IP地址进行切割,得到4段数字;-判断每一段数字是否在0~255之间;-判断每一段是否以0开头或以255结尾;-若所有判断条件均满足,则判定该IP地址为合法地址。
2.子网检测:-读入两个IP地址和一个子网掩码;-将两个IP地址与子网掩码进行与运算,得到两个网络地址;-判断两个网络地址是否相同;-若相同,说明两个IP地址处于同一子网内;-若不同,说明两个IP地址处于不同子网内。
四、实验结果:1.IP地址合法性判断:-输入合法IP地址:192.168.1.1,结果为合法地址;-输入非法IP地址:256.1.1.1,结果为非法地址。
2.子网检测:-输入两个IP地址:192.168.1.10、192.168.1.20,子网掩码为255.255.255.0,结果为处于同一子网内;-输入两个IP地址:192.168.1.10、192.168.2.10,子网掩码为255.255.255.0,结果为处于不同子网内。
五、实验总结:通过本次实验,我们掌握了IP地址的合法性判断方法和子网检测方法。
ipv4 检验规则
ipv4 检验规则
IPv4检验规则是指用于验证IPv4地址的有效性和正确性的规则。
IPv4是一种32位的IP地址,它由四个8位的十进制数值表示,每个数值之间用小数点分隔。
IPv4检验规则主要包括以下几个方面:
1. 格式验证:IPv4地址必须满足四个数字段,每个数字段的取值范围在0-255之间,且不能以0开头。
2. 数字段验证:每个数字段必须是一个有效的十进制数值,并且不能包含其他字符,如字母或符号。
3. 分隔符验证:IPv4地址的四个数字段必须以小数点进行分隔,且分隔符必须存在且唯一。
4. 保留地址验证:IPv4地址中有一些特殊的保留地址段,例如私有IP地址段(如10.0.0.0-10.25
5.255.255、172.1
6.0.0-172.31.255.255、192.168.0.0-
192.168.255.255),回环地址(127.0.0.0-127.255.255.255)等,验证时需要排除这些保留地址。
5. 网络地址验证:IPv4地址中最后一个数字段为主机地址,前面的数字段为网络地址。
网络地址的范围由IPv4地址的子网掩码决定,验证时需要判断网络地址是否在合理的范围内。
6. 合法性验证:除了上述规则外,IPv4地址还需符合IP地址的基本要求,如长度为32位、具有唯一性等。
根据上述IPv4检验规则,我们可以通过对IPv4地址进行逐一验证,以确定其有效性和正确性。
在网络通信中,正确的IPv4地址是连接互联网的基础,它能够唯一标识网络中的设备。
因此,遵守IPv4检验规则能够提高网络的稳定性和可靠性,确保网络正常运行。
IP地址合法性判断及子网检测_实验报告
IP地址合法性判断及子网检测_实验报告实验报告-IP地址合法性判断及子网检测一、实验目的1.了解IP地址的基本知识和表示方法;2.掌握判断IP地址合法性的方法;3.掌握网络子网的划分方法;4.通过实验掌握子网掩码的设置方法。
二、实验器材1.一台安装有操作系统的计算机;2.网络连接线。
三、实验原理1.IP地址的基本知识IP地址是互联网协议指定的32位二进制数字,一般采用四个十进制数(0~255)表示,每个数之间使用“.”分隔。
例如:192.168.1.1、IP地址可以分为两部分,网络地址和主机地址。
网络地址用于标识网络,主机地址用于标识网络中的主机。
2.IP地址合法性判断方法IP地址的每个数必须在0~255的范围内,且IP地址的格式必须满足“N1.N2.N3.N4”的形式,N1、N2、N3和N4分别表示IP地址的四个数字段。
在判断IP地址的合法性时,需要判断每个数字段的值是否在0~255之间。
同时,IP地址的每个数字段之间需要用“.”分隔,且不能有其他的字符。
3.子网划分方法子网划分是将一个大的IP地址段划分成多个小的IP地址段的过程。
子网划分的目的是将一个大的网络划分成若干个小的网络,增加网络的可管理性和安全性。
子网掩码是用于划分子网的重要参数,用于将IP地址划分为网络地址和主机地址。
子网掩码是一个32位的二进制数字,一般采用四个十进制数表示,例如:255.255.255.0。
子网掩码规定了IP地址前面的网络地址的长度。
四、实验内容1.判断一个给定的IP地址是否合法;2.给定一个IP地址和子网掩码,判断该IP地址是否属于指定的子网。
五、实验步骤1.判断IP地址的合法性。
编写程序,输入一个IP地址,判断该IP地址是否合法。
(1)将IP地址按照“.”进行分割,得到四个数字段;(2)判断每个数字段的值是否在0~255之间;(3)判断数字段之间是否使用“.”进行分隔。
2.判断IP地址是否属于指定子网。
编写程序,输入一个IP地址和子网掩码,判断该IP地址是否属于指定的子网。
IP地址与子网划分讲解
IP地址与子网划分讲解作者:李石新IP地址简介IP地址分为五类:·A类用于大型网络(能容纳网络126个,主机1677214台)·B类用于中型网络(能容纳网络16384个,主机65534台)·C类用于小型网络(能容纳网络2097152个,主机254台)·D类用于组播(多目的地址的发送)·E类用于实验另外,全零(0.0.0.0.)地址指任意网络。
全1的IP地址(255.255.255.255)是当前子网的广播地址。
在因特网中,每台计算机的每个连接都有一个由授权单位分配的用于彼此区别的号码,即IP地址。
IP地址采用层次结构,按照逻辑结构划分为两个部分:网络号和主机号。
网络号用于识别一个逻辑网络,而主机号用于识别网络中的一台主机的一个连接。
因此,IP地址的编址方式携带了明显的位置消息。
一个完整的IP地址由个字节,即32位数字组成,为了方便用户理解和记忆,采用点分十进制标记法,中间使用符号“.”隔开不同的字节。
例如:采用32位形式的IP地址如下00001010 00000000 00000000 00000001采用十进制数的形式如下10.0.0.1A类地址(1)A类IP地址。
由1个字节的网络地址和3个字节的主机地址,网络地址的最高位必须是“0”。
如:0XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)(2)A类IP地址范围:1.0.0.1---126.255.255.254(3)A类IP地址中的私有地址和保留地址:①10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
范围(10.0.0.1---10.255.255.254)②127.X.X.X是保留地址,用做循环测试用的。
B类地址(1)B类IP地址。
由2个字节的网络地址和2个字节的主机地址,网络地址的最高位必须是“10”。
如:10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX(X代表0或1)(2)B类IP地址范围:128.0.0.1---191.255.255.254。
IP地址分配策略及子网划分方法
IP地址分配策略及子网划分方法IP地址分配是互联网中的重要环节,它确定了每个设备在网络中的唯一标识。
在IPv4网络中,IP地址由32位二进制数表示,通常以点分十进制形式呈现。
本文将介绍IP地址分配的策略要点以及子网划分方法,旨在帮助读者更好地理解和应用IP地址分配。
一、IP地址分配策略1. 静态IP地址分配静态IP地址分配是指网络管理员手动为每个设备指定一个固定的IP地址。
这种方式适用于对网络资源、设备使用情况和管理维护等要求较高的场景。
但是,静态IP地址分配需要管理员手动管理,对网络规模较大的情况下工作量较大。
2. 动态主机配置协议(DHCP)DHCP是一种自动化的IP地址分配机制,它能够为设备提供动态的、临时的IP地址。
通过DHCP服务器,网络中的设备可以自动获取IP地址、子网掩码、网关和DNS服务器等网络配置信息。
这种方式减轻了网络管理员的工作压力,提高了网络管理的效率。
3. 网络地址转换(NAT)NAT是一种将私有IP地址转换为公共IP地址的技术,用于解决公网IP地址不足的问题。
在NAT中,一个公共IP地址可以映射多个私有IP地址,使得多个设备可以共享一个公网IP地址进行互联网通信。
NAT对于家庭网络和小型企业网络而言十分常见。
但是,NAT会引入一定的网络延迟和性能损耗。
二、子网划分方法1. 子网掩码子网掩码是一种用于划分网络和主机的技术,它与IP地址一同使用,用于判断IP地址中哪部分是网络地址,哪部分是主机地址。
子网掩码由32位二进制数组成,通常以点分十进制形式表示。
子网掩码中以1表示网络位,以0表示主机位。
2. 子网划分子网划分指将一个网络划分成若干个子网,以满足不同部门或不同区域对网络资源的需求。
划分子网的目的是减少广播域的大小,提高网络的安全性和性能。
子网划分需要根据网络规模、设备数量、流量需求等因素进行灵活设置。
3. VLSM(可变长子网掩码)VLSM是一种在子网划分中更加细致和灵活的方法。
计算机网络中的IP地址与子网划分
计算机网络中的IP地址与子网划分计算机网络中的IP地址与子网划分是网络通信中非常重要的概念。
IP地址是指互联网协议地址,用于唯一标识网络上的设备。
子网划分则是将一个大的IP地址空间划分成多个更小的子网,以便更好地管理和组织网络。
一、IP地址的基本概念IP地址是一个32位的二进制数,通常用点分十进制表示。
例如,192.168.0.1表示一个IP地址。
IP地址分为网络部分和主机部分,网络部分用于标识网络,主机部分用于标识具体的主机设备。
二、IP地址分类为了更好地管理IP地址,IPv4地址被分为不同的分类。
主要有以下几个分类:1. A类地址:以0开头,网络部分占8位,主机部分占24位,可分配的A类网络有126个,每个网络最多可分配16777214个主机。
2. B类地址:以10开头,网络部分占16位,主机部分占16位,可分配的B类网络有16382个,每个网络最多可分配65534个主机。
3. C类地址:以110开头,网络部分占24位,主机部分占8位,可分配的C类网络有2097150个,每个网络最多可分配254个主机。
4. D类地址:以1110开头,用于多播通信,不可分配给单个设备。
5. E类地址:以1111开头,保留未使用。
三、子网划分子网划分是为了更好地管理IP地址,实现更有效的网络资源利用和地址分配。
子网划分通过将主机位中的一部分划分为子网位,来划分出多个子网。
子网划分通常在网络的中间路由器处进行,通过在路由器上进行配置,将网络划分为多个子网。
每个子网都有自己的子网掩码,用于标识网络和主机位的划分情况。
子网划分可以更好地控制网络流量,提高网络的安全性和可管理性。
同时,子网划分还可以减少广播域,提高网络性能。
四、子网掩码子网掩码用于将IP地址划分为网络部分和主机部分。
子网掩码通常用与操作与IP地址进行计算。
子网掩码是一个32位的二进制数,与IP地址进行逻辑与操作后,可以得到网络部分。
例如,子网掩码255.255.255.0与IP地址192.168.0.1进行与操作,得到的网络部分为192.168.0.0。
IP地址的合法性及子网判断
实验6 IP地址的合法性及子网判断实验目的:1)掌握IP地址、子网划分等基本概念2)尝试编程判断一个IP地址是否合法,并判断该地址是否属于一个给定的子网。
实验条件:硬件:PC机一台,网络适配器软件:Windows 2000 Server操作系统实验内容及实验指导:1.实现的程序中,核心程序形如:Ip_test(subnet/mask, ip_addr)其中ip_test为程序名,subnet/mask为子网号/子网掩码连续1的个数,ip_addr为要测试的IP地址。
例如:要测试的IP地址为202.113.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0(连续1的个数为24),则调用程序ip_test(202.113.16.0/24, 202.113.16.10)进行判断此IP地址是否属于此子网。
2.程序中要对subnet/mask和ip_addr的合法性进行判断,如202..113.16.0,202..113.16,202.113.16.355等都是不合法的。
实验要求:1.可用任何编程语言。
2.书写实验报告(电子形式),给出程序主要运行界面,关键代码。
3.附上可执行文件及整个工程源文件。
整个工程源文件:#include <iostream.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <math.h>#include <ctype.h>//类结构class ipTest{char ip[15]; //定义ip数组,存放ip地址char subnetPlusMask[18]; //定义subnetPlusMask数组,存放子网号和子网掩码中1的个数char subnet[18]; //定义subnet数组,存放子网号char TempIp[15]; //定义TempIp数组,存放临时的ip地址char TempSub[18]; //定义TempSub数组,存放临时的子网号int mask; //定义整型mask,存放子网掩码中1的个数bool maskIsValid;//定义布尔值maskIsValid,存放判断mask真值的变量public:ipTest(char *,char *); //定义ipTest函数~ipTest(){};bool NoIllegalChar(char *); //非法字符的判断bool ipIsValid(char *); //判断IP地址是否合法bool subnetIsValid(char *); //判断子网号是否合法void belong(); //判断IP是否为子网成员print();//定义输出函数print};//主函数void main(int argc,char *argv[]){if(argc != 3){ //判断参数格式是否正确cout <<"命令格式错误!" <<endl <<"正确的命令格式应该是:程序名子网号/掩码ip地址" <<endl;return;}else{if(strlen(argv[1]) > 18){ //先判断最简单的错误,子网号及子网掩码长度和是否超出cout <<"子网号以及子网掩码长度过长!";return;}if(strlen(argv[2]) > 15){ //ip地址长度是否超出cout <<"ip 地址长度过长!";return;}ipTest test(argv[1],argv[2]); //实例化ipTest类test.print(); //完成相应判别并输出结果}}//构造函数ipTest::ipTest(char* subnetPlusMask,char *ip){maskIsValid = true;char temp[2];//把'/'前的字符复制到subnet字符数组中int smLen = strlen(subnetPlusMask); // 定义smLen为subnetPlusMask的长度for(int i = 0;i < smLen && subnetPlusMask[i] != '/';i++){this->subnet[i] = subnetPlusMask[i]; //对subnet数组赋值,值为subnetPlusMask中的数值this->TempSub[i] = subnetPlusMask[i]; //对TempSub数组赋值,值为subnetPlusMask中的数值}subnet[i] = '\0';//给数组加上结束符TempSub[i] = '\0'; //给数组加上结束符if(i >= smLen-3){ //初始化mask和maskIsValidif(i == smLen-2){temp[0] = subnetPlusMask[i+1];if(!isdigit(temp[0])) //判断temp中的值是否为字符maskIsValid = false;}else if(i == smLen-3){temp[0] = subnetPlusMask[i+1];temp[1] = subnetPlusMask[1+2];if(!(isdigit(temp[0])&&isdigit(temp[1]))) //判断temp中的值是否为字符maskIsValid = false;}mask = atoi(temp); //将temp中的字符数值化if(mask <0 || mask >32) //判断mask值是否超出范围maskIsValid = false;}else //用十进制数表示的掩码中1的个数只能是一位数或者两位数maskIsValid = false;strcpy(this->subnetPlusMask,subnetPlusMask); //给subnetPlusMask赋值strcpy(this->ip,ip); //给IP赋值strcpy(this->TempIp,ip);}//调用判别函数,并输出结果ipTest::print(){bool subIsV = subnetIsValid(TempSub);bool ipIsV = ipIsValid(TempIp);if(!subIsV) //subnet非法cout <<"子网号无效!" <<endl;elsecout <<"有效子网号为:" <<subnet <<endl;if(!maskIsValid) //mask非法cout <<"掩码无效!" <<endl;elsecout <<"有效掩码为:" <<mask <<endl;if(!ipIsV) //ip非法cout <<"ip 地址无效!" <<endl;elsecout <<"有效ip地址为:" <<ip <<endl;//判断ip是否belong subnetif(subIsV && ipIsV && maskIsValid)belong();}//子网数,判断输入是否含有非数字字符bool ipTest::NoIllegalChar(char *ch){unsigned int i,k=0;for(i=0;i <strlen(ch);i++){if(isdigit(*(ch+i))==0){ //判断每一位是否为数字字符return false;}}return true; //若不含有非法数字字符则返回true }//判别IP地址是否合法bool ipTest::ipIsValid(char * ip){char ch[]="."; //分隔符char *token,*dot[4];int iplen = 0;token = strtok(ip,ch); //以"."标志将IP字符串按节分开while(token!=NULL){ //循环进行,直到结束dot[iplen]=token; //将分开的每段赋值给dotiplen++;token = strtok(NULL,ch);}if(iplen != 4) //段数不对return false;for(int i = 0; i < 4; i++){if(!NoIllegalChar(dot[i])||atoi(dot[i])>255) //有非法字符或某段值非法return false;}return true;}//判断子网号是否合法bool ipTest::subnetIsValid(char* subnet){if(!ipIsValid(subnet)) //调用判别IP地址合法性的函数return false;return true;}//判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题void ipTest::belong(){int subLen = strlen(subnet);int ipLen = strlen(ip);unsigned int iIPA,iSubA,iMask;unsigned char subA[4],ipA[4];char temp[3];int i,j,t = 0;for (i = 0, j= 0;i <subLen;i++){ //不用再检错if(subnet[i] !='.')temp[j++]=subnet[i]; //temp数组中放'.'间的串else{subA[3-t] = atoi(temp); //subA数组中放'.'间的数据j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}subA[0]=atoi(temp);temp[0]=temp[1]=temp[2]='\0';iSubA=*(unsigned int *)subA; //iSubA中放subnet中'.'除外的串对应的数for(i=0,j=0,t=0;i <ipLen;i++){ //不用再检错if(ip[i]!='.')temp[j++]=ip[i];else{ipA[3-t]=atoi(temp);j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}ipA[0]=atoi(temp);iIPA=*(unsigned int*)ipA; //iIPA中放IP中'.'除外的串对应的数iMask = 0xffffffff;iMask <<=(32-mask);//获得掩码if((iSubA | iMask)!= iMask){ //说明sub与mask不匹配cout <<"错误,子网号与掩码不匹配!" <<endl;return;}if((iSubA^iMask)==0){ //说明子网号全1cout <<"错误,子网号全1!" <<endl;return;}if((iSubA&iMask)==0){ //说明子网号全0cout <<"错误,子网号全0!" <<endl;return;}if((iSubA)==(iIPA&iMask)){ //IP和掩码与,结果和子网号比较if((iIPA|iMask)==iMask){ //说明主机号全0cout <<"错误,主机号全0!" <<endl;return;}if((iIPA|iMask)==0xffffffff){ //说明主机号全1cout <<"错误,主机号全1!" <<endl;return;}//ip属于subnetcout <<" " <<ip <<" 属于" <<subnetPlusMask <<endl;return;}//ip不属于subnetelsecout <<" " <<ip <<" 不属于" <<subnetPlusMask <<endl;}程序主要运行界面:1)测试格式是否为三段格式如图:分析:程序要求是“程序名子网号/掩码 ip地址”格式而这里只有两端造成参数不匹配,出错!分析:虽然格式是三段、子网号无效且掩码是零蛋其IP地址还是合法的!2)简单判断子网号及掩码长度是否超出范围如图:分析:因为程序里设置的子网号和掩码字符串长度最多是18个字符而这里有20个字符大于18,所以出错!分析:程序中的IP地址字符串最长只有15个而程序中有17个字符大于15个,所以出错!3)测试Ip地址是否合法如图:分析:IP地址不符合格式要求!分析:子网号出现了“$”字符,其为非法字符,所以出错!分析:子网号的段数不是四,所以出错!分析:IP地址段数不是四,所以出错!4)测试子网号与掩码是否匹配如图:分析:子网号转换为二进制:00000000 11000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的!分析:子网号转换为二进制:00000000 10000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的!5)测试子网号是否全零活全一如图:。
IP合法性子网判断
计算机网络课程设计报告摘要设计要求编写程序,实现判断输出命令行中的ip 是否合法,掩码是否合法以及ip_addr 是否是属于子网subnet 。
采用eclipse的开发工具,使用java 编程实现,在判断ip 地址合法性时,定义了一个静态的方法,在方法里面,使用正则表达式来判断ip 地址的合法性,判断子网掩码也采用这样的方法判断,在判断ip 地址是否属于某一个子网时。
将ip 地址一位位与子网掩码做与运算,看结果是否和子网相等来判断ip地址是否属于某一个网络。
Ip地址采用点分10进制的方法来表示,最大的数为255,最小的数为0,其中数字不能以0开头。
子网掩码则只能有32种情况,其中网络号全1,主机号全0,由1和0的个数来确定子网掩码是否正确。
在这个设计中考虑到了以上的种种情况,根据用户输入的ip地址,掩码和子网,程序可以判断输入的ip地址,掩码和子网是否正确以及ip_addr是否是属于子网subnet。
b5E2RGbCAP一课程设计目的和意义1.1设计目的掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。
并判断该地址是否属于一个给定的子网。
p1EanqFDPw1.2设计的意义1、有利于基础知识的理解通过《计算机网络与Internet教程》必修部分的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。
但是,学生对于程序、病毒的内涵,程序与文档、数据的区别,计算机运行的机理等知识内容的理解比较肤浅。
学生如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。
DXDiTa9E3d2、有利于逻辑思维的锻炼程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
IP地址的合法使用与规范
IP地址的合法使用与规范随着互联网的普及和发展,IP地址作为网络通信的基础,其合法使用和规范成为了保障网络安全和提升网络效率的重要问题。
本文将探讨IP地址的合法使用与规范,并介绍相关的措施和建议。
一、IP地址的概念和重要性IP地址(Internet Protocol Address)是互联网协议中用于区分互联网上不同设备的一串数字标识。
它相当于互联网上每个设备的“住址”,实现了设备之间的通信。
合法使用和规范IP地址对于正确识别和连接互联网设备至关重要。
二、合法使用IP地址的原则合法使用IP地址需要遵循以下原则:1. 依法合规:IP地址的使用需符合国家和地区相关法律法规的要求,包括但不限于网络安全法、信息安全等相关法规。
2. 分配规范:IP地址的分配应遵循分配机构或互联网服务提供商(ISP)的规范,确保地址分配合理、公平、有序。
3. 避免滥用:IP地址不应用于违法、违规或恶意活动,且不得用于干扰正常网络通信、滥发垃圾邮件等不良行为。
4. 高效利用:在合法范围内,应充分利用IP地址资源,尽量避免浪费和不必要的使用,以提高地址资源的利用率。
三、IP地址的规范使用方法为了确保IP地址的合法使用和规范,以下是一些常用的规范使用方法:1. IP地址的申请和获取:根据实际需求,向相应的IP地址管理机构或ISP申请IP地址,如IANA(Internet Assigned Numbers Authority)等。
在申请过程中,需提供合法的身份信息和使用计划,以确保地址分配合理。
2. IP地址的分类和划分:根据互联网的使用需求,IP地址通常分为IPv4和IPv6两种。
其中IPv4是较早使用的协议,采用32位地址;而IPv6是新一代的互联网协议,采用128位地址。
根据实际需求选择相应的IP版本进行使用。
3. IP地址的保护和安全:保护IP地址免受非法侵害和滥用,需要采取相应的安全措施,如网络防火墙、入侵检测系统等,以确保IP地址和互联网设备的安全性。
子网掩码和ip地址的关系及子网掩码的简便算法
子网掩码和ip地址的关系子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。
就这么简单。
请看以下示例:运算演示之一:aaIP 地址192.168.0.1子网掩码255.255.255.0转化为二进制进行运算:IP 地址11000000.10101000.00000000.00000001子网掩码11111111.11111111.11111111.00000000AND运算11000000.10101000.00000000.00000000转化为十进制后为:192.168.0.0运算演示之二:IP 地址192.168.0.254子网掩码255.255.255.0转化为二进制进行运算:IP 地址11000000.10101000.00000000.11111110子网掩码11111111.11111111.11111111.00000000AND运算11000000.10101000.00000000.00000000转化为十进制后为:192.168.0.0运算演示之三:IP 地址192.168.0.4子网掩码255.255.255.0转化为二进制进行运算:IP 地址11000000.10101000.00000000.00000100子网掩码11111111.11111111.11111111.00000000AND运算11000000.10101000.00000000.00000000转化为十进制后为:192.168.0.0通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。
均为192.168.0.0所以计算机就会把这三台计算机视为是同一子网络,然后进行通讯的。
我现在单位使用的代理服务器,内部网络就是这样规划的。
计算机网络课设---判断一个IP地址是否合法
目录1 课程设计目的12 课程设计要求错误!未定义书签。
3相关知识14课程设计分析34.1程序大致设计过程34.2实验流程图错误!未定义书签。
5程序代码错误!未定义书签。
6运行结果与分析错误!未定义书签。
1 7参考文献错误!未定义书签。
21课程设计目的本设计要求编写程序,判断一个IP地址是否合法,并判断该地址是否属于一个给定子网。
从而考察读者是否对IP地址概念及其子网划分有非常清楚的认识。
2 课程设计的要求根据介绍的IP地址与子网划分的知识,编写程序判断IP地址的合法性及所属子网。
(1)以命令行形式运行IPAddress subnet_address/mask ip_address其中,IPAddress为程序名,subnet_address为子网地址,mask为掩码,ip_address为IP地址。
(2)输入容:IP地址、子网地址与掩码是否合法,以及IP地址是否属于子网。
3 相关知识1.IP地址相关概念所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。
按照TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。
例如一个采用二进制形式的IP地址是“0001”,这么长的地址,人们处理起来也太费劲了。
为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。
于是,上面的IP地址可以表示为“10.0.0.1”。
IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。
大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址。
TCP/IP协议的网络层使用的地址标识符叫做IP地址,IPv4中IP地址是一个32位的二进制地址。
IP地址的分类和判断,标准子网掩码
IP地址的分类和判断,标准子网掩码(2010-08-20 16:52:08)A类1.0.0.0 到126.0.0.00.0.0.0 和127.0.0.0保留B128.1.0.0到191.254.0.0128.0.0.0和191.255.0.0保留C192.0.1.0 到223.255.254.0192.0.0.0和223.255.255.0保留D224.0.0.0到239.255.255.255用于多点广播E240.0.0.0到255.255.255.254保留255.255.255.255用标准子网掩码A类网络(1~126)缺省子网掩码:255·0·0·0255·0·0·0 换算成二进制为11111111·00000000·00000000·00000000可以清楚地看出前8位是网络地址,后24位是主机地址,也就是说,如果用的是标准子网掩码,看第一段地址即可看出是不是同一网络的。
如21.0.0.0.1和21.240.230.1,第一段为21属于A类,如果用的是默认的子网掩码,那这两个地址就是一个网段的。
B类网络(128~191)缺省子网掩码:255·255·0·0C类网络(192~223)缺省子网掩码:255·255·255·0B类、C类分析同上。
基本的IP地址是分成8位一个单元(称为8 位位组)的32位二进制数。
二进制与十进制大家都懂吧。
为了方便人们的使用,对机器友好的二进制地址转变为人们更熟悉的十进制地址。
IP地址中的每一个8位位组用0~255之间的一个十进制数表示。
这些数之间用点(.)隔开,这是所谓的点-十进制格式。
因此,最小的IPv4地址值为0.0.0.0,最大的地址值为255.255.255.255,然而这两个值是保留的,没有分配给私人的端系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机网络课程设计报告题目:IP地址的合法性及子网判断学生姓名:学号:专业班级:同组姓名:指导教师:设计时间:指导老师意见:目录一、课程设计目的和意义 (1)1.1设计目的 (1)1.2设计的意义 (1)二、课程设计的内容和要求 (2)三、课程设计的相关技术 (3)3.1 课程设计的运行环境 (3)3.2 IP地址相关概念和知识的回顾。
(3)3.3 特殊的IP地址形式 (4)3.4 子网的划分 (5)四、课程设计过程 (6)4.1程序大致设计过程: (6)4.2实验流程图 (6)五、部分程序运行结果 (9)六、课程设计小结 (11)七、参考文献 (15)附录一:源代码 (15)一、课程设计目的和意义1.1设计目的通过计算机网络课程设计,让我们学会处理几种常用计算机网络问题的基本处理方法,掌握计算机网络的基本原理,使我们在面对不断变化的技术时,具有跟踪,学习的基础与能力。
掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。
并判断该地址是否属于一个给定的子网。
具体而言,关于”IP地址的合法性及子网判断”课程设计题目的目的是:用C/C++语言编写程序,以判断一个IP地址是否合法,并判断该地址是否属于一个给定的子网.从而能够考察我们对IP地址的概念,各类IP地址的区分以及子网划分的理解和掌握程度.1.2设计的意义1、有利于基础知识的理解通过计算机网络的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。
让学生接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。
2、有利于逻辑思维的锻炼程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
3、有利于与其他学科的整合在程序设计中,我们可以解决其它学科有关问题,也利用其它课程的有关知识来解决信息技术中比较抽象很难理解的知识。
在信息技术课中整合其它学科的知识,发挥信息技术的优势。
4、有利于治学态度的培养。
程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。
因此,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。
有助于严谨治学、一丝不苟的科学精神的培养,以及不怕失败、百折不挠品格的锻炼。
二、课程设计的内容和要求在掌握IP地址的表示方法以及子网划分方法的基础上,并以计算机网络中关于IP地址的相关理论知识为基石,运用C/C++语言按如下要求完成程序。
(1)命令行格式:ip_test subnet/mask ip_addr其中,ip_test为程序名;subnet为子网号;mask是一个整型数值,代表子网掩码连续1的个数;ip_addr表示要测试的IP地址。
比如说,要测试的IP地址为202.113.16.10,子网号码是202.113.16.0,子网掩码是255.255.255.0,则命令行为ip_test202.113.16.0/24 202.113.16.10。
(因为255.255.255.0是连续的24个1,所以用24表示)(2)判断subnet和ip_addr的合法性。
在判断IP地址合法性时要自行编写代码,不要使用任何inet 函数。
判断时要考虑各种情况,全面分析问题。
例如以下IP地址均不合法:123..2.1123.23$.2.1123.2345.2.1123.23.45.1(3)判断掩码的合法性。
譬如说mask的值为负数或者大与32,这时输入的掩码就不合法。
(3)在IP地址合法,掩码合法以及子网号也合法的前提下,判断ip_addr 是否属于subnet。
(4)输出命令行中的ip是否合法,掩码是否合法,子网号码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。
(5)还可以判断子网号,主机号全0,全1问题。
三、课程设计的相关技术3.1 课程设计的运行环境C++是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格.本程序在Windows环境下利用C++语言编写,Microsoft Visual Studio 6.0进行编译。
Visual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和office插件。
3.2 IP地址相关概念和知识的回顾。
大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址。
TCP/IP协议的网络层使用的地址标识符叫做IP地址,IPv4中IP地址是一个32位的二进制地址。
网络中的每一台主机或者路由器至少有一个IP地址,在Internet中不允许有两个设备具有相同的IP地址。
如果一台主机或者路由器连接到两个或多个物理网络,那么它可以拥有两个或多个IP地址。
IP地址采用分层结构,由网络号与主机号两部分组成(如下图所示):IP地址长度为32位,用点分十进制表示,格式为ⅹ.ⅹ.ⅹ.ⅹ,每个ⅹ为8位,每个ⅹ的值为0—255(例如202.113.29.119)。
根据不同的取值范围,IP 地址可以分为五类,IP地址中的前5位用于标识IP地址的类别,具体的分类规则如下:·A类地址的第一位为0。
·B类地址的前两位为10 .·C类地址的前三位为110。
·D类地址的前四位为1110。
·E类地址的前五位为11110。
五类IP地址的结构如下所示;A类IP地址结构适合用于有大量主机的大型网络。
由于主机号长度为24位,因此每个A类网络的主机IP数理论上为224=16777216。
B类IP地址适合用于一些国际性大公司与政府机构等中等大小的组织。
由于网络IP长度为14位,因此允许有214=16384个不同的B类网络,实际允许连接16382个网络。
C类IP地址适合用于一些小公司与普通的研究机构。
3.3 特殊的IP地址形式(1)直接广播地址A类,B类,C类IP地址中主机号全1的地址称为直接广播地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。
直接广播地址只能作为分组中的目的地址。
物理网络采用的是点—点传输方式,分组广播需要通过软件来实现。
(2)受限广播地址网络号与主机号的32位全位1的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。
本网的所有主机将接受该分组,路由器则阻挡该分组通过。
(3)“这个网络上的这台主机”地址(4)“这个网络上的特定主机”地址主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。
这样的分组被相知在本网络内部。
(5)回送地址回送地址用于网络软件测试和本地进程见通信。
TCP/IP协议规定网络号为127的分组不能出现在任何网络上;主机和路由器不能为该地址广播任何寻址信息。
3.4 子网的划分人们在早期设计与建设ARPAnet是,没有预料到网络的发展速度如此之快,应用范围如此之广。
当时个人计算机与局域网尚未出现。
所以,研究者在设计Internet地址的编址方案时,主要是针对大型互联的网络结构。
设计IP地址的最初目的是希望每个IP得志都能唯一地、确定地识别一个网络与一台主机,但是这种方法同时也存在着两个主要的问题,即IP地址的有效利用率和路由器的工作效率。
为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。
子网就是一个大的网络划分成几个较小的网络,而每一个小网络都是其自己的地址。
超网就是将一个组织所属的几个C类网络合并成为一个更大地址范围的逻辑网络。
划分子网实际上就是在IP地址系统中增加一个层次。
三级IP地址的表示方法为netID-subnet ID-host ID。
第一级网络号定义了网点的位置;第二级子网号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。
三级层次的IP地址,一个IP分组的路由器的过程分为三步:第一步将分组转发给网点,第二步转发给物理子网,第三步转发给确切的主机。
当三级层次的IP地址提出后,一个很显示的问题是:如何从一个IP地址提取出子网号。
因此,提出了子网掩码(subnet mask)的概念。
子网掩码有时也叫做子网掩码。
子网掩码表示方法:网络号与子网号置1,主机号置0。
如判断某一IP地址是否属于某一子网呢?只需将二进制IP地址与子网掩码按位进行“与”运算。
若“与”运算所得值与给定子网地址一致,则说明该IP地址属于给定的子网。
四、课程设计过程4.1程序大致设计过程:1.分别判断子网号、掩码和IP地址的基本格式是否合法。
2.如果三者的基本格式都合法,才调用判定“IP地址是否为子网成员”的函数。
该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1.4.2实验流程图如下:1.主流程图图3-1 主流程图2.验证ip地址合法性流程图图3-2 验证ip地址合法性流程图3验证子网掩码合法性流程图图3-3 验证子网掩码合法性流程图4.验证ip是否属于某个子网流程图:开始输入ip地址,子网掩码和子网地址拆分ip地址与子网掩码拆分ip地址和子网掩码进行与运算N结果与子网比较Y结束图3-4 验证ip是否属于某个子网流程图五、部分程序运行结果程序主要运行界面:1)测试格式是否为三段格式如图:分析:程序要求是“程序名子网号/掩码ip地址”格式而这里只有两端造成参数不匹配,出错!分析:虽然格式是三段、子网号无效且掩码是零,其IP地址还是合法的!2)简单判断子网号及掩码长度是否超出范围如图:分析:因为程序里设置的子网号和掩码字符串长度最多是18个字符而这里有20个字符大于18,所以出错!分析:程序中的IP地址字符串最长只有15个而程序中有17个字符大于15个,所以出错!3)测试Ip地址是否合法如图:分析:IP地址不符合格式要求!分析:IP地址段数不是四,所以出错!4)测试子网号与掩码是否匹配如图:分析:子网号转换为二进制:00000001 11000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000 从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的!分析:子网号转换为二进制:00000001 10000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000 从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的!5)测试子网号是否全零或全一如图:六、课程设计小结这次课程设计,感触颇深!课程设计是学生考试前最后一个重要学习环节,是学习深化与升华的重要过程。