既然说SIP可以用用户的SIP地址定位用户IP,那为什么我们需要STUN或TURN呢?
如果SIP(会话发起协议)可以获取用户IP,那为什么还需要STUN 或TURN?
当您的 SIP 设备位于 NAT 之后并且执行 NAT 的设备没有将您的内部 IP 转换为 SIP 消息中的外部 IP 的 ALG(应用层网关)时,可以使用 STUN 或 TURN。
问题如下,举个例子:
- phone1:IP 192.168.0.88(私有网络)
- 路由器 1:局域网:192.168.0.1,广域网:198.51.100.43
- sipserver1: 198.51.100.1
请记住,SIP 消息由第 4 层协议 UDP 承载。
SIP 注册数据包经过 router1,它将 UDP 数据包的源地址从 192.168.0.88 转换为 198.51.100.43。因此,sipserver1 将看到 198.51.100.43 作为源 IP。但是,SIP 注册消息在其标头中包含 phone1 的 IP 地址,sipserver1 将使用该信息,而不是第 4 层 (UDP) 源地址。所以SIP头中的信息有优先权。也就是说sipserver1的注册数据库会列出192.168.0.88作为phone1的地址,这是sipserver1无法访问的。
配备 SIP ALG 的路由器将识别出 UDP 数据包中携带的 SIP 消息,并且还将转换 SIP 标头内的信息,从而减轻对 STUN 或 TURN 的需要。phone1 将正确注册为 198.51.100.43。任何从 sipserver1 返回到 phone1 的流量都将再次由 router1 转换(这就是 NAT 的工作方式)。
我已经制作了一个关于 SIP 和 NAT 如何交互的简短备忘录,我试图在其中定义 SIP over NAT 和可能的解决方案(例如 TURN 和 STUN)的问题。 https://profcollab.wordpress.com/2015/08/27/nat-and-firewall-traversal-for-sip-and-h-323/ 你也可以参考一本书语音和视频会议基础(http:/ /www.ciscopress.com/store/voice-and-video-conferencing-fundamentals-9781587052682 ) 提供了对这个问题的详尽解释