蔣元兵,謝文希,顏浩洋,唐 瑜
(重慶金美通信有限責(zé)任公司,重慶 400030)
軟件升級(jí)可修正設(shè)計(jì)的缺陷和程序錯(cuò)誤,適應(yīng)數(shù)據(jù)環(huán)境和運(yùn)行環(huán)境的變化,改進(jìn)已有功能或增加新的功能[1]。軟件升級(jí)可分為現(xiàn)場(chǎng)升級(jí)和遠(yuǎn)程在線升級(jí)?,F(xiàn)場(chǎng)升級(jí)由維護(hù)人員到達(dá)目標(biāo)機(jī)現(xiàn)場(chǎng)后,通過本地網(wǎng)絡(luò)或者仿真器,將目標(biāo)程序燒寫到目標(biāo)機(jī)的Flash。遠(yuǎn)程在線升級(jí)則是利用網(wǎng)絡(luò)對(duì)接入網(wǎng)絡(luò)的設(shè)備進(jìn)行遠(yuǎn)程升級(jí)。
戰(zhàn)術(shù)通信網(wǎng)絡(luò)具有機(jī)動(dòng)、快速和靈活的特點(diǎn)[2],廣泛使用無線信道,帶寬窄、丟包率高、拓?fù)渥兓?、IP路由不穩(wěn)定。升級(jí)文件傳輸耗時(shí)久、重傳次數(shù)多,經(jīng)常導(dǎo)致遠(yuǎn)程在線升級(jí)不成功。由于設(shè)備分散甚至地處偏遠(yuǎn),現(xiàn)場(chǎng)升級(jí)費(fèi)時(shí)費(fèi)力。通常的軟件升級(jí)方法不能很好地適應(yīng)戰(zhàn)術(shù)通信網(wǎng)絡(luò)。
基本的泛洪算法傳播過程是,一個(gè)節(jié)點(diǎn)發(fā)送報(bào)文給其所有的鄰接點(diǎn),而收到報(bào)文的節(jié)點(diǎn)又將報(bào)文轉(zhuǎn)發(fā)給其所有鄰接點(diǎn),但發(fā)給其報(bào)文的那個(gè)節(jié)點(diǎn)除外[3],直到該消息發(fā)布給整個(gè)網(wǎng)絡(luò)。泛洪算法在很多領(lǐng)域大面積使用,具有實(shí)現(xiàn)簡(jiǎn)單、健壯性高等優(yōu)點(diǎn),可以作為無線網(wǎng)絡(luò)中一種最基本、最簡(jiǎn)單的路由算法[4],也是實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)和資源發(fā)現(xiàn)的主要手段,可用于無線網(wǎng)絡(luò)的數(shù)據(jù)傳輸。
軟件在線升級(jí)已經(jīng)廣泛使用,如常用的手機(jī)軟件、計(jì)算機(jī)的操作系統(tǒng)軟件或者應(yīng)用軟件,均支持在線升級(jí)功能。設(shè)備只要聯(lián)網(wǎng)使用,即可檢測(cè)軟件的最新版本,廠家也會(huì)主動(dòng)推送軟件版本更新通知。依托穩(wěn)定可靠的網(wǎng)絡(luò),完成軟件在線升級(jí)。
戰(zhàn)術(shù)通信網(wǎng)絡(luò)有安全保密的要求,設(shè)備不能連接互聯(lián)網(wǎng),只能依托戰(zhàn)術(shù)網(wǎng)絡(luò)本身進(jìn)行軟件升級(jí)。但是,戰(zhàn)術(shù)網(wǎng)絡(luò)的帶寬窄、丟包率高、路由動(dòng)蕩頻繁,導(dǎo)致IP數(shù)據(jù)通信不可靠。依托IP數(shù)據(jù)通信的遠(yuǎn)程在線升級(jí),不能適應(yīng)戰(zhàn)術(shù)通信網(wǎng)絡(luò)。戰(zhàn)術(shù)通信網(wǎng)絡(luò)的軟件升級(jí)還停留在現(xiàn)場(chǎng)升級(jí)的階段,由維護(hù)人員到達(dá)設(shè)備現(xiàn)場(chǎng),依靠本地網(wǎng)口或者仿真器將目標(biāo)程序升級(jí)到設(shè)備。
典型組網(wǎng)拓?fù)淙鐖D1所示。
圖1 典型網(wǎng)絡(luò)拓?fù)?/p>
網(wǎng)絡(luò)通常根據(jù)編制劃分成多個(gè)區(qū)域,區(qū)域內(nèi)部采用有線鏈路或者高帶寬的點(diǎn)對(duì)點(diǎn)無線鏈路連接,區(qū)域之間采用無線信道(窄帶廣播信道如衛(wèi)星)連接。
區(qū)域內(nèi)采用標(biāo)準(zhǔn)的泛洪算法轉(zhuǎn)發(fā)升級(jí)報(bào)文,選擇一個(gè)節(jié)點(diǎn)向無線信道轉(zhuǎn)發(fā)升級(jí)報(bào)文。無線信道支持廣播,一個(gè)節(jié)點(diǎn)發(fā)送其他各區(qū)域的連接無線信道的節(jié)點(diǎn)都能接收,接收的節(jié)點(diǎn)再到區(qū)域內(nèi)泛洪。新入網(wǎng)節(jié)點(diǎn)向本區(qū)域鄰居或者通過無線信道向其他區(qū)域鄰居獲取最新版本。
詳細(xì)原理描述如下。升級(jí)終端通過本地網(wǎng)絡(luò)連接一臺(tái)目標(biāo)機(jī),通過現(xiàn)場(chǎng)升級(jí)的方式,將升級(jí)文件傳送給目標(biāo)機(jī)。該目標(biāo)機(jī)作為升級(jí)源節(jié)點(diǎn),向全網(wǎng)發(fā)送升級(jí)請(qǐng)求消息。升級(jí)請(qǐng)求消息在有線區(qū)域內(nèi)泛洪轉(zhuǎn)發(fā)。連接無線信道且信道同步的節(jié)點(diǎn),先不向無線信道轉(zhuǎn)發(fā),向源節(jié)點(diǎn)回復(fù)無線信道升級(jí)請(qǐng)求消息,在有線區(qū)域內(nèi)泛洪轉(zhuǎn)發(fā)到源節(jié)點(diǎn)。源節(jié)點(diǎn)選擇最先收到無線信道升級(jí)請(qǐng)求消息的節(jié)點(diǎn)作為區(qū)域內(nèi)無線信道升級(jí)節(jié)點(diǎn)。源節(jié)點(diǎn)向無線信道升級(jí)節(jié)點(diǎn)下發(fā)無線信道升級(jí)通知消息。接收到無線信道升級(jí)通知消息的節(jié)點(diǎn),向無線信道轉(zhuǎn)發(fā)升級(jí)請(qǐng)求消息。所有接收到升級(jí)請(qǐng)求消息的節(jié)點(diǎn)接收處理升級(jí)文件。
源節(jié)點(diǎn)讀取升級(jí)文件,將升級(jí)文件分片封裝成消息,通過泛洪算法將消息發(fā)送給有線區(qū)域內(nèi)所有節(jié)點(diǎn)。無線信道升級(jí)節(jié)點(diǎn)將消息通過無線信道發(fā)送給其他區(qū)域。其他區(qū)域連接無線信道的節(jié)點(diǎn)通過無線信道接收消息,在區(qū)域內(nèi)泛洪。
新入網(wǎng)節(jié)點(diǎn)優(yōu)先通過有線信道向鄰接點(diǎn)獲取升級(jí)文件。無法通過有線信道請(qǐng)求升級(jí)文件時(shí),通過無線信道向其他區(qū)域節(jié)點(diǎn)獲取升級(jí)文件。
軟件升級(jí)處理流程圖2所示。
圖2 升級(jí)流程
(1)升級(jí)人員通過FTP軟件將升級(jí)文件上傳到本地的目標(biāo)機(jī),該節(jié)點(diǎn)作為升級(jí)源節(jié)點(diǎn);
(2)源節(jié)點(diǎn)向本區(qū)域發(fā)送升級(jí)請(qǐng)求消息;
(3)區(qū)域內(nèi)各節(jié)點(diǎn)泛洪轉(zhuǎn)發(fā)升級(jí)請(qǐng)求消息;
(4)區(qū)域內(nèi)連接無線信道且同步的節(jié)點(diǎn)生成無線信道升級(jí)請(qǐng)求消息發(fā)送給源節(jié)點(diǎn),區(qū)域內(nèi)節(jié)點(diǎn)泛洪轉(zhuǎn)發(fā)到源節(jié)點(diǎn);
(5)源節(jié)點(diǎn)選擇最先收到無線信道升級(jí)請(qǐng)求消息的節(jié)點(diǎn)作為無線信道升級(jí)節(jié)點(diǎn),向其發(fā)送無線信道升級(jí)通知消息,區(qū)域內(nèi)各節(jié)點(diǎn)泛洪轉(zhuǎn)發(fā)到無線信道升級(jí)節(jié)點(diǎn);
(6)無線信道升級(jí)節(jié)點(diǎn)向無線信道發(fā)送升級(jí)請(qǐng)求消息;
(7)其他區(qū)域連接無線信道的節(jié)點(diǎn)接收升級(jí)請(qǐng)求消息,并在區(qū)域內(nèi)泛洪轉(zhuǎn)發(fā);
(8)源節(jié)點(diǎn)讀取升級(jí)文件,分片封裝成消息,發(fā)送給鄰居;區(qū)域內(nèi)各節(jié)點(diǎn)泛洪轉(zhuǎn)發(fā);無線信道升級(jí)節(jié)點(diǎn)向無線信道轉(zhuǎn)發(fā)升級(jí)文件;
(9)其他區(qū)域連接無線信道的節(jié)點(diǎn)通過無線信道接收升級(jí)文件,在區(qū)域內(nèi)泛洪轉(zhuǎn)發(fā);
(10)無線信道接收節(jié)點(diǎn)從無線信道和區(qū)域內(nèi)有線鏈路接收的升級(jí)文件缺少分片時(shí),通過無線信道向無線信道升級(jí)節(jié)點(diǎn)發(fā)起分片請(qǐng)求;
(11)無線信道升級(jí)節(jié)點(diǎn)下發(fā)分片給請(qǐng)求節(jié)點(diǎn);
(12)各節(jié)點(diǎn)組裝升級(jí)文件,校驗(yàn)文件正確性,更新升級(jí)文件;
(13)新入網(wǎng)節(jié)點(diǎn)與鄰居交互軟件版本,發(fā)現(xiàn)鄰居節(jié)點(diǎn)版本高時(shí),向鄰居節(jié)點(diǎn)發(fā)起文件請(qǐng)求;
(14)鄰居節(jié)點(diǎn)接收到文件請(qǐng)求后,下發(fā)文件。
區(qū)域內(nèi)節(jié)點(diǎn)之間的鏈路通常為有線鏈路或者無線點(diǎn)對(duì)點(diǎn)鏈路,傳輸帶寬、可靠性較高,采用標(biāo)準(zhǔn)的泛洪算法傳輸消息。接收消息的節(jié)點(diǎn)將消息發(fā)送給所有鄰接點(diǎn)(除了已經(jīng)接收到相同消息的節(jié)點(diǎn)),消息會(huì)通過多條鏈路到達(dá)各節(jié)點(diǎn)。
無線信道的帶寬窄、時(shí)延大、丟包率較高,需要盡量減少在無線信道傳輸?shù)膱?bào)文。由于無線信道的廣播特性,一個(gè)節(jié)點(diǎn)發(fā)送其他節(jié)點(diǎn)都能接收,所以區(qū)域內(nèi)只需要選擇一個(gè)節(jié)點(diǎn)向無線信道轉(zhuǎn)發(fā)消息,其他區(qū)域的節(jié)點(diǎn)都能接收,以大幅減少無線信道傳輸?shù)南ⅲ苊馔粎^(qū)域內(nèi)的多個(gè)節(jié)點(diǎn)同時(shí)將消息發(fā)送到無線信道而浪費(fèi)信道資源。
由于無線信道的丟包率較高,其他區(qū)域的節(jié)點(diǎn)可能出現(xiàn)接收文件不完整的情況。當(dāng)其他區(qū)域存在多個(gè)連接無線信道的節(jié)點(diǎn)時(shí),每個(gè)連接無線信道的節(jié)點(diǎn)都會(huì)從無線信道接收消息,然后在區(qū)域內(nèi)泛洪,以相互彌補(bǔ)丟失的消息。只有其他區(qū)域內(nèi)所有連接無線信道的節(jié)點(diǎn)都未接收到同一消息時(shí),才判斷為消息丟失。其他區(qū)域的節(jié)點(diǎn)缺少某一分片時(shí),通過無線信道向無線信道升級(jí)節(jié)點(diǎn)請(qǐng)求缺少的分片。當(dāng)一個(gè)節(jié)點(diǎn)請(qǐng)求某一分片后,其他節(jié)點(diǎn)不需要再請(qǐng)求。
分片傳輸可靠性采用分片長(zhǎng)度和校驗(yàn)和予以保證。發(fā)送每片升級(jí)文件的消息都包含分片序號(hào)、分片長(zhǎng)度、分片校驗(yàn)和。各節(jié)點(diǎn)接收消息后,對(duì)消息長(zhǎng)度和消息校驗(yàn)和進(jìn)行校驗(yàn),校驗(yàn)正確后使用分片。文件完整性和正確性采用文件長(zhǎng)度、校驗(yàn)和和試運(yùn)行保證。升級(jí)請(qǐng)求消息中攜帶升級(jí)文件的版本、文件長(zhǎng)度和文件校驗(yàn)和,各節(jié)點(diǎn)接收完成后對(duì)文件進(jìn)行長(zhǎng)度和校驗(yàn)和的校驗(yàn),對(duì)校驗(yàn)正確的文件試運(yùn)行,試運(yùn)行后獲取的版本與升級(jí)請(qǐng)求的版本一致時(shí),使用升級(jí)文件替換原有文件。
區(qū)域內(nèi)某條鏈路的消息丟失由其他鏈路進(jìn)行補(bǔ)償。由于網(wǎng)絡(luò)拓?fù)渫ǔ闁鸥窬W(wǎng),每個(gè)節(jié)點(diǎn)都有多條鏈路連接鄰接點(diǎn),泛洪轉(zhuǎn)發(fā)機(jī)制能夠保證每個(gè)節(jié)點(diǎn)從多個(gè)鄰接點(diǎn)接收到相同序號(hào)的分片。有線鏈路本來丟包率較低,即使發(fā)生某條鏈路分片丟失的情況,也能夠從其他鄰接點(diǎn)接收到丟失的分片,保證區(qū)域內(nèi)各節(jié)點(diǎn)能夠接收完整的升級(jí)文件。
無線信道傳輸?shù)目煽啃酝ㄟ^無線信道一發(fā)多收的特性和分片請(qǐng)求的機(jī)制保證。雖然區(qū)域內(nèi)只有一個(gè)節(jié)點(diǎn)向無線信道轉(zhuǎn)發(fā)升級(jí)文件,但是接收區(qū)域一般都存在多個(gè)節(jié)點(diǎn)連接無線信道。通過無線信道一發(fā)多收的廣播特性,接收區(qū)域會(huì)同時(shí)有多個(gè)節(jié)點(diǎn)接收到升級(jí)文件。雖然無線信道丟包率較高,但是通常不會(huì)出現(xiàn)接收區(qū)域的多個(gè)節(jié)點(diǎn)同時(shí)丟失相同序號(hào)的分片。只要其中有一個(gè)節(jié)點(diǎn)接收到分片,通過有線鏈路即可泛洪到區(qū)域的其他所有節(jié)點(diǎn)。當(dāng)出現(xiàn)接收區(qū)域連接無線信道的節(jié)點(diǎn)都未接收到某分片時(shí),由其中一個(gè)節(jié)點(diǎn)通過無線信道向無線信道升級(jí)節(jié)點(diǎn)請(qǐng)求缺失分片。
當(dāng)全網(wǎng)升級(jí)完成后,未入網(wǎng)的節(jié)點(diǎn)沒有完成軟件升級(jí),需要自動(dòng)完成軟件升級(jí)。節(jié)點(diǎn)通過鄰居學(xué)習(xí)功能學(xué)習(xí)鄰居節(jié)點(diǎn)的版本,發(fā)現(xiàn)版本不一致時(shí),由版本低的節(jié)點(diǎn)向高版本的節(jié)點(diǎn)發(fā)起文件請(qǐng)求。
節(jié)點(diǎn)可能通過有線鏈路或者無線信道學(xué)習(xí)到高版本的鄰居節(jié)點(diǎn),優(yōu)先選擇有線鏈路請(qǐng)求升級(jí)文件。學(xué)習(xí)到高版本的鄰居節(jié)點(diǎn)后,低版本的節(jié)點(diǎn)向高版本的節(jié)點(diǎn)發(fā)起文件請(qǐng)求,高版本的節(jié)點(diǎn)下發(fā)升級(jí)文件。
當(dāng)通過無線信道請(qǐng)求升級(jí)文件時(shí),區(qū)域內(nèi)可能會(huì)存在多個(gè)節(jié)點(diǎn)同時(shí)連接了無線信道,導(dǎo)致多個(gè)節(jié)點(diǎn)向不同的鄰居節(jié)點(diǎn)請(qǐng)求升級(jí)文件,浪費(fèi)無線信道資源。為解決上述問題,設(shè)計(jì)了一種半雙工機(jī)制。由于無線信道的廣播特性,一個(gè)節(jié)點(diǎn)發(fā)送的文件請(qǐng)求消息,所有節(jié)點(diǎn)都能夠接收,所以只要一個(gè)節(jié)點(diǎn)向鄰居節(jié)點(diǎn)發(fā)起文件請(qǐng)求,接收到文件請(qǐng)求消息的鄰居節(jié)點(diǎn)將占用無線信道,并向無線信道發(fā)送升級(jí)文件,而其他節(jié)點(diǎn)不再發(fā)起文件請(qǐng)求消息,也不響應(yīng)文件請(qǐng)求消息。
搭建如圖3所示的測(cè)試網(wǎng)絡(luò)拓?fù)洹?/p>
圖3 測(cè)試網(wǎng)絡(luò)拓?fù)?/p>
如圖3所示,節(jié)點(diǎn)1、節(jié)點(diǎn)2、節(jié)點(diǎn)3通過有線鏈路連接組成區(qū)域1,升級(jí)終端連接到節(jié)點(diǎn)1;節(jié)點(diǎn)4和節(jié)點(diǎn)5通過有線連接組成區(qū)域2;節(jié)點(diǎn)6組成區(qū)域3。三個(gè)區(qū)域通過無線信道(衛(wèi)星鏈路)連接。
網(wǎng)絡(luò)連接完成后,配置設(shè)備間的鏈路參數(shù),保證鏈路層正常通信,IP參數(shù)不需要配置。各設(shè)備初始版本V0.0.1/2018.05.25,升級(jí)文件版本號(hào)V0.0.2/2018.05.28。通過升級(jí)終端給網(wǎng)絡(luò)中的各節(jié)點(diǎn)進(jìn)行軟件升級(jí)。首先,通過本地網(wǎng)絡(luò)采用FTP協(xié)議將升級(jí)文件發(fā)送給節(jié)點(diǎn)1,由節(jié)點(diǎn)1向全網(wǎng)發(fā)起軟件升級(jí)。升級(jí)完成后,查看網(wǎng)絡(luò)中各節(jié)點(diǎn)的版本號(hào),見表1。
表1 升級(jí)完成后的版本號(hào)
從表1可以看出,全網(wǎng)各節(jié)點(diǎn)的軟件版本已經(jīng)升級(jí)到升級(jí)文件的版本,說明軟件升級(jí)成功。
從網(wǎng)絡(luò)拓?fù)浞治?,?jié)點(diǎn)2到節(jié)點(diǎn)1為1跳,節(jié)點(diǎn)3到節(jié)點(diǎn)2為2跳且需要經(jīng)過節(jié)點(diǎn)2,選擇的無線信道轉(zhuǎn)發(fā)節(jié)點(diǎn)應(yīng)該是節(jié)點(diǎn)2。當(dāng)節(jié)點(diǎn)1向全網(wǎng)發(fā)起升級(jí)請(qǐng)求消息后,抓包分析,先收到了節(jié)點(diǎn)2的無線信道升級(jí)請(qǐng)求消息,然后收到了節(jié)點(diǎn)3的無線信道升級(jí)請(qǐng)求消息,選擇節(jié)點(diǎn)2作為區(qū)域內(nèi)的無線信道轉(zhuǎn)發(fā)節(jié)點(diǎn)。通過區(qū)域2接收的升級(jí)請(qǐng)求消息判斷,來自于節(jié)點(diǎn)2,與前面分析一致。
在節(jié)點(diǎn)4設(shè)置丟棄從無線信道接收的報(bào)文序號(hào)為除10余0的升級(jí)文件消息。從可靠性保證原理上分析,節(jié)點(diǎn)4丟失的分片能夠通過節(jié)點(diǎn)5補(bǔ)齊。查看節(jié)點(diǎn)4的升級(jí)結(jié)果,發(fā)現(xiàn)升級(jí)文件接收正確,說明可靠性保證機(jī)制有效。
將節(jié)點(diǎn)5和節(jié)點(diǎn)6還原為V0.0.1/2018.05.25,連接節(jié)點(diǎn)5和節(jié)點(diǎn)4之間的有線鏈路,連接節(jié)點(diǎn)6的衛(wèi)星鏈路。等待一段時(shí)間后,查看節(jié)點(diǎn)5和節(jié)點(diǎn)6的軟件版本,結(jié)果顯示兩個(gè)節(jié)點(diǎn)的版本均升級(jí)為V0.0.2/2018.05.28,說明新入網(wǎng)節(jié)點(diǎn)自動(dòng)獲取升級(jí)文件成功。
本文完成了一種適用于戰(zhàn)術(shù)通信網(wǎng)絡(luò)的軟件升級(jí)方法設(shè)計(jì)。該方法不依賴IP路由,采用泛洪算法完成軟件升級(jí)。使用標(biāo)準(zhǔn)的泛洪算法完成區(qū)域內(nèi)節(jié)點(diǎn)之間的消息轉(zhuǎn)發(fā),將泛洪算法與無線信道廣播特性相結(jié)合,對(duì)泛洪算法進(jìn)行優(yōu)化,大幅減少了升級(jí)消息占用無線信道的開銷。設(shè)計(jì)的軟件升級(jí)方法能夠很好地適應(yīng)戰(zhàn)術(shù)通信網(wǎng)絡(luò)帶寬窄、丟包率高和路由不穩(wěn)定的特性,具有較強(qiáng)的通用性。最后,對(duì)該方法進(jìn)行了工程實(shí)現(xiàn),并且進(jìn)行了組網(wǎng)驗(yàn)證。