当前位置:  开发笔记 > 运维 > 正文

何时需要TURN?对称NAT和端口受限NAT

如何解决《何时需要TURN?对称NAT和端口受限NAT》经验,为你挑选了1个好方法。

我碰到过这样的情况:“唯一需要进行TURN的时间是当一个对等方位于对称NAT之后而另一个对等方位于对称NAT或端口​​受限NAT之后。” 那么,对称NAT后面的对等方如何连接另一个后面的对等方,例如全锥状NAT?

例如,让对称NAT后面的对等方为A,而全圆锥NAT后面的对等方为B。呼叫过程应类似于:

    从STUN(非TURN)服务器发现,其本地地址和端口(Al:Alp)映射到服务器自反值(As:Asp),这应该仅在A和STUN服务器之间有意义,因为它是对称NAT。(对?)

    同样,B发现其Bl:Blp被映射到Bs:Bsp。

    INVITE中的一个发出SIP INVITE和SDP的部分告诉使用As:Asp接收媒体。

    B回答200 OK,以使用Bs:Bsp接收媒体。

    媒体开始并将A发送到B。请注意,由于它是对称NAT,因此NAT将创建一个新端口,因此数据包将为As:Asp'-> Bs:Bsp(其中Asp'是新创建的端口)。B侧的NAT将传递数据包(因为它是完整的圆锥形),并且B将获得A的媒体。

    从SIP / SDP,B知道使用As:Asp将媒体发送到A,这将被丢弃在A的对称NAT中,对吗?

请检查我是否正确理解这些步骤。那么,A(在对称NAT后面)如何与B(在整个圆锥或地址限制的圆锥后面)进行通信?

谢谢。



1> 小智..:

如您所知,仅在用例的两面使用STUN就会导致单向音频通话:A能够将音频发送到B。

您知道,如果A可以发送给B,那么反向路径也是可用的。

这是B的情况:

* RTP packets are sent to As:Asp
* RTP packets are received from As:Asp'
* B can read the origin of RTP packets with "recvfrom"

B的一种非常简单的方法是比较SDP中的IP:PORT和RTP数据包中的IP:PORT'。除了它引入的安全性问题外,如果B切换到IP:PORT',A将收到来自B的RTP,并且您最终会进行2路音频呼叫:该技术被许多软件所使用,通常被称为“对称RTP”。

同样,这不是兼容的方式。它可能会导致ALG出现问题,并且仅在发件人使用相同的套接字进行发送和接收时才起作用。(用例的99%)。由于“中间人”可能向您发送RTP数据包,因此您也开始与他交谈,这也被视为安全问题。

RFC6336定义的ICE 提供了解决方案。STUN连接检查将通过RTP路径进行交换。B将收到应该来自As:Asp但来自As:Asp'的STUN连接检查:将STUN连接检查验证为来自A。此新“候选”(请参阅​​ICE的定义)应添加到列表中可能的候选对象(新的RTP路径),并将由A和B再次进行验证/认证。理论上,它是通过信令协议再次交换的。(实际上,即使不再次交换新候选人也可以使用...)

因此,使用ICE,将学习,验证,确认和使用RTP路径As:Asp'<-> Bs:Bsp

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有