文档库

最新最全的文档下载
当前位置:文档库 > 计算机网络课程论文

计算机网络课程论文

武汉理工大学

计算机网络课程论文

题目子网划分工具的设计与实现作者

学院信息工程学院

专业电子信息工程

学号

指导

教师李方敏

二〇一六年四月十四日

武汉理工大学信息工程学院课程论文诚信声明本人声明:所呈交的课程论文,是本人在指导老师的指导下,独立开展工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本课程论文不含任何其他个人或集体已经发表或创作过的作品成果。对本文工作做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。

本科课程论文作者签名:

二○一六年四月十四日

课程论文成绩评定表

计算机网络课程论文

目录

1 选题背景 (1)

1.1 划分子网的背景 (1)

1.2 划分子网的基本思路 (2)

1.3 需求分析 (2)

1.4 子网掩码 (2)

2 方案论证 (4)

2.1 程序流程图 (4)

2.2 程序设计思想 (5)

3 设计原理及过程论述 (5)

3.1 输入网络地址的合法性 (5)

3.2 子网掩码是否合法 (5)

3.3 IP地址的类型判断 (6)

3.4 子网数、有效子网数、主机数和IP范围,广播地址的计算 (6)

4 调试和运行结果分析 (6)

5 心得体会 (6)

参考文献 (12)

附件1:Ipservlet.java (13)

附件2:IpUtil.java (14)

附件3:Result.java (18)

附件4:error,jsp代码 (20)

附件5:indux.jsp代码 (21)

附件6:result.jsp程序 (24)

1选题背景

子网划分工具的设计与实现

设计要求

(1)编程实现一个子网划分的简单工具。

(2)能够根据用户输入的网络地址和子网掩码,判断出用户输入的合法性及网络的类别(A、B、C地址)。

(3)能够计算出下列参数:子网数及有效子网、每个子网的主机数、每个子网IP范围及广播地址。

(4)应有相应的帮助提示及良好的结果输出组织,易于用户使用和查看结果。

课程设计报告内容

(1) 给出程序的流程图;

(2) 给出程序源码;

(3) 给出程序的部分运行测试结果。

1.1 划分子网的背景

随着网络的发展,局域网的普遍使用,我们不难发现在ARPANET的早期,IP地址的设计不够合理。第一是IP地址空间利用率有时很低。每一个A类地址网络可连接的主机数超过1000万台,而每一个B类地址网络可连接的主机数也超过6万台。然而有些网络对连接在网络上的计算机数目有限制,根本达不到这样的数值,地址空间利用率低。有的单位申请到了一个B类地址网络,但是所连主机数并不多,可又不愿申请一个足够使用的C类地址,因为考虑到今后可能的发展,造成了IP地址的浪费,还会使IP地址空间的资源过早的被用完。其次,给每个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。每一个路由器都应当能够从路由表查出应怎样到达其他网络的下一跳路由器。因此互联网中的网络数越多,路由器的路由表的项目数就越多。这不仅增加了路由器的成本,还降低了路由器和整个因特网的性能。第三,两级IP地址不够灵活。有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的IP地址之前,新增加的网络不能连接到因特网上工作。

为了解决上述问题,从1985年起在IP中又增加了一个“子网号字段”,使得两级IP 地址变为三级IP地址,它能很好地解决上叙问题,并且使用起来很灵活。这种做法即划分

子网(subnetting )[RFC 950],或称子网寻址或子网路由选择。

1.2 划分子网的基本思路

一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网,划分子网纯属一个单位内部的事情,本单位以外的网络看不见这个网络是由多少个子网组成,因这个单位对外仍然表现为一个网络。

划分子网的方法是从网络的主机号借用若干位作为子网号stbnet-id ,当然主机号也就相应减少了同样的位数。于是两级IP 地址在本单位内部就变为三级IP 地址:网络号、子网号和主机号。也可以用以下记法来表示:

IP 地址::={<网络号>,<子网号>,<主机号>}

子网号和主机号是由原先IP 地址的主机地址部分分割成两部分得到的;因此,划分子网的能力依赖于被子网化的IP 地址类型。IP 地址中主机地址的位数越多,能分得更多的子网和主机。实际上是把主机地址的一部分拿走用于识别子网。

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

计算机网络课程论文

图 1-1 IP

地址的各字段及子网掩码

1.3 需求分析

需要进行子网规划一般两种情况:

一、给定一个网络,整网络地址可知,需要将其划分为若干个小的子网。

二、全新网络,自由设计,需要自己指定整网络地址

。后者多了一个根据主机数目确定主网络地址的过程,其他一样。

1.4 子网掩码

子网掩码是一个网络或一个子网的重要属性。为了使路由器能够很方便地从数据报中

的目的IP地址中提取出所要找的子网的网络地址,路由器就要使用三级IP地址的子网掩码。把三级IP地址的子网掩码和收到的数据报的目的IP地址逐为相与即可得出所要找的子网的网络地址。

RFC 950定义了子网掩码的使用,子网掩码是一个32位的2进制数,其对应网络地址的所有位置都为1,对应于主机地址的所有位置都为0。

由此可知,A类网络的默认子网掩码是255.0.0.0,B类网络的默认子网掩码255.255.0.0,C类网络的默认子网掩码是255.255.255.0。将子网掩码和IP地址按位进行逻辑“与”运算,得到IP地址的网络地址,剩下的部分就是主机地址,从而区分出任意IP地址中的网络地址和主机地址。

计算机网络课程论文

图1-2 A类、B类和C类IP地址的默认子网掩码

子网掩码常用点分十进制表示,我们还可以用CIDR的网络前缀法表示掩码,即“/<网络地址位数>;”。如138.96.0.0/16表示B类网络138.96.0.0的子网掩码为255.255.0.0。

IP判断:子网掩码告知路由器,IP地址的前多少位是网络地址,后多少位(剩余位)是主机地址,使路由器正确判断任意IP地址是否是本网段的,从而正确地进行路由。在RFC 950成为因特网正式标准后,路由器在和相邻路由器交换路由信息时,必须把自己所在网络的子网掩码告诉相邻路由器。在路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。

在使用固定长度子网时,所划分的所有子网的子网掩码都是一致的。

2 方案论证

本次子网划分工具的实现我们采用java语言编程来实现,使用的软件为myeclipse。Java 语言提供类、接口和继承等原语,是一个纯的面向对象程序设计语言,使用方便。

2.1 程序流程图

计算机网络课程论文

图 2-1 程序流程图

2.2 程序设计思想

(1)提示用户输入网络地址、子网掩码并判断其合法性;

(2)若输入的网络地址或子网掩码有其中任意一个输入不合法就报错,需重新输入合法的IP地址和子网掩码;

(3)在二者都合法的情况下,判断其类别(A类、B类、C类);

(3)分别计算其子网数及有效子网、每个子网的主机数、每个子网IP范围及广播地址。

3 设计原理及过程论述

3.1 输入网络地址的合法性

网络地址即子网地址。网络地址和IP地址的关系如下:

IP地址= 子网地址+ 主机地址

根据TCP/IP协议,连接在Internet上的每个设备都必须有一个IP地址,它一个32位的二进制数,可以用十进制数字形式书写,每8个二进制位为一组,用一个十进制数来表示,即0-255,每组之间用.隔开,如:176.16.122.204。

本次子网划分工具的设计中关于网络地址的合法性判断也可简单的归结为与IP地址

的合法性判断类似。关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则表达式等。本次设计中判断网络地址是否合法的方法为判断输入是否为4段,每段是否为0-255的数字。

3.2 子网掩码是否合法

简单来讲,子网掩码就类似这样一串数字,前面一段是连续的1,类似“111111111“,后面一段是连续的0,类似“00000”,这样合法的样子是“11111111000000000”,总共是32位。

一个合法的子网掩码要满足如下条件:

1、是合法的IP地址;

2、二进制码要相邻,即形如111...11000...0的形式;

3、与IP地址对应,A、B、C、D各类IP地址都有对应的掩码范围。

判断子网掩码的方法:先验证是否为合法IP,然后将掩码转化成32无符号整型,取反

为000...00111...1,然后再加1为00...01000...0,此时为2^n,如果满足就为合法掩码。无论是哪一类掩码,第一个字段都是255。

或者查找字符串中的子串“01”,若查不到就合法,否则不合法。

3.3 IP地址的类型判断

Internet组织机构定义了5种IP地址,用于主机的有A、B、C三类地址。A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是0,B类地址的前两位总是10,C类地址的前三位总是110。

计算机网络课程论文

图3-1 三类地址中网络号字段和主机号字段

3.4 子网数、有效子网数、主机数和IP范围,广播地址的计算

子网数可以通过子网掩码中二进制1的位数(即网络段所在的二进制位数)减去此子网掩码所在标准类的网络段所占的二进制位数(例:A类8位,B类16位,C类24位)计算得到。

有效子网数=子网数-2

主机数即用子网掩码中主机位数的多少来计算,主机数=2^二进制主机位数-2

减2是因为主机不包含网络地址和广播地址。

将网络地址中的网络地址部分不变,主机地址变为全1,结果就是广播地址。

ip范围即含在本网段内的所有主机,网络地址+1为第一个主机地址,广播地址-1为最后一个主机地址,所以ip地址范围是:网络地址+1至广播地址。

4调试和运行结果分析

在myeclipse环境下,编写程序代码并进行调试,在调试过程中出现了各种小问题,但大部分都是拼写错误,如大小写,还有一些常见的语法错误。程序运行成功后即出现下面的输入界面:

计算机网络课程论文

在输入界面上输入网络地址和子网掩码,如下图:

计算机网络课程论文

图4-2 输入展示

由前面介绍的子网划分原理以及子网数、有效子网等的计算原理我们可以知道输入的

网络地址192.198.126.0为合法的C类地址,输入的子网掩码255.255.255.240转换为二进

制为:11111111 11111111 11111111 11110000,则其子网数为2^4=16,有效子网=14,主

机数为2^4-2=14, ip范围:192.198.126.1-192.198.126.14。广播地址为192.198.126.15,

运行结果图如下:

计算机网络课程论文

图4-3 运行结果图再输入一组数据:

计算机网络课程论文

图4-4 输入数据

计算机网络课程论文

图4-5 输出结果图

结论:再输入的网络地址和子网掩码合法的情况下,通过本程序我们可以快速的算出其子网数,有效子网数,主机数以及广播地址和ip范围。

为了验证程序功能的完整性,我们可以输入几组错误的网络地址或是子网掩码,观察程序的运行结果。首先我们输入下面一组数据,网络地址192.198.126.0,子网掩码

255.255.255.222,如下:

计算机网络课程论文

图4-6 数据输入

我们简单的将子网掩码化为二进制形式为:11111111 11111111 11111111 11011110显然存在01字符,即子网掩码不合法。程序运行结果恰好验证了这一结论,如下:

计算机网络课程论文

图4-7 运行结果

下面我们将进行网络地址输入不合法时的分析,例如我们输入127.198.126.0与255.0.0.0,如下图所示:

计算机网络课程论文

图4-8 数据输入显示

计算机网络课程论文

图4-8 输出结果图

由运行结果我们可以知道,908,8.8.0.0不属于a、b、c三类地址。同时当输入为空时也会报错,如下图:

计算机网络课程论文

图4-9 输入为空时运行结果图

小结与分析:

在package cn.whut 中class Ipservlet是最中枢的类,另外两个class Iputil 和class Result都是被它调用,三个页面,index.jsp是第一个页面,它把请求提交给那个servlet处理,处理的结果返回给result.jsp,遇到不属于abc三类的就返回给error.jsp。

在划分子网时,不仅要考虑目前需要,还应了解将来需要多少子网和主机。对子网掩码使用必须要更多的子网位,可以得到更多的子网,节约了IP地址资源,若将来需要更多子网时,不用再重新分配IP地址,但每个子网的主机数量有限;反之,子网掩码使用较少的子网位,每个子网的主机数量允许有更大的增长,但可用子网数量有限。一般来说,一个网络中的节点数太多,网络会因为广播通信而饱和,所以,网络中的主机数量的增长是有限的,也就是说,在条件允许的情况下,会将更多的主机位用于子网位。

综上所述,子网掩码的设置关系到子网的划分。子网掩码设置的不同,所得到的子网不同,每个子网能容纳的主机数目不同。若设置错误,可能导致数据传输错误。

5 心得体会

在将近两周的时间里,我完成了本次计算机网络关于子网划分工具的设计与实现。从一开始的确定选题、查阅资料、学习使用myeclipse软件,到编辑各个类的程序并进行调试,每一个细节的成功都会给我带来一番欣喜,激励着我进行下一步工作。通过本次做《子网

划分工具的设计与实现》,我熟悉了java的基本数据类型定义以及基本的语法结构及其编程的流程,有时候看似简单的代数运算用程序表示时也需费些心思。在做本次设计前首先我们要掌握IP地址的组成原理,熟悉子网划分的方法以及子网掩码的使用,通过给出网络地址和子网掩码判断其类型(A、B、C)并计算其相应的子网数、主机数和IP范围等。

这次子网划分的设计与实现运用了很多以前课堂中学习到的理论知识,同时也是对我编程能力的一个检验。“实践出真知”。通过程序输入代码窗口,运行得出结果,然后再加上书本上的讲解,很容易就能理解程序功能,相反,如果我们只是在那想着这个程序或者这个函数有什么功能而不动手实践可能做这个设计实现就会比较吃力。Java在我们专业中的用处是很大的,以后我还得深入学习,并在以后的专业学习中去应用它来解决实际问题,从而真正做到学以致用。

对于我们电子信息工程专业而言,计算机网络是一门很重要的学科,它要求在一定的理解和计算的基础上掌握其内容,领悟其要旨。对于我个人来说,这是一次很好的学习和实践的机会。大作业,让我们学会了思考问题,不单单是依靠课本知识,还需要联系实际,理论需要结合实践才能发挥最大的作用。我们知道单独的理论学习是比较枯燥的,这种自己动手完成的大作业模式不仅加深了我们的认识,而且增强了我们的动手能力,整个的过程中也非常的有趣,使我对计算机网络这门课的兴趣大大提高。

我们在完成大作业的过程中,发现问题,并找出问题的原因,还需要自己动手将问题解决,这极大的调动了我们的积极性,扩展了我们的思维,对待出现的问题,我们学会了不逃避,而是努力将其解决,这对我们今后的学习生活有着重大影响。

本次大作业是一人一题,培养了我们独立思考的习惯,让我们养成了学会解决问题的思维。但这并不影响我和其他同学间的相互交流,从软件安装到设计程序实现题设要求,离不开身边同学的相互帮助。有时候,我们不得不承认多一个人多一份力量。在大家相互帮助的过程中,我们可以发现别人身上的闪光点,向身边的同学学习。我相信,一个真正优秀的人绝对不只是成绩生的优异。总之,我会继续努力,让优秀成为一种习惯。

参考文献

[1].谢希仁等. 计算机网络(第六版)[M].北京:人民邮电工业出版社,2015.

[2]. 陈国海.我国高校"学生评教"研究综述[J].高等教育研究学报,2001.

[3]. Metsker S J. Java设计模式[M].第2版. 电子工业出版社, 2012年09月.

[4].陈刚.Eclipse从入门到精通北京[M].清华大学出版社, 2005年4月.

附件1:Ipservlet.java

package cn.whut.util;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/** * Servlet implementation class IpServlet

*/

@WebServlet("/IpServlet")

public class IpServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String ipStr = request.getParameter("ipStr");

String mask = request.getParameter("mask");

IpUtil iu = new IpUtil();

if(ipStr != "" && mask != ""){

Result result = iu.getResult(mask, ipStr);

if(result.getType() != null){

request.setAttribute("result", result);

request.getRequestDispatcher("/result.jsp").forward(request, response);

}else{

response.sendRedirect(request.getContextPath() + "/error.jsp");

}

}

}

}

附件2:IpUtil.java

package cn.whut.util;

public class IpUtil {

public final static String S_0 = "00000000";

public final static String S_127 = "01111111";

//把十进制数转成二进制字符串

public String toBinary(String s){

int n = Integer.parseInt(s);

StringBuffer sb = new StringBuffer();

while(n > 0){

sb.append(n%2 + "");

n = n/2;

}

while(sb.length() < 8){

sb.append("0");

}

return sb.reverse().toString();

}

//判断网络类别

public String networkClass(String ipStr){

String type = null;

String [] ipArr = ipStr.split("\\.");

System.out.println(ipArr.length);

String s = toBinary(ipArr[0]);

//a类范围1.0.0.1-127.255.255.254

if(s.startsWith("0") &&!"1.0.0.0".equals(ipStr) && !"127.255.255.255".equals(ipStr)){ type = "A";

}

//b类范围128.0.0.1-191.255.255.254

if(s.startsWith("10") && !"128.0.0.0".equals(ipStr)

&& !"191.255.255.255".equals(ipStr)){

type = "B";

}

//c类范围192.0.0.1-223.255.255.254

if(s.startsWith("110") && !"192.0.0.0".equals(ipStr)

&& !"223.255.255.255".equals(ipStr)){

type = "C";

}

return type;

}

public Result getResult(String mask, String ipStr){

String[] ipArr = ipStr.split("\\.");

String[] masks = mask.split("\\.");

Result result = new Result();

result.setType(networkClass(ipStr));

String s;

if("A".equals(result.getType())){

s = toBinary(masks[1]);

int index = http://www.wendangku.net/doc/9772307c0029bd64793e2c7b.htmlstIndexOf("1");

result.setSubnetCount((int) Math.pow(2, index+1));

result.setValidSubnetCount((int) Math.pow(2, index+1) - 2);

result.setHostCount((int) Math.pow(2, 2*8 + 7-index) - 2);

int start = Integer.parseInt(ipArr[1]);

start = start + 1;

result.setIpStart(ipArr[0] + "." + ipArr[1] + ".0.1");

int end = (int) Math.pow(2, 7-index) - 1 + start - 1;

result.setIpEnd(ipArr[0] + "." + String.valueOf(end) + ".255.254");