2013-04-04 80 views
4

我只是對SIP的工作原理感到困惑,而我卻不知道。 我做了一個簡單的android服務器,打開一個服務器套接字,並監聽3G/4G網絡上的傳入連接。然後我做了一個連接到服務器的客戶端,連接被我的運營商的防火牆阻止(AT & T)。SIP如何在蜂窩網絡上工作?

之後,我下載了一個基於SIP的開源VOIP應用程序,並在SIP代理上註冊了這兩部手機,讓他們互相通話,這一切都很完美。

我對SIP如何在蜂窩網絡上工作感到困惑,SIP是一個P2P協議,SIP代理只是用於重定向。這兩款手機在VOIP會話中如何互相連接?爲什麼這個連接不被運營商阻止?有人可以向我解釋嗎?先謝謝你!

更新:我只是想送之間的UDP包AT & T和Sprint的網絡,這是行不通的;(

+0

謝謝,但我關心的是他們如何在3G網絡上的兩部手機之間建立直接的TCP連接,這通常是由運營商阻止的,我知道VOIP是如何工作的。 – 2013-04-04 22:55:19

+0

你確定他們使用TCP,並且在SIP代理的幫助下不要做UDP衝突? – luxer 2013-04-04 23:02:04

+0

我認爲VOIP需要TCP來保證QOS – 2013-04-04 23:05:19

回答

3

在基本的SIP端點媒體流量通常直接溝通彼此之間採用P2P方式喜歡你說,他們這樣做是給每個人在SIP SDP談判。

地址/端口在一個「完美」的網絡世界中,這工作得很好,因爲所有的端點可以相互之間直接對話。

正如我們所知,事實並非如此。

在大多數情況下,IPv4世界的主要障礙是NAT。

人們想出的第一個解決方案是STUN。 STUN將爲您提供您在NAT後使用的「公共」IP地址,並且SIP堆棧將在SIP/SDP數據包中使用該IP地址。這工作只要hole punching工作。

人們提出的下一個解決方案是TURN。 TURN是UDP代理並允許客戶端(例如SIP客戶端)從公共網絡(即因特網)分配和使用專用網絡上的IP地址/端口。它應該可以在所有情況下工作,但可能會在TURN服務器上投入大量網絡開銷。它不會像P2P連接一樣高效。使用TURN的好處是雙方都不需要支持它才能運行。所以在互聯網上的軟電話與內部網絡上的硬件SIP設備之間進行通話時,這很好。

人們提出的下一個解決方案是ICE。 ICE需要在兩個SIP端點上得到支持。它通過擴展SDP協議工作,允許它在SDP協商中添加所有可能的連接(所有本地網絡適配器,由STUN提供的公共地址和按優先級順序分配的TURN地址)。然後一方通過列出的連接並嘗試建立連接。這允許兩個連接都「嘗試」連接P2P,並且如果沒有其他操作,則回退到TURN連接。它還應該在任何網絡環境中工作到任何聯網環境,並找到SIP端點之間最有效的網絡路徑。 ICE的缺點是兩個SIP終端都需要支持ICE才能工作。 (順便說一下,ICE/TURN/STUN現在是網頁瀏覽器之間爲了相同的原因而相互通話的WEBRTC協議的要求)

其他可能的解決方案是讓你擁有某種「智能」如果對方不支持它,那麼中間的SIP代理可能會假冒ICE。如果需要轉碼,另一種方式是擁有某種媒體網關或B2BUA,這會產生與TURN相同的問題。

如果可能的話,我建議你用STUN,TURN和ICE設置你的SIP客戶端,這將增加實際工作的SIP呼叫的可能性。

至於爲什麼你的情況現在不起作用,它需要網絡和/或SIP日誌來了解確切的障礙是什麼。