首页
杂志网
当前位置:首页>>计算机技术>一种多协议模拟器的设计与实现>正文

一种多协议模拟器的设计与实现

来源:杂志发表网时间:2015-12-21 所属栏目:计算机技术

   摘 要:目前,很多网络工具在遇到新的网络协议出现的时候,很难将新的协议快速集成到现有的网络工具中,从而给用户造成很多使用上的不方便。本文设计的一种网络协议模拟器PRT-GET可以很好的解决上述问题,PRT-GET按照自定义的协议工作说明书工作,它可以方便的把新协议加入到PRT-GET中,从而方便用户使用新的网络协议来完成通信工作。

关键词:网络协议 动态链接库 协议工作说明书

一、引言

PRT-GET定义为一个协议模拟器,所谓协议模拟器就是通过某种途径模拟各式各样的网络通信协议从而可以进行具体而实际的网络通信,最终达到同时支持多种通信协议的目的。PRT-GET不同于现今网上存在的各种网络工具,使用它可以编写基本上所有的基于Socket应用层的通信协议,PRT-GET的设计解决了用户使用网络工具时难以支持新出现的协议的问题。

二、PRT-GET的特点

作为一个优秀的协议模拟器,PRT-GET具备以下的几个特点:

1.PRT-GET是一个动态链接库。考虑到应用程序的扩展极其的不方便,所以没有把PRT-GET设计成应用程序的形式,而采用动态链接库的方式,该方式可以方便地进行二次开发,也方便扩展软件的功能。

2.PRT-GET是完全面向对象的。PRT-GET是一个可二次开发的动态链接库,所以面向对象的设计模式能令二次开发更加高效。

3.PRT-GET的代码扩展性高。使用PRT-GET时,如果PRT-GET本身提供的功能不够,那么用户可以通过扩展PRT-GET中对应的类,以实现自定义的功能。

4.PRT-GET支持自定义协议。PRT-GET的最大特色就是支持用户自定义应用层协议,通过用户编写的协议工作说明书,PRT-GET忠实地执行用户在说明书中指定的每一个操作,也就是说,用户无需编写任何一句代码就可以使PRT-GET支持自定义协议。

5.PRT-GET的使用方便。PRT-GET使用时只需要调用动态链接库就可以轻松地使用其中的协议控制类。

三、PRT-GET的设计

1.PRT-GET的工作层次

PRT-GET设计为一个动态链接库,它为系统应用程序提供中间层服务,使得应用程序无需了解网络通信的具体逻辑,只需把网络的内容当作本地的内容操作即可,从这点看起来PRT-GET也是一个协议,而且更是一个能提供很多协议服务的协议支持软件。PRT-GET在网络中的工作层次如图1所示。

对于使用PRT-GET作为网络通信协议的应用程序来说,用户可以指定PRT-GET使用哪个协议进行工作,因为PRT-GET是在需要使用时才加载协议内容的,所以用户可以随时动态指定PRT-GET使用的协议,甚至可以动态修改PRT-GET使用的协议内容。当协议组里面包含的协议不满足用户要求时,用户还可以添加新的协议,这只需要添加一个协议工作说明书到协议组里面就可以了。

应用程序

计算机

PRT-GET

协议组

协议内容

服务器

服务程序

用户

图1 PRT-GET工作层次

PRT-GET工作时根据用户指定的协议加载协议工作说明书,然后再依照协议说明书内容与远端服务器/客户端协作工作。对于PRT-GET来说,远端机器是透明的,PRT-GET的机器透明性是基于工作在TCP协议上的Socket的,所以对于PRT-GET来说没有机器的差别,没有平台的差别。

2.PRT-GET的几个概念

在PRT-GET中,有一些基本概念贯穿于整个PRT-GET的设计和实现过程中。

(1)协议

PRT-GET中的协议对应着一个网络协议。协议在PRT-GET程序中只是一个逻辑的存在,并没有具体的某个协议的实现,所以如果要使PRT-GET支持某个协议的话,需要编写一个具体的协议工作说明书与PRT-GET相配合。也就是说协议工作说明书是PRT-GET的具体协议的载体,也是PRT-GET支持协议的体现。

(2)元素

元素是PRT-GET的一个新概念。所有的协议都是一些基本通信单元的组合,而PRT-GET就是通过将协议分解成一个个的基本单元从而做到支持各种协议的。这种基本单元就是元素。元素是PRT-GET中协议构成的基本单位,一个PRT-GET的协议本质上就是一些PRT-GET的元素序列,同样的,对元素的不同组合可以生成不同的协议,这就是PRT-GET可以支持不同协议的本质原因。

程序中的一个元素类的对象对应着协议工作说明书的实际一行,也就是代表着通信交互中的一个基本交互单元。协议工作说明书中指定了每一个通信单元应当使用的元素类,并执行相应动作实现对应的通讯单元。

为更好的实现通讯单元的分割和减少通信协议工作说明书的编写难度,定义了动作元素和辅助元素这两个概念。

动作元素:对应着一个通讯基本操作,它指明了对于本次操作应该如何进行。

辅助元素:对动作单元进行辅助处理的单元,它是从属于动作单元,一个动作元素可以有零个或多个辅助元素。

动作元素和辅助元素指定了协议的一个通信单元的工作方式,而本次通信的内容就由内容项指定了。一个元素由动作元素和辅助元素、内容三项组成,其结构如下:

动作单元 [辅助单元]* [内容]

(3)分析器

PRT-GET中并没有协议的实体存在,代替的是用协议工作说明书作为协议的载体,而协议工作说明书只是一个文本文件,如何将这个协议工作说明书的内容加载到内存并转变为一个一个对应的元素,这个工作是由分析器来解决的。


分析器有协议分析器和元素分析器两种,分别用于不同用途。

协议分析器:协议分析器主要的工作是分析协议工作说明书并创建该说明书对应的元素序列,辅助Protocol实体的创建。

元素分析器:元素分析器的工作是从一个字符串中分解出辅助元素和内容,以支持元素类的动作。

PRT-GET工作流程

PRT-GET的使用非常的方便,只需要使用URL创建出具体的一个协议对象则可以与主机通信,而此URL的要求为“protocol://host: port/file”格式,其中port并不是必须的,如果没有指定的话就会使用对应协议的协议工作说明书中指定的默认端口。

PRT-GET工作时,将会根据用户提交的协议名检查其协议说明书库中是否有该协议,如果发现对应的协议不存在则抛出一个异常提示用户。找到指定协议后,PRT-GET将创建一个协议对象以实现通信,并将协议工作说明书加载进内存中,分析生成一个元素序列,最后就执行元素序列以实现实际通信目的,其工作流程如图2所示。



读取



开始

结束

查找协议工作说明书

协议组

协议存在

抛出异常

创建协议对象

分析工作说明书

执行元素动作

图2 PRT-GET工作流程图

四、主要包的设计

对PRT-GET的设计采用按功能结构分包的方式,将功能相近的类放置在一起,并按逻辑位置将其放在不同的命名空间之中。

PRT-GET中最核心的三个包分别是Element(元素包)、Analyze(分析工具包)和Util(其他工具包),此外,还有ProtocolManager和Protocol两个核心类。

PRT-GET将网络操作分为基本的单元——元素,在程序中的体现就是元素(Element对象),PRT-GET将所有的元素类都放置在Element包中,并通过接口IElement实现元素动作的统一。

Analyze包是一个存放存放分析器的包。PRT-GET经常需要对协议工作说明文件进行分析,这就需要一个分析器专门对协议中的字符串进行分析,Analyze包中的类就是负责此类工作。

PRT-GET在进行一些处理时经常会用到一些方法,为增加代码的重用率,将所有经常使用到的方法或操作封装为类存放在Util包中。

五、协议工作说明书

协议工作说明书是协议的真正载体,它以“协议名+.prt”为文件名存放在PRT-GET动态链接库目录的“protocol”文件夹下,PRT-GET加载协议时到这查找该协议是否存在,当查找到时就会加载为一个协议实体。

1.协议工作说明书的组成

网络通信主要是发送内容和接收内容,PRT-GET的主要作用就是屏蔽了这一层中繁琐的通信,使得用户可以直接对通信的有用内容进行处理。

基于网络通信只有发送和接收两种情况,协议工作说明书也只有两种基本元素:Send和Receive。Send发送数据,而发送的数据可以是在协议说明书中指定的常量,也可以是用户动态加载的内容。Receive同样也可以接收常量,或者接收到内存中对应的元素的Data数据中。除了这两种基本元素外,PRT-GET还扩展了另外两种元素:Skip和Repeat。Skip能忽略用户不感兴趣的内容,Repeat的作用就是重复进行用户的一些烦琐的操作,这些对提高用户的工作效率有很大的帮助。此外,还有其它一些辅助元素可以指定各种动作元素的具体操作内容。

2.协议工作说明书编写要求

编写协议工作说明书必须满足以下格式:

Port 端口号

(Element名 [辅助元素名]* 内容)*

协议说明书的最开始应该是端口号说明,而后出现的是元素字符串。元素字符串由三部分组成,其中元素名是指该动作元素的名称;辅助元素指定了动作元素的一些要求,一个动作元素可以有几个辅助元素的存在;第三个部分就是内容,内容可以是常量内容,也可以是变量,也就是用户指定的数据。

一个协议说明书只能由一个端口号,但是却可以有多个元素,不同元素之间用换行隔开即可。定义一个协议说明书必须以该协议名称加上“.prt”为协议工作说明书名称,并将其放置在PRT-GET的动态链接库目录下的protocol文件夹内。

六、应用实例

多协议服务器是一个使用PRT-GET作为通信层的服务器软件,以文件映射作为虚拟路径管理手段。通过该服务器软件可以设置虚拟目录,用户可以指定访问需要使用的网络协议(如HTTP),当有客户端请求时,服务器调用PRT-GET创建一个协议实体执行通信,并由服务器解释请求的URL,将其映射为相关系统文件,客户端可以和服务器进行通信,请求服务器上的文件资源如图3所示。

图3 利用PRT-GET模拟HTTP通信

七、结语

本文讨论了多协议模拟器PRT-GET的设计思路和方法,并通过实例模拟HTTP协议验证了文中所提设计方案的可行性。由于PRT-GET目前的版本设计中辅助元素还不够多,模拟器的交互设计还有所欠缺,下一步将增加辅助元素的设计,丰富模拟器的功能,增强其应用的灵活性。



参考文献

[1] 陈富春.ASP.NET中XML数据与关系数据的交互技术.现代计算机.2005(04):P35-37

[2] 罗军舟,黎波涛,杨明等. TCP/IP协议及网络编程技术.北京:清华大学出版社,2004

[3] 陈娴,刘开文,王蓉玲等. ASP.NET项目开发实践. 北京:中国铁道出版社,2003


点此咨询学术顾问 快人一步得到答案

SCI期刊问答

回到顶部