我碰到过这样的情况:“唯一需要进行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(在整个圆锥或地址限制的圆锥后面)进行通信?
谢谢。
如您所知,仅在用例的两面使用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!