常見問題:Voip語音單通(二)如何解決語音單通甚至雙不通的問題?

在前面的blog中,我們已經討論了爲什麼會有語音單通問題。在這篇blog中,我們繼續討論如何解決這個問題。

正如我們看到的,sip電話(100)將自己的私有地址告訴給sip軟終端(101),這就導致了語音單通問題。因此我們自然想到:爲什麼不將它的公共地址8.8.8.8告訴給sip軟終端呢?如果它能做到這點,sip軟終端自然可以將它的語音流發送給這個公共地址,路由器也會將這個語音流轉發給sip電話,sip電話也就可以聽到sip軟終端側的聲音了。對嗎?

非常正確!這是個很好的解決方案。但是我們接着需要問:sip電話(100)如何才能知道它自己的外網地址呢?

答案就是STUN。STUN是“Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NATs)基於UDP協議對網絡地址轉換的簡單穿越”的縮寫。這是個非常拗口的定義啊。簡單而言,STUN就是用來私網內設備獲取外網地址的一種協議工具。

請參考下面這張圖:

- STUN process

在SIP電話撥打電話之前,它先向STUN服務器請求獲取外部地址。完成之後,SIP電話開始發起呼叫,它告訴對方說:喂,我是100,我的語音地址是8.8.8.8:100,請發送語音流給我

順便說一下,在本文中一個公共地址由一個公共IP地址+一個端口號組成。例如“8.8.8.8:10000”,“8.8.8.8”是公共IP地址,“10000”是端口號。”8.8.8.8:10001″是另外一個不同的公共地址(因爲雖然IP地址一樣,但是端口變了)。

既然8.8.8.8是公共地址,因此SIP軟終端毫無疑問能將它的語音流發送到這個地址。因此呼叫雙方現在都能聽到對方的語音。

幾乎所有的SIP設備,無論是SIP電話還是SIP軟終端,都能支持STUN協議。我們唯一需要知道的是設置STUN服務器地址。在我們的step by step文檔中,我們針對X-lite給出了一個簡單的示例:

http://www.myvoipapp.com/docs/faq/setup_ippbx_for_small_business_step_by_step/index_cn.html#faq_stun

支持STUN後,是否能解決所有的語音單通問題呢?

很不幸,不能。在多數情況下,STUN能很好的工作,但是它無法解決所有的語音單通問題。這取決於私網的類型。簡單而言,取決於路由器(當然,在某些網絡,也可能是防火牆設備)。

- Special network for STUN

請參考上面這張圖。圖中描繪了兩個會話:一個會話是SIP電話向STUN服務器請求獲取公共地址。另一個會話是SIP電話與SIP軟終端之間的呼叫。

衆所周知,路由器將維持私網地址與公網地址之間的映射關係。缺省情況下,大多數路由器對來自私網內同一個設備同一個端口的不同會話,會分配並維持同一個外部地址映射關係。因此SIP電話在這兩個會話中,會有同一個外部地址。

但是有些路由器會爲不同的會話分配不同的映射關係,也就是說SIP電話在這兩個不同的會話中會有兩個不同的外部地址對應,因此實際上在與sip軟終端的對話中,SIP電話還是無法知道對應的外部地址。

如果STUN不能解決語音單通的問題,根本原因就是路由器或者私網類型導致。此時,最終的解決方案就是建立VPN網絡,將所有的SIP電話和SIP終端至於同一個邏輯網絡內。這就是另外一個討論議題了。(補充說明:也有可能採用ICE協議解決私網穿越問題,但是不是所有的設備都能支持ICE協議。)

轉載:http://www.myvoipapp.com/cnblog/2011/08/10/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E8%AF%AD%E9%9F%B3%E5%8D%95%E9%80%9A%E7%94%9A%E8%87%B3%E5%8F%8C%E4%B8%8D%E9%80%9A%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9F/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章