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

Android SIP如何在蜂窝网络上工作?,android,sip,voip,Android,Sip,Voip,我只是对SIP的工作原理感到困惑,但我的却不是。 我制作了一个简单的安卓服务器,它打开一个服务器插座,监听3G/4G网络上的传入连接。然后我制作了一个连接到服务器的客户端,连接被我的运营商的防火墙(AT&T)阻止 在此之后,我下载了一个基于SIP的开源VOIP应用程序,并在SIP代理上注册了这两部手机,让它们互相通话,效果非常好 我对SIP在蜂窝网络上的工作原理感到困惑,SIP是一种p2p协议,SIP代理只是用于重定向。这两部手机如何在VOIP会话中相互连接?为什么运营商没有阻止此连接?有人能给

我只是对SIP的工作原理感到困惑,但我的却不是。 我制作了一个简单的安卓服务器,它打开一个服务器插座,监听3G/4G网络上的传入连接。然后我制作了一个连接到服务器的客户端,连接被我的运营商的防火墙(AT&T)阻止

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

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


更新:我刚刚尝试在AT&T和SPRINT网络之间发送UDP数据包,但没有成功;(在基本SIP中,端点媒体流量通常以P2P方式在彼此之间直接通信,如您所说。他们这样做是在SIP协商中为彼此提供地址/端口

在“完美”的网络世界中,这很好,因为所有端点都可以彼此直接对话

我们知道,情况并非如此

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

人们提出的第一个解决方案是。STUN将为您提供您在NAT后面使用的“公共”IP地址,SIP堆栈将在SIP/SDP数据包中使用该IP地址。只要有效,该方法就可以工作

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

人们提出的下一个解决方案是。ICE需要在两个SIP端点上都得到支持。它的工作原理是扩展SDP协议,允许它在SDP协商中添加所有可能的连接(所有本地网络适配器、STUN提供的公共地址以及按优先级顺序转换分配的地址)。然后一方通过列出的连接尝试建立连接。这允许两个连接都是“尝试”连接P2P并在其他任何情况下回退到TURN连接。它还应在任何网络环境中工作到任何网络环境,并在SIP端点之间找到最有效的网络路径。ICE的缺点是两个SIP端点都需要支持ICE才能工作。(顺便说一句,出于同样的原因,ICE/TURN/STUN现在是网络浏览器相互对话协议的要求)

其他可能的解决方案是让你在中间有某种“智能”SIP代理,如果另一方不支持SIP代理,那么它可能是一侧的假货ICE。另一种是如果需要转码,则有某种媒体网关或B2BUA,这将有与THOTHO.

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


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

谢谢,但我关心的是他们如何在3G网络上的两部手机之间建立直接TCP连接,这通常被运营商阻止,我知道VOIP是如何工作的。您确定他们使用TCP,而不是UDP punchholing wiSIP代理的帮助?我认为VOIP需要TCP来保证QOSSIP使用重传来为不可靠的传输(如UDP)增加一些可靠性。它绝对不需要TCP。@JunfeiWang可能他们使用TLS,它提供加密。因此运营商无法检测这是否是SIP消息