搞懂 P2P 技术 (2) - STUN x TURN x ICE

前言

上一篇介绍完中心化、去中心化、分布式网路以及 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

p2p_stun

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

p2p_turn

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

p2p_ice

总结

简单来说

  • STUN Server 是让 client 端询问自身的 Public IP,双方交换 Public IP 来做 P2P
  • TURN 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.

参考资源


<<:  搞懂 P2P 技术 (1) - P2P x IPv4 x NAT

>>:  搞懂 P2P 技术 (3) - WebRTC x AWS x KVS

21.MYSQL BETWEEN AND指令

MYSQL中除了上面提到的指令外,还有一些更好用的指令,这些指令不用上面那些这麽复杂,但是依旧可以达...

【Day 03】初探领域驱动设计

前言 上一篇谈到战略资讯系统的分层设计,要如何进行呢? 中大型企业一般会请管理顾问公司或IBM/HP...

主动编辑你的团队 — 解雇员工

谈完招募,今天分享另一个让你让你团队变强的方法:解雇员工(firing)。 如果要列出所有菜鸟主管...

Day 4 - 稳若磐石

前言 上次还欠了cin >> 的介绍!我可没忘记唷!只不过说到cin >>这...