APP下载

计算机网络协议分析与开发实验的一种新教学方法

2011-12-31

计算机教育 2011年10期

  摘要:提出一种基于逆向工程与重叠网络开展计算机网络协议分析与开发实验教学的方法。通过协议逆向工程实验,提高学生的协议分析能力,并可以让学生利用协议分析结果进行协议开发。利用重叠网络,学生可以在完全不触及操作系统底层网络协议栈的情况下,自行设计一个完整的网络协议栈。它可以模拟TCP/IP协议栈的基本功能和特性,如路由协议、滑动窗口协议、信号协议等。这种实验教学方法不仅可以培养学生的协议分析与设计能力,而且可以极大的提高学生的协议开发能力。
  关键词:网络实验;教学方法;逆向工程;重叠网络
  
  1背景
  作为与高等院校计算机专业的网络理论课程相配套的网络实验课程,目前主要有两个实验课程设计方向:一个是面向真实网络环境的网络工程实验设计,其目的主要是让学生熟悉真实网络环境中路由器/交换机的配置、网络环境的搭建和网络管理方法;另一个是面向网络协议分析与开发的网络实验设计,其目的主要是让学生具备对网络协议的独立分析与设计、验证能力。
  这两类计算机网络实验课程分别从网络工程和网络协议的分析与开发两个方面弥补了计算机网络理论课程教学的不足,其中网络协议分析与开发对巩固和加深学生对计算机网络核心协议的理解、掌握网络协议栈的开发方法尤为重要。
  目前高校开设的计算机网络协议分析与开发实验的内容,在协议分析方面,普遍侧重于通过数据包嗅探软件对现有协议进行分析(如利用Ethereal/ Wireshark等软件分析数据链路层、网络层和传输层协议[1]),或通过网络仿真器进行协议及其性能的分析(如利用NS2分析网络协议[2-3]);在协议开发方面,则侧重于利用套接字编程进行应用层协议的开发[4],或利用一些网络协议开发实验平台进行底层协议开
  发(如利用NetRiver进行网络协议的编程、调试和可视化执行[5])。
  这些实验课程从设计内容上大致分为3类:网络协议分析驱动实验、网络服务与应用驱动实验、网络协议开发驱动实验。
  1) 网络协议分析驱动实验。这类实验主要以一些配置观察实验或验证性实验为主,它们有时候也与工程类的网络实验课程相结合[6]。学生利用数据包嗅探软件或网络仿真器对协议进行分析。其优点是学生通过实验,可以加深对主要网络协议的理解,并具备一定的网络协议分析能力;其缺点是未能将协议分析能力应用于新协议的设计,没有培养学生独立设计、开发协议栈的能力。
  2) 网络服务与应用驱动实验。这类实验主要以一些网络服务的配置管理、网络应用程序的开发为主。其优点是学生通过实验可以熟悉常用网络服务的安装、管理方法,熟悉套接字编程;其缺点是缺乏协议分析内容,协议开发集中在对应用层协议的开发,底层协议的实验内容不足。
  3) 网络协议开发驱动实验。由于商用的路由器/交换机等网络设备的网络协议栈代码不对外开放,而开源系统如Linux的网络协议栈代码又过于复杂,不太适用于实验教学,因此目前这类实验主要是利用一些商业的网络协议开发实验平台[7-8]来进行,硬件上包括实验控制设备、协议测试设备等,软件上包括实验集成开发平台、数据包发送器、数据包分析器、实验管理系统等。其优点是实验环境集成度高,便于学生编写、调试和运行程序,也方便教师对实验信息、系统和学生进行管理;其缺点是学生在一个受限的环境中进行实验,实验内容灵活性不够,各实验内容之间关联度不够紧密。
  总体来说,这些网络协议分析与设计实验课程或多或少存在下列两个问题:
  1) 协议分析与协议开发实验内容相对独立,未能有效地将两者相结合,充分体现协议分析在协议开发中的作用;
  2) 协议开发实验内容比较分散,学生缺乏对一个完整的网络协议栈开发方法的理解。
  通过上述分析,根据我系计算机网络课程教学目标的要求,我们设计了一套基于逆向工程与重叠网络的协议分析与开发实验,以将协议分析与协议开发有机结合,并使学生具备独立设计、开发一个完整网络协议栈的能力,有效地解决了上述问题。
  2设计方法概述
  2.1协议逆向工程
  对于开放协议(如IP、TCP、HTTP),其协议规范都可以通过公开文档(如RFC)获取。在传统的计算机网络协议分析实验中,学生都是通过数据包嗅探软件对开放协议进行观察分析或验证性分析,并满足于此。这虽然对学生理解与掌握网络核心协议很有帮助,但却未能真正有效地提高学生的协议分析能力,并将协议分析与协议开发结合起来。
  所谓协议逆向工程,就是利用数据包嗅探软件,通过分析网络中的信息交换活动,做出一个独立的实现用以模拟那些活动。协议逆向工程实验不仅可以让学生了解协议分析的重要性,极大地调动学生进行协议分析的兴趣,提高其协议分析的能力,而且可以让学生利用协议分析结果进行协议开发,从而充分体现协议分析在协议开发中的作用。
  在具体的实验课程设计中,考虑到封闭协议(如SMB、Skype)的复杂性[9],教师可以通过自行设计的协议来让学生进行逆向分析,进而重塑协议。
  2.2基于重叠网络的协议栈设计
  重叠网络是一个位于一个或者多个已存在网络之上的独立的虚拟网络。它的典型应用包括应用层组播、Web content分布式网络、弹性重叠网等[10]。在计算机网络协议开发实验中利用重叠网络的好处是,我们可以在完全不触及操作系统底层网络协议栈的情况下,自行设计一个完整的网络协议栈。我们将该协议栈命名为NjucsNet,它模拟了TCP/IP协议栈的基本功能和特性,如路由协议、滑动窗口协议、信号协议等。
  1)NjucsNet协议栈概述。
  一个完整的NjucsNet协议栈允许客户和服务器创建套接字、打开连接以进行可靠的数据传输。
  NjucsNet协议栈是一个分层架构,第n-1层为第n层提供服务和API。它分为4层:重叠网络层ON、简单网络层SIP、简单传输层STCP和应用层APP。其中,简单传输层为应用层提供可靠的字节流服务。简单网络层为简单传输层提供类似IP的端到端连接。重叠网络层为运行NjucsNet协议栈的主机建立重叠网络。主机自身的TCP/IP层则运行在重叠网络之下。
  2) 重叠网络层设计。
  重叠网络拓扑定义在一个数据文件中,它定义了重叠网络中节点之间的直接链路代价,这个数据将被简单网络层中的路由协议调用。
  重叠网络层通过重叠网络进程ON实现。ON进程维护该机器与所有它的邻居之间的连接和一个与简单网络层SIP之间的本地连接。ON进程持续接收来自其邻居的报文(有两种类型的报文:普通数据报文和路由更新报文),并将它转发给SIP层。同时,ON进程持续接收来自SIP层的报文,并将这些报文发送给下一跳节点。
  3) 简单网络层设计。
  在简单网络层中,我们使用节点号来标识一个主机,其作用与TCP/IP中的IP地址类似,节点号是一个主机IP地址的最后8位代表的整数。
  简单网络层通过SIP进程实现。该进程分别通过本地连接与ON进程和STCP进程互连。该进程主要负责路由和转发数据包。SIP层在转发数据包时需要根据本机为源节点、中间节点和目的节点这3种不同情况分别进行处理。SIP层维护一个路由表,该路由表由SIP中的路由协议构建。
  4) 简单传输层设计。
  简单传输层STCP提供了类似TCP的可靠按序字节流。它需实现以下机制:连接管理、并发连接、校验和、序列号、使用GBN协议确保数据的可靠传输、数据和信号的重传。为方便学生在规定的时间内开发协议,与TCP协议相比,我们对STCP协议需实现的功能做了简化,它只需实现数据的单向传输、连接只由客户端发起和关闭、协议不需要支持流控和拥塞控制。
  
  简单传输层STCP的设计包含了两部分的内容:信号控制和数据传输。信号控制部分主要是让学生熟悉传输层协议是如何建立连接,以及如何解决信号数据的丢失和损坏。数据传输部分则是让学生掌握发送/接收缓冲区的设计、滑动窗口协议和校验和计算。
  5) 应用层设计。
  应用层程序分为客户端程序和服务器程序,它们分别通过调用简单传输层STCP提供的针对客户端和服务器的API来实现网络通信。我们要求学生设计的API应模拟套接字API的功能,并且具有类似的函数名。
  2.3关键技术
  1) 基于重叠网络的数据收发。NjucsNet协议栈使用重叠网络层的TCP连接来发送和接收数据,由于在使用TCP的情况下,数据是以字节流的形式发送,为了能够让接收端确认收到一个完整的数据,我们采用了在字节流中添加数据开始分隔符和结束分隔符的方法。这些特殊分隔符不能在传递的数据中出现。
  2) 数据丢失和段错误的模拟。因为重叠网络层是通过TCP而不是UDP建立的,所以我们不会有数据丢失和段错误的发生。为生成这类错误,我们需要在简单网络层向简单传输层提供的API接口中调用模拟函数,按一定的概率丢弃数据和产生段错误。
  3) 有限状态机FSM的设计。简单传输层中客户端、服务器的状态定义和状态转换,以及客户端和服务器中GBN的事件驱动都需要用到FSM。但协议内部FSM的设计并不是固定不变的,学生在实验中,可以根据自己对协议功能和内部状态的理解来设计FSM。
  4) 发送/接收缓冲区的设计。学生对简单传输层中发送/接收缓冲区的设计,对整个简单传输层设计的成功与否也起着十分重要的作用。其中涉及到的关键技术包括:发送缓冲区中保存的未确认数据段及其数目的定义、接收缓冲区中数据的保存和提取定义、发送/接收缓冲区的生存期定义、发送/接收缓冲区的互斥访问。
  3实验课程设计
  我们设计的实验课程以自底向上的方法逐步展开,由7个实验组成,最终目标是让学生通过实验,能够基于重叠网络构建一个完整的网络协议栈,并能在其上运行应用程序。
  网络协议栈4KQYYD4GUgqFtsi/qGpBMdozLECA5gIMAcqX89S+rs0=设计的关键是各层功能的划分和各层之间API接口的定义。我们提供给学生参考的一个NjucsNet协议栈及各层之间的API接口定义如图1所示。
  图1NjucsNet协议栈API
  3.1实验1:Wireshark数据包嗅探
  由于整个实验课程的协议分析与开发都要依赖于一个协议分析软件来开展,而Wireshark是目前最为流行的开放源码协议分析软件,所以我们将对Wireshark软件的介绍与使用作为课程的第一个实验,其目的是为了让学生熟悉协议分析软件Wireshark和数据包嗅探的基本方法,为后续的实验打下坚实的基础。实验内容包括:
  1) 掌握协议分析软件Wireshark的使用方法;
  2) 掌握通过数据包嗅探进行协议分析的方法;
  3) 选择典型协议,并阅读相应的协议RFC文档。
  3.2实验2:协议的逆向分析与实现
  这个实验的目的是让学生理解协议的逆向分析方法并掌握客户端、服务器的套接字编程方法。学生利用Wireshark软件捕获并分析教师提供的客户、服务器之间交互的报文,并最终重塑客户、服务器协议软件。实验内容包括:
  1) 阅读经典的协议逆向分析文档(如Skype),掌握协议逆向分析方法;
  2) 通过协议逆向分析,实现与教师提供的客户、服务器软件等效的协议软件。
  3.3实验3:重叠网络层实现
  从这个实验开始,后续实验都需要学生分组完成,一般3~4个人一组,这是因为协议栈每一层的开发都需要多台机器之间的配合。
  重叠网络层位于学生需要实现的完整协议栈和主机自身的TCP/IP协议栈之间。这个实验的目的是让学生实现NjucsNet协议栈中的重叠网络层ON,然后使用一个简单的网络驱动程序来测试重叠网络层的实现。实验内容包括:
  1) 熟悉重叠网络概念和实现方法;
  2) 编写重叠网络层ON;
  3) 编写一个简单的网络层协议对ON进行测试。
  学生在做这个实验时,需要为重叠网络层预先定义其拓扑结构,图2显示了一个包含4个节点的重叠网络和其对应的拓扑数据文件内容。
  图2重叠网络拓扑
  3.4实验4:简单网络层实现
  这个实验的目的是让学生实现NjucsNet协议栈中的简单网络层协议SIP。实验内容包括:
  1) 掌握简单网络层协议SIP的设计、实现方法;
  2) 掌握距离矢量协议的设计、实现方法;
  3) 编写简单网络层协议SIP。
  我们要求学生设计的SIP路由协议是一个距离矢量路由协议。它使用链路代价作为路由度量值。当在两个节点之间存在多条链路时,应选择具有较低总链路代价的路径。SIP路由协议通过各节点定期发送的路由更新报文构造路由表。在图2所示的重叠网络中,当网络稳定时,各节点的最终路由表如图3所示。
  图3各节点路由表
  3.5实验5:简单传输层协议实现——信号部分
  由于简单传输层协议涉及的内容较多,我们将它分为两个实验来完成。本实验实现的是STCP的信号部分,它的目的是让学生熟悉传输控制层信号协议的设计、实现。熟悉传输控制层协议是如何建立连接,以及如何解决信号数据包的丢失和损坏。实验内容包括:
  1) 掌握传输层信号协议的设计、实现方法;
  2) 掌握传输层协议建立连接、处理报文丢失和损坏的方法;
  3) 掌握通过有限状态机FSM要求编写代码的方法;
  4) 编写简单传输层协议的信号部分。
  3.6实验6:简单传输层协议实现——数据传输部分
  本实验实现的是STCP的数据传输部分。它的目的是让学生熟悉传输控制层数据传输协议的设计、实现。熟悉滑动窗口协议和校验和计算。通过完成本实验和上一个实验,学生能够完全掌握传输控制层协议的核心组件的设计和实现,包括支持并发连接、支持按序可靠的字节流、能够处理数据包的丢失和损坏。实验内容包括:
  1) 掌握传输层数据传输协议的设计、实现方法;
  2) 掌握滑动窗口协议和校验和计算;
  3) 编写简单传输层协议的GBN和checksum部分以构成一个完整的传输层协议。
  3.7实验7:完整协议栈测试
  作为整个实验课程的最后一个实验,本实验要求学生利用简单传输层STCP向应用层提供的API编写应用层程序,以构成一个完整的协议栈。应用层程序最好能实现多台机器之间的互相通信,以方便小组成员协同测试。我们在课程中要求学生实现的是一个简化版的即时通信软件。实验内容包括:
  1) 熟悉应用层协议的设计、实现方法;
  2) 将应用层、STCP、SIP和ON整合以构成一个完整的协议栈。
  4结语
  计算机网络协议分析与开发实验一直是计算机网络实验教学中的一个难点,如何能让学生通过实验真正掌握协议分析与开发的精髓,并具备协议分析与开发的能力是此类实验要重点关注的内容。本文提出了一种基于逆向工程与重叠网络开展协议分析与开发实验的方法,介绍了系统组成、关键技术和课程设计内容,学生通过实验,可以独立设计并开发出一个完整的网络协议栈,这对提高学生的协议分析、设计和开发能力有着极大的好处。
  参考文献:
  [1] Jeanna Matthews. Computer Networking: Internet Protocols in Action[M]. NewYork:Wi