资源描述
天津职业技术师范大学2012届本科生毕业设计
1 引言
1.1 课题研究的背景
计算机网络近年来获得了飞速的发展。20年前,在我国很少有人接触过网络。现在,计算机通信网络以及Internet已成为我们社会结构的一个基本组成部分。网络被应用于工商业的各个方面,包括电子银行、电子商务、现代化的企业管理、信息服务业等都以计算机网络系统为基础。从学校远程教育到政府日常办公乃至现在的电子社区,很多方面都离不开网络技术。可以不夸张地说,网络在当今世界无处不在。
网络的发展也是一个经济上的冲击。数据网络使个人化的远程通信成为可能,并改变了商业通信的模式。一个完整的用于发展网络技术、网络产品和网络服务的新兴工业已经形成,计算机网络的普及性和重要性已经导致在不同岗位上对具有更多网络知识的人才的大量需求。企业需要雇员规划、获取、安装、操作、管理那些构成计算机网络和Internet的软硬件系统。另外,计算机编程已不再局限于个人计算机,而要求程序员设计并实现能与其他计算机上的程序通信的应用软件。
网络互联的最大优点在于能集合任意多个网络而成为规模更大的网络,并且能互通互联,资源共享。然而,昂贵的设备开销是教学条件所不允许的,迫切地需要仿真软件来实现实验过程中基本的网络互联设备的连接、配置和结果校验的仿真。市面上也有很多相同的产品都实现了虚拟设备的功能,比如:Boson NetSim、Dynamips、GNS3和Packet Tracer。
Boson NetSim是ITExamP推荐的路由器模拟软件,可以模拟路由器和部分交换机,而且是它最先提出自定义网络拓扑的功能,使用Boson NetSim省去了制作网线连接设备,频繁变换CONSOLE线,不停地往返于设备之间的环节。同时,Boson NetSim的命令也和最新的Cisco的IOS保持一致,它可以模拟出Cisco的部分中端产品35系列交换机和45系列路由器。
Dynamips,是由我国CCIE小凡开发的一个思科模拟器图形前端。这个优秀的模拟器可以模仿思科设备的真实操作环境,可以说是目前最好的思科模拟器它不仅整合了思科所有的IOS模拟器,而且还整合了BES以及VPCS。它是一个综合的模拟器解决方案。
Packet Tracer 是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上直接使用拖曳方法建立网络拓扑,并可提供数据包在网络中行进的详细处理过程,观察网络实时运行情况。可以学习IOS的配置、锻炼故障排查能力。
而Internet的最初设计,并没有考虑到需要支持目前这样庞大的互联网,因此在IPv4的设计当中,IP地址仅使用了32bit来标识网络中的一个节点设备,虽然这很好地解决了IP数据报的对齐问题,但随着Internet的迅猛发展,网络地址日益紧缺,已经被视为一种宝贵的网络资源。为了解决这个问题,NAT技术被人们广泛使用,它将网络地址从一个地址域映射到另一个地址域。
1.2 课题研究的目的
网络世界发展迅猛,各种技术丰富多彩。在过去的20年中最为成功的一项技术就是网络互联(Internetworking)技术。网络互联的最大优点在于能集合任意多个网络而成为规模更大的网络,并且能互通互联,资源共享。网络的迅猛发展,必然导致部署及设计网络的人才的需求量逐渐增大。为了训练这些人才,对网络试验环境的需求也逐渐增大。然而,昂贵的设备开销是教学条件所不允许的,迫切地需要模拟软件来实现实验过程中基本的网络互联设备的连接、配置和结果校验。
毕业设计应在满足题目要求的基础上尽可能完善功能,尽量模拟一个真实的网络实验环境,实现网络设备的NAT模块功能,对象的建立应尽量贴近现实,成为一个使用方便、操作简单、高效率的适合网络课程初学者的使用锐捷命令集的模拟实验系统。
2 网络互联模拟实训系统介绍
在网络互联实训的实际操作中,实验参与者必须在实训前做好充分的准备工作,确定规划方案。实训中则需按照事先准备的规划方案,进行连线、配置及测试工作。实验过程中大多需要配置、测试的多次反复,交互性极强。 为了尽可能地模拟真实的实验过程,在配置和测试阶段,系统应模拟实验者所选取的互联设备的操作系统,对实验者的配置及时响应,尽可能地缩小与实际操作的差距。
2.1系统总体设计
网络互联实验模拟系统是一款实用性较高的软件,实现了用软件代替硬件,用编程模拟实验的全过程,真实地模拟出实验的操作过程,节省实验中各种仪器的使用费用,省去了制作网线连接设备,频繁变换CONSOLE线,不停地往返于设备之间的环节,也为那些由于无法承担起昂贵的设备开销而无法学习网络互联知识和无法操作网络互联设备实验的人们,提供了一个很好的机会。
本系统的主要内容有模拟实验、经典实验、理论学习和帮助四个模块。网络互联实验模拟系统总体框架图如图2-1所示。
网络互联实验模拟系统
模模拟实验
实参考实验
参参考资料
帮
助
图2-1 网络互联实验模拟系统总体框架图
1)模拟实验
该模块可以完成实验过程中对锐捷交换机路由器以及电脑主机的连接、配置和结果的校验等功能的模拟。为网络课程的初学者去配置网络设备提供了网络模拟环境。
2)实验参考
该模块罗列出多个常用网络课程实验的实验步骤、拓扑图等,方便实验者在虚拟实验的过程中对照经典实验,通过经典实验更好的了解网络互联设备的配置、调试。
3)参考资料
该模块展示了网络互联的发展以及应用情况,并详细介绍了网络互联基础、交换机原理与应用、路由器原理与应用等方面的知识。是网络课程的初学者可以了解网络的发展历史与应用现状,更好的了解网络这门课程。
4)帮助
该模块包括网络互联模拟实训体统的使用说明,方便初学者了解该系统并使用该系统进行网络互联模拟试验;还包括命令提示功能,使实验者在试验过程中更方便的查找到所需要的命令,以便更好的完成试验。
2.2运行环境
1)硬件平台
(1)CPU:P41.8GHz。
(2)内存:256MB以上。
2)软件平台
(1)操作系统:Windows XP/ Windows Vista/Windows7。
(2)编程语言:C#。
3 NAT模块的设计与实现
3.1 NAT技术简介
随着Internet技术的不断以指数级速度增长,珍贵的网络地址分配给专用网络终于被视作是一种对宝贵的虚拟房地产的浪费。因此出现了网络地址转换(NAT)标准,就是将某些IP地址留出来供专用网络重复使用。
NAT英文全称是Network Address Translation,称是网络地址转换,它是一个IETF标准,允许一个机构以一个地址出现在Internet上。NAT将每个局域网节点的地址转换成一个IP地址,反之亦然。它也可以应用到防火墙技术里,把个别IP地址隐藏起来不被外界发现,使外界无法直接访问内部网络设备,同时,它还帮助网络可以超越地址的限制,合理地安排网络中的公有Internet 地址和私有IP地址的使用。
1)NAT技术的原理
NAT技术能帮助解决令人头痛的IP地址紧缺的问题,而且能使得内外网络隔离,提供一定的网络安全保障。它解决问题的办法是:在内部网络中使用内部地址,通过NAT把内部地址翻译成合法的IP地址在Internet上使用,其具体的做法是把IP包内的地址域用合法的IP地址来替换。 NAT功能通常被集成到路由器、防火墙、ISDN路由器或者单独的NAT设备中。NAT设备维护一个状态表,用来把非法的IP地址映射到合法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址,发往下一级,这意味着给处理器带来了一定的负担。但对于一般的网络来说,这种负担是微不足道的。
2)NAT的类型
NAT有三种类型:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。其中静态NAT设置起来最为简单和最容易实现的一种,内部网络中的每个主机都被永久映射成外部网络中的某个合法的地址。而动态地址NAT则是在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络。NAPT则是把内部地址映射到外部网络的一个IP地址的不同端口上。根据不同的需要,三种NAT方案各有利弊。
动态地址NAT只是转换IP地址,它为每一个内部的IP地址分配一个临时的外部IP地址,主要应用于拨号,对于频繁的远程联接也可以采用动态NAT。当远程用户联接上之后,动态地址NAT就会分配给他一个IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。
网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。
在Internet中使用NAPT时,所有不同的TCP和UDP信息流看起来好像来源于同一个IP地址。这个优点在小型办公室内非常实用,通过从ISP处申请的一个IP地址,将多个连接通过NAPT接入Internet。实际上,许多SOHO远程访问设备支持基于PPP的动态IP地址。这样,ISP甚至不需要支持NAPT,就可以做到多个内部IP地址共用一个外部IP地址上Internet,虽然这样会导致信道的一定拥塞,但考虑到节省的ISP上网费用和易管理的特点,用NAPT还是很值得的。
3)NAT技术的应用
NAT技术可以让你区域网路中的所有机器经由一台通往Internet的server 线出去,而且只需要注册该server的一个IP就够了。 在以往没有NAT技术以前,我们必须在server上安装sockd,并且所有的clients都必须要支援sockd,才能够经过server的sockd连线出去。这种方式最大的问题是,通常只telnet/ftp/www-browser支援sockd,其它的程式都不能使用;而且使用sockd的速度稍慢。因此我们使用网络地址转换NAT技术,这样client不需要做任何的更动,只需要把gateway设到该server上就可以了,而且所有的程式(例如kali/kahn等等) 都可以使用。最简单的NAT设备有两条网络连接:一条连接到Internet,一条连接到专用网络。专用网络中使用私有IP地址(有时也被称做Network 10地址,地址使用留做专用的从10.0.0.0开始的地址)的主机,通过直接向NAT设备发送数据包连接到Internet上。与普通路由器不同NAT设备实际上对包头进行修改,将专用网络的源地址变为NAT设备自己的Internet地址,而普通路由器仅在将数据包转发到目的地前读取源地址和目的地址。
NAT这项技术主要是为了解决IP地址空间不足。在NAT功能的支持下,内部网络可以使用一个公共的IP地址访问外部网络,因此,它很好地隐藏内部网络的网络拓扑结构,也使网络更安全。由于这些特点,NAT也常常是作为Firewall的重要部分一起提供的,但是它并不是Firewall。由于NAT可以带来一定的安全性,相信即使在IPv6的时代,它还是能够继续应用。
3.2 模块需求分析
3.2.1功能要求
为保证该模拟器能在最大程度上保证其与实际系统的相似度,NAT模块的功能以及其工作方式也应尽量贴近实际设备的功能和工作方式。
本模块需要实现的具体功能有以下方面:
1)输入的配置命令和输出的响应信息与真实配置环境一致,确保模拟实训系统的真实性;
2)通过输入正确的命令能在不同模式下进行切换;
3)输入正确的的命令配置静态路由;
4)输入正确的命令进入端口配置模式,定义内部、外部网络;
5)定义内部源地址静态转换关系;
6)定义全局IP地址池,定义允许转换的本地IP地址,定义内部源地址转换关系;
7)输入正确的命令,打印出地址转换表。
3.2.2性能要求
能够在本系统中稳定快速的运行,与交换机模块紧密的结合,占用内存控制在一定范围之内。对用户的输入给予快速反映。
3.2.3运行要求
能正常运行在微软中文版WINDOWS系列,可以独立运行(需要微软.NetFrameWork支持)。 除自身数据文件之外不需要系统其他文件资源或信息的支持。
路由模块
路由基本功能
静态路由
添加静态路由
接口类
IP数据包类
路由类
NAT
静态NAT
动态NAT
3.3 模块总体设计
模块的功能结构如图3-1所示。
图3-1模块功能结构图
3.3.1 NAT的地址转换过程
1、连接的映射关系的建立阶段
发生在会话的开始,当内部的1台机器要与外部的1台机器发生通信时发生,NAT动态的为其分配未使用的端口号,并且会记下这个映射关系,为以后转发IP数据包使用。
2、映射关系的查找与转换阶段
当有外部进入的数据包或后续从内部出去的数据包通过NAT时,NAT都在内部记录的映射表中进行查找,以便找到对应的映射进行地址转换。
3、映射关系解除阶段
当连接使用完后,映射关系应该解除,释放分配给这条连接的端口,以便以后的连接可以继续使用。通常实现中采用定时器中断的方式处理,在中断过程中调用释放无用连接的例程。
3.3.2 NAT模块设计
以Visual Studio2008为框架,使用C#编程语言,采用DLL处理数据文件。模拟了路由器常用模式、配置命令及响应,将涉及到路由器的要用到的各种属性抽象成不同的几个对象,各个对象抽象成为不同的类,在实现静态NAT是建立NAT映射表,在实现动态NAT时采用建立IP地址池的方法来实现。
通过对控制台输入的命令进行判断和摘取,对路由器进行了特权模式和全局模式的划分。在不同模式下,安排不同的数据处理文件,获取不同端口的配置。
图3-2 NAT工作示意图
3.3.3 静态路由模块设计
首先采用面向对象的方法将涉及到路由器的要用到的各种属性抽象成不同的几个对象,各个对象抽象成为不同的类,路由类和接口类都要有与其对应的相应的处理数据包的方法和对外界输入信息予以响应的方法以及用于管理各自资源的守护线程。广播包类和路由表类应包含实现广播包和路由表基本功能的各个属性。
其次,实现路由功能的配置命令以及响应用DLL(Dynamic Link Library)和数据文件来完成。
3.4 模块详细设计
3.4.1静态NAT的详细设计
图3-3静态NAT过程
静态NAT中local地址与global地址必须是一一对应的。所以静态NAT一般用于服务器地址,要求能穿过NAT实现完全访问的场合。锐捷路由器静态NAT的配置主要有三个步骤:设置inside接口,设置outside接口,然后是指定静态映射地址对。
表3-1静态NAT转换映射表
内部本地IP地址
内部全局IP地址
172.16.1.10
210.28.1.11
图
3.4.2动态NAT的详细设计
内网IP地址
地址池
10.1.1.0
202.101.1.1~
202.101.1.10
表3-2动态NAT转换映射表
动态NAT可以是一对一的映射,也可以是多对一的映射,通过按比例把多个私有地址按需映射到一个公有地址的办法,实现了公有地址的重复利用,设计IP地址池的时候有两个因素要考虑,其一是同一时间内最大需要的地址数量。如果池子太小,需要公网地址的主机却很多,可能一下子就被淘干了,后来的人分不到IG地址,也就连接不了公网了。其二是空闲IP地址归还时限,具体来说就是动态NAT项在NAT表中闲置的时间,如果分配出去的地址在一段时间内没有被再次使用的话,就要将它收回来。
结合ACL,将访问控制列表1的源地址,动态的从公网IP地址池p1的提取公网IP。
图3-6 动态NAT过程图
3.4.3路由模块详细设计
静态路由指示出到目的地的固定的路径,需要人工手动的配置。当路由器收到用户的配置命令时,获取命令的参数后,然后新建一条新的路由记录添加到路由表里。把路由表抽象成为一个集合队列,路由记录包含目的网络或者目的主机,要到达目的地址所要经过的吓一跳的IP地址或者为本地的出口的端口号,要到达目的网络所要经过的路由器的个数,来表明路由记录的质量。
将路由器和路由接口抽象为两个类,每个路由器包含两个串行接口和两个以太网接口,把所有接口放在一个集合队列里,每个接口都应有自己的接收队列和发送队列和处理各种数据包的函数,都应有监听自己接收队列的守护线程,每个接口都继承父类路由器的属性,都能调用父类路由的路由表对自己收到包进行匹配来决定是回复,丢包或者转发,详细过程如图3-7和图3-8。
开始
发送ping包
匹配路由表
获得ping的目的地址
选定端口,发送ICMP包
广播ARP包获得mac
有mac地址
否
新建pingPacket
是
调用send函数发包
等待回应
收到回应包
IsReached==true
IP地址不可达
否
结束
证明为连通的
是
结束
图3-7 路由器作为发送端处理IP数据包
开始
监听端口的接收队列有数据
包的目的地址和端口地址比较
调用转发函数
IsToMe
否
IsReached==true
IsByMe
是
选定端口,转发原数据包
否
新建response
发向下一实体的接收队列
是
调用发送函数
回发到发送端
结束
结束
图3-8 路由器作为接收端处理IP数据包
在用代码实现路由的基本功能时,编写五个类函数分别为IP数据包类,广播包类,路由表类,接口类和路由类。
3.5 模块编码实现
3.5.1 静态路由模块编码
配置静态路由时,输入相应的命令,当路由器收到配置静态路由的命令时,调用处理函数,新建一条新的路由记录,添加路由记录到路由表中。静态路由模块的核心代码:
public void StaticRouter(string mudi, string Mask, string xia, string id) //调用静态路由选项
{ int [] dst;
int [] mask;
int[] xiayit;
dst = new int[4];
mask = new int[4];
xiayit = new int[4];
for (int i = 0; i < 4; i++)
{
dst[i] = Convert.ToInt32(mudi.Split('.')[i]);
mask[i] = Convert.ToInt32(Mask.Split('.')[i]);
xiayit[i] = Convert.ToInt32(xia.Split('.')[i]);
} //获取路由相关信息
int Id;
Id = Convert.ToInt32(id);
RouterTable record;
record = new RouterTable(dst,mask,0,xiayit,Id);
tableRT.Add(record); //生成路由表
}
3.5.2 NAT相关命令的模块编码
在主程序中通过switch case 语句来判断命令输入区输入的命令并在主程序中使用变量CMD来接收并且进行摘取以获得正确的命令。具体实现是使用DLL+数据文件的形式来实现NAT的配置目的。
case "nat":
{
string strDetail = cmd.Split(' ')[2];
switch (strDetail.ToLower())
{
case "inside":
//Set inside route info
if (cmd.Split(' ').Length == 3)
{
this.SetTempToInside();
//Set inside route info
}
else
{
string[] strlist = cmd.Split(' ');
string source = strlist[3];
if (source.ToLower() != "source")
{
this.Display('"' + command + '"' + " 不是内部或外部命令,也不是可运行的程序或批处理文件 "); //when it is wrong command
break ;
上述代码是判断NAT所需相关命令,获取配置信息。在进入端口后,输入“ip nat inside”配置命令,定义该端口为连接内部网络;在全局模式下,输入“ip nat inside source static”配置命令,进行定义内部源地址静态转换关系。
3.5.1静态NAT编码的实现
以下命令是创建映射表的核心代码,存入内部本地IP地址和内部全局IP地址的映射关系。数据包的流程如图3-9。系统接受命令后将获取的IP地址存入动态列表,不同端口号的不同定义,形成映射关系,产生映射表。关键字source表明转换属于内部源地址转换,即当内部网络需要与外部网络通讯时,需要配置NAT,将内部私有IP地址转换成全局唯一IP地址。即当内网访问列表中定义的内部主机要访问外网时,路由器将数据包的源地址转换成地址池上定义的IP地址再发送出去。
图3-9 数据包的NAT流程图
region NAT related
private PCInfo TempPCInfo;
private PCInfo OutSide, InSide;
private List<InOutRouteInfo> listStaticInfo = new List<InOutRouteInfo>();
private void SetTempPCInfo(string ip, string mask)
{
TempPCInfo = new PCInfo()
{
IP = ip,
IPMask = mask
};
}
void SetTempToOutSide()
{
OutSide = new PCInfo()
{
IP = TempPCInfo.IP,
IPMask = TempPCInfo.IPMask
};
} //Set Outside Ip address
void SetTempToInside()
{
InSide = new PCInfo()
{
IP = TempPCInfo.IP,
IPMask = TempPCInfo.IPMask
}; //Set Inside Ip address
}
3.5.2动态NAT编码的实现
关键字destination,属于目标地址转换,即将内部全局地址转换成内部本地地址,用于实现外网访问内网的服务器时对IP数据包中的目的IP地址实现转换。destination的目的是用来实现TCP的流量的负载均衡,poolname中指的是转换后的内网的某一台服务器的可全局路由的IP地址。
核心代码是:
private PoolInfo poolInfo;
void SetPoolInfo(string poolname, string[] iplist, string netmask)
{
poolInfo = new PoolInfo();
poolInfo.poolname = poolname;
poolImask = netmask;
poolInfo.ipList = new string[iplist.Length];
Array.Copy(iplist, poolInfo.ipList, iplist.Length);
ShowType = 2;
}
switch (strDetail.ToLower())
{
case "pool":
{
string[] strlist = cmd.Split(' ');
int nCount = strlist.Length;
string poolname = strlist[3];
string netmaskname = strlist[nCount - 2];
if (netmaskname.ToLower() != "netmask")
{
this.Display('"' + command + '"' + " 不是内部或外部命令,也不是可运行的程序或批处理文件 "); //判断命令组是否正确
break;
}
string netmask = strlist[nCount - 1];
int IPCount = nCount - 6;
string[] iplist = new string[IPCount];
for (int z = 0; z < IPCount; z++)
{
iplist[z] = strlist[z + 4];
}
this.SetPoolInfo(poolname, iplist, netmask); //获取地址池名称 ip地址 掩码
}
break;
}
string strNext = strlist[4];
switch (strNext.ToLower())
{
case "list":
{
if (strlist[6].ToLower() != "pool")
{
this.Display('"' + command + '"' + " 不是内部或外部命令,也不是可运行的程序或批处理文件 ");
break;
}
}
break;
以上命令定义地址池,调用ACL访问控制列表文件,定义一个ACL表.将访问控制列表的源地址,动态的从公网IP地址池p1的提取公网IP。
3.6 NAT模块测试
软件测试(software testing)是软件质量保证的主要活动之一。软件测试是为了发现错误而执行程序的过程。也就是说软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
3.6.1软件测试的方法
1) 黑盒测试
黑盒测试着重测试软件的功能。黑盒测试并不能代替白盒测试,它是与白盒测试互补的测试方法,它很可能发现白盒测试并不容易发现的其他类型的错误。
黑盒测试力图发现下述类型的错误:
(1)功能不正确或遗漏了功能。
(2)界面错误。
(3)数据结构错误或外部数据库访问错误。
(4)性能错误。
(5)初始化和终止错误
2) 白盒测试
白盒测试在测试过程的早期阶段进行,而黑盒测试主要用于测试过程的后期。设计黑盒测试方案时,应该考虑下述问题。
(1)怎样测试功能的有效性
(2)哪些类型的输入可构成好测试用例
(3)系统是否对特定的输入值特别敏感
(4)怎样划定数据类的边界
(5)系统能够承受什么样的数据率和数据量
(6)数据的特定组合将对系统运行产生什么样的影响
3) 错误推测
通过大量的命令的输入和边界值的选取测试,可以大致确定错误及异常的原因是:
(1)缺少对输入命令所有有效字节的判断。
(2)缺少对命令格式的判断。如:空格或换行个数未加限定。
3.6.2 软件测试目标
按照软件工程的方法,对模块主要进行了黑盒测试。
测试目标为:
1)当输入配置静态路由的命令时,是否新建了一条新的路由记录添加到路由表中,路由器能否根据更新了的路由表进行路径的选择,路由器选择的路径是否为正确到达目的网络的路径
2) 是否能够正确收到模拟器客户端发来的数据;
3) 是否能够对数据进行正确的分析,可以对cmd格式进行校验;
4) 是否能够从接收到的命令中读取到正确的内部ip地址,外部ip地址;
5) 是否能够根据客户端输入的信息建立相应的ip映射表,对NAT学习表表记录进行实时的更新,删除;
6) 是否能够定义控制列表地址;
7) 能否保证级联路由器间能够通信;
8) 路由器能够通过配置,能否生成地址池;是否能够分配和释放IP地址;
9) 用户是否可以通过配置命令查看NAT的translation列表。
3.6.3模块测试用例及结果
NAT模块的测试过程。用例的设计方案主要采取黑盒测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖和路径覆盖。当然无论设计多少测试用例,无论测试方案多么完美,都不可能完全100%的发现所有BUG,所需要做的是用最少的资源,做最多测试检查,寻找一个平衡点保证程序的正确性。穷举测试是不可能的。所以现在进行的测试,选用的是现在一般用的比较多的黑盒测试法。故依照此原则,测试过程如下:
图3-10测试拓扑图
1)静态路由的测试用例
在Router0控制台输入如下命令:
Router>en
Router#configure terminal
Router(config)#in f0/1
Router(config-if)#ip address 210.28.1.2 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#in f0/0
Router(config-if)#ip address 172.16.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#ip route 0.0.0.0 0.0.0.0 f0/1
在Router1控制台输入如下命令:
Router#configure terminal
Router(config)#in f0/0
Router(config-if)#ip address 192.168.1.1 255.255.255.0
Router(config-if)#exit
Router(config)#in f0/1
Router(config-if)#ip address 210.28.1.1 255.255.255.0
Router(config-if)#no shut
Router(config-if)#exit
Router(config)#ip route 0.0.0.0 0.0.0.0 f0/1
2)配置静态NAT的测试用例
在控制台输入如下命令:
R1(config)# interface fastethernet 0/0
R1(config-if)#ip nat inside
R1(config-if)#exit
R1(config)# interface fastethernet 0/1
R1(config-if)#ip nat outside
R1(config-if)#exit
R1(config)#ip nat inside source static 172.16.1.10 210.28.1.10
R1(config)#ip nat inside source static 172.16.1.11 210.28.1.11
R1(config)#end
预期结果:
将相应的IP地址存放入映射表中。
表 3-3 静态NAT映射表
Inside global
Inside local
Outside local
Outside global
210.28.1.11
172.16.1.10
192.168.1.10
192.168.1.10
3)动态NAT的测试用例
在控制台输入如下命令
Router>
Router>en
Router#conf t
Router(config)#host R1
R1(config)#int e0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#ip nat inside
R1(config-if)#no shut
R1(config-if)#int s0
R1(config-if)#ip add 192.168.2.5 255.255.255.252
R1(config-if)#ip nat outside
R1(config-if)#clock rate 1000000
R1(config-
展开阅读全文