发明内容
针对上述现有VPN管理系统通信中所存在的问题和不足,本发明的目的是VPN管理系统中在服务器和客户机之间提供一种可以传递层次复杂信息的通信方法。这种通信方法定义了通信的框架并列出了实现的具体报文,这样就可以使得服务器和客户机能够安全,准确的传递层次信息。
本发明是这样实现的:一种VPN系统内部服务器和客户端的通信方法,包括以下步骤,
1)数据库和组件设置于服务器上,服务器和客户机通过协议层互相连接;
2)客户机向服务器发送连接报文,服务器认证后打开连接,并根据客户机的要求从数据库或其他的存储介质中获得客户相应对象的信息,从而在组件的层次上构造出一个虚拟客户,装载客户机要求的信息后,服务器向客户机发送回应报文,建立连接结束;
3)客户机向服务器发送具体的操作报文,服务器根据操作报文的信息提取其数据库中的相应信息,并返回给客户机。
进一步地,该方法还包括,若客户机和服务器之间一段时间没有数据交互,服务器发送空报文给客户机以确认其工作状态。
进一步地,该方法还包括,客户机退出或服务器关闭时,发送关闭报文给对方,服务器关闭相应的组件系统或将相应客户的组件从系统中清除。
进一步地,所述报文包括认证部分和内容部分,其中,认证部分为包括了用户帐号标志和帐号认证信息的客户机标志。
进一步地,所述报文中的数据包括基本类型、结构类型和上下文类型,其中,结构类型数据主要定义表格中的数据;上下文类型数据主要针对具体的命令而设置。
进一步地,所述数据利用BER编码标准进行编码,其包括类型域、长度域和值域,其中,类型域用于区别数据类型;长度域用于表明数据的长度;值域即包括了具体的数据。
本发明所有的应用操作基本上都在服务器上执行,对于操作的日志以及权限的分配就很集中,同时用户还可以在客户端上操作,这样就达到了安全和方便的统一;客户端不再设置数据库和组件系统,客户端也得到了简化,方便了客户的移植;因为所有的客户是连接在一个组件系统上的,这样就比较容易控制他们的数据,每一个用户都直接操作相同的数据库就保证了数据库数据逻辑上的正确性。
本发明提高了系统的安全性,客户机不再拥有对数据库以及关键组件信息的控制,如果客户机要访问其他的资源,那么它必须通过服务器端进行访问,这样服务器就相当于具有了防火墙功能;同时也便于服务器对资源权限的控制。客户机访问相同的数据库,这也使得数据的一致性得到了加强。并且,系统采用了分层的原则,方便了系统的维护工作。
具体实施方式
如图2所示,本发明与图1的结构相比,将组件系统和数据库设置于服务器上,这样本发明主要靠服务器上的数据库来进行数据的共享。客户机和服务器之间通过新协议处理模块进行信息交互。新协议同时也定义了客户机和服务器之间的相应数据传输的格式,所有的客户机共用同一个设置于服务器上的组件系统。
本发明的新协议采用ASN.1在OSI的ISO 8824/ITU X.208(说明语法)和ISO 8825/ITUX.209(说明基本编码规则)标准。要想使客户机和服务器交流起来,本发明还需要选择适合它们之间用来交流的报文。本发明采用了包括Open报文,shutdown报文,keepalive报文,update报文,以及数据操作报文等等。本发明的协议的报文整体上划分为两个部分,一个是认证部分,另一个是报文内容部分。认证部分主要包含的是客户的标志,其是为了适应更复杂的认证关系而设置的。报文内容包含具体的报文的相关内容。
本发明的数据类型主要有以下几种:基本类型、结构类型和上下文类型。其中,基本类型分为UNSIGHED、INTEGER、OBJECT IDENTIFIER、DISPLAYSTRING和IPADDRESS,UNSIGHED主要描述无符号整数,INTERGER类型主要是描述有符号数字信息,OBJECT IDENTIFIER主要是描述对象的,DISPLAYSTRING主要是描述字符串的信息,IPADDRESS主要是描述ip地址的信息。结构类型主要定义表格中的数据,本发明利用SEQUENCE进行表示。上下文类型数据主要针对系统中的具体命令而设置的。下面将详细描述本发明的数据结构。
在网络上,传递的都是字节流,需要从这些字节流中分离出来需要的数据。传输的可能字符串、数值或者IP地址等信息。而在网络上流的就是字节,对于多元信息,只能通过编码规则来实现。本发明选用的是BER编码规则。主要原因是BER比较简单,比较容易实现。BER标准,也就是类型-长度-值的编码结构,如图3所示。类型域就是提示目标机器接收的数据的结构;类型域就是用于区别上述三种类型的。本发明类型域的前两位(从左起)是用来区分类型的,00表示基本类型,10代表上下文类型,第三位(左起)表示是原始的,还是结构化的。所谓原始的,也就是代表着它不是嵌套的,所谓结构化的,代表着它对一个或者更多得数据的值进行编码。剩下位的表示具体的类型。
下表是本发明数据的具体描述信息:
基本类型 |
类型域值 |
UNSIGHED |
00000001=01H |
INTEGER |
00000002=02H |
OBJECT IDENTIFIER |
00000003=03H |
DISPLAYSTRING |
00000004=04H |
IPADDRESS |
00000005=05H |
NULL |
00000006=06H |
结构类型 |
类型域值 |
SEQUENCE |
01100001=61H |
上下文类型 |
类型域值 |
Addobject |
10100001=A1H |
editobject |
10100010=A2H |
delobject |
10100011=A3H |
getobject |
10100100=A4H |
getnextobject |
10100101=A5H |
open |
10100102=A6H |
keepalive |
10100103=A7H |
update |
10100104=A8H |
shutdown |
10100105=A9H |
本发明以IPADDRESS为例对数据结构进行说明。若一个值为“128.150.161.8”的IP地址的编码为如图4所示。
报文的认证部分主要包含的是客户的标志,即是为了适应更复杂的认证关系,增加了账号标志和账号认证。内容部分也就是协议的PDU部分,主要包含协议相关的内容:PDU类型,这里的PDU类型也就是上述的上下文类型。报文主要包括Addobject、editobject、delobject、getobject、getnextobject、open、keepalive和update等类型。请求和回应代表是请求的消息还是回应的消息。请求ID是一个序列号。出错状态0代表成功,其他数值有应用程序设置。其余的部分是一些变量捆绑,也就是一组对象ID和对象的值的组合。如图5为本发明报文的结构示意图。
本发明相互通讯前首先通过连接报文建立连接,连接报文也就是open报文,主要是用于客户机向服务器打开连接。打开连接以后,服务器一般的操作是根据客户端的要求从数据库或者其他的存储介质中获得客户机的相应对象的信息,从而在组件的层次上构造出一个客户出来,为以后客户访问服务器做好准备。一般来说服务器在装载客户机要求的信息的时候,一般要花费一些时间,所以,客户机一般要等待服务器向客户机发回回应以后,才确定建立连接结束。
keepalive报文相对比较简单,服务器想查询客户端是否还存在的时候,就调用这个报文来验证对方工作是否正常!这个报文没有对象和值的列表,比较简单。如图6所示。
Addobject、editobject、delobject、getobject和getnextobject属于数据操作报文。其格式与前述报文基本相同。主要的区别是这些报文需要指明具体操作的对象,具体操作的对象由PDU的第一个objectid来表示。getnextobject用于获得数组中的元素,当需要获得数组的下一个数据的时候,可以附加这个数组的上一个数据,就可以获得数组结构中的下一个值。当到达最后一个的时候,就不能再继续使用getnextobject了,这时候继续使用,将会导致异常,错误标志就被设为-1,代表到达数组的最后一个。
shutdown报文主要是用来相互通知客户离开或者服务器要关闭的情况,增加这个报文主要是提供“gracely”关机服务。shutdown报文比较简单,类似于open报文。如图7所示。
本发明分别以open、shutdown、getobject和update的几个报文的交互过程来详述。open报文主要用于客户端通知服务器端,客户端已经启动,要求在服务器上建立自己的组件系统,open报文结束以后就可以从服务器上真正地获得对象。如图8所示,首先客户端向服务器端发送open报文,通知服务器,要建立连接。服务器接到通知以后,立即回应一个消息,之所以这样,主要是因为服务器初始化某个客户的组件系统的时间有点长,立即回一个消息,有助于客户端的处理。服务器发送消息以后,就根据open报文的内容,创建对应的组件系统。当创建完毕以后,就发送一个初始化完成的消息,这样连接就正式建立,客户和服务器就可以进行正常的通讯了。
如图9所示,shutdown报文是为了当客户退出的时候,告诉服务器关闭相应的组件系统。当服务器关闭的时候,需要把相应客户的组件从系统中清除。shutdown报文和open报文类似,不同的是open报文主要是客户机向服务器发送的,shutdown可以是双向的。例如当服务器关闭的时候,可以给每一个客户发送一个shutdown报文。
与对象有关的报文主要是对指定对象的增加、删除或进行其他编辑,以及获得一个对象的报文等。该报文在第一个object id中需要保存要操作的对象。本发明以getobject报文为例详细说明客户端和服务器端是如何交互的。如图10所示。
update报文是为了当服务器方面的对象发生改变的时候,服务器方为了通知客户端而采用的报文。其交互模型比较简单,如图11所示。