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

一、NAT的四种类型

       简单来说,IPV4地址不够,出现了NAT。

1、完全锥型

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

2、地址限制型

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

3、端口限制型

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

4、对称型

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

二、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端。

扫描二维码关注公众号,回复: 9189934 查看本文章

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范围内
	

2、测试ICE

       ICE测试网址

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

发布了33 篇原创文章 · 获赞 5 · 访问量 2272

猜你喜欢

转载自blog.csdn.net/cj1561435010/article/details/104318409