参考文档:
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://blog.csdn.net/guothree2003/article/details/100010124