1、计算机网络 课程设计报告题 目: IP 地址的合法性及子网判断 学生姓名: 学 号: 专业班级: 同组姓名: 指导教师: 设计时间: 指导老师意见:评定成绩: 签名: 日期: 年 月 日 IP 地址的合法性及子网判断1目录一、课程设计的目的和意义2二、课程设计的内容和要求2三、课程设计的相关技术3四、课程设计过程6五、课程设计小结6IP 地址的合法性及子网判断2一、 课程设计的目的和意义通过计算机网络课程设计,让我们学会处理几种常用计算机网络问题的基本处理方法,掌握计算机网络的基本原理,使我们在面对不断变化的技术时,具有跟踪,学习的基础与能力。具体而言,关于”IP 地址的合法性及子网判断”课程
2、设计题目的目的是:用C/C+语言编写程序,以判断一个 IP 地址是否合法,并判断该地址是否属于一个给定的子网.从而能够考察我们对 IP 地址的概念,各类 IP 地址的区分以及子网划分的理解和掌握程度.课程设计为我们提供了一个既动手又动脑,独立参加实践的好机会,要求我们将理论知识和实际情况有机地结合起来,锻炼我们的分析问题,解决实际问题的能力,提高我们适应实际,实践的能力;它也要求我们综合运用所学的计算机网络知识来解决有一定难度的问题,从而提高了我们对知识的综合运用能力,加深对知识间的融会贯通和联系的理解。二、 课程设计的内容和要求在掌握 IP 地址的表示方法以及子网划分方法的基础上,并以计算机
3、网络中关于 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,所以用
4、 24 表示)(2) 判断 subnet 和 ip_addr 的合法性。在判断 IP 地址合法性时要自行编写代码,不要使用任何 inet 函数。判断时要考虑各种情况,全面分析问题。例如以下 IP 地址均不合法:123.2.1123.23$.2.1123.2345.2.1IP 地址的合法性及子网判断3123.23.45.1(3)判断掩码的合法性。譬如说 mask 的值为负数或者大与 32,这时输入的掩码就不合法。(3) 在 IP 地址合法,掩码合法以及子网号也合法的前提下,判断ip_addr 是否属于 subnet。(4) 输出命令行中的 ip 是否合法,掩码是否合法,子网号码是否合法(可适当给
5、出不合法的原因)以及 ip_addr 是否属于子网 subnet。(5) 还可以判断子网号,主机号全 0,全 1 问题。三、 课程设计的相关技术1.IP 地址相关概念和知识的回顾。大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址。TCP/IP 协议的网络层使用的地址标识符叫做 IP 地址,IPv4 中 IP 地址是一个 32 位的二进制地址。网络中的每一台主机或者路由器至少有一个 IP 地址,在 Internet 中不允许有两个设备具有相同的 IP 地址。如果一台主机或者路由器连接到两个或多个物理网络,那么它可以拥有两个或多个 IP 地
6、址。IP 地址采用分层结构,由网络号与主机号两部分组成(如下图所示): 网络号 主机号IP 地址长度为 32 位,用点分十进制表示,格式为.,每个为8 位,每个的值为 0255(例如 202.113.29.119)。根据不同的取值范围,IP 地址可以分为五类,IP 地址中的前 5 位用于标识 IP 地址的类别,具体的分类规则如下:A 类地址的第一位为 0。B 类地址的前两位为 10 .C 类地址的前三位为 110。D 类地址的前四位为 1110。E 类地址的前五位为 11110。五类 IP 地址的结构如下所示;IP 地址的合法性及子网判断40 网络号( 7 位) 主机号(24 位)10 网络号
7、(14 位) 主机号(16 位)110 网络号(21 位) 主机号(8 位)1110 组播地址(28 位)11110 保留用于课程设计和将来使用A 类 IP 地址结构适合用于有大量主机的大型网络。由于主机号长度为 24位,因此每个 A 类网络的主机 IP 数理论上为 224=16777216。B 类 IP 地址适合用于一些国际性大公司与政府机构等中等大小的组织。由于网络 IP 长度为 14 位,因此允许有 214=16384 个不同的 B 类网络,实际允许连接 16382 个网络。C 类 IP 地址适合用于一些小公司与普通的研究机构。2. 特殊的 IP 地址形式(1) 直接广播地址A 类,B
8、类,C 类 IP 地址中主机号全 1 的地址称为直接广播地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。直接广播地址只能作为分组中的目的地址。物理网络采用的是点点传输方式,分组广播需要通过软件来实现。网络号 主机号全 1(2)受限广播地址网络号与主机号的 32 位全位 1 的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。本网的所有主机将接受该分组,路由器则阻挡该分组通过。全 1(3) “这个网络上的这台主机”地址全 0(4)“这个网络上的特定主机”地址主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。这样的分组被相知在本网
9、络内部。网络号全 0 主机号IP 地址的合法性及子网判断5(5)回送地址回送地址用于网络软件测试和本地进程见通信。TCP/IP 协议规定网络号为 127 的分组不能出现在任何网络上;主机和路由器不能为该地址广播任何寻址信息。127 任意值(通常取 1)3子网的划分人们在早期设计与建设 ARPAnet 是,没有预料到网络的发展速度如此之快,应用范围如此之广。当时个人计算机与局域网尚未出现。所以,研究者在设计Internet 地址的编址方案时,主要是针对大型互联的网络结构。设计 IP 地址的最初目的是希望每个 IP 得志都能唯一地、确定地识别一个网络与一台主机,但是这种方法同时也存在着两个主要的问
10、题,即 IP 地址的有效利用率和路由器的工作效率。为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。子网就是一个大的网络划分成几个较小的网络,而每一个小网络都是其自己的地址。超网就是将一个组织所属的几个 C 类网络合并成为一个更大地址范围的逻辑网络。划分子网实际上就是在 IP 地址系统中增加一个层次。三级 IP 地址的表示方法为 netID-subnet ID-host ID。第一级网络号定义了网点的位置;第二级子网号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。三级层次的 IP 地址,一个 IP 分组的路由器的过程分为三步:第一步将分组转发给
11、网点,第二步转发给物理子网,第三步转发给确切的主机。当三级层次的 IP 地址提出后,一个很显示的问题是:如何从一个 IP 地址提取出子网号。因此,提出了子网掩码(subnet mask)的概念。子网掩码有时也叫做子网掩码。子网掩码表示方法:网络号与子网号置 1,主机号置 0。如判断某一 IP 地址是否属于某一子网呢?只需将二进制 IP 地址与子网掩码按位进行“与”运算。若“与”运算所得值与给定子网地址一致,则说明该IP 地址属于给定的子网。四课程设计过程1、课程设计流程图:IP 地址的合法性及子网判断6NY YY YY NY NY YY NY YY NY读取一个字符串是否都是数 字字符 ret
12、urn段数=4? 每段的值是否大于 255ipIsValid(subnet)是否为真Ipchar subnetPlusMask18;char subnet18;char TempIp15;l maskIsValid;int mask;char Tempsub18;ipTest(char *,char *);ipTest();bool NoIllegalChar(char *); /非法字符的判断bool ipIsValid(char *); /判断 IP 地址是否合法bool subnetIsValid(char *); /判断子网号是否合法void belong(); /判断 IP 是否为子
13、网成员print();IP 地址的合法性及子网判断8; /主函数void main(int argc,char * argv)if(argc!=3) /判断参数格式化是否正确cout18) /先判断最简单的错误,长度是否超出cout15)coutsubneti=subnetPlusMaski;this-Tempsubi=subnetPlusMaski;IP 地址的合法性及子网判断9subneti=0;Tempsubi=0;if(i 32)maskIsValid = false;elsemaskIsValid=false;strcpy( this-subnetPlusMask, subnetPlusMask);strcpy( this-ip, ip );strcpy( this-TempIp, ip );/调用判别函数,并输出结果ipTest:print()bool subIsV=subnetIsValid(Tempsub);bool ipIsV=ipIsValid(TempIp);if(!subIsV)cout“subnet is invalid ! “endl;