2026/5/31 6:11:44
网站建设
项目流程
深圳网站制作必选祥奔科技,桌面网站怎么做,做网站怎么报价,长沙广告招牌制作公司1. PJSIP中的单通问题
单通问题 是指在VoIP通话中#xff0c;一方能听到另一方的声音#xff0c;但另一方却听不到这一方的声音。从网络层面看#xff0c;就是媒体流#xff08;RTP/RTCP包#xff09;只能在一个方向上成功传输#xff0c;而在反方向上则被丢弃或无法到达…1. PJSIP中的单通问题单通问题是指在VoIP通话中一方能听到另一方的声音但另一方却听不到这一方的声音。从网络层面看就是媒体流RTP/RTCP包只能在一个方向上成功传输而在反方向上则被丢弃或无法到达。产生单通问题的根本原因NAT网络地址转换绝大多数单通问题都发生在至少一方处于NAT如家庭路由器、公司防火墙之后的场景。其核心原理如下私网地址与公网地址处于NAT后的设备如你的电脑/IP电话使用的是私有IP地址如192.168.1.100这个地址在公网上是无法被直接路由的。SIP与RTP路径分离SIP信令如INVITE请求和RTP媒体流通常通过不同的通道传输。问题的发生过程终端A在NAT后和终端B可能在公网或另一个NAT后通过PJSIP建立通话。在SIP信令的SDP体中终端A会告诉终端B“请把音频流发送到我的地址192.168.1.100:5004”。终端B收到这个请求后会试图将RTP包发送到这个私有地址192.168.1.100:5004。然而这个地址在公网上是无效的终端B根本找不到这条路因此数据包被丢弃。反过来当终端A向终端B发送音频流时它发出的数据包会先经过自己的NAT设备。NAT设备会创建一个“洞”——一个临时的映射关系比如将192.168.1.100:5004映射到公网IP1.2.3.4:65000。然后数据包以源地址1.2.3.4:65000发送给终端B。终端B收到来自1.2.3.4:65000的数据包它可以正常回复因为这是一个明确的公网地址。结果就是A能成功发送数据给B所以B能听到A的声音但B无法成功发送数据给A因为地址是私有的所以A听不到B的声音。这就是典型的单通。2. STUN服务器如何解决单通问题STUNSession Traversal Utilities for NAT协议的目的就是帮助内网终端发现自己身处NAT之后并发现自己被NAT映射后的公网地址和端口。STUN服务器的实现原理非常简单查询位于NAT后的PJSIP客户端向一个部署在公网上的STUN服务器发送一个请求“你好请告诉我在你看来我的IP地址和端口是什么”响应STUN服务器收到这个请求包。它查看包的源IP地址和源端口这个地址已经是客户端经过NAT转换后的公网地址了然后将这个地址信息封装在一个响应包里发回给客户端。获知公网地址客户端收到响应后就明白了“原来在公网上别人要联系我需要往1.2.3.4:65000这个地址发送数据。”在PJSIP中的应用当PJSIP客户端通过STUN服务器获取到自己的公网地址和端口后它就不会再在SDP中填写自己的私有地址192.168.1.100:5004而是填写这个获取到的公网地址1.2.3.4:65000。这样当终端B收到SDP时它就会直接向1.2.3.4:65000发送RTP流。这个地址是终端A的NAT设备所认可的“外部入口”数据包因此可以顺利通过NAT到达终端A。关键点STUN本身并不转发任何语音数据它只是一个工具让客户端“自知”从而在信令中提供正确的、可被对端直接连接的地址。3. STUN服务器的局限性及TURN的引入STUN方案在大多数情况下有效但对于一种叫做“对称型NAT”的网络环境会失效。对称型NAT的特点它会为每一个不同的外部目的地目标IP和端口分配一个不同的公网端口映射。问题所在客户端向STUN服务器IP_X查询时NAT打开了一个映射192.168.1.100:5004 - (1.2.3.4:65000) - STUN_Server:3478。但当客户端与另一个VoIP对端IP_Y通信时NAT会创建一个全新的映射192.168.1.100:5004 - (1.2.3.4:65001) - VoIP_Peer_Y:1234。客户端在SDP中告诉对端的是从STUN服务器那里得到的地址1.2.3.4:65000而对端实际需要连接的却是1.2.3.4:65001导致连接失败。解决方案TURN当STUN无法解决问题时例如检测到是对称型NAT或直接连接失败就需要使用TURN协议。TURN原理TURN服务器是一个公网上的中继服务器。客户端与TURN服务器建立一个连接并告诉它“请为我分配一个中继地址。”TURN服务器会分配一个公网地址如5.6.7.8:10000给这个客户端。客户端在SDP中填写这个TURN服务器的中继地址5.6.7.8:10000。对端将所有媒体流都发送到5.6.7.8:10000TURN服务器负责将这些数据转发给内网的客户端。反之亦然。总结技术角色优点缺点STUN地址发现工具延迟低P2P服务器负担小无法解决对称型NAT问题TURN数据中继兼容性最高能穿透所有NAT延迟稍高服务器需要高带宽有转发成本在现代VoIP系统中包括PJSIP的典型配置通常会采用ICE框架它综合使用STUN和TURN。客户端会同时收集多个候选地址包括本地地址、STUN发现的地址、TURN中继地址并通过信令交换这些候选地址然后通过连通性检查找出最优的传输路径。STUN/TURN服务器组合常被统称为NAT穿透服务器。