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

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

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

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

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

解决方法:

在基本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 tho具有相同的问题.

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

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

上一篇:c# – 使用SIP中继,PBX电话系统等


下一篇:Microsoft Teams Voice语音落地系列-5 实战: Sonus语音网关配置