道哥漫談:SBC在攜程中應用的實踐&技巧

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-1 SBC設備

1. SBC設備概述

隨著互聯網及融合通信技術(RTC:)的不斷髮展,使得VoIP技術 近幾年又火了起來。VoIP就是Voice Over Internet Protocol,簡單來說就是隻要你有質量不錯的網絡條件,就可以和外界進行語音通信了。只不過傳統的語音通信都是通過模擬線路來進行信號傳輸的,而VoIP則是通過因特網藉助IP包來傳輸數字語音信號。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-2 VOIP話機

在VoIP網絡架構中,不同於傳統的語音交換機、網關等語音設備,SBC在VoIP通信中應用廣泛,作用十分重要。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-3 SBC在企業通信中應用組網

SBC的全稱是Session Border Controller。簡單來說,SBC是部署在網絡邊界,用來控制SIP會話的設備或軟件。Session 為會話,Border 為通信網絡邊界,Controller 為控制器。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-4 鼎信通達SBC

目前在市面上,商用的SBC廠家非常的多,例如國產品牌鼎信通達、華為、訊時、三匯等品牌;國外知名品牌Oracle Acme 、Sonus、AudioCodes等品牌。大多品牌是專用的硬件物理設備;由於市場的需求,也有一些廠家推出了軟件的SBC,例如通信行業新興起的神州網訊品牌,但是一般語音編解碼的板卡還是用DSP來實現的。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-5 Oracle Acme SBC

總的來說,SBC沒有太確切的定義,但就RFC的一些描述和個人的理解,SBC應該就是基於SIP的B2BUA(背靠背代理),能夠解析SIP協議,並對SIP協議進行各種操作,比如添加SIP Header,修改SDP等等。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-6 SBC在企業組網中的應用

SBC一般部署在語音網絡邊界,用於控制SIP信令,通常也包含了語音流的建立,控制與釋放,因為部署在邊界,就設計到兩邊SIP業務參數的不同,所以適配的功能也是必不可少的。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-7 SBC通信結構

在VoIP網絡安全方面,SBC也起到語音會話層面的安全,QoS,准入控制等作用。更為簡單的說,SBC就像是VoIP的防火牆,提供了IP語音網絡的接入服務。

其實簡單來講,SBC的核心功能可以概括為:

1) 協議轉換;

2) codec編碼轉換;

3) 信令及媒體的NAT;

4) 內部通信網絡拓撲隱藏;

5) 權限及安全控制

2. SBC在攜程項目通信中應用場景

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-8 SBC在攜程通信中的應用場景

1) 企業之間的SIP組網,比如公司之間,或者總公司和分公司之間可以通過專線或者Internet進行IP語音系統對接;

2) SIP客戶端接入,比如軟件的SIP client通過公網,由SBC充當代理接入到IP語音網絡中;

3) 運營商IMS對接,可以與SIP trunk開放的運營商進行語音中繼接入的實現。

目前在IP通信電話系統中,無論是中繼線路,移動辦公,企業組網等都進行了大量的VoIP實踐。在實踐過程中,需要SBC設備的接入;由於是互聯網公司,那通信應用也要朝著互聯網發展方向,我們決定選擇開源+軟交換的方法來滿足自身對SBC的需求,同時進行了向成熟產品方向的改造。

去朝著這個方向走,其實也是通過了解,認為SBC虛擬化,軟件化是可行的。Linux OS的架構以及CPU的不斷強勁,虛擬機包括docker等技術的不斷成熟,都使的軟件的SBC可以有不錯的性能。

3、SBC通信實踐

首先介紹下軟SBC的整體架構,下圖從類ISO的分層模型來展示我們SBC功能模塊,以及管理界面:

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-9 SBC通信架構

3.1.應用實踐&技巧

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-10 攜程

攜程有一個服務於全公司的辦公APP,有需求將VoIP軟電話的功能也嵌入到APP裡,方便公司同事可以在wifi或者4G網絡環境下聯繫同事或者進行電話會議。在此場景下,就需要實現移動APP端client通過SBC接入到攜程內部電話網絡中,並打通語音網絡,實現APP撥打內部辦公電話和撥打PSTN電話的功能。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-11 VOIP話機在應用

通過技術選型,我們採用了OpenSIPS+RTPProxy組合的方式來實現APP端軟電話的接入,我們稱之為VAG。OpenSIPS是一個已經非常成熟的開源SIP服務器,它不僅僅可以當作SIP代理,同時它包含了一些應用層的功能,比如我們上文提到的SIP背靠背代理功能。通過OpenSIPS,我們可以輕鬆的實現SBC需要的SIP協議轉換,NAT功能,拓撲隱藏等等。

3.1.1 實現操作過程:

1)通過OpenSIPS實現了SIP client 註冊消息的轉發,將client的註冊消息轉發至後端辦公電話系統上,實現client在服務端的註冊與鑑權;

2)client發起呼叫時,invite消息將發向VAG,VAG中OpenSIPS將invite消息轉發到後端辦公電話系統,可以高效處理transaction以及dialog;

3)Invite relay的時候VAG實現SIP消息公網與私網的NAT,NAT不止是IP包地址的轉換,還包括SIP應用層NAT穿越;

4)信令建立好後,根據SDP中協商的媒體地址,SIP客戶端通過VAG與辦公電話系統建立RTP的傳輸,此處也包含了RTP流的NAT穿越;

5)會話結束後,VAG通過relay BYE消息,結束雙發的會話。

3.1.2 遇到常見問題

1)在會話過程中需要注意SIP信令的NAT穿越問題,否則會出現32s自動拆線,掛不斷等問題。踩過的坑就是client發來的200OK地址要修改為其公網地址等;在openSIPs中需要將其公網地址及對應的端口配置在配置文件中:

advertised_address = "x.x.x.x"

advertised_port=5060

2)很多情況下電話撥打都可以振鈴、接通,但是沒有聲音;這時候就出現了RTP NAT的問題,根因就是client或者服務端雙方的RTP流都發到了錯誤的地址,基本都是發到了對端的一個內網地址上,那這樣是肯定沒聲音的。所以要注意在會話建立階段,雙方SDP協商中提供的其可用的media地址,RTP流地址傳輸對了,那自然就可以正常通話了;

3)大家可能注意到VAG實現了三家運營商網絡的接入,也是為了不通運營商的手機用戶可以使用本運營商的網絡接入,提高接入速度及質量。此處的實現可以通過交換機網絡接入,VAG多網卡或者虛擬網卡來實現,需要對應做好SIP及RTP NAT處理。

3.2、攜程內部分公司組網VIG

公司內部的分公司或者子公司之間需要實現語音網絡的打通,提高溝通效率或者通話費用的節省;如果通過PSTN方式的話,成本高,也很難實現內部的統一通信。

如果企業內部各物理節點或者獨立語音系統,通過網絡實現內部的SIP組網,IP語音網絡打通,那上述的需求就完美解決了。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-12 攜程內部VIG架構

在實踐過程中,我們總公司和分公司之間就是通過VIG來實現雙方語音網絡互通的。這裡我們使用了FreeSWITCH來作為VIG技術選型。VIG大致架構如上圖所示。

3.2.1 實現操作過程:

1)雙方在自身語音網絡邊界部署VIG,VIG則和各自內部通信交換核心組建SIP trunk;

2)通信時,SIP請求通過雙方VIG組建的SIP trunk進行通信,VIG作為中間人同時處理SIP消息中的隨路數據及雙方語音編解碼的適配與轉換;

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-13 SBC在會話建立的處理過程

3)雙方在對接時,可以起到自身網絡拓撲的隱藏;一方面隔離了雙方原有的通信網絡,安全性提高了,另一方面做到雙方應用對彼此透明,一切通信都是通過VIG來進行。

3.2.2 遇到常見問題

1)如果雙方通過網絡專線打通內網網絡,那其實VIG就不必考慮太多的NAT問題,因為一切通信都是通過內網地址來進行的。

2)雙方通過VIG實現通信網絡組網後,會遇到SIP協議適配,號段衝突等各層次的問題,那就需要VIG進行雙方固有語音網絡設備協議適配,比如一些商用硬件PBX,IVR系統,話機等。

3)雙方本是獨立的語音系統,打通後勢必會碰到號段衝突的問題,此時在VIG上實現一些號段的映射轉換等,我這邊是通過添加插碼來識別,然後通話刪除插碼來進行內部路由的。

3.3、攜程SIP語音中繼接入

語音中繼線路,之前都是通過傳統中繼線路+網關的方式來對內提供服務的。但隨著運營商SIP中繼技術的不斷成熟及不斷的開放;通過SBC實現SIP中繼的接入是未來的發展方向。在VTG實踐中,我們使用了FreeSWITCH作為VTG的技術基底。VTG大致架構如下:

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-14 SIP中繼與SBC對接

3.3.1實現操作過程

1)自身部署VTG,運營商SIP中繼通過專線的方式對接VTG服務器,此時VTG服務器需要兩個外卡來實現對外與運營商SBC對接,對內與內部電話系統對接。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-15 內外NAT穿越

2)如果運營商提供的是公網IP,那還需要通過VTG解決SIP及RTP NAT問題。解決的辦法可以通過,建立兩個UA,一個對內,一個對外,然後在VTG內部將兩個UA對接起來。

3.3.2 遇到常見問題

1)對接中繼線路,VTG需能承受大量話務併發,故需對其進行高併發的壓力測試;我們使用的是SIPp來模擬定量的caps及併發呼叫,測試信令流程如下:

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-16 進行Cap測試結構流程

具體的測試數據,與自身服務器配置及網絡環境有一定關係,這裡也就不分享了,但是測試結果是滿足我們的需求的;

2)在高可用方面,我們採用的是虛擬IP漂移應用主備的方式;在keepalived和heartbeat兩款軟件方面都有過使用經驗,個人比較推薦keepalived , 使用及配置起來更為方便。加入腳本後,如果檢測到主機應用宕機,可以在1s內將虛擬IP切換到備機上,備機繼續提供服務。這裡有個坑就是,在配置keepalived過程中,如果出現虛擬IP無法切換或者腦裂問題時,可以通過抓取日誌消息對比,再看看服務器所處網絡環境的通訊模式,大多就可以解決問題了。

3) 在對接測試的過程中,也出現過DTMF失效的情況,各種抓包分析排查下來,發現運營商的SBC用的是inband的模式,我們這邊也是適配了inband,但是還是不行,最後才發現inband模式只在G711編碼的模式生效,其他有過壓縮的編碼方式確實會導致DTMF傳輸出現問題。

總結&歸納

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-17 SBC在IMS網中的應用

上面就是SBC的幾個典型的應用場景。當基本功能都具備後,就考慮向一個產品去優化。軟件SBC不僅支持私有云,同時也支持公有云的部署;支持SBC系統性能與業務層的監控告警;支持數據實時落庫,也提供標準的數據接口。目的就是讓我們的軟件SBC可以成為一個專業的軟件SBC解決方案。

道哥漫談:SBC在攜程中應用的實踐&技巧

圖-18 5G通信

在接下來的5的通信中,隨著IMS網絡對於企業的接入全面開放,在NAT、安全防護、信令校正等流媒體的通信中,SBC將會扮演這越來越重要的橋接跨域通信。

道哥漫談:SBC在攜程中應用的實踐&技巧

××××××××××××××××××

原著 韓海龍 改編 劉一道

相關推薦

推薦中...