WebRTC,TURN/STUN服务原理及搭建

文章介绍了NAT的四种类型,包括完全锥型、地址限制型、端口限制型和对称型,以及它们的特点。接着,详细阐述了STUN服务如何帮助判断NAT类型并交换公网地址。对于无法穿透的NAT,文章提到了TURN服务的工作原理,通过中继端口实现通信。最后,提到了ICE测试用于验证STUN/TURN服务的配置是否成功。
摘要由CSDN通过智能技术生成

1、NAT的四种类型

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

1.1完全锥型

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

1.2地址限制型

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

1.3端口限制型

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

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

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

2.1STUN服务目的
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提供的服务能够连通,那两端不走中继服务器,直接点对点传输媒体流了。

3、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解决带宽损耗问题。

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

    listening-port=3478
    external-ip=公网IP
    user=用户名:密码     //访问TURN服务的凭证
    min-port=x
    max-port=x      //relay端口在min-max范围内
    
4.2测试ICE
ICE测试网址百度就有。

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值