我只是对SIP如何运作感到困惑,但我的不然。 我做了一个简单的android服务器,打开服务器套接字并收听3G / 4G网络上的传入连接。然后我创建了一个连接到服务器的客户端,连接被运营商的防火墙(AT& T)阻止。
在此之后,我下载了一个基于SIP的开源VOIP应用程序,并在SIP代理上注册这两部手机,让它们互相通话,这非常有效。
我对SIP如何在蜂窝网络上工作感到困惑,SIP是一个p2p协议,SIP代理只是用于重定向。这两部手机在VOIP会话中如何相互连接?为什么这个连接没有被运营商阻止?有人可以向我解释一下吗?提前谢谢!
答案 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日志来了解确切的障碍是什么。