首页 文章

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

提问于
浏览
4

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

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

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

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

1 回答

  • 4

    在基本SIP中, endpoints 媒体流量通常以P2P方式直接在彼此之间进行通信 . 他们这样做是在SIP SDP协商中给予彼此地址/端口 .

    在“完美”的网络世界中,这可以很好地工作,因为所有 endpoints 可以在彼此之间直接对话 .

    我们知道,事实并非如此 .

    在大多数情况下,IPv4世界的主要障碍是NAT .

    人们提出的第一个解决方案是STUN . STUN将为您提供您在NAT后面使用的"public" IP地址,SIP堆栈将在SIP / SDP数据包中使用该IP地址 . 只要hole punching有效,这就有效 .

    人们想出的下一个解决方案是TURN . TURN是UDP代理并且允许客户端(例如,SIP客户端)从公共网络(即,因特网)分配和使用专用网络上的IP地址/端口 . 它应该适用于所有情况,但可能会在TURN服务器上产生大量网络开销 . 它不如P2P连接那么高效 . 使用TURN的好处是,双方都不需要支持它才能工作 . 因此,当您在互联网上的软电话与内部网络上的硬件SIP设备之间进行通话时,这是很好的 .

    人们想出的下一个解决方案是ICE . 两个SIP endpoints 都需要支持ICE . 它的工作原理是扩展SDP协议,允许它在SDP协商中添加所有可能的连接(所有本地网络适配器,STUN提供的公共地址和优先顺序的TURN分配地址) . 然后一方通过列出的连接并尝试 Build 连接 . 这允许两个连接_1191466_连接P2P并回退到TURN连接,如果没有其他工作 . 它还应该在任何网络环境中工作到任何网络环境,并在SIP endpoints 之间找到最有效的网络路径 . ICE的缺点是两个SIP endpoints 都需要支持ICE才能工作 . (顺便说一下,ICE / TURN / STUN现在是WEBRTC协议的要求,因为Web浏览器出于同样的原因在彼此之间进行通信)

    其他可能的解决方案是让你在中间有一些“智能”sip代理,如果另一方不支持它,可能会在一方假装ICE . 如果需要转码,则另一种是拥有某种媒体网关或B2BUA,这将与TURN tho具有相同的问题 .

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

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

相关问题