1 系统设计
ARP 协议动态交互仿真实验系统是由三台计算机(PC-A,PC-B,PC-C)模拟的局域网,数据在其内部转发时的分布式仿真实验平台。三台机器分别模拟ARP 报文发送端、交换机、ARP 报文接收端,通过三台机器交互操作,在以太网环境中动态模拟出ARP 协议的整个工作流程,包括ARP 高速缓存表的查询和修改,ARP 报文封装,交换机端口转发报文。
ARP 协议动态交互仿真系统拓扑结构图如图1 所示。
图1 ARP 协议动态交互仿真实验平台拓扑结构
1.1 系统分析
该系统的目的是为了在学生学习ARP 协议时,通过动态、逼真的实验过程帮助学生深入理解ARP 协议,提高学习效果。为了能够快捷、顺利地完成实验,实验环境对该系统有如下要求:部署方便,使用简单,效果逼真,移植性和可扩展性强。
系统针对上述需求采取如下策略:该系统全部在Windows XP 下开发,采用部署较为简单的Mysql 数据库和Tomcat 服务器(PC-C),将整个ARP 协议工作过程抽象出来放在网页上直观地展现,学习者可以像浏览网页一样使用该系统。
客户端:要求简单、明了地展现相应信息;有动态效果,逐步封装;能与服务器进行数据交互。因此,系统用dreamweaver8 设计页面,采用表格布局封装相关信息;用javascript. 控制动态效果和实现逐步封装;采用Ajax 技术实现客户端与服务器的交互。
服务器:开发语言相对简单易学,业务逻辑集中控制,采用分层的思想,在基本不动现有代码的情况下实现功能的拓展。系统用java 完成服务器端的实现,以一个逻辑控制类控制整个业务逻辑;封装一个持久层框架byesql 操作mysql数据库,能在不写任何SQL 语句的情况下针对MySQL 数据库完成基本的增、删、改、查。
1.2 系统设计
1.2.1 系统用例图
实验时,学生甲操作PC-A,模拟数据发送端;学生乙操作PC-C,模拟交换机;学生丙操作PC-B,模拟数据接收端。
发送端(PC-A):获取本机真实IP 和MAC 地址后,用一个JSP 页面模拟ARP 报文的逐步封装过程,使用者可以看到ARP 请求报文逐步封装的效果。然后自动向“交换机”
发送ARP 请求报文,再自动跳转到“ARP 高速缓存表”模拟页面,等待“交换机”转发来ARP 响应报文,最后修改“ARP 高速缓存表”。
交换机(PC-C):用一个JSP 页面模拟“端口——MAC映射表”,负责转发ARP 报文。初始为等待状态,当发送端(PC-A)发送完ARP 请求报文之后,自动向除发送端外的所有端口转发该请求报文,完毕后自动跳到初始状态等待转发ARP 响应报文,当响应报文到达后就针对发送端(PC-A)单播该报文分组。
接收端(PC-B):获取本机真实IP 和MAC 地址后,自动跳到“ARP 高速缓存表”模拟页面,等待“交换机”将ARP请求报文转发过来后修改ARP 高速缓存表,再自己跳转到ARP 响应报文页面,逐步封装。封装完毕则自动向“交换机”发送ARP 响应报文。
图2 为ARP 协议仿真系统动态交互用例图。
图2 ARP 协议动态交互仿真系统用例
1.2.2 系统类图
ARP 协议动态交互仿真系统定义了四个类:
①ARP 报文类ArpMessage:定义ARP 报文属性和类型;②ARP 缓存表类ArpTable:定义ARP 表字段和属性;③端口MAC 映射表类MacTable:定义交换机端口和机器MAC 地址的映射关系;④计算机类PC:定义各机器的IP 地址、MAC 地址和计算机名。
计算机类PC 为ARP 报文类ArpMessage 和ARP 缓存表类ArpTable 提供本机的MAC 地址和IP 地址,分别用于帧封装和MAC 地址查询。端口MAC 映射表类MacTable 为计算机类PC 提供MAC 地址和端口的对应关系,用于数据转发。
图3 为ARP 协议动态交互仿真实验系统类图。
图3 ARP 协议动态交互仿真系统类
1.2.3 系统流程图
为了使用方便,ARP 协议动态交互仿真系统把三个角色功能集成在一个程序中。程序运行时,操作者需为机器选择规定的角色,再根据角色功能分配,按照定义的流程完成相应的操作。图4 为ARP 协议动态交互仿真系统流程图。
图4 ARP 协议动态交互仿真系统流程
2 系统实现
2.1 ByeSQL 框架简介
Java 流行已久,基于jdbc 封装的持久层框架层出不穷,像Hibernate、Ibatis 等都是功能十分强大的开源框架[8]。但是这些开源框架对于一些小系统的应用显得太复杂,配置很麻烦,而且这些框架没有真正屏蔽掉SQL 语句的书写:
Hibernate 需要写HQL 语句(和SQL 类似),Ibatis 就是一个sql-Object 映射框架。
ARP 协议动态交互仿真系统封装了一个持久层框架byeSQL,将对数据库的操作封装起来,利用统一的约定省去配置文件中的诸多麻烦,借助java 反射机制完成表项和实体类的相互转换。所有的逻辑控制都由java 代码去处理。该框架可以应用于大部分小型系统的开发。
持久层框架byeSQL 主要针对MySQL 数据库,将一些常用的增、删、改、查操作封装起来。使开发人员在做一些小型系统的时候,不要再去关心持久层的实现(也就是不要关心SQL 代码),只要导入byeSQL.jar 和MySQL 驱动包就可以利用java 代码操作数据库,而且配置文件十分简单,只需输入数据库的用户名和密码即可。不过使用框架byeSQL 必须遵守一个约定,表名必须和实体类名一致,字段名必须和实体类的属性一致,而且实体类必须符合JavaBean 规范。该框架是轻量级的,可以单独使用也可以和其它框架结合使用。
2.2 主要框架函数
系统持久层框架封装了10 个数据库操作函数,这些操作函数内部关联起来,就能完成对数据库的增、删、改、查操作,不需用户进行干涉。部分操作函数的功能为:
①public STatic int selectCount(String beanName):查出表中表项总数(传入该表对应的bean 全名,返回记录个数);
②public static List selectPage(String beanName,int start,int size):分页查询(传入该表对应的bean 全名、开始位置、每页显示记录条数,返回装有所查记录对应的对象实例列表);
③public static List selectOne(String beanName,StringpkName,String pkValue):根据特定字段名和值选出所需记录(传入该表对应的bean 全名、特定字段名、特定字段值,返回装有所查记录对应的对象实例列表);
④public static List selectAll(String beanName):查出所有记录(传入该表对应的bean 全名,返回装有所查记录对应的对象实例的列表);
⑤public static List select(String beanName,String select):
实现复杂查询,如关联查询和子查询等(传入该表对应的bean 全名、SQL 语句,返回装有所查记录对应的对象实例的列表)。
3 结语
该系统实现了ARP 协议的动态交互仿真,完成了ARP协议整个工作过程的模拟实现,通过动态交互操作,能够让学习者更轻松地学习和掌握ARP 协议。系统通过封装一个持久层框架,实现针对MySQL 数据库的基本增删操作,做到使用户不需写SQL 语句,利用java 代码就可以操作MySQL 数据库。