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