一、相关术语
1.NAT
Network Address Translation,网络地址转换。“NAT环境”通常指网络地址转换(Network Address Translation)环境。在计算机网络中,NAT是一种网络协议,用于将一个或多个内部网络的IP地址转换为另一个或多个外部网络的IP地址,以实现网络通信。NAT环境常用于家庭网络、企业网络和互联网服务提供商(ISP)等场景中,以提供更好的网络连接和资源共享。通过NAT,多个设备可以共享同一个公共IP地址,从而节省IP地址资源,并增强网络安全性。

2.STUN服务器
Session Traversal Utilities for NAT,NAT会话穿越实用工具协议。STUN服务器用于帮助设备发现自己在NAT后面的公共IP地址和端口。当设备处于NAT环境中时,它的私有IP地址无法直接被其他设备访问。STUN服务器充当一个中间人,设备可以向STUN服务器发送请求,以获取自己的公共IP地址和端口。设备可以使用这些信息来建立直接的点对点连接,从而避免通过中继服务器进行通信。

3. TURN服务器
Traversal Using Relay NAT,通过中继方式穿越NAT。TURN服务器用于在NAT环境下进行中继通信。当设备无法直接建立点对点连接时,它们可以通过TURN服务器进行通信。设备将数据发送到TURN服务器,然后由服务器转发给目标设备。TURN服务器在中继通信中起到一个中间人的作用,帮助设备进行数据的中转。TURN服务器通常会分配一个临时的公共IP地址和端口给设备,以便进行通信。中继通信会增加一些延迟和带宽消耗,因此在实时通信中,尽量避免使用中继,而是优先选择直接的点对点连接。

4.打洞
打洞通常是指在NAT环境下,通过一些技术手段实现内网设备与外网设备之间的直接通信。
NAT(网络地址转换)的类型中,打洞是指在内网和外网之间建立直接通信的一种技术。打洞可以是内网对外网访问时打洞,也可以是内网中的设备互相打洞。打洞通常用于解决NAT环境下的双向通信问题,而外网对内网的访问是单向的,只需要将请求转发到内网设备即可,不需要打洞操作。(即:在外网对内网进行访问时,并不涉及打洞的概念。)

5.信令服务器
实现业务层管理
如用户创建房间,加入房间,退出房间等
确定何时初始化、关闭和修改通话会议,也可以进行错误报告

让通信双方彼此交换网络信息
最常见的是交换通信双方的IP地址和端口 – ICE Candidate
两个WebRTC之间会尽可能选择P2P进行传输,同一个局域网内直接通过P2P进行传输,不同局域网内需要使用P2P穿越后进行数据传输,P2P穿越成功后直接传输,失败后进行中转等 – 后续的候选人中进行解说

通信双方交换媒体信息
媒体信息用SDP来表示,这个SDP可以简单理解为:媒体类型的编码器是什么、是否支持该媒体类型和对应的编码器、编码方式是什么等。

host|srflx|relay三者比较
Host、SRFLX(Server Reflexive)和Relay是WebRTC(Web Real-Time Communication)中用于NAT(Network Address Translation,网络地址转换)穿越和数据传输的三种不同类型的候选者(Candidate)。下面分别对这三者进行详细解释:

候选者类型 定义 使用场景 特点 优先级
host Host类型的候选者表示本机直接可用的IP地址和端口,不需要经过任何NAT或中继服务器。 当两台设备处于同一局域网内时,它们可以通过Host类型的候选者直接建立连接,实现高效的数据传输。 传输速度快,延迟低,因为数据直接在两台设备之间传输,无需经过任何中间设备。 最高
SRFLX SRFLX类型的候选者表示内网主机通过STUN(Simple Traversal of UDP over NATs)服务器映射到外网的地址和端口。这种类型的候选者允许内网主机与外网主机进行通信。 当两台设备分别处于不同的NAT网络后时,它们可以通过STUN服务器获取对方的公网地址和端口,尝试建立P2P(点对点)连接。 如果NAT打洞成功,则可以实现高效的P2P通信。
如果NAT打洞失败,或者NAT类型较为严格(如对称型NAT),则无法建立P2P连接。
中等
relay Relay类型的候选者表示数据需要通过TURN(Traversal Using Relays around NAT)服务器进行中转的候选者。TURN服务器实际上充当了数据的中继站。 当NAT打洞失败时,或者NAT类型极为严格,导致无法建立P2P连接时。
某些情况下,出于安全或隐私考虑,也可能主动选择Relay类型的候选者进行数据传输。
数据传输需要经过TURN服务器,因此会增加一定的延迟和带宽消耗。
适用于所有类型的NAT网络,包括最为严格的对称型NAT。
提供了更高的可靠性和稳定性,因为数据中转过程由TURN服务器控制。
最低

总结
Host、SRFLX和Relay是WebRTC中用于NAT穿越和数据传输的三种不同类型的候选者。它们各有特点和使用场景,WebRTC会根据实际情况选择最合适的候选者来建立连接。在实际应用中,通常会按照Host→SRFLX→Relay的顺序进行候选者选择和连通性测试,以选择传输质量最好的线路。

二、WebRTC一对一架构
WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。其中,信令服务器与中继服务器都在NAT外,也就是属于外网。而两个WebRTC终端在NAT内,属于内网。

两个WebRTC终端通信步骤:

首先两个终端在通信之前,都要先与信令服务器连接,即步骤1。与服务端建立好连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。
不过在交换信息之前,WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口,即步骤2。
WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了,即步骤3。

信令服务器处理流程
第一步,Amy 调用 createOffer 方法创建 offer 消息。offer 消息中的内容是 Amy 的 SDP 信息。
第二步,Amy 调用 setLocalDescription 方法,将本端的 SDP 信息保存起来。
第三步,Amy 将 offer 消息通过信令服务器传给 Bob。
第四步,Bob 收到 offer 消息后,调用 setRemoteDescription 方法将其存储起来。
第五步,Bob 调用 createAnswer 方法创建 answer 消息, 同样,answer 消息中的内容是 Bob 的 SDP 信息。
第六步,Bob 调用 setLocalDescription 方法,将本端的 SDP 信息保存起来。
第七步,Bob 将 anwser 消息通过信令服务器传给 Amy。
第八步,Amy 收到 anwser 消息后,调用 setRemoteDescription 方法,将其保存起来。

https://juejin.cn/post/6844903844904697864
https://www.cnblogs.com/ggtc/p/18287925

作者 铁血 汉子 2024年8月27日
2024/11/21/08:41:16am 2024/8/27/4:22:34
0 114