WebRTC:去中心化网络P2P框架剖析
在互联网的天下里,数据的传输就像一场永不绝歇的 “信息快递”。当我们使用 WebRTC 实现视频通话时,背后支持的网络框架至关告急。今天,我们将深入探索 WebRTC 开发中视频通话的前置底子 ——P2P(点对点)框架,尤其是其中 “去中心化” 这一核心概念,以及与之精密相干的网络地点映射 NAT、网络穿透、STUN、TURN 等关键技术,揭开视频通话流畅背后的神秘面纱。一、中心化网络与去中心化:两种大相径庭的 “信息王国”
(一)中心化网络:“天子统治” 的信息王国
想象一下,在一个庞大的王国中,所有的信息通报都要经过一位 “天子”(中心服务器)。无论是两个村民之间的书信往来,还是商人之间的货物订单,都需要先把信息交给 “天子”,由 “天子” 再举行分发。这就是中心化网络的形象比喻。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvMDQxMThkMzRmN2Y0NDk5NzhiMWU5ZThjNTU2ZDE5OWQucG5n
在现实的网络天下里,中心化网络结构中,客户端的所有数据交互都依赖于中心服务器。比方早期的即时通讯软件,用户发送的每一条消息,都要先上传到服务器,再由服务器推送给接收方。这种方式固然便于管理和控制,就像 “天子” 可以轻松掌握王国里的统统信息,但也存在显着的弊端。一旦 “天子”(中心服务器)出现故障,整个王国(网络体系)就会陷入瘫痪,所有的信息通报都会中断。而且,随着用户数量的增长,“天子”(服务器)的负担会越来越重,处理信息的效率也会降低。
(二)去中心化:“村民自治” 的信息新天下
与中心化网络不同,去中心化网络更像是一个 “村民自治” 的天下。在这个天下里,没有高高在上的 “天子”,每个村民(节点)都可以直接与其他村民举行信息交换。这就是 P2P 去中心化网络的核心头脑。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvYzQzNTU2MjY3ODI2NDIyN2FmZDAyY2JkYjFlNzU2MWYucG5n
在 P2P 网络中,每个节点都具有划一的地位,它们既可以作为数据的发送者,也可以作为数据的接收者。好比在 WebRTC 视频通话中,当两个用户建立连接后,他们的装备就直接举行视频数据的传输,无需经过中心的服务器中转。这样一来,不光减轻了服务器的压力,就像淘汰了 “天子” 的工作量,还提高了数据传输的效率和网络的稳定性。即使部分节点出现故障,也不会影响其他节点之间的正常通讯,就像个别村民生病,并不会影响整个乡村的交换一样。
二、网络地点映射 NAT:网络天下的 “地点翻译官”
(一)NAT 原理:从 “私人地点” 到 “公共地点” 的转换
在网络天下里,每个装备都有自己的地点,就像现实生活中每个家庭都有自己的门牌号。但由于 IPv4 地点资源有限,很多家庭网络(局域网)中的装备使用的都是 “私人地点”,这些地点在局域网内是唯一的,但在整个互联网中却不能直接使用。这时间,就需要 NAT(Network Address Translation,网络地点映射)来充当 “地点翻译官”。
当局域网内的装备想要访问互联网时,它会先将自己的 “私人地点” 和要访问的目标地点打包成一个 “信息包裹”,发送给 NAT 装备(通常是家庭路由器)。NAT 装备收到包裹后,会将包裹中的 “私人地点” 替换成自己的 “公共地点”,并记载下这个替换关系,就像给包裹贴上一个新的标签。然后,NAT 装备将这个新包裹发送到互联网上。当互联网上的服务器返回数据时,NAT 装备再根据之前记载的替换关系,把数据正确地转发给局域网内的装备。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNDQ4ODNmOTkwN2Q2NGI5ODgyNDY3NjExMDBjMzEzODcucG5n
(二)NAT 的实现:路由器的 “邪术变身”
NAT 的实现主要依赖于路由器等网络装备。路由器内部有一个 NAT 表,用于记载 “私人地点” 和 “公共地点” 的映射关系。当数据包进入路由器时,路由器会根据 NAT 表的规则对数据包的源地点举行转换;当数据包从互联网返回时,路由器又会根据 NAT 表对目的地点举行转换。
这个过程就像路由器在举行一场 “邪术变身”。好比,局域网内的装备 A(地点为 192.168.1.100)想要访问互联网上的服务器 B(地点为 203.0.113.1),装备 A 发送的数据包到达路由器后,路由器会将源地点 192.168.1.100 替换成路由器自己的公共地点(假设为 123.45.67.89),然后将数据包发送给服务器 B。服务器 B 返回的数据到达路由器时,路由器再根据 NAT 表,把目的地点 123.45.67.89 转换回 192.168.1.100,将数据正确地发送给装备 A。
NAT 的实现方案有三种,静态转换,动态转换,端口地点映射。 此部分图文参考NAT网络地点转换协议简单理解_网心云全锥型改为映射公网型-CSDN博客 (1)静态转换:一对一的 “专属翻译”
静态转换就像是一位 “专属翻译”,为局域网内的特定装备提供一对一的地点映射服务。在这种方式下,管理员会手动将局域网内装备的私有 IP 地点与公网 IP 地点举行固定绑定,建立起永久的映射关系。一旦设定完成,只要装备的私有 IP 地点不变,它与公网 IP 地点的对应关系就始终保持稳定,就如同为装备分配了一个专属的、固定不变的 “对外身份”,但这种方法不能节省IPV4地点,一样平常不用。
比方,假设局域网内有一台服务器,其私有 IP 地点为 192.168.1.23,管理员将它与公网 IP 地点 112.93.114.32 举行静态转换绑定。那么,无论何时这台服务器访问互联网,它在外部网络看来的 IP 地点永远是 112.93.114.32;同样,当外部网络想要访问这台服务器时,也只需通过 112.93.114.32 这个公网 IP 地点,NAT 装备就能正确地将哀求转发到局域网内的192.168.1.23 这台服务器上。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZmM0OGNiY2M2ZGJjNGEwMmEyNTUzMmQwMGVhMWVhYjcucG5n
静态转换适用于那些需要在公网上被稳定访问的装备,好比企业对外提供服务的 Web 服务器、邮件服务器等。由于这些服务器需要一个固定的公网 IP 地点,方便外部用户随时访问。
它的长处非常显着:起首,由于映射关系固定,网络通讯的稳定性和可猜测性极高,不会出现地点映射杂乱的情况;其次,对于外部网络来说,访问流程简单直接,就像记住一个固定的电话号码就能随时接洽到特定的人;再者,静态转换在一定程度上也增强了网络的安全性,由于外部网络只能通过固定的公网 IP 与特定的内部装备通讯,淘汰了非法访问其他内部装备的可能性。
然而,静态转换也存在一些缺点。最突出的题目就是对公网 IP 地点的消耗较大,每一个需要被映射的内部装备都需要占用一个独立的公网 IP 地点。在 IPv4 地点资源稀缺的当下,这种方式会造成资源的浪费;别的,手动配置映射关系的工作量较大,尤其是在装备数量较多的情况下,不光轻易堕落,后期维护也较为困难。
(2)动态转换:机动调配的 “地点池管家”
动态转换就像是一位 “地点池管家”,它管理着一个公网 IP 地点池。当局域网内的装备需要访问互联网时,NAT 装备会从这个地点池中动态地选取一个空闲的公网 IP 地点,将其与装备的私有 IP 地点建立临时映射关系。当装备的网络连接竣事后,这个公网 IP 地点会被释放回地点池,以供其他装备使用。
比方,假设地点池中有 多个公网 IP 地点(112.93.114.32 -...),当装备 A(私有 IP 地点 192.168.1.23)发起网络哀求时,NAT 装备从地点池中选取112.93.114.32 分配给它,建立起映射关系;当装备 A 的通讯任务完成后,112.93.114.32 会被回收。如果此时装备 B(私有 IP 地点 192.168.1.24)需要上网,NAT 装备可能会将 112.93.114.32 再次分配给它,也可能分配其他空闲地点。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvN2RmNWI3NDYzNDZjNDMxZDk1YzIzMjQ2ZDA5OGE2NjUucG5n
动态转换适用于企业或家庭等内部网络中,装备数量较多但不需要每个装备都有固定公网 IP 地点的场景。它能够更高效地使用有限的公网 IP 地点资源,满足大量装备的上网需求。
其长处在于机动性高,通过动态分配地点,提高了公网 IP 地点的使用率,制止了像静态转换那样可能出现的地点浪费题目;同时,对于管理员来说,相较于静态转换,动态转换淘汰了手动配置每一个装备映射关系的工作量,只需要管理好地点池即可。
不过,动态转换也存在一些不足。由于地点是动态分配的,装备每次上网获得的公网 IP 地点可能不同,这对于一些需要固定 IP 地点才能正常工作的应用(如服务器对外提供服务)不太友好;别的,在地点分配和回收的过程中,可能会出现短暂的网络延迟或连接不稳定的情况,影响用户体验。
(3)端口地点映射(PAT):共享地点的 “超级翻译”
端口地点映射(PAT)堪称一位 “超级翻译”,它实现了多个内部装备共享一个公网 IP 地点举行网络通讯的功能。PAT 在举行地点转换时,不光会转换 IP 地点,还会对端标语举行转换和记载。它使用端标语来区分不同装备的网络连接,使得多个内部装备可以通过同一个公网 IP 地点的不同端口与外部网络举行通讯。
比方,局域网内有装备 C(私有 IP 地点 192.168.1.23)和装备 D(私有 IP 地点 192.168.1.24)都要访问互联网上的服务器。装备 C 发起哀求时,NAT 装备将其私有 IP 地点 192.168.1.23 和源端标语(假设为 23415)转换为公网 IP 地点 112.93.114.32 和一个新的端标语(假设为 43253);装备 D 发起哀求时,NAT 装备同样将其私有 IP 地点 192.168.1.24 和源端标语(假设为 43213)转换为公网 IP 地点 112.93.114.32和另一个新端标语(假设为 43256)。当外部服务器返回数据时,NAT 装备根据返回数据中的目的端标语,就能正确地将数据转发给对应的内部装备。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNmE1YTRkNDRhZTJlNGIxMjliNzBlM2M5MzdlZTM5ZmYucG5n
PAT 是目前应用最为广泛的 NAT 实现方法,尤其适用于家庭网络、小型企业网络等装备数量浩繁但公网 IP 地点有限的场景。它极大地提高了公网 IP 地点的使用率,理论上一个公网 IP 地点就可以满足成千上万台装备的上网需求。
PAT 的上风十分显著:起首,它最大限度地节省了公网 IP 地点资源,有效缓解了 IPv4 地点告急的题目;其次,配置相对简单,只需要在 NAT 装备上举行基本的设置,无需为每个装备单独配置映射;再者,通过端标语的区分,实现了多个装备同时上网的并发处理,保证了网络的高效运行。
但 PAT 也并非完善无缺。由于所有装备共享一个公网 IP 地点,在网络安全方面,一旦这个公网 IP 地点被攻击,所有使用该地点的内部装备都可能受到影响;别的,对于一些对端标语有特别要求或依赖 IP 地点和端标语举行身份验证的应用程序,PAT 可能会导致这些应用无法正常工作,由于端标语在转换过程中发生了变化。
(三)NAT 的应用:保卫家庭网络的 “安全卫士”
NAT 除了实现地点转换,还起到了一定的安全防护作用。由于局域网内的装备使用的是 “私人地点”,在互联网上是不可见的,这就相当于给家庭网络中的装备穿上了一层 “隐身衣”。外部网络无法直接访问局域网内的装备,只有当局域网内的装备主动发起哀求时,NAT 装备才会建立映射关系,允许数据返回。这大大降低了家庭网络遭受外部攻击的风险,就像有一位忠诚的 “安全卫士” 保卫着家庭网络的安全。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvYjEyMDQzYTExODRlNGY2Zjk4Y2QxZmQ5MjNhZDBmZTEucG5n
在数据传输的过程中,NAT 路由器会为每一个网络历程分配相应端口与公网通讯。 三、NAT 种类:不同性格的 “地点翻译官”
此部分图文参考NAT网络地点转换协议简单理解_网心云全锥型改为映射公网型-CSDN博客
(一)完全圆锥型 NAT(Full Cone NAT)
完全圆锥型 NAT 就像是一位 “热情好客” 的地点翻译官。只要局域网内的某个装备(好比装备 A)第一次向互联网上的任何一个地点发送了数据,NAT 装备就会为装备 A 分配一个固定的 “公共地点:端口” 组合,并将所有从装备 A 发出的数据都映射到这个固定的组合上。而且,任何外部装备只要知道这个 “公共地点:端口”,都可以向装备 A 发送数据,就像只要知道你家的门牌号,任何人都可以给你寄信一样。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvOWQzNGRkYmYyZDU1NDRhZjhiYTg1YzVjZTJlMzI1NWIucG5n
(二)IP受限圆锥型 NAT(IP Restricted Cone NAT)
受限圆锥型 NAT 则是一位 “谨慎小心” 的翻译官。它同样会为局域网内的装备分配一个固定的 “公共地点:端口” 组合,但只有装备之前访问过的外部地点才能向该装备发送数据。好比装备 A 先访问了服务器 B,之后只有服务器 B 可以通过 NAT 装备向装备 A 发送数据,其他未被装备 A 访问过的外部装备则无法直接与装备 A 通讯,就像你只给特定的人留下了接洽方式,只有他们能接洽到你。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvYjVlODVlMTBiMjZjNDRkYzlmMWQ0ZDkyZDE1NWZlYWEucG5n
(三)端口受限圆锥型 NAT(Port Restricted Cone NAT)
端口受限圆锥型 NAT 更加 “严格苛刻”。它不光要求外部装备是装备之前访问过的,还要求数据的源端口必须与装备之前访问时使用的端口一致。比方装备 A 通过端口 5000 访问了服务器 B 的端口 80,那么只有服务器 B 通过端口 80 向装备 A 的 “公共地点:5000” 发送数据时,NAT 装备才会放行,否则数据将被拒绝,这就像设置了双重验证,确保通讯的安全性。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvOTk3OTg4NDEyMWUxNGNmM2JmY2UyMWQ0ZjcxOTY4ZGYucG5n
(四)对称型 NAT(Symmetric NAT)
对称型 NAT 是最 “孤僻” 的翻译官。对于每一个不同的外部目标地点和端口,它都会为局域网内的装备分配一个新的 “公共地点:端口” 组合。而且,只有之前向其发送过数据的外部装备,而且使用相同的 “公共地点:端口” 复兴数据时,NAT 装备才会允许数据通过。这意味着即使是同一台装备访问不同的服务器,每次的映射关系都可能不同,大大增长了网络通讯的复杂性。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvOGRkNTZhYTMxM2Q1NDJlOWJmZDlmNTdmMjU4NmYyYTYucG5n
四、NAT 鉴别方法:辨认 “翻译官” 的 “火眼金睛”
由于不同范例的 NAT 对网络通讯的影响不同,我们需要正确鉴别出客户端所处的 NAT 范例,这就需要一些 “火眼金睛” 般的鉴别方法。
(一)STUN 协议辅助鉴别
STUN(Session Traversal Utilities for NAT,NAT 会话穿越应用程序)协议是鉴别 NAT 范例的常用工具。客户端会向 STUN 服务器发送哀求,STUN 服务器收到哀求后,会记载下客户端的 “公共地点:端口”,并将这个信息返回给客户端。客户端通过比力自己发送哀求时使用的地点和 STUN 服务器返回的地点,以及多次发送哀求到不同的 STUN 服务器举行测试,就可以推断出自己所处的 NAT 范例。
比方,如果每次从不同的 STUN 服务器返回的 “公共地点:端口” 都相同,那么很可能是完全圆锥型 NAT;如果只有访问过的 STUN 服务器能返回有效地点,可能是受限圆锥型 NAT;以此类推,通过这种方式逐步确定 NAT 的详细范例。
(二)特征分析鉴别
除了借助 STUN 协议,还可以通太过析网络通讯的特征来鉴别 NAT 范例。好比观察数据包的传输规律、端口的使用情况等。如果发现对于不同的目标地点,映射的 “公共地点:端口” 总是变化的,那么很可能是对称型 NAT;如果只有特定的外部地点和端口组合才能举行通讯,就需要进一步判定是受限圆锥型还是端口受限圆锥型 NAT。这种方法需要对网络通讯原理有深入的理解,而且结合现实的测试数据举行分析。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNTY5N2ZhMzVmNWEzNGMwZjk2MzIxYmYxMjlhYWVmMGYucG5n
1.对称型 NAT 的鉴别
对称型 NAT 在所有 NAT 范例中体现最为 “多变”,其最显著的特征是:对于每一个不同的外部目标地点和端口,它都会为局域网内的装备分配一个新的 “公共地点:端口” 组合。在鉴别时,我们可以通过以下方式举行验证:
[*]多目标地点测试:从局域网内的装备向多个不同的外部服务器(如服务器 A、服务器 B、服务器 C)发起连接哀求。在正常通讯过程中,使用抓包工具(如 Wireshark)捕获数据包,观察每次哀求时装备对应的 “公共地点:端口”。如果每次连接到不同服务器,装备的 “公共地点:端口” 都发生变化,好比连接服务器 A 时是 “203.0.113.1:5000”,连接服务器 B 时变为 “203.0.113.2:5001” ,连接服务器 C 时又酿成 “203.0.113.3:5002”,那么该 NAT 装备很可能是对称型 NAT。
[*]端口变化验证:即使是连接同一个外部服务器的不同端口,对称型 NAT 也会分配不同的 “公共地点:端口”。比方,先连接服务器 A 的 80 端口,记载下装备的 “公共地点:端口”;再连接服务器 A 的 443 端口,若发现 “公共地点:端口” 与之前连接 80 端口时不同,进一步证实是对称型 NAT。由于其高度的随机性和端口敏感性,对称型 NAT 的网络穿透难度极大,在鉴别时需重点关注端口和地点的组合变化情况。
2.受限圆锥型 NAT 与端口受限圆锥型 NAT 的鉴别
这两种 NAT 范例都对外部连接有所限定,需要进一步过细区分:
2.1IP受限圆锥型 NAT
受限圆锥型 NAT 允许局域网内装备与外部通讯,但前提是外部装备必须是装备之前访问过的。鉴别步骤如下:
[*]初次访问记载:让局域网内装备初次访问外部服务器 D,使用抓包工具记载此时装备的 “公共地点:端口” 以及 NAT 装备建立的映射关系。
[*]非访问装备测试:实验从外部一个未被装备访问过的服务器 E 向该装备发起连接哀求。由于受限圆锥型 NAT 的限定,此连接哀求会被 NAT 装备拒绝,在抓包数据中可看到服务器 E 发送的数据包被丢弃或返回错误响应,而装备不会收到任何数据。
[*]已访问装备验证:再次让装备访问服务器 D,确保连接正常。然后从服务器 D 向装备发起反向连接,此时连接能够乐成建立,由于服务器 D 属于装备之前访问过的外部地点,符合受限圆锥型 NAT 的规则。通过这样的对比测试,可判定该 NAT 装备是否为受限圆锥型 NAT。
2.2端口受限圆锥型 NAT
端口受限圆锥型 NAT 在受限圆锥型 NAT 的底子上,增长了端口限定条件,即不光要求外部装备是装备之前访问过的,还要求数据的源端口必须与装备之前访问时使用的端口一致。鉴别过程如下:
[*]初始访问与记载:让局域网内装备访问外部服务器 F 的 80 端口,记载装备的 “公共地点:端口” 以及 NAT 装备建立的映射关系。
[*]同地点不同端口测试:从服务器 F 的另一个端口(如 8080 端口)向装备发起连接哀求。由于端口不一致,即使服务器 F 是装备之前访问过的地点,该连接哀求仍会被 NAT 装备拒绝,抓包数据中会体现相干拒绝信息。
[*]同地点同端口验证:从服务器 F 的 80 端口再次向装备发起连接哀求,此时连接能够乐成建立,由于满足了端口受限圆锥型 NAT 的双重限定条件(相同地点且相同端口)。通过这一系列严格的测试,可正确鉴别出端口受限圆锥型 NAT。
3.完全圆锥型 NAT 的鉴别
完全圆锥型 NAT 是限定最少的范例,其特征为:只要局域网内装备初次向任何外部地点发送数据,NAT 装备就会为其分配一个固定的 “公共地点:端口” 组合,后续任何外部装备都可通过该组合与装备通讯。鉴别方法较为简单:
[*]初次访问操纵:让局域网内装备访问任意一个外部服务器 G,记载此时装备的 “公共地点:端口”。
[*]多装备连接测试:从多个不同的外部装备(如服务器 H、服务器 I 等)向该装备发起连接哀求。在完全圆锥型 NAT 下,这些连接哀求都能乐成建立,且装备始终使用初次访问时分配的 “公共地点:端口” 举行通讯 。通过这种多外部装备连接验证,可快速判定该 NAT 装备是否为完全圆锥型 NAT。
通过对数据包传输规律、端口使用情况等网络通讯特征的过细分析,结合针对性的测试步骤,我们能够在不依赖 STUN 协议的情况下,正确鉴别出不同范例的 NAT。这种方法固然需要对网络通讯原理有深入理解,但在复杂多变的网络情况中,能为网络优化、故障排查以及 WebRTC 等应用开发提供告急的技术支持 。
五、网络穿透:打破 NAT “壁垒” 的 “神奇邪术”
在 P2P 网络中,由于 NAT 的存在,两个位于不同局域网内的装备之间直接通讯会面临重重困难,他们自身不知道自己的公网ip,只知道自己的私网地点,这就像被一堵无形的 “壁垒” 隔开。而网络穿透技术就是打破这堵 “壁垒” 的 “神奇邪术”,让装备之间能够建立直接连接。
(一)打洞原理:让数据 “穿墙而过”
网络穿透的核心机制是 “打洞”,其目的是在 NAT 装备上开发出一条让数据能够双向流通的通道。为了更好地理解这个过程,我们可以想象两个分别住在不同 “网络城堡”(局域网)里的人,想要直接通讯,但城堡的大门(NAT 装备)只允许内部住民主动外出(局域网装备主动发起对外连接),不允许外部人员随意进入。此时,就需要借助一些巧妙的方法来打开沟通的渠道。
当两个装备(我们称为装备 A 和装备 B)想要建立 P2P 连接时,它们起首会借助一个中心服务器(通常是 STUN 服务器或 TURN 服务器)来互换相互的网络信息。详细步骤如下:
[*]信息获取:装备 A 和装备 B 分别向中心服务器发送哀求,获取自己在 NAT 装备外部的 “公共地点:端口”。这个过程就像是两个足不出户的死宅通过中心人打听自己的 “详细地点”(就像你搬家以后想要网购但不知道自己的送货地点,此时需要通过中心人去打听)。
[*]信息互换:装备 A 和装备 B 通过信令服务器互换各自从 STUN 服务器获取到的 “公共地点:端口” 信息。信令服务器就像是一个 “信息通报员”,负责将装备 A 的地点信息通报给装备 B,同时将装备 B 的地点信息通报给装备 A。
[*]同时发起连接:在获取到对方的 “公共地点:端口” 后,装备 A 和装备 B 会同时向对方的地点发送数据。固然一开始,NAT 装备会拒绝这些来自外部的未经哀求的数据,但当这些数据到达 NAT 装备时,NAT 装备会记载下这些连接实验。
[*]“洞” 的形成:由于双方都举行了主动的连接实验,NAT 装备会逐渐 “信任” 这些连接哀求,认为它们是合法的通讯举动,从而在 NAT 装备上打开一个 “洞”,允许数据通过。这样,装备 A 和装备 B 就建立起了直接的连接,实现了数据的双向传输,就像两个城堡之间打通了一条秘密通道,住民们可以自由往来。
需要注意的是,“打洞” 乐成的关键在于双方几乎同时向对方发起连接哀求。如果时间差过大,NAT 装备可能会在另一方发起连接之前就丢弃数据,导致打洞失败。
(二)不同 NAT 范例下的穿透难度
不同范例的 NAT 对网络穿透的难度有着显著影响,就像不同的城堡有着不同的防御品级,攻破它们的难度也各不相同。
[*]完全圆锥型 NAT:这是最轻易穿透的 NAT 范例,堪称 “防御薄弱的城堡”。由于它对外部连接的限定较少,只要装备在局域网内主动发起过对外连接,NAT 装备就会为其开放一个固定的 “公共地点:端口”,而且允许任何外部装备通过这个地点举行连接。因此,在完全圆锥型 NAT 情况下,只需要简单地通过中心服务器获取对方地点,然后发起连接,就很轻易实现网络穿透。
[*]受限圆锥型 NAT:这种范例的 NAT 相对复杂一些,类似于 “设有访客名单的城堡”。它要求外部装备必须是装备之前访问过的,才允许连接。在举行网络穿透时,除了通过中心服务器获取地点,还需要先让装备与目标装备举行一次 “预沟通”(即主动访问目标装备),将目标装备加入 NAT 装备的 “信任名单”,之后才能乐成穿透。
[*]端口受限圆锥型 NAT:其限定条件更多,如同 “设有严格门禁体系的城堡”,不光要求外部装备是装备之前访问过的,还要求数据的源端口必须与装备之前访问时使用的端口一致。这就需要在穿透过程中,精确控制端口信息,确保每次连接的端口都符合 NAT 装备的要求,大大增长了穿透的难度。
[*]对称型 NAT:这是最难穿透的 NAT 范例,仿佛是 “固若金汤的城堡”。由于它对于每一个不同的外部目标地点和端口,都会为局域网内的装备分配一个新的 “公共地点:端口” 组合。这意味着每次连接都需要重新获取地点,而且由于其高度的随机性和严格的访问限定,很难猜测和建立稳定的连接通道,每每需要借助更复杂的技术手段,如 TURN 服务器的中继转发,才能实现穿透。
(三)网络穿透的关键技术与工具
[*]STUN(Session Traversal Utilities for NAT):作为网络穿透的 “侦察兵”,STUN 协议主要用于资助客户端获取自己在 NAT 装备外部的 “公共地点:端口”,并判定自己所处的 NAT 范例。客户端向 STUN 服务器发送哀求,STUN 服务器通太过析哀求的来源地点,将客户端的 “公共地点:端口” 返回给客户端。有了这些信息,客户端就可以实验与其他装备举行直接连接,举行网络穿透。在简单的网络情况中,尤其是面临完全圆锥型 NAT 等相对轻易穿透的范例时,STUN 协议通常能够有效地实现网络穿透。
[*]TURN(Traversal Using Relays around NAT):当 STUN 无法实现网络穿透时,TURN 协议就成为了 “终极救星”。TURN 服务器可以作为中继服务器,在两个无法直接连接的装备之间转发数据。如果两个装备之间的 NAT 范例过于复杂,无法通过打洞实现直接连接,客户端就会向 TURN 服务器哀求中继服务。装备将数据发送给 TURN 服务器,TURN 服务器再将数据转发给目标装备。固然这种方式会增长一定的延迟和服务器的负担,但确保了即使在复杂的网络情况下,装备之间也能举行通讯。比方,在一些企业网络或复杂的家庭网络情况中,TURN 服务器常常是保障 WebRTC 视频通话稳定举行的关键。
[*]ICE(Interactive Connectivity Establishment):ICE 并非是一种独立的穿透技术,而是一套框架,它整合了 STUN 和 TURN 等技术,旨在为客户端提供一个统一的、自动的网络穿透解决方案。ICE 会自动实验使用 STUN 举行打洞,如果失败则切换到 TURN 中继。通过这种方式,ICE 能够适应各种复杂的网络情况,提高网络穿透的乐成率,为 WebRTC 等应用提供稳定可靠的连接底子。
网络穿透技术通过巧妙的 “打洞” 原理,结合 STUN、TURN、ICE 等关键技术和工具,降服了不同 NAT 范例带来的重重困难,实现了装备之间的直接连接。它是 WebRTC 等 P2P 应用能够正常运行的关键支持,让我们在复杂的网络情况中也能享受流畅的点对点通讯体验。随着网络技术的不停发展,网络穿透技术也将持续演进,为我们带来更加高效、稳定的网络连接服务。
六、STUN 与 TURN:WebRTC 的 “得力助手”
(一)STUN:网络穿透的 “侦察兵”
STUN 协议在 WebRTC 中扮演着 “侦察兵” 的脚色。它的主要任务是资助客户端获取自己在 NAT 装备外部的 “公共地点:端口”,并判定自己所处的 NAT 范例。客户端向 STUN 服务器发送哀求,STUN 服务器通太过析哀求的来源地点,将客户端的 “公共地点:端口” 返回给客户端。有了这个信息,客户端就可以实验与其他装备举行直接连接,举行网络穿透。
比方,在 WebRTC 视频通话中,客户端启动后会先向 STUN 服务器发送哀求,获取自己的外部地点信息,然后信令服务器互换双方数据信息。如果发现可以直接与对方装备建立连接,那么视频数据就可以直接通过 P2P 方式传输,大大提高了传输效率。
(二)TURN:网络穿透的 “终极救星”
当 STUN 无法实现网络穿透时,就需要 TURN(Traversal Using Relays around NAT,NAT 遍历使用中继)协议登场了。TURN 服务器就像一个 “终极救星”,它可以作为中继服务器,在两个无法直接连接的装备之间转发数据。
在现实应用中,如果两个装备之间的 NAT 范例过于复杂,无法通过打洞实现直接连接,客户端就会向 TURN 服务器哀求中继服务。装备将数据发送给 TURN 服务器,TURN 服务器再将数据转发给目标装备。固然这种方式会增长一定的延迟和服务器的负担,但确保了即使在复杂的网络情况下,装备之间也能举行通讯。好比在一些企业网络或复杂的家庭网络情况中,TURN 服务器可以保障 WebRTC 视频通话的稳定举行。
在国内网络情况中,WebRTC 开发视频通话举行网络打洞时失败率相对较高,主要有以下几方面原因:
[*]网络情况复杂
[*]多种 NAT 范例并存:国内网络中存在多种范例的 NAT 装备,包括对称型 NAT、圆锥型 NAT(如受限圆锥型和端口受限圆锥型)等。不同范例的 NAT 对网络穿透的支持程度不同,对称型 NAT 由于其严格的地点和端口映射规则,使得打洞难度较大,而国内网络中对称型 NAT 的使用较为广泛,这增长了打洞失败的概率。
[*]多层 NAT 嵌套:在一些网络场景下,尤其是企业网络或小区宽带网络中,可能存在多层 NAT 嵌套的情况。数据需要经过多个 NAT 装备的转发和处理,每一层 NAT 都可能对数据包举行修改和过滤,这使得网络穿透的难度大幅增长,打洞乐成的概率降低。
[*]运营商策略限定
[*]IP 地点资源告急:随着国内互联网用户数量的不停增长,可用的公网 IP 地点资源日益告急。为了缓解 IP 地点短缺的题目,运营商接纳了多种地点分配策略,如动态分配 IP 地点、使用私有 IP 地点段等。这导致装备获取到的公网 IP 地点不稳定,且可能存在多个装备共享一个公网 IP 地点的情况,使得网络穿透过程中地点匹配和连接建立变得更加困难,从而提高了打洞失败率。
[*]安全策略限定:出于网络安全考虑,运营商可能会实行一些安全策略,如限定某些端口的访问、对数据包举行深度检测和过滤等。这些策略可能会干扰网络穿透过程中数据包的正常传输和连接建立,导致打洞失败。比方,某些运营商可能会限定非尺度端口的使用,而 WebRTC 的网络穿透可能需要使用一些动态分配的端口,这就可能会被运营商的安全策略所拦截。
[*]防火墙设置
[*]企业和家庭防火墙:在企业和家庭网络中,为了保护内部网络的安全,通常会设置防火墙。这些防火墙可能会对进出网络的数据包举行严格的过滤和限定,制止未经授权的连接哀求。在举行网络打洞时,防火墙可能会将来自外部的连接哀求视为埋伏的安全威胁而予以拦截,导致打洞失败。
[*]安全软件防火墙:用户安装的安全软件(如杀毒软件、防火墙软件等)也可能会对网络通讯举行监控和过滤。一些安全软件可能会误判 WebRTC 的网络穿透举动为恶意攻击,从而制止相干的网络连接,增长了打洞失败的可能性。
七、总结
在 WebRTC 视频通话的天下里,P2P 去中心化网络框架是实现高效、稳定通讯的基石。从中心化到去中心化的转变,让我们摆脱了对中心服务器的依赖,提高了网络的可靠性和效率。而 NAT 作为网络天下的 “地点翻译官”,固然给网络通讯带来了一定的挑战,但通过 NAT 鉴别方法、网络穿透技术以及 STUN 和 TURN 等协议的辅助,我们能够打破重重障碍,实现装备之间的直接连接。
这些技术相互配合,就像一支默契的团队,共同为 WebRTC 视频通话保驾护航。理解和掌握这些前置底子知识,是深入学习 WebRTC 开发的关键。在将来的技术探索中,我们还将继承发掘这些技术的潜力,让 WebRTC 在视频通话领域发挥出更大的作用,为用户带来更加流畅、稳定的通讯体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]