程方,王洋
(重慶郵電大學 通信網(wǎng)與測試技術(shù)重點試驗室 重慶 400065)
H.248協(xié)議,也叫媒體網(wǎng)關(guān)控制協(xié)議(Media Gateway Control protocol,Megaco), 此 協(xié) 議 是ITU-T與IETF合作的標準,被國際軟交換協(xié)會ISC指定為軟交換設(shè)備與媒體網(wǎng)關(guā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)兩個單獨的網(wǎng)絡(luò)實體,MG負責承載業(yè)務(wù),MGC負責呼叫控制。H.248協(xié)議就是MG與MGC之間的一種控制協(xié)議,它定義了MGC對MG的控制方式和標準的基于IP網(wǎng)絡(luò)的通信格式。在軟交換系統(tǒng)中,軟交換設(shè)備完成MGC的功能,通過H.248協(xié)議實現(xiàn)對MG的控制,最終完成業(yè)務(wù)的承載[2]。
作為NGN網(wǎng)絡(luò)的核心協(xié)議,其監(jiān)測解碼分析對于網(wǎng)絡(luò)性能的評定以及網(wǎng)絡(luò)進一步優(yōu)化和完善至關(guān)重要。因此為了獲得H.248連接模型的關(guān)鍵參數(shù),必須對該協(xié)議數(shù)據(jù)實現(xiàn)正確的解碼,從而在監(jiān)測儀表上實現(xiàn)網(wǎng)絡(luò)中的呼叫重現(xiàn)。文章首先簡要介紹H.248協(xié)議的連接模型和消息格式,然后根據(jù)H.248兩種不同的編碼方式設(shè)計并實現(xiàn)了H.248協(xié)議的解碼。
協(xié)議的連接模型主要描述媒體網(wǎng)關(guān)中的邏輯實體,這些邏輯實體由媒體網(wǎng)關(guān)控制器控制。這個連接模型中的主要的抽象概念是終端(Termination)和關(guān)聯(lián)(Context)。在H.248協(xié)議[3]定義的連接模型中,包括關(guān)聯(lián)和終端兩個實體。一個關(guān)聯(lián)中至少要包含一個終端,否則此關(guān)聯(lián)將被刪除。同時一個終端在任一時刻也只能屬于一個關(guān)聯(lián)。
終端(Termination)是MG 上的一個邏輯實體,它可能是物理實體(物理信道)或是臨時性的RTP流,在邏輯概念上終端就是一次通信的發(fā)送端或接收端。關(guān)聯(lián)(Context)是一些終端具相互聯(lián)系而形成的結(jié)合體,它可以描述拓撲結(jié)構(gòu),及媒體混合和交換的參數(shù)。
H.248協(xié)議有文本編碼和二進制編碼兩種編碼方式,但不管哪種編碼方式H.248消息都有相同的結(jié)構(gòu),一個H.248消息的結(jié)構(gòu)如圖1所示。
圖1 H.248消息結(jié)構(gòu)
消息從消息頭(Header)開始,一條消息包含若干個事務(wù)(Transaction),事務(wù)是MGC和MG之間的一組命令組成,有請求和響應(yīng)兩種類型,一對請求和響應(yīng)由相同的TransactionID來進行標識;一個事務(wù)又由一個或者多個動作(Action)組成,每個動作中包含了H.248消息的主要內(nèi)容——命令。命令實現(xiàn)了對關(guān)聯(lián)和終端屬性的控制,包括指定終端報告檢測到的事件,通知終端使用什么信號和動作,以及指定關(guān)聯(lián)的拓撲結(jié)構(gòu)等功能。對H.248數(shù)據(jù)的解碼,目的就是取出各字段的關(guān)鍵數(shù)據(jù)。
采用文本方式編碼的H.248協(xié)議也叫Megaco協(xié)議,它采用ABNF[4]語法規(guī)范描述的文本格式進行編碼,一條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地址和端口號分別為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é)點ID為A19
ObservedEventsToken: OE
// 觀測到的事件描述符
RequestID: 385879552
// 請求ID為385879552
pkgdName: al/on
// 指示為模擬線包中的掛機事件
在傳統(tǒng)協(xié)議解析方法中,主要采用字符串查找匹配方式,需要逐一的取出消息中每個域值,和協(xié)議規(guī)范進行匹配,判斷是否符合規(guī)范。在解析長度不定的域時,需要查找該域的結(jié)束標志,再取出該域的值。這些操作導致代碼實現(xiàn)很復雜,協(xié)議解析效率比較低下。因此,我們提出了采用正則表達式解析Megaco協(xié)議的方法,該方法相對于傳統(tǒng)的字符串查找匹配方式,協(xié)議解析速度有較大的提高。
正則表達(regular expression)就是用一個“字符串”來描述一個特征,然后去驗證另一個“字符串”是否符合這個特征。在本文中,我們利用正則表達式引擎DEELX的三個關(guān)鍵CRegexpT模板類、MatchResult 類、CContext 類,來分別完成編譯正則表達式和進行匹配替換、記錄匹配結(jié)果、記錄所匹配到的字符串及各個捕獲組的位置信息。
利用這一引擎,我們就可以根據(jù)Megaco的消息結(jié)構(gòu)從外向內(nèi)進行解碼。以協(xié)議識別函數(shù)為例,首先調(diào)用構(gòu)造函數(shù)定義一個CregexpT對象regexp,傳入的正則表達式為(?: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)逐一進行查詢,就能獲取每個關(guān)鍵字的字段名和他們相應(yīng)的字段值。
二進制方式編碼的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ù)值的編碼主要由標識符八位位組、長度八位位組、內(nèi)容八位位組、內(nèi)容結(jié)束八位位組等四種成分組成。其中,內(nèi)容結(jié)束八位位組的有無區(qū)別了上述的兩種基本編碼結(jié)構(gòu)。
標識符八位位組用于對數(shù)據(jù)值類型的ASN.1標簽(類和編號)進行編碼;長度八位位組標識了內(nèi)容八位位組的位組數(shù);內(nèi)容八位位組則由0個、1個或多個八位位組組成,其編碼遵循ASN.1中的定義;內(nèi)容結(jié)束八位位組為可選類型,根據(jù)內(nèi)容八位位組的指示出現(xiàn)與否。這幾種類型的八位位組構(gòu)成了BER的TLV三元組形式,這種編碼形式的最大特點就是在內(nèi)容八位位組中可能包含了下一層次的TLV結(jié)構(gòu),直到最后的一層TLV三元組結(jié)束為止。
根據(jù)TLV三元組結(jié)構(gòu)的這種特點,我們設(shè)計了H.248解碼的算法流程如圖4所示。
圖4 H.248協(xié)議解碼流程圖
在解碼過程中,我們首先要對數(shù)據(jù)的第一個字節(jié)即整個TLV數(shù)據(jù)塊的第一個標簽八位位組進行解析,通過判斷其是否為0x30來識別整個數(shù)據(jù)塊是否是H.248協(xié)議數(shù)據(jù);協(xié)議識別函數(shù)同時還必須獲取第一個長度八位位組中指示的整個數(shù)據(jù)塊長度,并將指針指向第一個內(nèi)嵌的TLV三元組的開頭;整個解碼流程采取逐層解包封的思想達到從外向內(nèi)獲取每個協(xié)議關(guān)鍵數(shù)據(jù)的方法,符合H.248協(xié)議的消息結(jié)構(gòu)。
通過對某運營商關(guān)口局接口現(xiàn)場實測,采集到大量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é)果中可以看出,這是一條包含了一個事務(wù)請求的H.248消息,消息中只有一個指定了終端ID的Add命令,并在命令的描述符中規(guī)定了本地媒體流的流模式,并指示媒體網(wǎng)關(guān)取消回鈴控制。它的解碼結(jié)果如圖5所示。
圖5 H.248協(xié)議解碼結(jié)果
H.248協(xié)議由于其編碼方式的特殊性,在設(shè)計中我們必須能對2種不同的編碼方式都提供解析功能。本文通過正則表達匹配法實現(xiàn)了對文本方式編碼的Megaco協(xié)議的解碼,又通過“逐層拆封”的算法思想實現(xiàn)了二進制編碼方式下 “TLV結(jié)構(gòu)”的H.248協(xié)議數(shù)據(jù)的解碼。為下一步實現(xiàn)呼叫過程合成提供了各種呼叫的關(guān)鍵數(shù)據(jù)和統(tǒng)計指標,全面有效的實現(xiàn)了對H.248協(xié)議數(shù)據(jù)的監(jiān)測。通過對解碼模塊進行的單元測試和軟件集成后的現(xiàn)場測試,充分證明了解碼方案的可行性和有效性,各項指標均符合協(xié)議監(jiān)測規(guī)范[6]。
[1] 高艷玲, 馬玉霞. 軟交換技術(shù)及應(yīng)用淺析[J]. 計算機與網(wǎng)絡(luò). 2006(6):32-35.
[2] YD/T 1309-2004中華人民共和國通信行業(yè)標準, 與承載無關(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ù)字蜂窩移動通信網(wǎng)移動軟交換服務(wù)器與媒體網(wǎng)關(guān)間的Mc接口測試方法(第二階段).
[7] YD/T 1593-2007 2GHz TD-SCDMA/WCDMA數(shù)字蜂窩移動通信網(wǎng)設(shè)備 移動軟交換服務(wù)器與媒體網(wǎng)關(guān)間的Mc接口技術(shù)要求(第二階段).
[8] YD/T 1292-2003,中華人民共和國通信行業(yè)標準:基于H.248的媒體網(wǎng)關(guān)控制協(xié)議技術(shù)要求 [S].