前言
本地局域网的设备会被分配一些本地
IP
地址(C
类ip
地址),用于局域网内部使用。这个
IP
地址是不能用于外部使用的,因为和外部的网络通信,需要使用公网IP
。因而,如果我们使用这个内网IP
进行webrtc
的对等端通信,将会是不成功的。
STUN
webrtc
使用stun
来解决上述问题。首先,
STUN
服务器位于公网上,它的作用是:检查传入请求的IP地址,并将该地址作为响应再发送回去。【这个传入请求的IP地址
,它来自某个局域网内运行的程序】换句话说,就是我的在局域网内的应用程序,通过这个运行在公网的
STUN
服务器来获取我的可用于公网通信的地址。
- 我去连接运行在公网的
STUN
服务器STUN
服务器在公网的角度发现了我的信息:IP
+端口STUN
服务器把他发现的这个地址再给我发送回来- 然后我收到
STUN
服务器给我的这个地址后,有了自己用于公网通信的地址- 拿到这个用于公网通信的地址后,我再通过信令机制,把这个地址发送给了另一个对等端,从而建立连接
连接
到了建立连接的阶段,它可以细化如下:
RTCPeerConnection
尝试通过UDP
建立对等端之间的直接通信- 如果
UDP
失败了,RTCPeerConnection
会再使用TCP
去建立对等端之间的直接通信- 如果
TCP
失败了,RTCPeerConnection
可以用TURN
服务器作为后备,在终端之间转发数据有了公网
IP
之后,先是尝试点对点直连,但是直连也可能是不成功的,不成功的情况下就会通过转发
TURN
当直连没成功的情况下,就会通过
TURN
转发,STUN
转发的是信令数据,而TURN
转发的才是真正的数据流,比如是音频的、视频的那它这个通讯模式里面,显然作为备用的转发服务器
TURN
也是相当重要的,为什么TCP
直连失败了,TRUN
就一定成功呢?因为
TRUN
服务器也是位于公网上,它具有公网地址,即使当对等端位于防火墙或代理的后面,也可以与之联系。
假设
假设从一开始
STUN
服务器连接就没有成功,那么怎么办呢?
这时,每个对等端还可以使用TURN
服务器来连接
总结
根据上述理解与分析
STUN
服务器的功能相对TURN
服务器的功能来说,比较单一简单TURN
服务器需要强大的性能来支撑大带宽的中继数据流的传输以及多功能的支持实现
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ string←转换→LPCSTR10/12
- ♥ Python编程从入门到实践 一04/19
- ♥ macOs 解析mach-o05/11
- ♥ 表_约束-外键10/27
- ♥ 2019_11_0511/07
- ♥ C++并发编程 _ 基于锁的数据结构08/19