ICE(Interactive Connectivity Establishment,互动式连接建立)是用於 Offer/Answer 模式下的 NAT 穿越的技术,主要用於在UDP协议下建立多媒体会话。在实际的网路当中,有很多原因会导致简单的从 A 端到 B 端直连不能如愿完成。这需要绕过阻止建立连接的防火墙,给你的设备分配一个唯一可见的地址,如果路由器不允许主机直连,还得通过一台服务器转发数据。ICE 通过使用 STUN、TURN、NAT、SDP 技术完成上述工作。
ICE 建立连线的过程:
ICE 在所有的候选地址中,选择开销最小的路由。
当我们的客户端位於 NAT 的内网中虽然可以与外网连线,但我们并不知道外网的 IP 位置,这个时候就需要通过 STUN 来取得外网 IP 位置。
STUN(Session Traversal Utilities for NAT,NAT 对谈穿越应用程序)是一种网路协定,它允许位於NAT(或多重NAT)後的客户端找出自己的公网位址,查出自己位於哪种类型的NAT之後以及NAT为某一个本地埠所系结的Internet端埠。这些资讯被用来在两个同时处於NAT路由器之後的主机之间建立UDP通信。该协定由RFC 5389定义。
从上一篇的 NAT 分类,以及上面对 STUN 的理解,我们知道在 Symmetric NAT 的网路环境中,是无法使用点对点 (Peer-to-Peer; P2P) 的方式来穿透 NAT,在这种情况下我们就需要 TURN(Traversal Using Relay NAT)来转发封包。
不过这种方式虽然可以穿透防火墙,但却没有了原先 P2P 的优势,而是变成了 Client-Server 的模式,因此 TURN Server 必须满足非常高的频宽要求,尤其是在多个并行连线的情况下。因此,使用 TURN Server 的成本很高,只有在没有其他传输选项时才会选择这个解决方案。
本篇了解 ICE、STUN、TURN 的基本运作,ICE 实际运作更复杂,不过我们先理解这些就可以了,我们也不需要自己去实现一个 ICE server,後面实作会使用开源的框架 。
https://zh.wikipedia.org/wiki/STUN
https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols
http://www.cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm
<<: 【从零开始的Swift开发心路历程-Day10】简单介绍UITableView
五种流程图案○♢▭ | 线上绘制工具 | draw.io 🐄点此填写今日份随堂测验 ...
在 Day20 介绍资料集时有提到过五类情绪有资料不平衡的问题,为了处理资料不平衡的问题,我们会在 ...
#前面已经分享过以 HTTP API 或 JavaScript driver 开发 Neo4j 前端...
自签凭证绑定 Docker版 当有需求要Mattermost绑定自签凭证时怎麽办?我们的Matter...
今天我们来看一下 powershell 中的另一种逻辑判断 switch. switch 语法: s...