WebRTC学习之路—TURN/STUN服务原理及搭建

一、NAT的四种类型
       简单来说,IPV4地址不够,出现了NAT。

1、完全锥型
       私网内的主机向公网主机发起一个请求,期间会在NAT服务上打洞(留下发起方公网的IP地址和端口)。外网的所有主机都可以通过这个IP地址和端口来访问。

2、地址限制型
       私网内的主机向公网内的某台主机发起一个请求,会在NAT服务上开启类似访问权限的功能,就是说对于私网主机请求过的所有公网主机,都可以通过私网内主机的公网IP+端口访问私网内的主机;而未被请求过的公网主机则无法访问。

3、端口限制型
       私网内的主机向公网内的某台主机的某个端口发起一个请求,会在NAT服务上开启类似访问权限的功能,就是说对于私网主机请求过的所有公网主机的特定端口,都可以通过私网内主机的公网IP+端口访问私网内的主机;而未被请求过的公网主机的特定端口则无法访问。

4、对称型
       会在NAT服务的映射表中添上一组映射信息(每次请求都会往上添)———-六元组(私网内主机的内网IP+端口,私网内主机的公网IP+端口,公网内主机的IP+端口),其中前两元是不变的,而后面的四元都有唯一的对应关系,也就是说公网内某个IP地址特定端口的主机只能通过映射表上与之相对应的第三、四元来访问私网主机,其他都不能访问。

二、STUN服务
       服务器有两个公网的IP地址和端口。

1、STUN服务目的
       1、判断通信双方是否在NAT后;
       2、判断双方NAT的类型;
       3、交换各自公网的地址和端口(在NAT后就交换NAT转换后的地址和端口)。

2、STUN服务检测NAT类型的原理
       1、客户端向STUN服务器的第一个IP地址端口1发起请求,通过服务器原路返回进行响应。如果这个响应的IP地址和客户端的相同,说明客户端在公网,不在NAT之后。
       2、前提:客户端在NAT后。客户端向STUN服务器的第一个IP地址端口1发起请求,通过服务器的第二个IP地址端口1响应。如果客户端能收到响应,说明是完全锥型NAT。
       3、如果第二步还不能收到响应,客户端再向STUN服务器的第二个IP地址端口1发起请求,通过服务器同一个IP地址的端口2响应。如果客户端能收到响应,说明是地址限制型NAT;
       4、如果第三步收不到响应,客户端向STUN服务器的第二个IP地址端口1发起请求,由服务器原路返回进行响应。客户端不能收到请求,且返回的IP地址和第一步响应的I地址不相同,说明是对称型NAT;当客户端能收到请求,就是端口限制型NAT。

       如果STUN提供的服务能够连通,那两端不走中继服务器,直接点对点传输媒体流了。

三、TURN服务
       服务器分为turn_client端和turn_server端。

1、TURN服务目的
       解决无法穿透的NAT。

2、TURN服务原理
       假设A端和B端要通信。A发送请求给STUN/TURN服务器(限定必须是3478端口),turn_client向turn_server发送一个Allocate请求,turn_server收到Allocate请求之后会为A发的请求分配一个relay端口(中继端口),经过中继端口转发给B。相反,B要发送自己的数据就通过relay端口进行发送,之后经过服务器端口转发到3478,最后再到达A端。

       每次A发送的数据先发到turn_client端(3478),turn_client发送Send到turn_server的时候会带上TURN的协议头,然后turn_server再去掉协议头,发给B端。B端发数据先到turn_server端(Allocate请求开通的relay端口),turn_server发Data给turn_client的时候也会带上TURN的协议头,然后turn_client再去掉协议头,发给A端。这样发数据会浪费带宽,可用Channel解决带宽损耗问题。

四、TURN/STUN服务搭建
1、修改配置文件
       云服务器记得开放端口!

listening-port=3478
external-ip=公网IP
user=用户名:密码 //访问TURN服务的凭证
min-port=x
max-port=x //relay端口在min-max范围内

1
2
3
4
5
6
2、测试ICE
       ICE测试网址百度就有。

       不用管报错信息,只要relay和srflx就代表STUN/TURN服务搭建成功!

————————————————
版权声明:本文为CSDN博主「cj1561435010」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cj1561435010/article/details/104318409