交换机柔性虚拟实验系统设计与实现*
2022-09-07谭敏生何啸峰夏石莹
谭敏生,何啸峰,曾 琼,陈 虹,夏石莹
(南华大学计算机学院,湖南 衡阳 421001)
0 引言
柔性,是能够根据环境变化而进行响应的一种能力,它的特征是弹性和适应性。柔性虚拟实验系统具有可组合、可选择、自适应等特点。交换机是非常重要的基础网络设备,采用真实物理设备进行交换机相关实验,当然有利于提高学生的实践能力。但由于计算机网络技术发展迅速,交换机的型号繁多,部分交换机的价格昂贵,众多学生的重复实验容易损坏设备;更为重要的是大多数高校网络实验设备的更新难以跟上网络技术发展的步伐。因此,研究交换机等核心网络设备的柔性虚拟实验系统十分必要。
1 国内外虚拟实验系统研究动态
虚拟实验系统根据实现技术的不同,可以分为以纯软件方式设计和以软硬件结合方式设计两种,以纯软件方式设计的虚拟实验系统是使用HTML、Java、Java Servlet、ASP 等技术。美国一所大学开发的Nmrscope 系统,学生只要连接上网络就可以无地点和时间限制使用这个大学的实验仪器。王建新等人设计开发了一个基于Internet的虚拟实验系统,服务器使用Matlab 的OLE Automation,客户端使用JavaBean容器和组件,设备通过JavaBean 组件设计,通过模拟实验中的仪器设备,用户可以在浏览器中组合相应的组件进行实验。Cao J 等人提出了一个用于编程的虚拟实验系统,客户端使用HTML 和JavaApplet开发,服务器端使用CGI和Java Servlet开发,用户首先在客户端界面输入需要编译的代码,把输入的代码及请求发送给服务器,服务器接收到客户端的请求后,利用语言编译器进行编译,将编译结果发送给客户端。Khalifa 等人开发的基于网络的虚拟实验系统模拟了一个以太网交换机和几台Linux 系统的计算机,用户输入Linux 相关命令,服务器把交换机和计算机输出的结果发送给用户。苏培华研发的基于B/S 架构的虚拟实验平台不仅可以动手进行相关实验,而且具有记录实验结果、学生上交作业、教师下发批阅等功能,实现学生和教师的交互。谢慧提出了利用NS2 创建虚拟实验环境模拟网络,从而进行网络实验。思科公司发布的Cisco Packet Tracer 为用户提供了一个虚拟的网络环境,让用户可以模拟设计和配置网络拓扑结构,排除网络故障,查看数据包的结构及数据包在网络设备之间的处理过程。
2 系统主要类的设计
2.1 数据帧类(Ether类)
设计一个数据帧类用于封装计算机发送和接收的数据帧,包含源MAC 地址(source_mac_add)、目的MAC 地址(dest_mac_add)、数据长度(data_len)、数据(data)及校验和(data_crc)等属性。
2.2 端口类(Port类)
交换机、计算机有很多连接端口,需要设计Port类。Port 类包含链表(datalist)、端口号(id、)端口状态(state)等属性。
2.3 链表类(DataList类)
交换机内部存在一个地址表,数据帧存储在计算机端口和交换机端口,需要一个链表类用于将地址表存储至链表中进行地址表的增删查改操作,将数据帧缓存到链表中。DataList 类包含把数据帧加到链表头部(add_to_start())、把数据帧加到链表尾部(add_to_end())、把数据帧加到第i个帧之后(insert())、删除链表中所有节点(deleteall())等方法。
2.4 交换机类(Switcher类)
DataList 类包含地址表(add_table)、检测交换机端口是否接收到数据(check())、检查接收到的数据中校验和是否有效(checkdatacrc())、打印地址表(print_add_table())、把源MAC地址及其端口号添加到地址表(write_table())、发送数据帧(broadcast())、转发数据帧(reward())等属性和方法。
2.5 计算机类(Computer类)
Computer 类包含MAC 地址(mac_address)、设置计算机mac 地址(setcmacaddress())、设置与交换机连接的端口号(setcid())、存储交换机发送的数据(recv())、将数据发送给交换机(send())等属性和方法。
3 系统核心功能的实现
3.1 端口检测
检测交换机的所有端口是否有数据输入,如果检测端口接收到数据,在结果显示框中显示“交换机端口检测到数据输入”,如果检测端口没有数据输入,在结果显示框中显示“交换机端口未检测到数据输入”。
调用Switcher类中的check方法,判断交换机端口是否有数据输入,代码片段如下:
3.2 校验和检查
检查数据帧的校验和是否有效,如果该数据帧的校验和有效,在结果显示框中显示“该数据有效”,否则显示“该数据帧无效”。
调用Ether 类中的data_crc 属性,判断数据帧是否有效,代码片段如下:
3.3 数据帧存储
先检测数据帧的源MAC 地址是否在交换机地址表中,若不在,则在结果显示框中显示“存储成功”。
调用Switcher 类中的add_table 属性和Ether 类的source_mac_address 属性找到数据帧源端口,再调用Switcher 类的write_table 方法,将数据帧源MAC 地址添加到交换机的地址表中,代码片段如下:
3.4 数据帧发送
首先调用Computer类的mac_address属性和Ether类的source_mac_address 属性,找到与源主机相连的交换机端口,再调用Computer类的send方法将数据帧发送到该端口,代码片段如下:
3.5 数据帧转发
如果检测到目的MAC 地址不在地址表中,就将接收到的数据帧转发至其他所有端口。如果检测到目的MAC 地址在地址表中,就按照交换机的地址表转发该数据帧到相应端口。
调用Switcher 类中的reward 方法,实现数据帧的转发,代码片段如下:
4 结束语
本文研究的交换机虚拟实验系统,主要设计并实现了端口检测、校验和检查、数据帧存储、数据帧发送、数据帧转发等交换机的核心虚拟实验功能,下一步将研究三层交换机路由、IP 地址设置、实验指导文档等虚拟实验功能。