WebRTC 基础 TURN的工作过程和原理

跟風遠走 提交于 2019-11-28 05:07:30

参考文档:

https://www.jianshu.com/p/4a15556c6318

https://www.cnblogs.com/pannengzhi/p/5048965.html

 

我们在STUN工作过程介绍的文章中提到过,STUN能够处理Cone NAT,但是没有处理对称NAT的能力,也就是说位于对称NAT后面的2台内网机器是无法进行p2p连接的。

TURN协议就是为了解决对称NAT的问题,它扩展了STUN(所以说TURN服务也会提供STUN的功能), 添加了一个中继(Relaying)的功能,使得位于对称NAT后面的2台内网机器能够进行通信。

 

需要注意的是,使用TURN进行的通信,本质上讲它不是p2p,同时由于需要中继数据,从而增加了TURN服务器的负担。

 

TURN的工作流程

下面将从数据的传输过程来了解TURN是如何让对称NAT后面的内网机器间进行通信的。

先解释一个名词,这样有利于后面的描述:

反射地址(Reflexive Transport Address): 它是NAT分配给内网机器与外网进行通信的公网IP和端口

 

环境:

client A: 位于对称NAT后的内网机器, 192.168.10.2:1234

NAT A:   client A 到达公网时的最后一个NAT,反射地址为  112.11.11.11:4000

TURN Server: TURN服务器,位于公网, 112.11.11.11:3478

NAT B:   client B 到达公网时的最后一个NAT,反射地址为  112.11.11.11:6000

client B: 位于对称NAT后的内网机器, 192.168.10.2:4321

 

1. 准备中继地址

要使得2个client能够通信,我们需要TURN为我们准备一个位于公网的中继地址

1)client A 向TURN服务器发送了Allocate请求

2)服务器根据请求为A分配了一个位于公网的中继地址

3)服务器向A发送响应,响应中包括中继地址信息

 

2. 信息传递过程

上一步中Client A已经拿到了TURN为其分配的中继地址,需要通过其他方式将这个中继地址告诉其他想和A通信的对象,例如Client B。 当ClientB拿到这个中继地址后,就可以和A进行通信了,过程如下:

图片来自 https://www.jianshu.com/p/4a15556c6318 版权属于原作者所有

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!