李丹鳳,張治中
(重慶郵電大學通信網與測試技術重點試驗室 重慶 400065)
隨著internet網絡的飛速發展、基于IP網絡的各種業務的快速增長以及網絡用戶數量的日益劇增,TDM網絡在交換和傳輸容量上出現了嚴重不足[1]。為了在短期內解決容量問題并兼顧未來網絡的發展,ITU-T提出了BICC(bearer independent call control,與承載無關的呼叫控制)協議。它由ISUP演進而來,重新定義了一個在骨干網絡中實現業務承載與呼叫控制無關的協議,這樣呼叫控制信令就可以承載于SS7、ATM、IP等多種網絡[2]。BICC協議的研究與應用是NGN網絡監測系統中最重要的部分之一。本文在認真解讀BICC協議規范的基礎上,根據協議測試規范[3]要求,提出以一種高效散列索引算法和CDR(呼叫詳細記錄)選擇存儲的方式對消息進行CDR合成,本方案已經過大量現網數據的測試驗證,具有更好的實時性、準確性、穩定性、可移植性和可擴展性,對NGN網絡監測系統中其他協議的研究具有重大的指導和推廣意義。
BICC協議定義了信令傳送轉換器(STC)、應用傳送機制(APM)、承載控制隧道協議(BCTP)和IP承載控制協議(IPBCP),通過點編碼建立信令聯系,信令鏈路通過靜態SCTP連接,BICC節點采用正常呼叫的選路原則選定路由,為呼叫的信令建立通路[4]。BICC利用分層、獨立的結構體系思想,真正實現了呼叫控制和承載控制的分離,呼叫控制協議基于N-ISUP信令,沿用ISUP中的相關信息,利用新增的 APM(application transport mechanism)傳送 BICC特定的承載控制信息,所以BICC可以承載全方位的PSTN/ISDN業務,對于不同承載網絡之間的業務互通,只需要完成承載級的互通,業務級則不用進行任何修改。BICC協議的一個顯著特點是直接面向電話業務的應用,來自傳統的電信網,體系架構更加嚴謹,因此能透明地在NGN中實施現有基于電路交換的電話網絡中的業務,并采用和現有網絡相似的管理方式保持現有網絡的功能不變。
BICC消息的每個PDU均由8 bit的整數倍組成,包含CIC(呼叫實例碼)、消息類型碼、必備固定部分、必備可變部分、任選部分(包含長度固定或可變的參數字段)5個部分[5]。BICC消息的簡單結構如圖1所示。

其中,CIC、消息類型碼、必備固定部分是每條BICC消息都具有的。CIC占4 byte、32 bit,用來識別兩個對等BICC實體間的一個信令關系;消息類型碼占1 byte、8 bit,唯一定義了每個BICC消息PDU的功能和格式;必備固定部分屬于BICC消息的參數部分,每個參數有一個專有名字,按8位位組編碼。參數的長度可以是固定的,也可以是可變的,每個參數可包括一個長度指示語,長度也是占1 byte的8位位組。對于一個指定的消息類型,必備固定部分包括必備且長度固定的參數,參數的位置、長度和順序唯一地由消息類型規定,因此消息中不包括這些參數的名字和長度指示語。
消息數據的基礎解碼是進行CDR合成的基礎,是監測系統界面消息列表顯示、消息過濾、統計分析、呼叫追蹤等基礎應用的前提。基礎解碼為合成散列表提供索引Key值,如 OPC、DPC(源、目的信令點)、CIC、SrcIP、DstIP(源目的 IP地址),其中 SrcIP、DstIP和 OPC、DPC分別由 BICC下層承載的IP層和SCTP(或者M3UA)層提供,還有CDR過程中所需的一些KPI指標,如m_Msg Type Code、m_Calling Number、m_Called Number等信息。
存放基礎解碼結果的結構體代碼如下:
typedef struct_summary_bicc_result
{
uint32 m_uCIC;//CIC呼叫實例碼
int8 m_MsgTypeCode;//BICC消息類型
TCHAR m_CallingNumber[52];//主叫號碼
TCHAR m_CalledNumber[52];//被叫號碼
TCHAR m_SubNumber[52];//后繼號碼
…
};
由于監測系統要求實時、準確、高效、獨立地對網絡進行監控,所以NGN監測系統的解碼器部分采用注冊字段的方式進行數據傳輸,這樣既降低了與合成模塊的耦合度,又減小了對內存的消耗。所有的解碼結果字段注冊在內存注冊表pSheet中,代碼實現如下:
REGISTER_SHEET_ITEM(gchBICCItem[BICC_CIC],NORMAL_USE,
CYDD_DT_UINT32,4,NULL,NULL);//申明注冊字段,不占內存
CYDD_VERIFY (GetItemRef(m_chProtocolName,gch BICCItem[BICC_CIC],m_ref[BICC_CIC])==0);
在解碼器的Parse合成方法中,用解碼提取結果為注冊表中的參數設置字段值:
SET_SHEET_VALUE(pSheet,m_ref[BICC_CIC],CYDD_DT_UINT32,
&(result->m_uCIC)); //設置字段值
在合成模塊Analyzer中,通過Register方法中的GetItemRef函數取出BICC協議中CIC注冊字段對應的ITEMREF值:
GetItemRef ("BICC", gchBICCItem [BICC_CIC],m_refBICC[BICC_CIC]);//取 ITEMREF 值
再通過BuildCallInfo方法,根據字段注冊的名稱從注冊表中直接獲取解碼結果:
GET_SHEET_VALUE(pSheet,m_refBICC[BICC_CIC],&(m_BiccCallInfo.CIC),bValid);//獲取字段值
BICC消息列表的解碼器界面顯示結果如圖2所示。
對消息進行CDR合成的實質就是對消息進行呼叫流程歸類和存盤處理。由于同一時刻可能存在成千上萬甚至十多萬個未完成的呼叫,每一個新消息到來時,都要迅速判別它屬于哪個未完成的呼叫流程,并將其加入所屬流程以保證用戶的話音質量。這就需要在合成過程中處理與保存CDR信息,并對所有未完成的呼叫進行所屬CDR的快速搜索[6]。

NGN監測系統以實時處理為核心,以通過模塊化的方式降低協議間的合成耦合度為前提,以分布采集、集中分析的方式實現對網絡網元及接口的綜合監測。BICC協議的監測架構分為數據采集模塊、基礎解碼模塊、解碼器模塊、消息合成模塊、CDR存儲模塊5部分。本方案創新性地提出選擇性保存CDR信息的方法:存盤和不存盤,此創新點減小了內存的消耗,提升了系統的處理速度,保證了網絡監測的實時、準確和有效性。同時在本方案中會為每個CDR分配唯一ID,將散列技術的Key值索引、CDR ID作為映射的數據結構管理模式[7],提高了網絡通話忙時對海量呼叫的有效處理速度,保證了用戶通話的流暢。
(1)合成算法設計
本方案采取的合成算法流程如下。
首先為CDR合成建立一張散列表,采用除余留數法定義散列函數:

采用線性探查法解決散列沖突:假設e為發生沖突的地址,依次探查e的下一個地址(當到達下標為m-1的散列表尾時,下一個探查的地址是表首地址0),直到找到空閑單位為止。線性探查法的數學遞推式為:

(2)存儲能力算法
解碼形成CDR后,將原始信令消息、CDR記錄、統計結果數據存入專用服務器。一般原始消息的保存周期要求為15~30天,CDR記錄要求保存90天,統計結果要求保存1年。以此為依據,設監測系統覆蓋范圍內的用戶忙時每秒鐘產生的CDR總數為CDR_SUM個,平均每個CDR的長度為M byte,忙時集中系數為l。每天CDR存儲需要占用的字節數量用CDR_SC表示,則有:

當 CDR_SUM=6 400、M=150、l=0.1時,每天監測 CDR存儲所需的字節數為:

設存儲N天CDR所需的字節數為N,則有:

在CDR緩存模塊中,既保留CDR信息的存盤方式,又獨創重建一張HashBusf表來儲存CDR信息的方式。兩種方式的選擇是通過預編譯宏來實現的,具體實現代碼如下:
CHashBuf
#ifdef BICC_SAVE_DISK
if(0==m_pWriteCDRBuf->GetCDR(cdrID,&cdr,nLength))//存盤方式
#else
if(0==m_HashsdBiccKey.GetCDR(cdrID,cdr))//用散列存儲方式
#endif
CDR合成算法的流程如圖3所示,具體介紹如下。
(1)從現網采集數據,提取出BICC消息,遞交給基礎解碼模塊。
(2)基礎解碼模塊對消息數據分別進行詳細解碼和簡單解碼,通過簡單解碼提取出界面顯示和合成所需要的關鍵信息。
(3)解碼器注冊協議和簡單解碼提取關鍵字段。
(4)解碼完成,啟動合成Parse模塊,從注冊表中讀取關鍵字段,生成CDR合成所需要的呼叫信息。

(5)進行超時檢測,避免使系統發生越來越不穩定甚至崩潰的現象,再根據BiccCallInfo傳送過來的關鍵信息建立該散列索引的關鍵Key值。
(6)判斷選擇何種Key值作為散列索引。如果OPC、DPC不為空,則用CIC、OPC、DPC的Key值組合在合成緩沖區中搜索相關關鍵字的節點是否存在,否則就采用CIC、SrcIP、DstIP的Key值組合作為索引,存在就轉至步驟(7),不存在就轉至步驟(8)。
(7)根據消息類型(呼叫信息中),調用不同的消息處理模塊進行處理;修改CDR屬性信息、SDP信息并保存消息ID,然后判斷該消息是否為CDR結束消息,若該消息包含結束指示,則從緩存區中移除Key,然后結束合成,否則修改狀態指示并將CDR以存盤和散列存儲兩種方式放回緩存區。
(8)判斷是否為起始IAM消息,若是就在散列表中創建一個CDR節點,指派唯一ID,修改新CDR屬性值,將CDR以存盤和散列存儲兩種方式放回緩存區,否則返回。
在BICC的解碼合成方案中,不僅改良了通用的研究方法,采用偶合度更小的注冊表方式存儲關鍵消息,同時利用模塊化設計定義公共接口,以集中處理的方式實現各子模塊間的互通,提高代碼的重用性,還創新性地提出了選擇性存儲CDR的方式,為內存減負,提升整個系統運維的速度。
此研究方案已應用到中天重郵通信技術公司的NGN監測系統中,部署于中國移動通信集團甘肅有限公司的話音質量監測系統中,取得了良好的效果。BICC消息的CDR合成結果如圖4所示。

通過對NGN集中監測系統架構和BICC協議的分析和研究,筆者提出了一種符合測試規范要求,同時也滿足運營商網絡監測需要的BICC協議監測模塊的研究應用方案。該方法的創新點在于:采用了注冊表方式存儲BICC關鍵信息和選擇性存儲CDR的新方法,利用高效散列索引有效解決了合成的難題。該方案已應用到運營商的現網監測中,測試效果良好,驗證了該方案的穩定、有效和可靠性。
1 姚平香,季紅軍,萬曉榆.支持PSTN向NGN演進的協議——BICC.重慶郵電大學學報(自然科學版),2004,16(6)
2 中國電信DC1軟交換信令監測系統項目測試功能規范書,2010
3 Xu Li,Zheng Baoyu.Application and development of mobile agentin AN.JournalofChinaUniversitiesofPostsand Telecommunications,2004,11(1)
4 YD/T 1193.1.與承載無關的呼叫控制(BICC)規范——第一部分:BICC的功能,2002
5 YD/T 1193.1.與承載無關的呼叫控制(BICC)規范——第二部分:BICC的消息、參數的基本功能和格式,2002
6 夏韃,雒江濤,張治中.TD-SCDMA測試儀中Iub接口CDR的合成方案.重慶郵電大學學報,2007(3)
7 陳玉花,張治中,左書川等.TD-SCDMA網絡Iu-PS接口CDR合成方案研究.電信科學,2009,25(11)