從 偉
(中國交通通信中心,北京100011)
國際移動(dòng)衛(wèi)星(Inmarsat)系統(tǒng)是一個(gè)全球覆蓋的衛(wèi)星通信系統(tǒng),與銥星、全球星并列為全球的三大移動(dòng)衛(wèi)星系統(tǒng)。國際移動(dòng)衛(wèi)星成立于1978年,最早稱為國際海事衛(wèi)星,由世界主要的航運(yùn)國家參與并組建,是全球第一個(gè)建設(shè)并形成全球通信覆蓋能力的移動(dòng)衛(wèi)星通信系統(tǒng),以解決遠(yuǎn)洋船舶以及海上遇險(xiǎn)、救助和船舶調(diào)度指揮現(xiàn)代化為發(fā)展目標(biāo)。我國是海事衛(wèi)星的主要成員國之一,并在北京建有衛(wèi)星地面關(guān)口站。國際移動(dòng)衛(wèi)星C系統(tǒng)(簡稱衛(wèi)星C系統(tǒng))屬于第3代短數(shù)據(jù)衛(wèi)星通信系統(tǒng),是目前我國海上應(yīng)用最多的衛(wèi)星通信。衛(wèi)星C系統(tǒng)是全球海上遇險(xiǎn)與安全(GMDSS)的主要組成部分,屬于遠(yuǎn)洋船舶強(qiáng)制配置的衛(wèi)星通信設(shè)備。
衛(wèi)星C系統(tǒng)到我國陸地公網(wǎng)的接口有PSDN和PSTN兩種類型,這2種接口都是使用電路交換,用戶使用成本較高,且PSTN網(wǎng)較慢,PSDN網(wǎng)普及性不高,隨著Internet應(yīng)用的普及,越來越多的用戶希望該系統(tǒng)提供基于互聯(lián)網(wǎng)的接入方式?;谏鲜鲈?本文提出了衛(wèi)星C系統(tǒng)到互聯(lián)網(wǎng)協(xié)議轉(zhuǎn)換的解決方案,并對(duì)軟件體系結(jié)構(gòu)、工作流程及關(guān)鍵模塊的具體實(shí)現(xiàn)進(jìn)行了描述,研究結(jié)果表明,該協(xié)議轉(zhuǎn)換方案可以實(shí)現(xiàn),并能夠作為衛(wèi)星C系統(tǒng)的二級(jí)接續(xù)業(yè)務(wù)提供給用戶使用。
本軟件目的是要解決互聯(lián)網(wǎng)到衛(wèi)星C系統(tǒng)的通信問題,選擇何種技術(shù)來解決這個(gè)問題,有如下3點(diǎn)分析:
用戶通過超級(jí)終端撥號(hào)到衛(wèi)星C系統(tǒng)的PSDN或PSTN接口,和衛(wèi)星C系統(tǒng)的信息交互也同樣在超級(jí)終端里展示。這就很容易聯(lián)想到TCP/IP網(wǎng)的Telnet軟件,Telnet到遠(yuǎn)程服務(wù)器,所有交互信息都將展現(xiàn)在用戶Telnet界面里。是否可通過Telnet來仿真超級(jí)終端接入PSDN或PSTN網(wǎng)?
①采用什么接口來和衛(wèi)星C系統(tǒng)進(jìn)行通信?PSDN網(wǎng)的速率為2 Mkbit/s,相對(duì)PSTN網(wǎng)64 kbit/s要快得多,考慮需要支持多用戶的訪問,是否PSDN接口是和衛(wèi)星C系統(tǒng)連接的最佳方式?
②可否開發(fā)一個(gè)軟件,一方面支持用戶的Telnet訪問,另一方面通過本地的PSDN網(wǎng)和衛(wèi)星C系統(tǒng)通信,實(shí)際上是開發(fā)一個(gè)協(xié)議轉(zhuǎn)換軟件,代理Telnet上來的用戶去訪問衛(wèi)星 C系統(tǒng),簡稱CSysTelnetAgent軟件。
為了證明選擇技術(shù)的可行性,需要考慮如何實(shí)現(xiàn)本地服務(wù)器和衛(wèi)星C系統(tǒng)的通信。測(cè)試一款Eicon的X.25服務(wù)器卡,用25針的串口線將x.25板卡和衛(wèi)星C系統(tǒng)PSDN板卡相連,安裝Eicon的驅(qū)動(dòng)程序后,利用Eicon的界面能夠?qū)崿F(xiàn)和衛(wèi)星C系統(tǒng)的簡單通信。這就說明了可以通過軟件來控制服務(wù)器X.25板卡并且和衛(wèi)星C系統(tǒng)進(jìn)行通信,也證明了開發(fā)CSysTelnetAgent軟件的可行性。
根據(jù)以上的分析,可設(shè)計(jì)CSysTelnetAgent軟件的系統(tǒng)總體架構(gòu)如圖1所示。互聯(lián)網(wǎng)用戶通過Telnet訪問CSysTelnetAgent軟件,該軟件通過X.25板卡和衛(wèi)星C系統(tǒng)直接連接,最后通過衛(wèi)星和遠(yuǎn)端的衛(wèi)星C終端通信。
圖1 互聯(lián)網(wǎng)訪問衛(wèi)星C系統(tǒng)總體架構(gòu)圖
由于Telnet對(duì)應(yīng)協(xié)議是Socket,PSDN對(duì)應(yīng)的X.25,也就是說,CSysTelnetAgent核心的工作是完成Socket和X.25之間的協(xié)議轉(zhuǎn)換。
軟件需求分析可歸納為如下8條:
①支持互聯(lián)網(wǎng)的用戶Telnet撥入,并可與衛(wèi)星C系統(tǒng)進(jìn)行信息交互;
②需要對(duì)互聯(lián)網(wǎng)登陸用戶進(jìn)行身份驗(yàn)證;
③支持用戶使用Telnet和衛(wèi)星C系統(tǒng)進(jìn)行命令行信息交互:
?命令行格式符合衛(wèi)星C系統(tǒng)定義規(guī)范;
?將用戶數(shù)據(jù)的命令傳遞給衛(wèi)星C系統(tǒng);
?將衛(wèi)星C系統(tǒng)的返回信息傳遞給用戶;
④支持多用戶同時(shí)進(jìn)行信息交互;
⑥支持預(yù)先配置用戶名、密碼,滿足管理員方便添加、修改、刪除用戶驗(yàn)證信息;
⑦支持配置系統(tǒng)信息,如提示信息、網(wǎng)絡(luò)超時(shí)時(shí)間、Telnet重試次數(shù)等,滿足管理員方便修改系統(tǒng)配置信息;
⑧滿足一定的錯(cuò)誤識(shí)別和處理能力,并能劃分出錯(cuò)信息類別,并提示用戶。
以上需求分析,第①條~第④條是滿足用戶訪問的需求,也即是本軟件需要完成的核心的通信功能;第⑤條~第⑦條是滿足本軟件的管理員的需求,提供管理員管理本軟件的功能;第⑧條是需要通過一定時(shí)期的調(diào)試、測(cè)試才能逐步完善。
根據(jù)軟件需求,CSysTelnetAgent軟件主要有2個(gè)工作流程,分別為主通信工作流以及管理員操作工作流。
主通信用工作流是用來描述客戶端和衛(wèi)星C系統(tǒng)之間的關(guān)系和引發(fā)的相關(guān)動(dòng)作。接收來自互聯(lián)網(wǎng)的用戶輸入命令,將控制數(shù)據(jù)信息傳遞給CSysTelnetAgent軟件,CSysTelnetAgent軟件將這些信息轉(zhuǎn)為衛(wèi)星C系統(tǒng)所需的格式并送出,等待衛(wèi)星C系統(tǒng)返回信息,并及時(shí)的將這些信息返回到互聯(lián)網(wǎng)用戶。主工作流中主要由3個(gè)模塊構(gòu)成,一個(gè)是Socket監(jiān)聽模塊,監(jiān)聽來自互聯(lián)網(wǎng)Telnet的Socket交互信息;另外一個(gè)是X.25監(jiān)聽模塊,監(jiān)聽來自衛(wèi)星C系統(tǒng)的的X.25交互信息;這2個(gè)模塊分別繼承于抽象出來的監(jiān)聽基類模塊。
管理員操作工作流是實(shí)現(xiàn)系統(tǒng)管理員操作管理軟件的流程,包括5個(gè)模塊:啟動(dòng)服務(wù)、停止服務(wù)、用戶信息配置、系統(tǒng)信息配置、查看日志。
CSysTelnetAgent最為關(guān)鍵技術(shù)是實(shí)現(xiàn)互聯(lián)網(wǎng)和X.25的協(xié)議轉(zhuǎn)換。根據(jù)以上分析,互聯(lián)網(wǎng)用戶使用的是Telnet協(xié)議,服務(wù)器使用Winsock API開發(fā)來響應(yīng)客戶端的訪問和數(shù)據(jù)讀取;衛(wèi)星端的通信采用X.25協(xié)議,完成對(duì)X.25的通信控制就等同于完成對(duì)衛(wèi)星端的信息交互,為了保證對(duì)Eicon的X.25板卡的正確控制,本軟件采用了Eicon公司的X.25開發(fā)工具包,調(diào)用了該開發(fā)工具包的發(fā)送(x25send)、接受(x25recv)、判斷(x25done)等基本函數(shù)。
海淀區(qū)東片數(shù)學(xué)區(qū)域教研組根據(jù)教師的實(shí)際教學(xué)情況及需求,對(duì)各個(gè)階段的教研活動(dòng)進(jìn)行了細(xì)致分析與精心設(shè)計(jì)。以上教研活動(dòng)各有特點(diǎn)和作用,各項(xiàng)活動(dòng)相輔相成。
互聯(lián)網(wǎng)的Winsock API較為通用,本文不再重點(diǎn)介紹。由于衛(wèi)星C系統(tǒng)的X.25接口較為特殊,在開發(fā)中有1個(gè)逐步摸索解決問題的過程,先后做了2次重大的調(diào)整。
①第1次調(diào)整。編寫一個(gè)X.25的多線程模塊。程序思路改為多個(gè)用戶輪流來控制對(duì)X.25的發(fā)送緩存,避免衛(wèi)星C系統(tǒng)響應(yīng)次序混亂。但實(shí)際調(diào)試時(shí)發(fā)現(xiàn),如果是發(fā)信息到遠(yuǎn)程衛(wèi)星終端時(shí),響應(yīng)時(shí)間通常較長,一般都在5~10 s左右,如果某個(gè)用戶長時(shí)間占用發(fā)送緩存,其他用戶的等待時(shí)間則明顯過長,并且隨著同時(shí)在線用戶數(shù)的增多,情況更加惡化,這種方式將無法被接受;
②第2次調(diào)整。查看有關(guān)書籍后,發(fā)現(xiàn)可以通過改變Eicon硬件配置將一條在X.25 link配成支持多條連接的虛擬電路。意味著可以使用單線程來控制通信,但可將每個(gè)用戶分配到不同的虛擬電路上去,每個(gè)用戶直接和對(duì)應(yīng)的一條虛擬X.25電路進(jìn)行通信,互不干擾。
作為核心的功能模塊,其模塊設(shè)計(jì)進(jìn)行了對(duì)主通信工作流程的抽象和封裝設(shè)計(jì)。引入了會(huì)話的概念,通過會(huì)話來管理用戶從登陸到退出的全過程,包括對(duì)象的創(chuàng)建、對(duì)象之間信息溝通等。主通信模塊的主要類圖設(shè)計(jì)為:CClientListerner類、CSession類、CClientMonitor類、CHostMonitor類、Cmonitor類、CClientListerner類。
CClientListerner負(fù)責(zé)監(jiān)聽來自用戶的Telnet訪問,并啟動(dòng)一個(gè)或者多個(gè)CSession對(duì)象;CSession負(fù)責(zé)該用戶的登陸、驗(yàn)證、溝通等眾多事務(wù),同時(shí)它還啟動(dòng)CClientMonitor和CHostMonitor分別對(duì)客戶端和主機(jī)端的數(shù)據(jù)進(jìn)行監(jiān)聽。而CClientMonitor和CHostMonitor則繼承于CMonitor,并封裝一個(gè)DoMonitor()函數(shù)。所有負(fù)責(zé)監(jiān)聽任務(wù)的類因?yàn)槭嵌嗑€程函數(shù),均繼承于一個(gè)CClientListerner的基類。
通信接口是實(shí)現(xiàn)客戶端和主機(jī)端的數(shù)據(jù)交互。本模塊先后設(shè)計(jì)了2個(gè)X25工具類進(jìn)行嘗試,最終選擇了Cx25Tool類。為了盡量減少改動(dòng)代碼,在上層的CMonitor類和底層的工具類之間,添加中間層,分別為客戶端的接口類、主機(jī)端的接口類。接口類被設(shè)計(jì)只有3個(gè)純虛函數(shù),發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、釋放資源。這3個(gè)虛函數(shù)將被實(shí)際的底層工作類重載。
上層:CMonitor等端口監(jiān)聽類,負(fù)責(zé)啟動(dòng)、調(diào)用以及和會(huì)話類的信息溝通;
中間層:純虛函數(shù)設(shè)計(jì),只是為了擴(kuò)展用;包括IClientCommTool和IHostCommTool 2個(gè)接口;
底層 :CSockTool、CX25Tool、CX25ExTool,具體負(fù)責(zé)協(xié)議讀寫操作的類。
通信實(shí)現(xiàn)過程中,CMonitor將通過2個(gè)繼承類CClientMonitor和 CHostMonitor的 doMonitor()函數(shù)里來實(shí)現(xiàn)接收和發(fā)送數(shù)據(jù)工作。而CClientMonitor將通過IClientCommTool接口和CSocketTool工具類進(jìn)行通信,處理來自互聯(lián)網(wǎng)的 Telnet的信息;CCHostMonitor則是通過 IHostCommTool接口和CX25Tool工具類進(jìn)行通信,處理來自衛(wèi)星C系統(tǒng)的信息。
根據(jù)管理員操作工作流,該模塊定義了工具類(CTookit),該工具類包括了配置文件、用戶管理、日志管理,并描述了管理員類圖和會(huì)話以及圖形界面顯示的關(guān)系。
CToolkit工具類負(fù)責(zé)在程序啟動(dòng)時(shí)的初始化工作,讀取系統(tǒng)配置信息以及用戶信息。當(dāng)來自互聯(lián)網(wǎng)用戶訪問,創(chuàng)建 CSeesion時(shí),它首先需要去CToolkit調(diào)用用戶信息來驗(yàn)證該用戶身份,同時(shí)把該用戶和衛(wèi)星C系統(tǒng)的交互信息送給CToolkit形成日志記錄;當(dāng)用戶成功登陸時(shí),CSeesion還將通知GUI圖形界面,在服務(wù)器端顯示該用戶基本信息及IP地址。GUI圖形界面有兩個(gè)菜單,負(fù)責(zé)觸發(fā)啟動(dòng)或停止CClientListerner的監(jiān)聽服務(wù)。
基于協(xié)議轉(zhuǎn)換的衛(wèi)星通信系統(tǒng)的互聯(lián)網(wǎng)應(yīng)用軟件實(shí)現(xiàn)互聯(lián)網(wǎng)用戶和衛(wèi)星C系統(tǒng)之間的通信轉(zhuǎn)換功能。該軟件的成功開發(fā),解決了單位的實(shí)際問題,目前已經(jīng)上線運(yùn)行,結(jié)論如下:
①準(zhǔn)確匹配需求。解決互聯(lián)網(wǎng)用戶和衛(wèi)星C系統(tǒng)之間的通信,選擇支持何種協(xié)議轉(zhuǎn)換,是滿足需求的關(guān)鍵。實(shí)踐證明,選用支持Telnet訪問能夠被用戶接收,也同時(shí)也最能夠保持原有用戶的訪問習(xí)慣;選擇X.25接口則滿足了支持多用戶同時(shí)訪問的速率要求。因此,把互聯(lián)網(wǎng)和衛(wèi)星C系統(tǒng)通信問題轉(zhuǎn)換為Socket協(xié)議和X.25協(xié)議之間的通信問題,有效地匹配了用戶需求;
②基于衛(wèi)星C系統(tǒng)的X.25協(xié)議處理辦法的新探索。由于衛(wèi)星C系統(tǒng)的X.25接口較為特殊,在開發(fā)中有一個(gè)逐步摸索解決問題的過程,軟件開發(fā)過程中分別采用多線程和單線程技術(shù)來測(cè)試使用衛(wèi)星C系統(tǒng)的通信效果,最初效果均不理想,特別是當(dāng)多個(gè)用戶同時(shí)發(fā)送接受數(shù)據(jù)時(shí),存在信息混亂或者等待時(shí)間過長的問題。經(jīng)過反復(fù)調(diào)試,發(fā)現(xiàn)使用單線程,但針對(duì)X.25虛擬出多條臨時(shí)虛電路,結(jié)合了單線程和多線程各自優(yōu)點(diǎn),從而摸索出一條和衛(wèi)星C系統(tǒng)的最佳通信方案;
③實(shí)際使用效果良好,促進(jìn)了其他系統(tǒng)的開發(fā)和應(yīng)用。軟件提供服務(wù)以來,經(jīng)歷了大量用戶實(shí)際業(yè)務(wù)使用,已經(jīng)成為一個(gè)成熟、穩(wěn)定可靠的再用二次接續(xù)業(yè)務(wù)系統(tǒng)。正是由于CSysTelnetAgent的成功,促進(jìn)了另外一個(gè)同樣基于衛(wèi)星C系統(tǒng)的協(xié)議轉(zhuǎn)換軟件的開發(fā)和應(yīng)用,該新系統(tǒng)采用了和CSysTelnetAgent類似的接口處理機(jī)制,只是針對(duì)互聯(lián)網(wǎng)協(xié)議使用了電子郵件SMTP和POP3協(xié)議,為用戶提供電子郵件通信服務(wù)。
[1]王立福,張世琨,朱冰.軟件工程——技術(shù)、方法與環(huán)境[M].北京:北京大學(xué)出版社,1997:35-45.
[2]Craig Larman.UML和模式應(yīng)用[M].姚淑珍,李虎 譯.北京:機(jī)械工業(yè)出版社,2002:79-105.
[3]官章全,劉家明.Visual C++6.0類庫大全[M].北京:電子工業(yè)出版社,1999:584-618.