前言
上一篇介绍完中心化、去中心化、分布式网路以及 IPv4、NAT、NAT 类型,但我们依旧还有些问题未解决
A, B 两端要如何知道彼此的内部网路 IP 及外部网路 IP (STUN)上篇有提到 NAT 类型如果是对称型时,会无法打通 P2P,当遇到此情形时该 (TURN)有没有一种框架整合这整个 P2P 流程 (ICE)STUN
STUN(Session Traversal Utilities for NAT,NAT 对谈穿越应用程式)是一种网路协定,它允许位于 NAT(或多重 NAT)后的客户端找出自己的公网位址,查出自己位于哪种类型的 NAT 之后以及 NAT 为某一个本地埠所繫结的 Internet 端埠。这些资讯被用来在两个同时处于 NAT 路由器之后的主机之间建立 UDP 通信。该协定由 RFC 5389 定义。
STUN Wiki
TURN
TURN(全名 Traversal Using Relay NAT),是一种资料传输协定(data-transfer protocol)。允许在 TCP 或 UDP 的连线上跨越 NAT 或防火墙。
TURN 是一个 client-server 协定。TURN 的 NAT 穿透方法与 STUN 类似,都是通过取得应用层中的公有位址达到 NAT 穿透。但实现 TURN client 的终端必须在通讯开始前与 TURN server 进行互动,并要求 TURN server 产生"relay port",也就是 relayed-transport-address。这时 TURN server 会建立 peer,即远端端点(remote endpoints),开始进行中继(relay)的动作,TURN client 利用 relay port 将资料传送至 peer,再由 peer 转传到另一方的 TURN client。
当无法打通 NAT 时,就会需要用 TURN 的方式来解决 NAT 穿透
TURN Wiki
ICE
ICE(Interactive Connectivity Establishment),一种综合性的 NAT 穿越的技术。
互动式连接建立是由 IETF 的 MMUSIC 工作组开发出来的一种 framework,可整合各种 NAT 穿透技术,如 STUN、TURN(Traversal Using Relay NAT,中继 NAT 实现的穿透)、RSIP(Realm Specific IP,特定域 IP)等。该 framework 可以让 SIP 的客户端利用各种 NAT 穿透方式打穿远程的防火墙。
ICE Wiki
总结
简单来说
STUN Server 是让 client 端询问自身的 Public IP,双方交换 Public IP 来做 P2PTURN Server 是当 NAT 穿透失败时(通常是 Symmetric NAT)的替代方案,透过 TURN server 做资料的转传,也称为 Relay,走 TURN 时 TURN Server 传输流量等等就会需要额外费用ICE 是一种框架,结合了 STUN 及 TURN 等等协议,解决单一协议缺陷的问题,列如遇上 Symmetric NAT 但没有实作 TURN,双方就会无法通讯.这篇介绍了 STUN、TURN 及 ICE,下一篇将介绍 Signaling Server, WebRTC 以及 AWS KVS for WebRTC.