龍恒
摘 要: 介紹了一套將網(wǎng)絡(luò)日常維護(hù)工作劃分成任務(wù)的網(wǎng)絡(luò)控制系統(tǒng)的工作原理和實(shí)現(xiàn)過(guò)程,該控制系統(tǒng)由與設(shè)備打交道的控制器和用戶(hù)操作系統(tǒng)兩部分組成。文章介紹了系統(tǒng)的結(jié)構(gòu)并且給出了拓?fù)鋱D,介紹了控制器的結(jié)構(gòu)以及控制器和用戶(hù)操作系統(tǒng)的實(shí)現(xiàn)過(guò)程,并通過(guò)一個(gè)使用案例,介紹了該系統(tǒng)的功能。
關(guān)鍵詞: 網(wǎng)絡(luò)控制; 任務(wù)劃分; 多線程; 套接字
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):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 引言
隨著計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,各單位使用的與網(wǎng)絡(luò)相關(guān)的設(shè)備也越來(lái)越多,每種設(shè)備的用途各不相同,理論基礎(chǔ)也各異,要熟練掌握這些設(shè)備的使用方法非常不容易,通常需要經(jīng)過(guò)較長(zhǎng)時(shí)間的培訓(xùn)和實(shí)踐上的積累。
本文將研究一種與網(wǎng)絡(luò)設(shè)備進(jìn)行交互的機(jī)制,將日常的工作劃分成容易理解的任務(wù),通過(guò)可視化界面進(jìn)行操作,即可生成控制網(wǎng)絡(luò)設(shè)備的命令并發(fā)送給設(shè)備,其效果與直接在設(shè)備上輸入命令是一樣的。該系統(tǒng)降低了使用門(mén)檻,節(jié)省了人員的培訓(xùn)成本,使用者不需要了解網(wǎng)絡(luò)設(shè)備的命令以及相關(guān)的理論細(xì)節(jié)就能完成任務(wù)。
該機(jī)制還有助于提高安全性:用戶(hù)不需要直接與設(shè)備交互,不需要知道設(shè)備的帳號(hào)和密碼,減少了帳號(hào)、密碼泄漏的問(wèn)題;工作以任務(wù)的形式組織,設(shè)備只能運(yùn)行經(jīng)過(guò)驗(yàn)證的命令,降低了誤操作的幾率,并且對(duì)操作過(guò)程記錄了詳細(xì)的日志,即使出現(xiàn)異常操作,也很容易通過(guò)逆操作進(jìn)行恢復(fù);該系統(tǒng)通過(guò)一個(gè)服務(wù)器軟件與設(shè)備進(jìn)行交互,設(shè)備只要對(duì)運(yùn)行該服務(wù)器軟件所需的IP地址開(kāi)放訪問(wèn)權(quán)限即可,這降低了設(shè)備被入侵的可能性。
1 系統(tǒng)結(jié)構(gòu)
該系統(tǒng)由一個(gè)用戶(hù)使用的操作系統(tǒng)(以下簡(jiǎn)稱(chēng)操作系統(tǒng))和一個(gè)與設(shè)備交互的服務(wù)器系統(tǒng)(以下簡(jiǎn)稱(chēng)控制器)組成。用戶(hù)在操作系統(tǒng)上執(zhí)行任務(wù),執(zhí)行結(jié)束后會(huì)生成相應(yīng)的命令,經(jīng)過(guò)編碼后發(fā)送給控制器,控制器負(fù)責(zé)接收操作系統(tǒng)生成的命令,解碼后發(fā)送到設(shè)備上執(zhí)行。系統(tǒng)的拓?fù)鋱D如圖1所示。
圖1 系統(tǒng)拓?fù)鋱D
2 控制器的設(shè)計(jì)
控制器是一個(gè)服務(wù)器軟件,用來(lái)接收操作系統(tǒng)發(fā)過(guò)來(lái)的命令并且與指定的設(shè)備進(jìn)行交互,控制器與操作系統(tǒng)之間使用TCP協(xié)議進(jìn)行通信。
控制器使用多線程技術(shù)實(shí)現(xiàn),由一個(gè)主線程和多個(gè)子線程組成,工作時(shí)每個(gè)子線程對(duì)應(yīng)一個(gè)控制器與設(shè)備的連接,主線程在控制器啟動(dòng)的時(shí)候開(kāi)始運(yùn)行,一直到控制器關(guān)閉的時(shí)候才結(jié)束運(yùn)行;子線程以線程池的方式組織,也是在控制器啟動(dòng)的時(shí)候全部啟動(dòng),在控制器退出的時(shí)候才終止,子線程啟動(dòng)后立刻轉(zhuǎn)入休眠方式,在工作時(shí)才被喚醒,使用線程池技術(shù),可以節(jié)省線程啟動(dòng)和結(jié)束的時(shí)間,提高性能[1]。
2.1 主線程
主線程只負(fù)責(zé)建立連接和啟動(dòng)子線程的工作,啟動(dòng)后以阻塞的方式調(diào)用套接字在指定的接口上監(jiān)聽(tīng),控制器接收到一個(gè)操作系統(tǒng)發(fā)起的連接后,就隨機(jī)啟動(dòng)一個(gè)休眠的子線程,之后就由該子線程與操作系統(tǒng)進(jìn)行交互,如果主線程發(fā)現(xiàn)線程池中沒(méi)有空閑的子線程,就給操作系統(tǒng)返回一個(gè)超出最大連接的錯(cuò)誤提示。
2.2 子線程
控制器的主要業(yè)務(wù)邏輯在子線程中實(shí)現(xiàn),子線程有三個(gè)地方可能會(huì)造成阻塞。第一是與設(shè)備建立連接的時(shí)候,第二是將命令發(fā)送給設(shè)備的過(guò)程,第三是等待設(shè)備返回運(yùn)行結(jié)果的時(shí)候。為了能靈活地配置子線程在每個(gè)阻塞點(diǎn)的等待時(shí)間,子線程使用套接字編程的時(shí)候采用了非阻塞工作模式。
子線程接收到操作系統(tǒng)發(fā)送的命令后,對(duì)命令進(jìn)行base64解碼[2],解碼后將命令進(jìn)行分解,每條命令都攜帶有身份驗(yàn)證信息,首先進(jìn)行身份驗(yàn)證,如果不能通過(guò)驗(yàn)證,則給操作系統(tǒng)返回一個(gè)身份驗(yàn)證錯(cuò)誤信息,身份驗(yàn)證成功后,通過(guò)相應(yīng)的協(xié)議(例如telnet、ssh)將命令發(fā)送到設(shè)備上運(yùn)行,最后將運(yùn)行結(jié)果反饋給操作系統(tǒng)。
由于操作系統(tǒng)一般都是采用B/S結(jié)構(gòu)設(shè)計(jì)的,而B(niǎo)/S結(jié)構(gòu)通常需要等待一次請(qǐng)求處理完成后才能給用戶(hù)返回處理結(jié)果,為了避免等待時(shí)間過(guò)長(zhǎng),控制器是先接收完操作系統(tǒng)一次需要運(yùn)行的所有命令才開(kāi)始與設(shè)備進(jìn)行交互的,命令接收完成后立刻就會(huì)給操作系統(tǒng)返回一個(gè)響應(yīng)。
2.3 穩(wěn)定性及安全性考慮
在服務(wù)器軟件設(shè)計(jì)時(shí),安全性和穩(wěn)定性非常重要,主要考慮以下幾方面。
⑴ 每條命令都帶有身份驗(yàn)證信息,以進(jìn)行合法性驗(yàn)證。
⑵ 命令長(zhǎng)度要有限制,避免接收到太長(zhǎng)的命令而導(dǎo)致資源過(guò)度消耗以及發(fā)生緩沖區(qū)溢出攻擊。
⑶ 固定分配一個(gè)接收命令的緩沖區(qū),避免多次動(dòng)態(tài)分配內(nèi)存造成內(nèi)存碎片,從而影響性能。
⑷ 命令的語(yǔ)法檢查,例如命令的格式、最小長(zhǎng)度、特殊符號(hào)等,以防止出現(xiàn)惡意構(gòu)造的命令繞過(guò)檢查的情況。
3 操作系統(tǒng)的設(shè)計(jì)
操作系統(tǒng)的是一套B/S結(jié)構(gòu)的系統(tǒng),開(kāi)發(fā)語(yǔ)言為PHP,采用了MVC模式[3]。使用PDO建立數(shù)據(jù)模型,使用自主研發(fā)的一套名為“solar”應(yīng)用框架作為控制器,視圖使用一套自主研發(fā)的模板引擎“saturn”來(lái)實(shí)現(xiàn)。
開(kāi)發(fā)這套網(wǎng)絡(luò)控制系統(tǒng)最重要的一個(gè)目的是可以根據(jù)事先設(shè)定好的任務(wù)來(lái)簡(jiǎn)化日常的網(wǎng)絡(luò)維護(hù)的工作,任務(wù)劃分的工作就是在操作系統(tǒng)這里完成的,執(zhí)行一個(gè)任務(wù)就會(huì)生成一批在某個(gè)網(wǎng)絡(luò)設(shè)備上運(yùn)行的命令,然后提交給控制器。
為了實(shí)現(xiàn)任務(wù)到命令的轉(zhuǎn)換,每臺(tái)設(shè)備需要實(shí)現(xiàn)一個(gè)Device類(lèi),該類(lèi)的每個(gè)成員函數(shù)對(duì)應(yīng)一個(gè)任務(wù),例如禁止一個(gè)IP地址上網(wǎng),這個(gè)任務(wù)對(duì)應(yīng)的成員函數(shù)為DenyIP。在同一個(gè)網(wǎng)絡(luò)環(huán)境中,每個(gè)設(shè)備完成的任務(wù)是不同的,例如在某臺(tái)防火墻上禁止某個(gè)IP地址上網(wǎng),在某臺(tái)交換機(jī)上限制某個(gè)機(jī)房上網(wǎng),而且不同的設(shè)備的命令可能也是不同的,因此每個(gè)Device類(lèi)之間沒(méi)有繼承關(guān)系,需要針對(duì)設(shè)備進(jìn)行編寫(xiě)。
操作系統(tǒng)支持多用戶(hù)同時(shí)使用,因此有用戶(hù)管理、權(quán)限控制的功能,用戶(hù)完成某個(gè)任務(wù)必須先獲得授權(quán),操作系統(tǒng)還有詳細(xì)的日志系統(tǒng),詳細(xì)記錄了用戶(hù)工作的整個(gè)過(guò)程,使得管理員對(duì)系統(tǒng)的使用情況有一個(gè)全面的了解,還有一個(gè)用處就是當(dāng)發(fā)現(xiàn)操作失誤導(dǎo)致網(wǎng)絡(luò)異常的時(shí)候,可以根據(jù)日志進(jìn)行逆操作。
操作系統(tǒng)的開(kāi)發(fā)不算復(fù)雜,基本與普通的B/S結(jié)構(gòu)的軟件設(shè)計(jì)沒(méi)太大區(qū)別。本系統(tǒng)使用PDO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù),具有通用性強(qiáng)、避免出現(xiàn)SQL注入安全漏洞等優(yōu)點(diǎn)[4]?!皊olar”應(yīng)用框架本身有對(duì)用戶(hù)提交的字符串進(jìn)行過(guò)濾的功能,默認(rèn)情況下將過(guò)濾后的數(shù)據(jù)提交給用戶(hù)使用,過(guò)濾后的數(shù)據(jù)可以防止出現(xiàn)XSS等通過(guò)提交非法字符而產(chǎn)生的安全漏洞,當(dāng)然用戶(hù)也可以選擇對(duì)原始數(shù)據(jù)進(jìn)行自主過(guò)濾后再使用?!皊aturn”模板引擎則實(shí)現(xiàn)了代碼和美工設(shè)計(jì)的分離,美工設(shè)計(jì)人員只要設(shè)計(jì)好靜態(tài)的HTML格式的模板,然后在正確的位置上放上saturn的數(shù)據(jù)訪問(wèn)標(biāo)簽,根據(jù)目錄結(jié)構(gòu)放置在saturn指定的目錄中即可[5]。
4 部署
該系統(tǒng)部署方式比較靈活,圖1是一個(gè)典型的部署方式,操作系統(tǒng)和控制器可以部署在同一臺(tái)服務(wù)器上,也可以部署在不同的服務(wù)器上,出于安全考慮,操作系統(tǒng)和控制器通常都部署在同一個(gè)子網(wǎng)內(nèi),避免它們之間交互的命令數(shù)據(jù)被截獲或被篡改。而用戶(hù)可以根據(jù)需要從局域網(wǎng)或互聯(lián)網(wǎng)訪問(wèn)操作系統(tǒng)。
考慮到安全性和穩(wěn)定性,一個(gè)控制器對(duì)應(yīng)一臺(tái)設(shè)備,也就是說(shuō)是一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)設(shè)備。這種設(shè)計(jì)可以避免某一個(gè)進(jìn)程發(fā)生安全問(wèn)題或者意外崩潰,進(jìn)而導(dǎo)致與所有的設(shè)備交互都出現(xiàn)問(wèn)題。如果需要使用到多個(gè)設(shè)備來(lái)完成任務(wù),則部署多個(gè)控制器,而操作系統(tǒng)只需要部署一套即可,只需要針對(duì)每臺(tái)設(shè)備編寫(xiě)一個(gè)Device類(lèi)。
5 應(yīng)用案例
以該系統(tǒng)在本校的使用情況作為案例進(jìn)行分析,我校有兩個(gè)網(wǎng)絡(luò)出口,每個(gè)網(wǎng)絡(luò)出口都部署了一臺(tái)防火墻,根據(jù)本校的網(wǎng)絡(luò)使用情況,經(jīng)常需要對(duì)網(wǎng)絡(luò)進(jìn)行配置以實(shí)現(xiàn)某些功能,如果將這些需求以任務(wù)形式進(jìn)行組織,通過(guò)圖形界面執(zhí)行,將會(huì)大幅度減輕網(wǎng)絡(luò)管理員的工作量。下面舉幾個(gè)應(yīng)用例子。
⑴ 計(jì)算機(jī)機(jī)房網(wǎng)絡(luò)管理:教師在機(jī)房上課,經(jīng)常需要開(kāi)放或關(guān)閉整個(gè)機(jī)房網(wǎng)絡(luò),或針對(duì)某一個(gè)IP地址開(kāi)放或關(guān)閉網(wǎng)絡(luò),每節(jié)課都需要多次使用這個(gè)功能。使用該系統(tǒng)后,教師自行登錄系統(tǒng)后即可完成這項(xiàng)工作,而不需要網(wǎng)絡(luò)管理員協(xié)助。
⑵ 上網(wǎng)控制功能:在日常的工作中經(jīng)常會(huì)檢測(cè)到一些IP地址流量出現(xiàn)異常,管理員希望禁止這些IP地址上網(wǎng),由于我校有兩個(gè)出口,因此需要在多臺(tái)設(shè)備上進(jìn)行控制。使用該系統(tǒng)后,網(wǎng)絡(luò)管理員只要輸入IP地址就可完成工作,而不用考慮應(yīng)該在哪臺(tái)設(shè)備上控制這些IP地址。
⑶ 流量級(jí)別調(diào)整:在日常工作中,每一個(gè)上網(wǎng)的賬號(hào)都分配了額定的帶寬,在日常工作中有時(shí)候需要增大或減小某個(gè)賬號(hào)的帶寬,使用這套系統(tǒng)后除了不用考慮與哪臺(tái)設(shè)備打交道外,常用的帶寬也已經(jīng)設(shè)置好,而且進(jìn)行過(guò)調(diào)整的IP地址也在系統(tǒng)中進(jìn)行了記錄,絕大部分情況下網(wǎng)絡(luò)管理員只需要點(diǎn)擊幾下鼠標(biāo)即可完成工作。
6 結(jié)束語(yǔ)
本文介紹的網(wǎng)絡(luò)控制系統(tǒng)在本校投入使用后在很大程度上減輕了網(wǎng)絡(luò)維護(hù)人員的工作量,同時(shí)為在機(jī)房上課的老師帶來(lái)了方便,具有實(shí)用價(jià)值。下一個(gè)版本我們將考慮通過(guò)后臺(tái)配置實(shí)現(xiàn)目前Device類(lèi)的功能,配置完成后就可以在特定的網(wǎng)絡(luò)環(huán)境中部署,從而提高該系統(tǒng)的通用性。
參考文獻(xiàn)(References):
[1] 游雙.Linux高性能服務(wù)器編程[M].機(jī)械工業(yè)出版社,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] 李開(kāi)涌.PHP MVC 開(kāi)發(fā)實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2013.
[4] The PHP Group.PHP手冊(cè)[OL].(2017-11-26)[2017-11-26].http://php.net/manual/zh/index.php
[5] New Digital Group, Inc. Smarty3手冊(cè)[OL]. (2017-11-26)[2017-11-26].https://www.smarty.net/docs/zh_CN/endprint