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