王 磊,吳海波,陳志輝
IETF提出了基于SIP的事件訂閱通告機(jī)制規(guī)范:RFC3265[1],規(guī)范定義了兩個(gè)擴(kuò)展請求消息:SUBSCRIBE和NOTIFY。SUBSCRIBE請求用于發(fā)起訂閱請求,NOTIFY請求用于通告當(dāng)前資源狀態(tài)。
SIP協(xié)議中的訂閱狀態(tài)是有有效期的,為了維護(hù)訂閱狀態(tài),必須在有效期內(nèi)再次發(fā)送SUBSCRIBE消息。有效期的值沒有統(tǒng)一定義,時(shí)間短的有30秒,當(dāng)客戶端與服務(wù)器端存在大量訂閱時(shí),為了維護(hù)各自的訂閱狀態(tài),每個(gè)訂閱在訂閱周期內(nèi)都會再次發(fā)送SUBSCRIBE消息。在短時(shí)間內(nèi),在鏈路上可能存在大量的用于維護(hù)訂閱狀態(tài)的SUBSCRIBE消息、200 OK消息和NOTIFY消息。如果鏈路是無線鏈路,將大大浪費(fèi)無線資源,嚴(yán)重時(shí)甚至可能影響其它業(yè)務(wù)的正常開展。文章提出了一種基于聚合代理SIP訂閱機(jī)制的擴(kuò)展將能大大緩解這個(gè)問題。
在RFC3856[2]中,規(guī)定用戶訂閱標(biāo)準(zhǔn)流程如圖1所示。
圖1 標(biāo)準(zhǔn)訂閱流程
標(biāo)準(zhǔn)的訂閱方式每個(gè)訂閱都需要在訂閱有效期內(nèi)發(fā)送訂閱消息和通告消息來維護(hù)各自的訂閱狀態(tài)。這種方式將增大了無線鏈路帶寬開銷。
基于上述情況,在無線鏈路的兩端,分別部署一個(gè)聚合代理訂閱模塊。各個(gè)終端的Subscribe消息、Notify消息和200 OK消息整理匯聚后發(fā)送給無線鏈路另一端的聚合代理訂閱模塊,聚合代理訂閱模塊再分解出相應(yīng)的消息發(fā)送給服務(wù)器,聚合代理對訂閱對象的維護(hù)主要是根據(jù)消息頭中“Expires”頭和“CSeq”頭?!癊xpires”頭給定了訂閱消息過期的相關(guān)時(shí)間,需要繼續(xù)訂閱,就必須在有效期內(nèi)再次發(fā)送訂閱消息,如果Expires為0,表示取消該訂閱?!癈Seq”頭是為了在會話中對訂閱進(jìn)行排序的,區(qū)分訂閱請求和訂閱的重發(fā)。
圖2描述了使用聚合代理后的具體實(shí)現(xiàn)流程。
圖2 使用聚合代理訂閱流程
具體說明如下:
步驟1:觀察者M(jìn)1和觀察者M(jìn)2發(fā)送標(biāo)準(zhǔn)Subscribe消息(Expires:30 CSeq=1)發(fā)起訂閱。
步驟 2:根據(jù) Subscribe消息中“Expires”和“CSeq”頭的信息,查看表1可知M1和M2都是新增用戶。聚合代理 A維護(hù)的用戶群 G1={M1,M2}。增加成員的時(shí)候,需要在聚合代理模塊A中根據(jù)訂閱消息,建立存儲M1和M2用戶的相關(guān)信息,聚合后的Subscribe消息中也將攜帶M1和M2的完整信息,發(fā)送給服務(wù)器端的聚合代理B。同時(shí)消息頭中,“require”頭應(yīng)包含“GBS”字段,用于說明當(dāng)前消息是經(jīng)過聚合代理處理的,需要聚合代理還原。
步驟3:服務(wù)器端的聚合代理B收到了聚合后Subscribe消息,根據(jù)消息解析并存儲訂閱用戶M1和M2的信息,聚合代理 B維護(hù)的用戶群 G2={M1,M2}。然后根據(jù)這些用戶訂閱信息還原成兩個(gè)標(biāo)準(zhǔn)的Subscribe消息發(fā)送給服務(wù)器。
步驟4:服務(wù)器返回200 OK消息給聚合代理B。
步驟5:聚合代理B將兩條200 OK消息聚合后發(fā)給聚合代理A。由于用戶M1,M2基本信息在聚合代理模塊中已經(jīng)存在,隨后聚合發(fā)送的200 OK消息、Notify消息和Subscribe消息將不再攜帶M2的訂閱基本信息。
步驟6:聚合代理A還原兩條標(biāo)準(zhǔn)200 OK消息分別發(fā)送給M1和M2。
步驟7:服務(wù)器發(fā)送Notify消息給聚合代理B。
步驟8:聚合代理B將兩條Notify消息聚合后發(fā)給聚合代理A。
步驟9:聚合代理A還原兩條標(biāo)準(zhǔn)Notify消息分別發(fā)送給M1和M2。
步驟10:觀察者M(jìn)1和觀察者M(jìn)2返回200 OK消息給聚合代理A。
步驟11:聚合代理A將兩條200 OK消息聚合后發(fā)給聚合代理B。
步驟12:聚合代理B還原兩條標(biāo)準(zhǔn)200 OK消息發(fā)送給服務(wù)器。
步驟13:觀察者M(jìn)1發(fā)送標(biāo)準(zhǔn)Subscribe消息(Expires:30 CSeq=2),觀察者M(jìn)2發(fā)送標(biāo)準(zhǔn) Subscribe消息(Expires:0 CSeq=2)。
步驟14:查看表1,M1是用戶更新,M2是用戶刪除。聚合代理A標(biāo)識M2將要?jiǎng)h除,并將收到的Subscribe消息聚合后發(fā)給聚合代理B。
表1 消息頭分析 s
步驟15:聚合代理B將收到了聚合后Subscribe消息后,標(biāo)識M2將要?jiǎng)h除,并還原成兩個(gè)標(biāo)準(zhǔn)的Subscribe消息發(fā)送給服務(wù)器。
步驟16:服務(wù)器返回200 OK消息給聚合代理B。
步驟17:聚合代理B將兩條200 OK消息聚合后發(fā)給聚合代理A,然后刪除M2相關(guān)信息,此時(shí)G2={M1}。
步驟18:聚合代理A還原兩條標(biāo)準(zhǔn)200 OK消息分別發(fā)送給M1和M2,然后刪除M2相關(guān)信息,此時(shí)G1={M1}。
步驟19:服務(wù)器發(fā)送Notify消息給聚合代理B。
步驟20:聚合代理B將Notify消息聚合后發(fā)給聚合代理A。
步驟21:聚合代理A還原兩條標(biāo)準(zhǔn)Notify消息分別發(fā)送給M1。
步驟22:觀察者M(jìn)1返回200 OK消息給聚合代理A。
步驟23:聚合代理A將200 OK消息聚合后發(fā)給聚合代理B。
步驟24:聚合代理B還原標(biāo)準(zhǔn)200 OK消息發(fā)送給服務(wù)器。
聚合代理模塊可以應(yīng)用在無線鏈路環(huán)境下,應(yīng)用環(huán)境如圖3所示。
圖3 聚合代理應(yīng)用場景
用戶M1-M10鏈接到聚合代理A,通過無線窄帶鏈路鏈接到聚合代理B,在鏈接到訂閱服務(wù)器。在T1時(shí)刻M1發(fā)起訂閱,T2時(shí)刻,M1保持訂閱,M2發(fā)起訂閱,以此類推,到T10時(shí)刻時(shí),一共有10個(gè)用戶完成了訂閱,并保持M1-M10用戶10個(gè)訂閱狀態(tài)(注:T1、T2…T10時(shí)間的時(shí)間間隔不能超過訂閱的有效期,即“Expires”的值)。消息通過無線鏈路發(fā)送到訂閱服務(wù)器上。
從無線鏈路上傳輸?shù)南l數(shù)分析,如圖4所示,按照標(biāo)準(zhǔn)的流程,一個(gè)用戶完整的訂閱流程或訂閱狀態(tài)更新流程在無線鏈路上傳輸有4條消息,10個(gè)用戶共計(jì)有40條消息在無線鏈路上傳輸。加入聚合代理模塊后,通過它的聚合作用,將無線鏈路上傳輸?shù)?0條消息減少為了4條消息??偟膩碚f,當(dāng)沒有聚合代理時(shí),無線鏈路上的消息數(shù)量隨訂閱用戶的增加成線性增長的態(tài)勢,而加入聚合代理后,無線鏈路上的消息數(shù)量隨用戶的增加保持不變。
圖4 兩種方式無線鏈路上消息條數(shù)對比
而從無線鏈路上數(shù)據(jù)流量分析,文章做了如下假設(shè):假設(shè)1次訂閱4條消息產(chǎn)生的數(shù)據(jù)流量是1 920 Byte/s,每增加一個(gè)訂閱維護(hù)消息流程,數(shù)據(jù)流量增加200 Byte/s。如圖5所示,對兩種流程而言,新增一個(gè)訂閱,在無線鏈路上產(chǎn)生的數(shù)據(jù)流量基本一致,而隨著訂閱用戶的增加,標(biāo)準(zhǔn)流程無線鏈路上的數(shù)據(jù)流量成線性增長,而加入聚合代理后,整個(gè)無線網(wǎng)絡(luò)流量的增加速度遠(yuǎn)遠(yuǎn)低于沒有聚合代理時(shí)。聚合代理流量的節(jié)省主要來源對訂閱維護(hù)流程處理。當(dāng)標(biāo)準(zhǔn)訂閱流程流量增長達(dá)到鏈路流量極限的時(shí)候(如圖5所示,當(dāng)訂閱條數(shù)大于10時(shí)),隨著訂閱的增加,數(shù)據(jù)流量將超過無線鏈路的帶寬,產(chǎn)生丟包,影響業(yè)務(wù)的正常開展,而此時(shí),加入聚合代理后的流程卻還遠(yuǎn)遠(yuǎn)未到鏈路的極限流量。
圖5 兩種方式無線鏈路上傳輸字節(jié)大小對比
通過分析可知,基于聚合代理的訂閱機(jī)制能大大降低因訂閱更新消息所帶來的鏈路負(fù)載,訂閱用戶越多,其聚合效果越明顯。SIP訂閱消息帶給無線鏈路的負(fù)載降低,這將更加有利于VoIP應(yīng)用在民用和軍用領(lǐng)域[3]無線網(wǎng)絡(luò)上的使用和推廣。同時(shí),本文提出的聚合思想也能對無線鏈路VoIP應(yīng)用設(shè)計(jì)提供一種積極有效的設(shè)計(jì)思路。
當(dāng)前,本文只是從SIP訂閱機(jī)制上闡述了聚合代理的機(jī)制,下一步應(yīng)當(dāng)綜合考慮將聚合代理的機(jī)制擴(kuò)展應(yīng)用到整個(gè)SIP協(xié)議當(dāng)中,比如注冊[4]等,從而進(jìn)一步降低SIP消息對無線鏈路資源的占用。
[1] Adam Roach. Jacobson. Session Initiation Protocol(SIP) -Specific Event Notification[S],IETFRFC3265.June 2002.
[2] Jonathan Rosenberg.A Presence Event Package for the Session Initiation Protocol(SIP)[S],IETF RFC3856.August 2004.
[3] 王俊,陳志輝,田永春.統(tǒng)一通信技術(shù)在戰(zhàn)術(shù)通信網(wǎng)中的應(yīng)用研究[J].通信技術(shù),2014,47(02):184-189.
WANG Jun,CHEN Zhi-h(huán)ui,TIAN Yong-chun.Application of Unified Communication Technology in Tactical Communications Network[J].Communications Technology,2014,47(002):184 -189.
[4] Rosenberg J,Schulzrinne H,Camarillo G,et al.Handley M and Schooler E.SIP:Session Initiation Protocol[S],IETF RFC3261.June 2002.