程方,王洋
(重慶郵電大學(xué) 通信網(wǎng)與測試技術(shù)重點(diǎn)試驗(yàn)室 重慶 400065)
H.248協(xié)議,也叫媒體網(wǎng)關(guān)控制協(xié)議(Media Gateway Control protocol,Megaco), 此 協(xié) 議 是ITU-T與IETF合作的標(biāo)準(zhǔn),被國際軟交換協(xié)會(huì)ISC指定為軟交換設(shè)備與媒體網(wǎng)關(guān)之間的標(biāo)準(zhǔn)通信協(xié)議。
在NGN網(wǎng)絡(luò)中,基于呼叫控制與承載分離[1]的思想,傳統(tǒng)IP電話網(wǎng)關(guān)被物理地分成媒體網(wǎng)關(guān)(Media Gateway,MG)和媒體網(wǎng)關(guān)控制器(Media Gateway Controller,MGC)兩個(gè)單獨(dú)的網(wǎng)絡(luò)實(shí)體,MG負(fù)責(zé)承載業(yè)務(wù),MGC負(fù)責(zé)呼叫控制。H.248協(xié)議就是MG與MGC之間的一種控制協(xié)議,它定義了MGC對MG的控制方式和標(biāo)準(zhǔn)的基于IP網(wǎng)絡(luò)的通信格式。在軟交換系統(tǒng)中,軟交換設(shè)備完成MGC的功能,通過H.248協(xié)議實(shí)現(xiàn)對MG的控制,最終完成業(yè)務(wù)的承載[2]。
作為NGN網(wǎng)絡(luò)的核心協(xié)議,其監(jiān)測解碼分析對于網(wǎng)絡(luò)性能的評定以及網(wǎng)絡(luò)進(jìn)一步優(yōu)化和完善至關(guān)重要。因此為了獲得H.248連接模型的關(guān)鍵參數(shù),必須對該協(xié)議數(shù)據(jù)實(shí)現(xiàn)正確的解碼,從而在監(jiān)測儀表上實(shí)現(xiàn)網(wǎng)絡(luò)中的呼叫重現(xiàn)。文章首先簡要介紹H.248協(xié)議的連接模型和消息格式,然后根據(jù)H.248兩種不同的編碼方式設(shè)計(jì)并實(shí)現(xiàn)了H.248協(xié)議的解碼。
協(xié)議的連接模型主要描述媒體網(wǎng)關(guān)中的邏輯實(shí)體,這些邏輯實(shí)體由媒體網(wǎng)關(guān)控制器控制。這個(gè)連接模型中的主要的抽象概念是終端(Termination)和關(guān)聯(lián)(Context)。在H.248協(xié)議[3]定義的連接模型中,包括關(guān)聯(lián)和終端兩個(gè)實(shí)體。一個(gè)關(guān)聯(lián)中至少要包含一個(gè)終端,否則此關(guān)聯(lián)將被刪除。同時(shí)一個(gè)終端在任一時(shí)刻也只能屬于一個(gè)關(guān)聯(lián)。
終端(Termination)是MG 上的一個(gè)邏輯實(shí)體,它可能是物理實(shí)體(物理信道)或是臨時(shí)性的RTP流,在邏輯概念上終端就是一次通信的發(fā)送端或接收端。關(guān)聯(lián)(Context)是一些終端具相互聯(lián)系而形成的結(jié)合體,它可以描述拓?fù)浣Y(jié)構(gòu),及媒體混合和交換的參數(shù)。
H.248協(xié)議有文本編碼和二進(jìn)制編碼兩種編碼方式,但不管哪種編碼方式H.248消息都有相同的結(jié)構(gòu),一個(gè)H.248消息的結(jié)構(gòu)如圖1所示。
圖1 H.248消息結(jié)構(gòu)
消息從消息頭(Header)開始,一條消息包含若干個(gè)事務(wù)(Transaction),事務(wù)是MGC和MG之間的一組命令組成,有請求和響應(yīng)兩種類型,一對請求和響應(yīng)由相同的TransactionID來進(jìn)行標(biāo)識(shí);一個(gè)事務(wù)又由一個(gè)或者多個(gè)動(dòng)作(Action)組成,每個(gè)動(dòng)作中包含了H.248消息的主要內(nèi)容——命令。命令實(shí)現(xiàn)了對關(guān)聯(lián)和終端屬性的控制,包括指定終端報(bào)告檢測到的事件,通知終端使用什么信號(hào)和動(dòng)作,以及指定關(guān)聯(lián)的拓?fù)浣Y(jié)構(gòu)等功能。對H.248數(shù)據(jù)的解碼,目的就是取出各字段的關(guān)鍵數(shù)據(jù)。
采用文本方式編碼的H.248協(xié)議也叫Megaco協(xié)議,它采用ABNF[4]語法規(guī)范描述的文本格式進(jìn)行編碼,一條Megaco消息如下所示:
MEGACO/1 [10.35.2.101]:2944
T=452422{C=299{
N=A19{
OE=385879552{al/on}}}}
根據(jù)Megaco協(xié)議的ABNF語法規(guī)范解析上面的消息,結(jié)果如下所示:
MegacopToken: MEGACO
// 指示為Megaco協(xié)議
Version: 1
// 版本為1
mId: [10.35.2.101]:2944
// MG的IP地址和端口號(hào)分別為10.35.2.101:2944
TransToken: T
// 事務(wù)請求
TransactionID: 452422
// 事務(wù)ID為:452422
CtxToken: C
// 關(guān)聯(lián)指示
ContextID: 299
// 關(guān)聯(lián)ID為299
NotifyToken: N
// 通知命令
TerminationID: A19
// 終結(jié)點(diǎn)ID為A19
ObservedEventsToken: OE
// 觀測到的事件描述符
RequestID: 385879552
// 請求ID為385879552
pkgdName: al/on
// 指示為模擬線包中的掛機(jī)事件
在傳統(tǒng)協(xié)議解析方法中,主要采用字符串查找匹配方式,需要逐一的取出消息中每個(gè)域值,和協(xié)議規(guī)范進(jìn)行匹配,判斷是否符合規(guī)范。在解析長度不定的域時(shí),需要查找該域的結(jié)束標(biāo)志,再取出該域的值。這些操作導(dǎo)致代碼實(shí)現(xiàn)很復(fù)雜,協(xié)議解析效率比較低下。因此,我們提出了采用正則表達(dá)式解析Megaco協(xié)議的方法,該方法相對于傳統(tǒng)的字符串查找匹配方式,協(xié)議解析速度有較大的提高。
正則表達(dá)(regular expression)就是用一個(gè)“字符串”來描述一個(gè)特征,然后去驗(yàn)證另一個(gè)“字符串”是否符合這個(gè)特征。在本文中,我們利用正則表達(dá)式引擎DEELX的三個(gè)關(guān)鍵CRegexpT模板類、MatchResult 類、CContext 類,來分別完成編譯正則表達(dá)式和進(jìn)行匹配替換、記錄匹配結(jié)果、記錄所匹配到的字符串及各個(gè)捕獲組的位置信息。
利用這一引擎,我們就可以根據(jù)Megaco的消息結(jié)構(gòu)從外向內(nèi)進(jìn)行解碼。以協(xié)議識(shí)別函數(shù)為例,首先調(diào)用構(gòu)造函數(shù)定義一個(gè)CregexpT對象regexp,傳入的正則表達(dá)式為(?:MEGACO|!)/d{1,2},其含義表示字符串中含有“MEGACO/”或“!/”,并且后面緊跟最多二位,至少一位的數(shù)字,其中(?:MEGACO|!)表示非捕獲組,和(MEGACO|!)表示的普通分組相比較;接著調(diào)用CRegexpT 類的Match方法,傳入?yún)f(xié)議數(shù)據(jù)的頭指針,查找Megaco消息,并返回匹配結(jié)果MatchResult對象result;最后通過MatchResult類的IsMatched方法來判斷是否匹配成功,如果返回0,表示匹配失敗,該條消息不是Megaco消息,否則表示匹配成功,該條消息是Megaco消息。
采用這樣的方法對采集到的Megaco 消息從頭部開始根據(jù)Megaco協(xié)議的格式和消息結(jié)構(gòu)逐一進(jìn)行查詢,就能獲取每個(gè)關(guān)鍵字的字段名和他們相應(yīng)的字段值。
二進(jìn)制方式編碼的H.248協(xié)議,采用了ASN.1語法規(guī)范的BER[5](基本編碼規(guī)則)編碼規(guī)則,其基本編碼結(jié)構(gòu)有如下兩種。
圖2 不含內(nèi)容結(jié)束八位位組的BER編碼結(jié)構(gòu)
圖3 含內(nèi)容結(jié)束八位位組的BER編碼結(jié)構(gòu)
在BER編碼中,數(shù)據(jù)值的編碼主要由標(biāo)識(shí)符八位位組、長度八位位組、內(nèi)容八位位組、內(nèi)容結(jié)束八位位組等四種成分組成。其中,內(nèi)容結(jié)束八位位組的有無區(qū)別了上述的兩種基本編碼結(jié)構(gòu)。
標(biāo)識(shí)符八位位組用于對數(shù)據(jù)值類型的ASN.1標(biāo)簽(類和編號(hào))進(jìn)行編碼;長度八位位組標(biāo)識(shí)了內(nèi)容八位位組的位組數(shù);內(nèi)容八位位組則由0個(gè)、1個(gè)或多個(gè)八位位組組成,其編碼遵循ASN.1中的定義;內(nèi)容結(jié)束八位位組為可選類型,根據(jù)內(nèi)容八位位組的指示出現(xiàn)與否。這幾種類型的八位位組構(gòu)成了BER的TLV三元組形式,這種編碼形式的最大特點(diǎn)就是在內(nèi)容八位位組中可能包含了下一層次的TLV結(jié)構(gòu),直到最后的一層TLV三元組結(jié)束為止。
根據(jù)TLV三元組結(jié)構(gòu)的這種特點(diǎn),我們設(shè)計(jì)了H.248解碼的算法流程如圖4所示。
圖4 H.248協(xié)議解碼流程圖
在解碼過程中,我們首先要對數(shù)據(jù)的第一個(gè)字節(jié)即整個(gè)TLV數(shù)據(jù)塊的第一個(gè)標(biāo)簽八位位組進(jìn)行解析,通過判斷其是否為0x30來識(shí)別整個(gè)數(shù)據(jù)塊是否是H.248協(xié)議數(shù)據(jù);協(xié)議識(shí)別函數(shù)同時(shí)還必須獲取第一個(gè)長度八位位組中指示的整個(gè)數(shù)據(jù)塊長度,并將指針指向第一個(gè)內(nèi)嵌的TLV三元組的開頭;整個(gè)解碼流程采取逐層解包封的思想達(dá)到從外向內(nèi)獲取每個(gè)協(xié)議關(guān)鍵數(shù)據(jù)的方法,符合H.248協(xié)議的消息結(jié)構(gòu)。
通過對某運(yùn)營商關(guān)口局接口現(xiàn)場實(shí)測,采集到大量H.248協(xié)議數(shù)據(jù),下面是其中的一條H.248消息的原始數(shù)據(jù):
30 64 a1 62 80 01 01 a1 0c a0 0a 80 04 0a 3b 22 04 81 02 0b 80 a2 4f a1 4d a0 4b 80 04 1e 05 aa 46 a1 43 30 41 80 05 00 ff ff ff fe a3 38 30 36 a0 34 a0 32 a0 0e 30 0c a0 00 81 08 00 00 00 00 40 00 91 54 a1 20 a0 1e a1 1c a0 1a a0 18 80 01 02 81 01 00 82 01 00 a3 0d 30 0b 80 04 00 0d 00 08 a1 03 04 01 00
它的解碼結(jié)果如圖5所示。
在解碼結(jié)果中可以看出,這是一條包含了一個(gè)事務(wù)請求的H.248消息,消息中只有一個(gè)指定了終端ID的Add命令,并在命令的描述符中規(guī)定了本地媒體流的流模式,并指示媒體網(wǎng)關(guān)取消回鈴控制。它的解碼結(jié)果如圖5所示。
圖5 H.248協(xié)議解碼結(jié)果
H.248協(xié)議由于其編碼方式的特殊性,在設(shè)計(jì)中我們必須能對2種不同的編碼方式都提供解析功能。本文通過正則表達(dá)匹配法實(shí)現(xiàn)了對文本方式編碼的Megaco協(xié)議的解碼,又通過“逐層拆封”的算法思想實(shí)現(xiàn)了二進(jìn)制編碼方式下 “TLV結(jié)構(gòu)”的H.248協(xié)議數(shù)據(jù)的解碼。為下一步實(shí)現(xiàn)呼叫過程合成提供了各種呼叫的關(guān)鍵數(shù)據(jù)和統(tǒng)計(jì)指標(biāo),全面有效的實(shí)現(xiàn)了對H.248協(xié)議數(shù)據(jù)的監(jiān)測。通過對解碼模塊進(jìn)行的單元測試和軟件集成后的現(xiàn)場測試,充分證明了解碼方案的可行性和有效性,各項(xiàng)指標(biāo)均符合協(xié)議監(jiān)測規(guī)范[6]。
[1] 高艷玲, 馬玉霞. 軟交換技術(shù)及應(yīng)用淺析[J]. 計(jì)算機(jī)與網(wǎng)絡(luò). 2006(6):32-35.
[2] YD/T 1309-2004中華人民共和國通信行業(yè)標(biāo)準(zhǔn), 與承載無關(guān)的呼叫承載控制規(guī)范[S].IETF RFC3525(2003), Gateway Control Protocol[S].
[3] ITU-T Recommendation H.248.1(2005) Gateway control protocol[S].
[4] IETF RFC 2234 (1997), Augmented BNF for Syntax Specifications: ABNF [S].
[5] ITU-T Recommendation X.690 (2002) ISO/IEC 8825-1:2002 ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules(CER) and Distinguished Encoding Rules (DER)[S].
[6] YD/T1594-2007 YD/T 1594-2007 2GHz TDSCDMA/WCDMA數(shù)字蜂窩移動(dòng)通信網(wǎng)移動(dòng)軟交換服務(wù)器與媒體網(wǎng)關(guān)間的Mc接口測試方法(第二階段).
[7] YD/T 1593-2007 2GHz TD-SCDMA/WCDMA數(shù)字蜂窩移動(dòng)通信網(wǎng)設(shè)備 移動(dòng)軟交換服務(wù)器與媒體網(wǎng)關(guān)間的Mc接口技術(shù)要求(第二階段).
[8] YD/T 1292-2003,中華人民共和國通信行業(yè)標(biāo)準(zhǔn):基于H.248的媒體網(wǎng)關(guān)控制協(xié)議技術(shù)要求 [S].