首页 > 编程知识 正文

p2p网络技术原理(WebRTC P2P技术之STUN、TURN、ICE)

时间:2023-05-05 06:19:15 阅读:121224 作者:2430

1 .概述:本文简要介绍了WebRTC P2P技术中的STUN、TURN和ICE协议。 首先需要理解的是NAT协议。

2.NAT NAT是net地址转换的缩写,是网络地址转换。

家庭和办公室的网络环境大多通过NAT路由中转的方式连接到网络。 这意味着家里的PC通过WIFI连接到了网络。 在PC上的命令行ifconfig中看到的IP地址[内部网]与在baidu中看到的IP地址[公用网络]不同,也可以证明PC位于NAT之后。

首先介绍NAT的分类和NAT开孔的原理。

NAT分类完全锥形 Full Cone

内部机器a访问外部网络机器c,NAT打开端口,后面外部网络上的任何ip和任何端口都可以访问该端口。 也就是说,任意ip的任意端口都可以访问内部网络机器a。

缺点:可通过任何ip和端口访问,因此安全性较差

地址限制锥形 Address Restricted Cone

内部机器a访问外部网络机器c,NAT打开一个端口,可以访问后面机器c上的任意端口。 也就是说,只有固定ip的任意端口可以访问a

端口限制锥形 Port Restricted Cone

内部机器a访问外部网络机器c,NAT打开端口,后面机器c上的固定端口可以访问该端口。 也就是说,只有固定ip固定端口可以访问a

对称型 Symmetric

连接到不同的外部服务器时,NAT打开的端口会发生变化。 也就是说,在内部设备a连接到外部网络设备b时,NAT打开一个端口,而在内部设备a连接到外部网络设备c时,NAT打开另一端口。

NAT通过基本步骤C1,C2向STUN发消息

C1C2向STUN发送消息,以获得各自的公共网络IP和端口

交换公网IP和端口

向C2发送C1的公共ip和端口,向C1发送C2的公共ip和端口

C1-C2,C2-C1,甚至是端口猜测

虽然可以通过C1C2进行通信,但是在对称型的场景中,甚至需要端口推测

NAT穿越组合里,除了对称型与对称型无法打通以外,其余组合都可以打通

3.STUN STUN首先在RFC3489中定义,作为完整的NAT透明解决方案,其英文全名是simpletraversalofudpthroughnats,即简单地通过UDP透明NAT。

在新的RFC5389修订版中,STUN协议不是一个完整的解决方案,它旨在为穿透NAT提供工具。 英语的全名是sessiontraversalutilitiesfornat,即NAT会话的贯通效果。 RFC5389和RFC3489除了重命名外,最大的区别是支持TCP透明。

sun主要有三个功能,分别检测是否在NAT之后,检测NAT的类型,获取NAT转换后的地址和端口。

客户端通过向公共网络上的STUN服务发送请求,获取其公共网络的地址信息以及是否可以通过路由器进行访问。

但是,一些路由器严格限制了一些互联网设备的对外连接。 在这种情况下,即使STUN服务器知道此互连设备的公共IP到端口的映射,也无法与此互连设备建立连接。 在这种情况下,必须迁移到TURN协议。

4.TURN TURN协议是构建在UDP协议基础上的APP应用层协议,首先在RFC5766中定义,英文全名为traversalusingrelaysaroundnat : relayextensionstosesion

一些路由器使用“对称NAT”NAT型号。 这意味着路由器只接受以前与对方建立的连接。 也就是说,下一个要求是建立新的连接映射。

NAT中继通过方式traversalusingrelaysaroundnat (turn )以通过turn服务器中继所有数据的方式绕过“对称NAT”。 必须在TURN服务器上创建连接,将其发送到所有配对设备,并告知TURN服务器转发数据包。 显然这种方式很费钱,所以只有在别无选择的情况下才能采用。

5 .如前所述,STUN的目的是执行P2P通信,其可以通过提供称为反射地址的能力来执行P2P通信,取决于NAT类型的差异例如,双方都是对称型NAT或一方为对称型,另一方为端口限制型。

因为有失败的可能性,所以如果只是依赖STUN协议提供的反射地址,就需要事先检测双方的NAT类型,如果知道是对称型的NAT,就不用开孔,直接中继。 目前网络类型复杂,STUN协议在5389时消除了NAT类型的判断能力。 越来越多的实践发现表明,在多层NAT下,类型检测并不总是有效的。 使用ICE时,不需要预先检测NAT类型。 tun还具有ICE支持(扩展到绑定)的作用。

TURN协议的目的是确保通信双方都能100%通信。 使用中继方案(一种只知道反射地址且打孔失败的补充方案)使双方能够使用中继方案进行通信,已经不是P2P,而是涉及传输效率问题。 但是,这个没关系。 因为这个协议的目的是保证双方一定能通信,失去效率保证做爱。

ICE协议的目的就是综合以上两种方案,通过通信双方互相发探测包,找出一种最合理,最廉价的可行路径。

ICE首先检测内部网络地址,检测STUN提供的反射地址,最后检测TURN协议的中继地址。 不管怎样,最终目的都是上路。 内部网络地址为反射地址,反射地址不行,最后不得已的话,那就使用中继地址。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。