龙恒
摘 要: 介绍了一套将网络日常维护工作划分成任务的网络控制系统的工作原理和实现过程,该控制系统由与设备打交道的控制器和用户操作系统两部分组成。文章介绍了系统的结构并且给出了拓扑图,介绍了控制器的结构以及控制器和用户操作系统的实现过程,并通过一个使用案例,介绍了该系统的功能。
关键词: 网络控制; 任务划分; 多线程; 套接字
中圖分类号:TP311 文献标志码:A 文章编号:1006-8228(2018)02-32-03
Abstract: This paper introduces the working principle and realization process of the network control system which divides the daily network maintenance work into tasks. The control system mainly consists of the controller which deals with the equipment and the user operating system. This paper introduces the structure of the system and gives the topology. It introduces the structure of the controller and the realization process of the controller and the user operation system, and introduces the function of the system through a case study.
Key words: network control; task dividing; multi-thread; socket
0 引言
随着计算机和网络技术的飞速发展,各单位使用的与网络相关的设备也越来越多,每种设备的用途各不相同,理论基础也各异,要熟练掌握这些设备的使用方法非常不容易,通常需要经过较长时间的培训和实践上的积累。
本文将研究一种与网络设备进行交互的机制,将日常的工作划分成容易理解的任务,通过可视化界面进行操作,即可生成控制网络设备的命令并发送给设备,其效果与直接在设备上输入命令是一样的。该系统降低了使用门槛,节省了人员的培训成本,使用者不需要了解网络设备的命令以及相关的理论细节就能完成任务。
该机制还有助于提高安全性:用户不需要直接与设备交互,不需要知道设备的帐号和密码,减少了帐号、密码泄漏的问题;工作以任务的形式组织,设备只能运行经过验证的命令,降低了误操作的几率,并且对操作过程记录了详细的日志,即使出现异常操作,也很容易通过逆操作进行恢复;该系统通过一个服务器软件与设备进行交互,设备只要对运行该服务器软件所需的IP地址开放访问权限即可,这降低了设备被入侵的可能性。
1 系统结构
该系统由一个用户使用的操作系统(以下简称操作系统)和一个与设备交互的服务器系统(以下简称控制器)组成。用户在操作系统上执行任务,执行结束后会生成相应的命令,经过编码后发送给控制器,控制器负责接收操作系统生成的命令,解码后发送到设备上执行。系统的拓扑图如图1所示。
图1 系统拓扑图
2 控制器的设计
控制器是一个服务器软件,用来接收操作系统发过来的命令并且与指定的设备进行交互,控制器与操作系统之间使用TCP协议进行通信。
控制器使用多线程技术实现,由一个主线程和多个子线程组成,工作时每个子线程对应一个控制器与设备的连接,主线程在控制器启动的时候开始运行,一直到控制器关闭的时候才结束运行;子线程以线程池的方式组织,也是在控制器启动的时候全部启动,在控制器退出的时候才终止,子线程启动后立刻转入休眠方式,在工作时才被唤醒,使用线程池技术,可以节省线程启动和结束的时间,提高性能[1]。
2.1 主线程
主线程只负责建立连接和启动子线程的工作,启动后以阻塞的方式调用套接字在指定的接口上监听,控制器接收到一个操作系统发起的连接后,就随机启动一个休眠的子线程,之后就由该子线程与操作系统进行交互,如果主线程发现线程池中没有空闲的子线程,就给操作系统返回一个超出最大连接的错误提示。
2.2 子线程
控制器的主要业务逻辑在子线程中实现,子线程有三个地方可能会造成阻塞。第一是与设备建立连接的时候,第二是将命令发送给设备的过程,第三是等待设备返回运行结果的时候。为了能灵活地配置子线程在每个阻塞点的等待时间,子线程使用套接字编程的时候采用了非阻塞工作模式。
子线程接收到操作系统发送的命令后,对命令进行base64解码[2],解码后将命令进行分解,每条命令都携带有身份验证信息,首先进行身份验证,如果不能通过验证,则给操作系统返回一个身份验证错误信息,身份验证成功后,通过相应的协议(例如telnet、ssh)将命令发送到设备上运行,最后将运行结果反馈给操作系统。
由于操作系统一般都是采用B/S结构设计的,而B/S结构通常需要等待一次请求处理完成后才能给用户返回处理结果,为了避免等待时间过长,控制器是先接收完操作系统一次需要运行的所有命令才开始与设备进行交互的,命令接收完成后立刻就会给操作系统返回一个响应。
2.3 稳定性及安全性考虑
在服务器软件设计时,安全性和稳定性非常重要,主要考虑以下几方面。
⑴ 每条命令都带有身份验证信息,以进行合法性验证。
⑵ 命令长度要有限制,避免接收到太长的命令而导致资源过度消耗以及发生缓冲区溢出攻击。
⑶ 固定分配一个接收命令的缓冲区,避免多次动态分配内存造成内存碎片,从而影响性能。
⑷ 命令的语法检查,例如命令的格式、最小长度、特殊符号等,以防止出现恶意构造的命令绕过检查的情况。
3 操作系统的设计
操作系统的是一套B/S结构的系统,开发语言为PHP,采用了MVC模式[3]。使用PDO建立数据模型,使用自主研发的一套名为“solar”应用框架作为控制器,视图使用一套自主研发的模板引擎“saturn”来实现。
开发这套网络控制系统最重要的一个目的是可以根据事先设定好的任务来简化日常的网络维护的工作,任务划分的工作就是在操作系统这里完成的,执行一个任务就会生成一批在某个网络设备上运行的命令,然后提交给控制器。
为了实现任务到命令的转换,每台设备需要实现一个Device类,该类的每个成员函数对应一个任务,例如禁止一個IP地址上网,这个任务对应的成员函数为DenyIP。在同一个网络环境中,每个设备完成的任务是不同的,例如在某台防火墙上禁止某个IP地址上网,在某台交换机上限制某个机房上网,而且不同的设备的命令可能也是不同的,因此每个Device类之间没有继承关系,需要针对设备进行编写。
操作系统支持多用户同时使用,因此有用户管理、权限控制的功能,用户完成某个任务必须先获得授权,操作系统还有详细的日志系统,详细记录了用户工作的整个过程,使得管理员对系统的使用情况有一个全面的了解,还有一个用处就是当发现操作失误导致网络异常的时候,可以根据日志进行逆操作。
操作系统的开发不算复杂,基本与普通的B/S结构的软件设计没太大区别。本系统使用PDO技术访问数据库,具有通用性强、避免出现SQL注入安全漏洞等优点[4]。“solar”应用框架本身有对用户提交的字符串进行过滤的功能,默认情况下将过滤后的数据提交给用户使用,过滤后的数据可以防止出现XSS等通过提交非法字符而产生的安全漏洞,当然用户也可以选择对原始数据进行自主过滤后再使用。“saturn”模板引擎则实现了代码和美工设计的分离,美工设计人员只要设计好静态的HTML格式的模板,然后在正确的位置上放上saturn的数据访问标签,根据目录结构放置在saturn指定的目录中即可[5]。
4 部署
该系统部署方式比较灵活,图1是一个典型的部署方式,操作系统和控制器可以部署在同一台服务器上,也可以部署在不同的服务器上,出于安全考虑,操作系统和控制器通常都部署在同一个子网内,避免它们之间交互的命令数据被截获或被篡改。而用户可以根据需要从局域网或互联网访问操作系统。
考虑到安全性和稳定性,一个控制器对应一台设备,也就是说是一个进程对应一个设备。这种设计可以避免某一个进程发生安全问题或者意外崩溃,进而导致与所有的设备交互都出现问题。如果需要使用到多个设备来完成任务,则部署多个控制器,而操作系统只需要部署一套即可,只需要针对每台设备编写一个Device类。
5 应用案例
以该系统在本校的使用情况作为案例进行分析,我校有两个网络出口,每个网络出口都部署了一台防火墙,根据本校的网络使用情况,经常需要对网络进行配置以实现某些功能,如果将这些需求以任务形式进行组织,通过图形界面执行,将会大幅度减轻网络管理员的工作量。下面举几个应用例子。
⑴ 计算机机房网络管理:教师在机房上课,经常需要开放或关闭整个机房网络,或针对某一个IP地址开放或关闭网络,每节课都需要多次使用这个功能。使用该系统后,教师自行登录系统后即可完成这项工作,而不需要网络管理员协助。
⑵ 上网控制功能:在日常的工作中经常会检测到一些IP地址流量出现异常,管理员希望禁止这些IP地址上网,由于我校有两个出口,因此需要在多台设备上进行控制。使用该系统后,网络管理员只要输入IP地址就可完成工作,而不用考虑应该在哪台设备上控制这些IP地址。
⑶ 流量级别调整:在日常工作中,每一个上网的账号都分配了额定的带宽,在日常工作中有时候需要增大或减小某个账号的带宽,使用这套系统后除了不用考虑与哪台设备打交道外,常用的带宽也已经设置好,而且进行过调整的IP地址也在系统中进行了记录,绝大部分情况下网络管理员只需要点击几下鼠标即可完成工作。
6 结束语
本文介绍的网络控制系统在本校投入使用后在很大程度上减轻了网络维护人员的工作量,同时为在机房上课的老师带来了方便,具有实用价值。下一个版本我们将考虑通过后台配置实现目前Device类的功能,配置完成后就可以在特定的网络环境中部署,从而提高该系统的通用性。
参考文献(References):
[1] 游双.Linux高性能服务器编程[M].机械工业出版社,2013.
[2] N. Freed, N. Borenstein. RFC2045 Multipurpose Internet Mail Extensions (MIME) Part One:Format of Internet Message Bodies[OL].(1996-11).http://www.ietf.org/rfc/rfc2045.txt
[3] 李开涌.PHP MVC 开发实战[M].机械工业出版社,2013.
[4] The PHP Group.PHP手册[OL].(2017-11-26)[2017-11-26].http://php.net/manual/zh/index.php
[5] New Digital Group, Inc. Smarty3手册[OL]. (2017-11-26)[2017-11-26].https://www.smarty.net/docs/zh_CN/endprint