ACS與CPE的全雙工實(shí)現(xiàn)
Part 01
TR069協(xié)議簡介
協(xié)議即約定,通信協(xié)議約定了通信雙方交互所遵循的方式和細(xì)則。TR069協(xié)議約定用戶側(cè)設(shè)備(Customer Premises Equipment,即CPE)和自動(dòng)配置服務(wù)器(Auto-Configuration Server,即ACS)之間交互的規(guī)則。我們知道HTTP協(xié)議是基于TCP協(xié)議,COAP協(xié)議是基于UDP協(xié)議,而這里的TR069協(xié)議則是基于HTTP1.1的協(xié)議傳輸,SOAP標(biāo)準(zhǔn)封裝XML的消息內(nèi)容格式,消息內(nèi)容部分如下圖1:
Part 02
TR069協(xié)議用途
TR069協(xié)議提供了對下一代網(wǎng)絡(luò)中家庭網(wǎng)絡(luò)設(shè)備進(jìn)行管理配置的通用框架、消息規(guī)范、管理方法和數(shù)據(jù)模型。在網(wǎng)管模型中,ACS負(fù)責(zé)對終端設(shè)備CPE進(jìn)行遠(yuǎn)程集中管理,解決CPE設(shè)備的管理困難,節(jié)約維護(hù)成本,提高問題解決效率。
ACS實(shí)現(xiàn)對CPE的遠(yuǎn)程管理,核心便是ACS與CPE之間的連接交互。不同于MQTT協(xié)議,客戶端與服務(wù)器之間維持一個(gè)長鏈接,ACS同CPE的連接僅在存在交互需要時(shí)建立短鏈接。
Part 03
CPE連接ACS
CPE首次啟動(dòng)會(huì)主動(dòng)對ACS發(fā)起HTTP連接,進(jìn)行注冊上線動(dòng)作,通過RPC方法中的inform方法上報(bào)0 BOOTSTRAP和1 BOOT(如上圖SOAP封裝的XML消息內(nèi)容案例),如平臺(tái)有需要配置或者獲取的參數(shù),也會(huì)在這次連接中進(jìn)行。交互如下:
第一步:CPE直接對ACS發(fā)起HTTP連接請求,請求案例頭部如下:
第二步:ACS響應(yīng)401,要求CPE進(jìn)行HTTP Digest Authentication認(rèn)證,即摘要認(rèn)證,響應(yīng)案例如下:
第三步:CPE根據(jù)ACS響應(yīng)的WWW-Authenticate信息,以及url、username和password,按照摘要認(rèn)證算法計(jì)算response,構(gòu)建出再次請求的摘要認(rèn)證信息Authorization,并再次發(fā)起HTTP請求,進(jìn)行inform上報(bào)。攜帶認(rèn)證信息再次請求,案例如下:
第四步:ACS響應(yīng)200 OK,SOAP內(nèi)容為InformResponse,摘要認(rèn)證到這里已經(jīng)完成。根據(jù)響應(yīng)頭的Set-Cookie信息設(shè)置CPE下個(gè)請求的Cookie。案例如下:
第五步:CPE發(fā)起的一個(gè)空的HTTP請求,根據(jù)TR069協(xié)議,消息體長度必須為0,如下案例可以看到Content-Length是0:
第六步:ACS響應(yīng)HTTP 空請求,封裝SOAP調(diào)用RPC方法,對終端設(shè)備進(jìn)行參數(shù)配置或者查詢等操作。
第七步:CPE發(fā)起請求,封裝SOAP對應(yīng)響應(yīng)RPC方法。如果終端管理平臺(tái)查詢后還需要進(jìn)行配置,則第六步和第七步會(huì)有兩次,如都不需要,則第六步和第七步可省略。如存在,案例如下:
第八步:ACS下發(fā)一個(gè)空HTTP響應(yīng),根據(jù)TR069協(xié)議,狀態(tài)碼使用“204(無內(nèi)容)”,表示本次會(huì)話結(jié)束。案例如下:
這里我們針對第三步的摘要認(rèn)證展開說明。這里簡要說明下WWW-Authenticate和Authorization中涉及到的一些參數(shù),更多詳細(xì)內(nèi)容可以自行參閱RFC2617等相關(guān)文檔。
? digest ==>認(rèn)證方式
? realm ==>領(lǐng)域,領(lǐng)域參數(shù)是強(qiáng)制的,必須存在
? qop ==>保護(hù)的質(zhì)量,“auth”表示只進(jìn)行身份查驗(yàn), “auth-int”表示進(jìn)行查驗(yàn)外,還有一些完整性保護(hù)
? nonce ==>服務(wù)器側(cè)生成的隨機(jī)數(shù),在每個(gè)401回應(yīng)產(chǎn)生時(shí),被唯一創(chuàng)建,為防止攻擊產(chǎn)生,參與加密
? cnonce ==>即client nonce
? uri ==>客戶端想要訪問的URL
? nc ==>連續(xù)請求次數(shù),在同一個(gè)TCP連接里,設(shè)備每POST一次,nc+1
? algorithm ==>用來生產(chǎn)摘要及校驗(yàn)和的算法對
? response ==>用來證明用戶是否知道口令
response計(jì)算通常過程分以下三步[2]:
第一步:計(jì)算HA1
- HA1=MD5(A1)=MD5(username:realm:password);
第二步:計(jì)算HA2
- 如果 qop 值為“auth”或未指定,那么HA2=MD5(A2)=MD5(method:uri);
- 如果 qop 值為“auth-int”,那么HA2=MD5(A2)=MD5(method:uri:MD5(entityBody);
第三步:根據(jù)HA1和HA2計(jì)算response
- 如果 qop 值為“auth”或“auth-int”,那么respnotallow=MD5(HA1:nonce:nc:cnonce:qop:HA2);
- 如果 qop 未指定,那么respnotallow=MD5(HA1:nonce:HA2) 。
Authorization構(gòu)建:CPE端生成cnonce,nc從00000000開始累計(jì),response根據(jù)上述公式計(jì)算,opaque、qop、nonce、realm繼承自WWW-Authenticate,添加上username、algorithm和uri。
此外,終端管理系統(tǒng)可能還會(huì)對Manufacturer、OUI等參數(shù)進(jìn)行查驗(yàn),如查驗(yàn)不通過,響應(yīng)403,即服務(wù)器理解客戶的請求,但拒絕處理它。
Part 04
ACS連接CPE
通過ACS對CPE進(jìn)行參數(shù)配置時(shí),ACS作為主動(dòng)方觸發(fā)本次連接。此時(shí),ACS主動(dòng)連接CEP,方式有兩種:
(1)非NAT模式下,ACS對CPE發(fā)起HTTP連接請求,使用終端上報(bào)的地址:Device.ManagementServer.ConnectionRequestURL,終端要求進(jìn)行HTTP摘要認(rèn)證。
(2)NAT模式下,ACS在公網(wǎng)環(huán)境下與內(nèi)網(wǎng)下CPE交互,通過NAT穿越獲取CPE公網(wǎng)地址進(jìn)行交互,實(shí)現(xiàn)流程見下文。
NAT,即網(wǎng)絡(luò)地址轉(zhuǎn)換。STUN 存在的目的就是進(jìn)行NAT穿越[1],這里STUN將作為一個(gè)工具來服務(wù)于本次的ACS連接CPE實(shí)現(xiàn)。讓終端用來發(fā)現(xiàn)其在公網(wǎng)IP和端口,并作為一種?;睿╧eep-alive)協(xié)議來維持NAT的綁定。
NAT模式下,ACS連接CPE實(shí)現(xiàn)具體如下:
第一步:基于STUN協(xié)議實(shí)現(xiàn)ACS與CPE之間的捆綁請求和響應(yīng),并維持。可借助第三方開源JSTUN庫,地址:https://gitee.com/javabedlamite/JSTUN/。如下是相關(guān)報(bào)文案例:
第二步:根據(jù)捆綁響應(yīng)解析CPE公網(wǎng)IP和端口。根據(jù)STUN協(xié)議定義,MAPPED-ADDRESS屬性對應(yīng)即是客戶端映射地址;在這里也是CPE的公網(wǎng)地址。
第三步:根據(jù)映射的端口地址構(gòu)建終端管理系統(tǒng)的UDP回連地址;并上報(bào)ACS。涉及使用TR069數(shù)據(jù)模型中以下兩個(gè)參數(shù):
- Device.ManagementServer.UDPCnotallow=CEP公網(wǎng)地址
- Device.ManagementServer.NATDetected=true通過Inform 4 VALUE CHANGE
通知上報(bào)ACS,CPE支持NAT穿越,以及其在公網(wǎng)UDP回連地址。
第四步:某時(shí)刻,ACS需要對CPE進(jìn)行配置,只需終端管理平臺(tái)對CPE的發(fā)起UDP請求,終端設(shè)備側(cè)解析后,觸發(fā)CPE對ACS發(fā)起Inform 6 CONNECTION REQUEST(根據(jù)Tr069協(xié)議,Inform 6表明本次會(huì)話是由ACS側(cè)要求而建立的)。到此ACS連接CPE完成。
第五步:在本次連接中,ACS下發(fā)對CPE的配置、查詢、重啟、診斷等約定支持的任務(wù),CPE執(zhí)行并響應(yīng)。
整體流程大致實(shí)現(xiàn)可如下:
Part 05
主流圖形數(shù)據(jù)庫
ACS和CPE之間雙向連接建立的實(shí)現(xiàn),是終端管理系統(tǒng)遠(yuǎn)程管理終端的基本和前提。本文主要就ACS連接CEP和CPE連接ASC,各詳細(xì)講述一種連接實(shí)現(xiàn)方式和流程。目前,家庭智能網(wǎng)關(guān)普遍通過TR069協(xié)議納管于各省份的省側(cè)管理平臺(tái),一些機(jī)頂盒也在通過TR069協(xié)議進(jìn)行納管;在萬物互聯(lián)背景下,未來規(guī)模也許會(huì)更大。