SIP如何在蜂窝网络上工作?

时间:2013-04-04 22:42:40

标签: android sip voip

我只是对SIP如何运作感到困惑,但我的不然。 我做了一个简单的android服务器,打开服务器套接字并收听3G / 4G网络上的传入连接。然后我创建了一个连接到服务器的客户端,连接被运营商的防火墙(AT& T)阻止。

在此之后,我下载了一个基于SIP的开源VOIP应用程序,并在SIP代理上注册这两部手机,让它们互相通话,这非常有效。

我对SIP如何在蜂窝网络上工作感到困惑,SIP是一个p2p协议,SIP代理只是用于重定向。这两部手机在VOIP会话中如何相互连接?为什么这个连接没有被运营商阻止?有人可以向我解释一下吗?提前谢谢!

更新:我刚尝试在AT& T和SPRINT网络之间发送UDP数据包,它不起作用;(

1 个答案:

答案 0 :(得分:4)

在基本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。两个SIP端点都需要支持ICE。它的工作原理是扩展SDP协议,允许它在SDP协商中添加所有可能的连接(所有本地网络适配器,STUN提供的公共地址和优先顺序的TURN分配地址)。然后一方通过列出的连接并尝试建立连接。这允许两个连接“尝试”连接P2P并回退到TURN连接,如果没有其他工作。它还应该在任何网络环境中工作到任何网络环境,并在SIP端点之间找到最有效的网络路径。 ICE的缺点是两个SIP端点都需要支持ICE才能工作。 (另外,ICE / TURN / STUN现在是WEBRTC协议的要求,因为Web浏览器之间可以出于同样的原因进行对话。

其他可能的解决方案是让你在中间使用某种“智能”sip代理,如果对方不支持它,可能会在一方假装ICE。另一种是如果需要转码,可以使用某种媒体网关或B2BUA,这会产生与TURN相同的问题。

如果可能的话,我建议您使用STUN,TURN和ICE设置SIP客户端,这将增加SIP呼叫实际工作的可能性。

至于为什么你的案子现在不起作用,需要网络和/或SIP日志来了解确切的障碍是什么。