短消息網(wǎng)關通信模塊的設計與實現(xiàn)

字號:

摘 要 : 在闡述短消息網(wǎng)關結構的基礎上,提出了短消息網(wǎng)關通信模塊的設計思想,并給出了該通信模塊的具體實現(xiàn)。
     關鍵詞: 短消息 ; 短消息網(wǎng)關 ; 通信
     • 前言
     隨著通信技術的發(fā)展,無線互聯(lián)網(wǎng)短消息業(yè)務正在為用戶提供越來越多的服務。人們不僅可以通過手機點播定制新聞、股票信息、天氣預報,還可以下載鈴聲、圖片等。無論需要什么樣的信息,我們都可以隨時隨地地通過手機接入互聯(lián)網(wǎng)絡,享受各種服務。電信運營商要實現(xiàn)這些增值業(yè)務,就必須支持網(wǎng)間的互聯(lián)互通。
     目前實現(xiàn)網(wǎng)間互聯(lián)互通的方式有四種,包括:通過移動關口局互聯(lián)互通;通過信令轉接點互聯(lián)互通;通過短消息網(wǎng)關互聯(lián)互通;通過第三方運營商系統(tǒng)互聯(lián)互通。前兩種方式不易設置計費點和引出計費話單,因此不利于網(wǎng)間結算;最后一種方式,雖然能夠保證計費點和結算點的統(tǒng)一,但是易受到地域條件的限制 。 而通過短消息網(wǎng)關實現(xiàn)互聯(lián)互通,無須對 現(xiàn)網(wǎng)運行的設備進行大面積的數(shù)據(jù)改動和升級改造,能夠 合理的設置計費點,保證計費的準確性,實現(xiàn)業(yè)務鑒權和業(yè)務過濾的功能,保證網(wǎng)絡的安全,也能夠通過對業(yè)務流量的監(jiān)視和控制,防止網(wǎng)絡風暴的發(fā)生,這種互聯(lián)方式具有其他三種方式不可比擬的優(yōu)點。目前,大部分短消息業(yè)務的互聯(lián)互通都是使用短消息網(wǎng)關來實現(xiàn)。
     • 短消息網(wǎng)關結構
     短消息網(wǎng)關( ISMG )是處于短消息中心( SMSC )和業(yè)務提供商( SP )之間的設備,它為這兩個實體的數(shù)據(jù)交換提供安全、快捷的通道。網(wǎng)關與短消息中心之間使用 SMPP 協(xié)議( Short Message Peer to Peer, 短消息點對點協(xié)議) , 與 SP 之間使用 CMPP 協(xié)議( China Mobile Peer to Peer, 中國移動點對點協(xié)議),因此短消息網(wǎng)關需要完成協(xié)議的轉換、計費、路由、安全和網(wǎng)絡管理等功能。其結構圖如圖 1 所示。
     具體說來,圖 1 中 SMPP 通信代理系統(tǒng)主要實現(xiàn)網(wǎng)關和 GSM 網(wǎng)中短消息中心( SMSC )的連接,確保準確接收和發(fā)送數(shù)據(jù),實現(xiàn)高效、可靠的數(shù)據(jù)傳輸。為了達到規(guī)范要求的不超過 0.001% 的數(shù)據(jù)丟包率, SMPP 通信代理需要支持流量控制。 CMPP 通信代理系統(tǒng)主要是實現(xiàn)和 SP 服務提供商的連接,與 SMPP 通信代理系統(tǒng)不同的是,由于協(xié)議的影響, CMPP 通信代理是服務器端,需等待 SP 的連接,而 SMPP 通信代理是客戶端,需要主動連接 SMSC 。短消息網(wǎng)關處理系統(tǒng)是網(wǎng)關中最復雜的處理進程,它完成的任務包括:向 GNS( 匯接網(wǎng)關 ) 查詢路由,維護路由表,進行協(xié)議轉換和數(shù)據(jù)分發(fā)。防火墻系統(tǒng)主要為網(wǎng)關系統(tǒng)提供安全保障,它包括 IP 濾和身份驗證。短信網(wǎng)關計費系統(tǒng)主要形成各種計費話單,為計費提供依據(jù)。業(yè)務管理系統(tǒng)主要完成對業(yè)務進行統(tǒng)計報告,生成報表,為運營者對用戶數(shù)據(jù)的添加、修改、刪除以及對網(wǎng)關系統(tǒng)的監(jiān)控、查詢、操作和維護提供接口和界面。
     • 短消息網(wǎng)關通信模塊的設計與實現(xiàn)
     短消息網(wǎng)關通信模塊是整個短消息網(wǎng)關的基礎。無論是計費、統(tǒng)計,還是超時重傳,高質量的通信構架是必不可少的保障。這個通信構架不僅要完成基本的收發(fā)消息的功能,而且還要有好的結構以支撐各種業(yè)務需求,保證良好的擴展性。
     短消息網(wǎng)關通信模塊的設計
     在設計短消息網(wǎng)關通信模塊時,我們考慮了以下幾點:
     第一,由于短消息網(wǎng)關功能繁多,如果把通信和具體業(yè)務合在一起開發(fā),容易顧此失彼??赡軙驗殚_始的考慮不周全,造成在增加某項新業(yè)務時不得不修改通信底層和原來的業(yè)務代碼,導致重復開發(fā)。所以我們采用通信代理的方式把通信和具體業(yè)務分開,在增加新業(yè)務時,就只需少量修改通信代理的設置,而且不必再改動原來的業(yè)務代碼了。
     第二,通信代理需要同時偵聽多個端口,我們選用多路復用 I/O 這種方式。雖然多線程能夠通過并行計算和共享內存提高代碼效率和資源利用率,但在短消息網(wǎng)關中,處理的數(shù)據(jù)量大,多線程方式的并行處理會造成一些消息的邏輯混亂,資源共享也會增加代碼的復雜度。而多路復用使用簡單,邏輯清晰明了,不易發(fā)生錯誤,也不會出現(xiàn)因資源共享帶來同步和互斥問題。因此使用多路復用 I/O 是比較合理的。
     第三,業(yè)務處理模塊與通信代理之間可以使用隊列進行通信,對隊列的管理和參數(shù)的設置 (例如對同一隊列操作的互斥,以及隊列個數(shù)的設置等)都使用專門的隊列內核程序統(tǒng)一調度并封裝成函數(shù)接口,以方便業(yè)務處理模塊對隊列的使用。另外,通過隊列通信,也可以為今后增加的業(yè)務提供良好的擴展性。
     第四,為了達到 99.999%的不丟包率,通信代理需要使用流量控制機制以保證網(wǎng)關內部不丟包。這是因為無論隊列設置有多大,如果出現(xiàn)消息只發(fā)不收的情況,都會造成隊列溢出而丟包。因此,為每個隊列中緩存的消息做記錄,當某個時刻隊列消息的數(shù)量達到規(guī)定限度,隊列就不再收包,以保證到達網(wǎng)關的消息不會丟失。