阅读: 2023/8/21 10:32:34
0 引 言
计算机网络是一门实践性很强的专业核心课程,网络实验教学的内容设计和实施方法对培养学生的知识运用能力和综合能力至关重要。因此,各类学校都非常重视计算机网络实验建设,很多文章研究探讨了计算机网络实验教学改革、实验内容建设、实验环境构建[1-6],出版社也推出了风格各异的计算机网络实验教材,但是目前计算机网络实验教学仍存在挑战度低、不易激发学习兴趣等问题。
1 网络实验教学现状和问题
计算机网络实验作为计算机网络课程的重要组成部分,目前的实验方式可分为 3 类,分别存在各自的问题。
(1)面向操作的网络配置实验。这类实验的实验内容主要包括典型网络操作系统的配置方法、网络设备(如交换机、路由器、防火墙等)的配置方法以及不同规模网络的组网方法。国内多数高校通常利用仿真环境(如 eNSP 和 Packet Tracer )进行此类实验,国内的计算机网络实验教材也大多采用这种方式[7-8]。仿真环境通常对实验硬件的要求较低,可以进行大规模组网实验,但是进行这类实验时,学生通常按实验指导步骤和给出的配置命令操作,对部分学生的挑战度不够,不易激发学生的学习热情。
(2)面向数据包捕获的协议分析实验。这类实验要求学生利用已有的数据包捕获软件(如 Wireshark、TCPDump 等)捕获网络数据包,并通过分析捕获的数据包理解网络协议的工作过程。常用的网络数据包捕获软件功能非常强大,能够比较方便地过滤出需要的数据包,以便对网络协议进行分析。著名的计算机网络教材《计算机网络:自顶向下方法》就使用了这种方法。这种方式的实验使用已有的捕获软件,学生的参与度不高,对学生综合能力的培养有所欠缺。
(3)面向高级实验环境的网络设计实验。这种方式的实验要求学生完成网络协议设计后将实现的程序嵌入真实的网络设备,进而在真实的网络环境下完成实验和验证工作。这种类型的实验不但对软、硬件等实验设备和开发环境要求较高,而且对学生的能力也有很高要求,因此国内大学采用的较少。
2 实验设计思路
为了达到培养学生综合能力的目标,实验设计要考虑理论与实践的有机融合,实验内容要具有一定的挑战度,使学生完成后能够有获得感,吸引学生深度参与,同时兼顾实验环境的普适性。实验设计要考虑的具体因素包括以下几方面。
(1)实验课应与理论课紧密结合。实验课与理论课相辅相成,理论指导实验,实验验证理论。实验应通过网络编程的方式,让学生在数据包捕获、发送、转发与投递过程中,深入理解网络体系结构、数据包封装、路由转发等理论知识,掌握理论课程的核心内容。
(2)实验环境要相对简单。实验环境并非越复杂越好,相反,简单的实验环境更容易凸显实验关注的主要问题,更适合学生人数众多的本科教学。因此,实验要求的实验环境可以为局域网环境,在普通的实验机房即可完成。
(3)实验要具有一定的挑战度。实验不应一概按部就班,要具有一定的挑战度,能适合不同层次的学生学习。对于部分优秀学生,实验应能给予他们充分发挥的余地。因此,实验应扩展性强,使优秀学生在完成基本部分的基础上,可以进一步完成提高部分的内容。
(4)学生完成实验后应有获得感。相对于网络配置实验,具有挑战度的实验需要学生付出更多的时间和精力。因此,设计的实验不但要引起学生的兴趣,而且在完成实验后要使学生有获得感。学生完成实验后,其成果应能与业界商用产品互联互通,在锻炼学生动手能力和综合能力的同时,可以提高学生的获得感。
基于这些因素,针对计算机网络课程中网络结构、数据包封装、路由转发等核心内容,我校计算机网络实验以编程作为主要手段,通过数据包的捕获与分析、数据包的封装与发送、数据包的转发与投递等实验过程,使学生能够直观地感受网络数据包在网络中的传递过程,进而对计算机网络进行深入的理解。
整个实验由 3 个实验模块组成:网络数据包的捕获与分析、获取 IP 地址与 MAC 地址的对应关系、简单路由程序设计。这 3 个实验模块具有一定的递进性,可安排学生顺次完成。实验在具有一定挑战度的同时,保证多数学生能够通过努力顺利实现基本功能。表 1 给出 3 个实验模块的实验题目、实验目标和基本实验内容。
3 实验详细设计
3.1 编程环境
为了完成实验,要进行原始数据包的捕获与发送。对于本科学生来说,在操作系统内核空间进行数据包的捕获与发送难度较大,因此要借助用户空间的编程接口,实现网络数据包的捕获与发送。
Socket 套接字是网络编程中常用的编程接口,但是由于 Socket 提供给用户的数据包不是原始的数据包,因此不太适合本实验使用。Npcap 是 Windows 系统下的数据包捕获与网络分析架构,包含内核空间驱动程序和用户空间开发库[9]。Npcap 提供 C 形式的 API 调用,能够提供原始数据包捕获与发送功能。与 Npcap 类似,Libpcap 可以在 Linux(或 Unix )系统下提供原始数据包捕获与发送功能,也提供了 C 形式的 API 调用[10]。Scapy 是基于 Python 的网络数据包捕获与发送模块,提供的编程接口同样能进行原始数据包的捕获与发送[11]。在教学过程中,教师可根据学生对不同编程语言的掌握程度,选择相应的编程语言。
由于多数实验机房采用 Windows 环境,而且 C 语言是最基本的编程语言,因此可以选用 Npcap 进行原始数据包的捕获与发送。利用 Npcap 进行原始数据包捕获与发送的过程如图 1 所示。
在使用 Npcap 进行原始数据包的捕获与发送时,首先要调用 pcap_findalldevs_ex() 获取计算机上的网络设备列表。该调用除了返回计算机中所有网络接口外,还会包含每个接口的详细信息,如接口的名字、接口的描述、接口绑定的IP地址与掩码等。与文件操作类似,明确在哪个网络接口捕获或发送数据包后,要调用 pcap_open() 打开该接口,然后才能调用 pcap_next_ex() 和 pcap_sendpacket() 捕获并发送数据包。不再使用获取的设备列表后,要调用 pcap_feealldevs() 释放该列表占用的资源。
3.2 数据包捕获与分析实验
数据包捕获与分析实验的主要目标是让学生通过编程获取网络接口上的数据包,逐层解析数据包,理解网络的层次结构和数据包封装方式。与利用 Wireshark 等现有工具捕获与分析网络数据包相比,自己编程获取与解析数据包要求学生对网络层次和数据包封装有更深的理解,实验参与度更高。该实验模块能够更好地锻炼学生的动手能力、编程能力和分析问题能力。
在完成以太网帧封装格式或IP数据包封装格式的内容讲授后,即可开始数据包捕获与分析实验。实验的硬件环境只需普通联网的计算机,一般的实验机房即可满足要求(如图 2 所示)。其中,学生在主机 A 上运行自己编写的程序,用于捕获与分析流经主机 A 网络接口的数据包;主机 B 和 C 作为测试主机,用于向主机 A 发送数据包或接收主机 A 的数据包。
在实验过程中,学生要基于 Npcap 编写数据包的捕获程序。在捕获数据包后,再按照数据包的封装结构对数据包进行解析。教师可以根据学生的学习程度,要求学生解析出数据包的 MAC 地址、IP 地址、协议类型等字段,进而使学生深入理解网络的层次结构和数据包封装形式。
3.3 获取 IP 地址与 MAC 地址的对应关系实验
获取 IP 地址与 MAC 地址的对应关系实验的主要目标是通过组装并发送 ARP 请求包,接收并解析 ARP 响应包,获取指定的 IP 地址与 MAC 地址的对应关系,使学生能够较为直观地了解 ARP 协议的工作过程,进而较好地理解 IP 地址、MAC 地址的作用和使用场景。
在讲授 IP 地址和 ARP 协议之后,即可开始布置该实验模块。该实验的硬件环境要求与数据包捕获与分析实验类似(图 2 ),其中,学生在主机 A 上运行自己编写的程序,用于指定 IP 地址、组装与发送 ARP 请求包。同时,该主机也用于捕获 ARP 响应包,进而解析出指定 IP 地址与 MAC 地址的对应关系;主机 B 和 C 作为测试主机,只要设置好 IP 地址,无须做更多特殊配置。在接收到主机 A 发送的 ARP 请求后,具有指定 IP 地址的主机会自动发送 ARP 响应包。
该实验可以在数据包捕获与分析程序的基础上完成,增加 ARP 请求包组装和数据包发送等内容,即可获取 IP 地址与 MAC 地址对应关系。
3.4 简单路由程序设计实验
简单路由程序设计实验是一个综合性实验。该实验可以在学习数据包捕获与分析、数据包组装与发送之后,通过增加路由查找和路由转发功能,完成一个可以和商用路由器协同工作的路由转发软件。实验最终目标是使学生深入理解路由转发算法,掌握数据包在互联网中的传递过程。与目前常用的路由配置实验相比,简单路由程序设计实验能锻炼学生的编程能力、分析能力和综合能力;同时,由于完成的路由转发软件能与常用的商用路由器协同工作,因此学生会有很好的获得感。
路由器的基本功能是根据路由表为经过的数据包选择路径并进行投递与转发。除此之外,完整的路由器还应该包括更多的功能,例如,处理 TTL 域中的数值、处理 IP 数据包选项、重新计算头部校验和、需要时进行分片处理、生成并处理 ICMP 报文、实现动态路由协议、维护静态路由、实现 ARP 协议等。对于本科实验而言,学生在短期内实现一个完整路由软件不太现实,因此,简单的路由程序设计和开发实验要重点关注数据包在互联网中的转发过程。由于实验完成的程序要与现有的商用路由器互联互通,因此,即使进行了简化,路由程序设计实验仍然具有一定的挑战度。
简单路由程序设计的理想实验环境如图 3 所示。实验环境由 3 个物理网络互联而成。主机 B 为双网卡计算机,运行学生编写的简单路由程序,连接网络 1 和 2。路由器R为商用路由器(如华为路由器、思科路由器等),连接网络 2 和 3。主机 A 和 C 作为测试主机,分别连接到网络 1 和 3,用于测试网络的连通性。
目前多数学校不能为本科生提供上述理想的实验环境,因此,必须寻找一种普适的实验环境,以使学生顺利完成实验。实际上,通过划分子网的方式,可以将一个物理网络划分成多个逻辑网络。这些逻辑网络通过路由器相互连接,即可形成逻辑上的互联网。图 4 给出了一种理想实验环境的替代方案,在这种方案中,学生可在普通机房完成简单程序设计实验和验证。
在图 4 所示的实验环境中,主机 A 和 D 采用单网卡单 IP 地址的配置方式,主机 B 和 C 采用单网卡多 IP 地址的配置方式。通过合理地配置主机的 IP 地址(如图 4 中给出的 IP 地址),可以将主机 A、B、C 和 D 归属于 3 个不同的逻辑子网。主机 B 作为路由器使用,连接逻辑子网 1 和 2,运行学生自己编写的路由程序。主机 C 也作为路由器使用,连接逻辑子网 2 和 3,运行商用的路由软件。实际上,每个版本的 Windows 操作系统都带有路由转发功能。只要启动路由转发服务,通过 route 命令配置路由表,即可将普通 Windows 主机配置成路由器[12]。主机 A 和 D 为测试主机,分属于逻辑子网 1 和 3,在实验过程中,用于测试网络的连通性以及编写的路由器软件的正确性。
对于本科生来说,简单路由程序设计实验是具有一定难度的综合性实验。实验过程可以锻炼学生发现问题与解决问题的能力,培养学生精益求精、遇到困难不轻言放弃的品格。
4 实验内容的扩展和提升
对于多数学生而言,实验的基本要求就已经具有一定的挑战度,完成需要一定的时间和精力。对于部分优秀学生,实验内容可在多方面进行扩展,以进一步提升实验的挑战度,激发学生的学习热情。实验内容的扩展包括以下几个方面。
(1)参照 Wireshark 的功能,对捕获的数据包进行多层次、较为详细的解析,形成一个近似实用的数据包捕获与分析程序。
(2)采用多进程或多线程的编程方式,优化程序的结构,提升程序的执行效率。
(3)尝试利用线性表、哈希、树等方式组织路由表,研究路由表的查找效率,比较表项数量不同时的查找性能,并通过实验进行验证。
(4)为简单路由程序增加 NAT 功能,实现 NAT 地址转换。
5 结 语
计算机网络实验是计算机网络课程教学的重要环节,良好的网络实验设计可以加深学生对计算机网络基本原理的理解,培养学生较强的综合实践能力。笔者设计的实验内容以网络编程为主要手段,采用递进方式进行组织,既保证多数学生经过努力能够顺利完成实验的基本内容,又不失挑战性。通过在基本实验之上提供的扩展和提高功能,激发学生的求知欲望和追求卓越的精神。
该实验已在国家级一流本科课程“网络技术与应用”中实施,教学效果良好。虽然实验过程要付出很多时间和精力,但是多数学生完成后表示收获满满,是最值得完成的实验之一。网络编程实验可以很好地锻炼学生的编程能力,提高学生的分析与解决问题能力,对深入理解网络理论和数据包在互联网中的传递过程大有裨益。该实验要求环境简单,易于实施和推广。
参考文献:
[1] 符发, 杨厚群, 黎才茂, 等. 新工科背景下计算机网络实验教学改革探索[J]. 计算机教育, 2022(3): 39-42, 48.
[2] 陈平平, 谭定英, 耿笑冉, 等. 计算机网络实验教学中的“双真”教学模式构建[J]. 计算机教育, 2020(4): 106-109.
[3] 陈黎, 饶坚, 孙界平, 等. 双创教育模式下计算机网络综合性实验教学探讨[J]. 实验技术与管理, 2018, 35(12): 195-198.
[4] 胡夏芸, 严筱永, 张海涛, 等. 基于OBE的计算机网络组网实验案例教学[J]. 计算机教育, 2022(3): 116-120.
[5] 崔来中, 陆楠. 新工科背景下面向虚拟仿真实验的计算机网络课程实验教学探索[J]. 计算机教育, 2019(3): 146-150.
[6] 王亚文, 王建国, 刘宝龙, 等. 停课不停学: 疫情期间基于雨课堂的创客教育实践教学探究——以“计算机通信与网络”课程实验为例[J]. 实验技术与管理, 2021, 38(3): 182-187.
[7] 沈鑫剡. 网络技术基础与计算思维实验教程: 基于华为eNSP [M]. 北京: 清华大学出版社, 2020.
[8] 张举, 耿海军. 计算机网络实验教程: 基于Packet Tracer[M]. 北京: 电子工业出版社, 2021.
[9] Npcap. Packet capture library for Windows[EB/OL]. [2022-07-01]. https://npcap.com/.
[10] Libpcap. TCPDump & Libpcap [EB/OL]. [2022-07-01]. https://www.tcpdump.org/.
[11] Scapy. Scapy's documentation [EB/OL]. [2022-07-01]. https://scapy.readthedocs.io/en/latest/.
[12] 张建忠, 徐敬东. 计算机网络技术与应用[M]. 北京: 清华大学出版社, 2019.
基金项目:南开大学本科教育教学改革项目( NKJG2023109,NKJG2022077 )。
作者简介:张建忠,男,南开大学教授,研究方向为计算机网络、网络安全、物联网,zhangjz@nankai.edu.cn;徐敬东(通信作者),女,南开大学教授,研究方向为计算机网络、边缘计算与边缘智能、网络安全,xujd@nankai.edu.cn。
引文格式: 张建忠, 徐敬东, 吴英. 面向综合能力培养的计算机网络实验教学设计 [J]. 计算机教育, 2023(7): 188-192.
转自:“计算机教育”微信公众号
如有侵权,请联系本站删除!