【摘要】本文設(shè)計(jì)了一套基于P2P的網(wǎng)絡(luò)機(jī)頂盒快速升級(jí)系統(tǒng)。系統(tǒng)主要研究成果如下:(1)采用基于P2P的高效網(wǎng)絡(luò)傳輸升級(jí)方案,從根本上解決了升級(jí)數(shù)據(jù)文件發(fā)布的及時(shí)性問題。(2)基于STUN網(wǎng)絡(luò)協(xié)議,實(shí)現(xiàn)了一套輕量級(jí)的NAT穿越機(jī)制。(3)使用基于RSA的安全效驗(yàn)算法對(duì)傳輸?shù)纳?jí)數(shù)據(jù)文件進(jìn)行簽名,保證了系統(tǒng)升級(jí)的安全可靠。(4)支持?jǐn)帱c(diǎn)續(xù)傳和多線程的下載客戶端,確保有序高效的進(jìn)行升級(jí)。
【關(guān)鍵詞】TVOS;智能終端;在線升級(jí);P2P網(wǎng)絡(luò);RSA加密算法;NAT穿越
目前市場上主要包括三種機(jī)頂盒,單向DVB數(shù)字機(jī)頂盒,雙向DVB網(wǎng)絡(luò)數(shù)字機(jī)頂盒和IPTV/OTT網(wǎng)絡(luò)機(jī)頂盒。DVB機(jī)頂盒由廣電提供相關(guān)設(shè)備,并鋪設(shè)對(duì)應(yīng)的線路,最終由廣電發(fā)放給用戶使用,網(wǎng)絡(luò)機(jī)頂盒大部分由電信運(yùn)營商掌控,根據(jù)業(yè)務(wù)范圍的不同分為IPTV和OTT網(wǎng)絡(luò)機(jī)頂盒。
電信運(yùn)營商的IPTV/OTT網(wǎng)絡(luò)機(jī)頂盒和廣電的雙向DVB網(wǎng)絡(luò)數(shù)字機(jī)頂盒的升級(jí)方式則采用普通的C/S模式。單向數(shù)字機(jī)頂盒技術(shù)上已經(jīng)較為落后,本文重點(diǎn)研究廣電的雙向DVB網(wǎng)絡(luò)數(shù)字機(jī)頂盒的升級(jí)過程。
1. 傳統(tǒng)TVOS升級(jí)技術(shù)原理
傳統(tǒng)的cable升級(jí)流程如下:
1.1 機(jī)頂盒開機(jī)后正常啟動(dòng)業(yè)務(wù)流程,在接收到前端服務(wù)器的升級(jí)策略后,對(duì)當(dāng)前終端的信息進(jìn)行判斷,若符合條件進(jìn)入升級(jí)模式,若不符合則轉(zhuǎn)入正常業(yè)務(wù)邏輯。
1.2 進(jìn)入升級(jí)模式后,終端首先把前端下發(fā)的信息寫入deviceinfo分區(qū)并置上升級(jí)標(biāo)志,然后重啟終端。
1.3 終端重啟后,fastboot會(huì)根據(jù)deviceinfo分區(qū)中的標(biāo)識(shí)確認(rèn)要跳轉(zhuǎn)loader還是跳轉(zhuǎn)kernel正常啟動(dòng)程序。
1.4 進(jìn)入loader后,程序會(huì)讀取deviceinfo分區(qū)中的相關(guān)信息,鎖定對(duì)應(yīng)的頻點(diǎn)進(jìn)行升級(jí)數(shù)據(jù)接收,并更新系統(tǒng)分區(qū)。
1.5 更新完成后,重啟進(jìn)入新系統(tǒng),展開正常業(yè)務(wù)流程并上報(bào)日志文件。
2. P2P升級(jí)設(shè)計(jì)思路
2.1 系統(tǒng)總體架構(gòu)
本系統(tǒng)是基于P2P的機(jī)頂盒網(wǎng)絡(luò)升級(jí)系統(tǒng)。用戶啟動(dòng)機(jī)頂盒后,終端交互模塊首先在STUN服務(wù)器端更新自己當(dāng)前最新的地址,然后心跳保持。之后,終端與升級(jí)服務(wù)器交互版本信息和公網(wǎng)地址以及端口,服務(wù)器記錄并維護(hù)該信息。當(dāng)新加入的機(jī)頂盒需要升級(jí)時(shí),服務(wù)器發(fā)送需要升級(jí)的版本號(hào)和升級(jí)列表給機(jī)頂盒。機(jī)頂盒得到消息后,優(yōu)先在本地廣播,嘗試獲取最新的版本。如果內(nèi)網(wǎng)沒有回應(yīng),則使用前端下發(fā)的升級(jí)地址列表來請(qǐng)求升級(jí)數(shù)據(jù)傳輸,最終成功下載升級(jí)數(shù)據(jù)文件。
完成升級(jí)數(shù)據(jù)文件下載流程后,機(jī)頂盒進(jìn)入升級(jí)狀態(tài)。用友好的界面提示用戶升級(jí),用戶同意后開始機(jī)頂盒升級(jí)流程。首先寫標(biāo)記位到機(jī)頂盒對(duì)應(yīng)的界面,機(jī)頂盒之后重啟進(jìn)入升級(jí)流程。機(jī)頂盒升級(jí)過程中,首先會(huì)在recovery中作簽名效驗(yàn),以確保升級(jí)數(shù)據(jù)的合法性。之后開始升級(jí)流程,首先確認(rèn)包的完整性,然后解壓包內(nèi)的升級(jí)腳本、升級(jí)程序和升級(jí)分區(qū)數(shù)據(jù)。升級(jí)程序按照對(duì)應(yīng)的升級(jí)腳本升級(jí),并對(duì)整個(gè)分區(qū)進(jìn)行升級(jí)。
2.2 主要功能模塊
2.2.1 終端交互模塊
終端交互模塊可以分為兩個(gè)子模塊,認(rèn)證交互子模塊和業(yè)務(wù)交互子模塊。認(rèn)證交互子模塊負(fù)責(zé)終端與終端管理平臺(tái)交互認(rèn)證,認(rèn)證成功之后可與前端展開正常的業(yè)務(wù)交互功能。
終端認(rèn)證的開機(jī)流程如圖1所示,終端開機(jī)后終端交互模塊啟動(dòng),以HTTP GET方式向終端管理平臺(tái)發(fā)送終端認(rèn)證請(qǐng)求,請(qǐng)求信息中攜帶用戶賬號(hào)UserID。終端管理平臺(tái)通過HTTP Resopnse產(chǎn)生EncryToken臨時(shí)身份認(rèn)證字段和擴(kuò)展的js腳本,EncryToken用于加密認(rèn)證的挑戰(zhàn)字。機(jī)頂盒終端會(huì)解釋執(zhí)行前端下發(fā)的js腳本,并根據(jù)js中擴(kuò)展的方法,拿到UserID,STBID,IP,MAC和EncryToken。把以上數(shù)據(jù)使用加密函數(shù)加密后,通過HTTP POST返回給終端管理平臺(tái)。終端管理平臺(tái)對(duì)上報(bào)的加密信息進(jìn)行解密,并驗(yàn)證終端是否合法。驗(yàn)證通過后,終端管理平臺(tái)和終端進(jìn)行包括業(yè)務(wù)交互,心跳回應(yīng),升級(jí)觸發(fā),下發(fā)升級(jí)地址列表等功能。之后機(jī)頂盒終端解析前端下發(fā)信息,執(zhí)行對(duì)應(yīng)的操作。
業(yè)務(wù)交互子模塊主要負(fù)責(zé)遠(yuǎn)程升級(jí)觸發(fā),機(jī)頂盒日志上報(bào),NAT穿越消息請(qǐng)求處理等。他的主要功能是協(xié)助機(jī)頂盒終端完成業(yè)務(wù)功能。機(jī)頂盒在認(rèn)證通過后,通過心跳包維持認(rèn)證連接。前端在業(yè)務(wù)會(huì)話過程中通過一定的規(guī)則篩選,選擇需要觸發(fā)升級(jí)的終端機(jī)頂盒,展開升級(jí)業(yè)務(wù)交互流程。前端下發(fā)升級(jí)消息,包含升級(jí)地址列表。業(yè)務(wù)交互模塊接收到此消息后,更新升級(jí)地址列表,觸發(fā)升級(jí)地址獲取模塊和數(shù)據(jù)傳輸模塊。
而且終端交互模塊需要與升級(jí)地址獲取模塊交互,以此獲取該終端在NAT上映射的網(wǎng)絡(luò)端口和IP地址,并將獲取的終端IP地址和端口Port上報(bào)終端管理平臺(tái)。
2.2.2 升級(jí)地址獲取模塊
升級(jí)地址獲取模塊主要用于找到可以提供升級(jí)數(shù)據(jù)的節(jié)點(diǎn),并與之建立通信。主要分為兩個(gè)子模塊,廣播子模塊和NAT穿越子模塊。在數(shù)據(jù)傳輸模塊需要獲取升級(jí)地址時(shí),廣播子模塊首先在局域網(wǎng)內(nèi)廣播需要的升級(jí)數(shù)據(jù)文件,其他終端在確認(rèn)可提供升級(jí)數(shù)據(jù)后回復(fù)應(yīng)答消息。終端在接到消息后,把回復(fù)消息的終端機(jī)頂盒地址優(yōu)先傳遞給數(shù)據(jù)傳輸模塊。
廣播子模塊在升級(jí)過程中的作用如圖2所示,終端機(jī)頂盒A在與前端交互完成后被觸發(fā)升級(jí),數(shù)據(jù)傳輸模塊啟動(dòng),首先會(huì)向升級(jí)地址獲取模塊申請(qǐng)升級(jí)地址,此時(shí)廣播子模塊發(fā)送廣播消息搜索升級(jí)數(shù)據(jù)提供節(jié)點(diǎn),終端機(jī)頂盒B在獲取到廣播消息后和當(dāng)前版本做對(duì)比,確認(rèn)可提供升級(jí)數(shù)據(jù)后向A應(yīng)答消息。終端機(jī)頂盒A的廣播子模塊在經(jīng)過交互后獲取到終端機(jī)頂盒B的IP地址和升級(jí)數(shù)據(jù)傳輸端口,提供給數(shù)據(jù)傳輸模塊使用。
NAT穿越子模塊是在局域網(wǎng)無法找到升級(jí)節(jié)點(diǎn)時(shí),通過終端交互模塊給出的升級(jí)地址列表,在公網(wǎng)上找出可以進(jìn)行升級(jí)的終端節(jié)點(diǎn),以便于數(shù)據(jù)傳輸模塊從網(wǎng)絡(luò)上獲取升級(jí)文件。終端機(jī)頂盒A在升級(jí)觸發(fā)后,其廣播子模塊未獲取到地址就會(huì)跳轉(zhuǎn)到NAT穿越模塊, NAT穿越模塊依次根據(jù)前端下發(fā)的升級(jí)列表中向前端管理平臺(tái)請(qǐng)求NAT穿越連接終端機(jī)頂盒B,終端機(jī)頂盒B在接收到前端下發(fā)的穿越命令后開始進(jìn)行NAT穿越。
另外升級(jí)地址獲取模塊需要和STUN服務(wù)器交互,獲取本機(jī)外網(wǎng)交互地址和端口。通過與終端交互模塊的消息傳遞,最終上報(bào)終端管理平臺(tái)該終端網(wǎng)絡(luò)機(jī)頂盒的網(wǎng)絡(luò)地址。
2.2.3 數(shù)據(jù)傳輸模塊
下面就兩個(gè)功能的實(shí)現(xiàn)方式作介紹:
①多線程傳輸
終端啟動(dòng)后,如果觸發(fā)當(dāng)前模塊需要進(jìn)行升級(jí)數(shù)據(jù)文件下載,首先數(shù)據(jù)傳輸客戶端會(huì)啟動(dòng),并向升級(jí)地址獲取模塊獲取升級(jí)終端地址,獲取到升級(jí)地址就啟動(dòng)一路線程展開數(shù)據(jù)交互下載,最多啟動(dòng)4路線程進(jìn)行下載。傳輸模塊主線程負(fù)責(zé)線程間的調(diào)度管理和文件傳輸流程。在啟動(dòng)子線程前主線程會(huì)先獲取下載升級(jí)文件的大小,分配對(duì)應(yīng)子線程的下載起始和終止地址,并指定文件名稱。子線程在啟動(dòng)后根據(jù)需要傳輸?shù)奈募笮∑鹗己徒K止地址向連接端請(qǐng)求進(jìn)行數(shù)據(jù)下載。子線程在升級(jí)數(shù)據(jù)傳輸完成后反饋給主線程。主線程確認(rèn)各個(gè)子線程均完成下載后進(jìn)行數(shù)據(jù)拼接。
②斷點(diǎn)續(xù)傳
斷點(diǎn)續(xù)傳功能依賴于服務(wù)端支持,在下載線程啟動(dòng)后首先按照主線程要求的名稱在對(duì)應(yīng)的存儲(chǔ)目錄下新建對(duì)應(yīng)的文件開始下載,如果發(fā)現(xiàn)有同樣的名稱則可以確定之前出現(xiàn)斷點(diǎn)。由于TCP協(xié)議本身的按照順序收取數(shù)據(jù),因此我們只需要跳到文件的末尾繼續(xù)上次下載即可??蛻舳嗽谙螺d數(shù)據(jù)前需要向服務(wù)端請(qǐng)求跳躍到與之相對(duì)應(yīng)位置開始文件傳輸,此功能需要服務(wù)端配合。
2.2.4 終端升級(jí)模塊
終端升級(jí)模塊的主要功能是進(jìn)行系統(tǒng)升級(jí),當(dāng)數(shù)據(jù)傳輸模塊下載到升級(jí)數(shù)據(jù)文件后,觸發(fā)升級(jí)流程。機(jī)頂盒重啟后,首先效驗(yàn)升級(jí)數(shù)據(jù)文件的合法性。如果升級(jí)數(shù)據(jù)文件效驗(yàn)不通過,提示用戶升級(jí)失敗。如果升級(jí)數(shù)據(jù)文件效驗(yàn)正常,則進(jìn)入正常升級(jí)流程展開升級(jí)。
3. 總結(jié)與展望
本文通過對(duì)目前國內(nèi)外的行業(yè)現(xiàn)狀進(jìn)行研究分析,結(jié)合實(shí)際使用特點(diǎn),設(shè)計(jì)了基于P2P的網(wǎng)絡(luò)機(jī)頂盒升級(jí)系統(tǒng);利用socket技術(shù),將多線程數(shù)據(jù)傳輸方法應(yīng)用到本系統(tǒng)中,提高了系統(tǒng)下載效率;利用STUN技術(shù)實(shí)現(xiàn)NAT穿越模塊;利用RSA算法完成對(duì)升級(jí)數(shù)據(jù)文件完整性確認(rèn)。
參考文獻(xiàn):
[1]Mohammad Shojafar,Jemal H. Abawajy,Zia Delkhah,Ali Ahmadi,Zahra Pooranian,Ajith Abraham. An efficient and distributed file search in unstructured peer-to-peer networks[J]. Peer-to-Peer Networking and Applications. 2015 (11)
[2]王晟,蘇凱雄. 基于Android平臺(tái)機(jī)頂盒在線升級(jí)應(yīng)用的設(shè)計(jì)[D]. 福建:福州大學(xué),2015.
[3]劉越,章文輝. 淺談機(jī)頂盒大網(wǎng)升級(jí)測試方案[J]. 電視技術(shù),2012,36(10).
作者簡介:馬振洲,男,1983年生,碩士,通信與信息系統(tǒng)專業(yè),工程師,主要從事有線電視智能終端相關(guān)技術(shù)研究。