美文网首页
去中心化 P2P 网络穿透

去中心化 P2P 网络穿透

作者: besmallw | 来源:发表于2020-03-26 23:37 被阅读0次

由于我对一些奇奇怪怪的技术比较感兴趣,就特别想去了解它的原理。
最近看到两个关键词——去中心化,网络穿透。
了解了相关技术我终于明白,为什么当年王欣说:“技术无罪”。
用到这类技术的有:kuaibo (王欣),TeamViewer

简介

简单来说,去中心化之后就是点对点通信。没有服务器作为中介,两个节点直接通信而不通过服务器。

中心化网络

为了更好地理解什么是去中心化网络,先要了解传统的中心化网络。中心化的节点必须是服务器,客户端只能和服务器通信,而不能单独地与另一个客户端直接通信。若客户端想发送信息给另一个客户端,必须通过服务器。在这种模型中,服务器扮演提供服务的角色,而客户端则是被服务的。这样的通信网络,就是传说中的中心化网络。


中心化网络.png

去中心化网络

在去中心化的网络中,实际上是没有客户端和服务器的说法,客户端之间相互地提供服务。客户端之间相互连接,每个客户端同时对外提供相应的服务,同时也使用其他客户端提供的服务。在这种情况下,就没有客户端的说法了,我们可以称它为节点。这样的通信网络,就是传说中的去中心化网络。这种通信网络去除了中心服务器的绝对控制,也提高的网络传输效率,同时中心服务器的压力也变小了。


去中心化网络.png

网络地址映射 NAT

NAT(Network Address Translation,网络地址映射)是将公网地址映射为子网地址。能够进行映射的网络装置被称为 NAT 路由器。
在子网与外网通信的过程中,子网和公网连接的节点称为路由器。假设子网在192.168.1.0网段。路由器的公网IP为112.93.114.32,服务器的公网IP地址为120.93.24.180。当服务器给子网机器发送数据时,实际上是发送到路由器上,路由器能够通过路由器上记录的映射表,将数据映射到子网的机器中;相对的,当子网机器给服务器发送数据时,先将数据发送到路由器,再由路由器发送给服务器。


子网与公网通信.png

NAT 原理

2019年11月25日,世界互联网组织宣布,最后一个IPv4地址已经分配完毕。现在,我们已经用完了IPv4地址。
在更早之前,由于 IPv4 地址紧缺,提出了NAT理论,通过公网IP地址与端口的组合,映射到子网机器的IP和端口。这样就可以用少量的公网IP来表示更多的子网IP,可以减缓IPv4地址耗尽。


NAT.png

NAT 实现

NAT 实现方案有三种:静态转换,动态转换,端口地址映射。
1. 静态转换
一个子网IP对应一个公网IP,且配置后不能更改,这并不能节省公网IP。
2. 动态转换
公网IP数量大于子网IP数量,公网IP组成一个IP地址池。当子网IP需要转换时,NAT路由器就从地址池中取出一个空闲的公网IP,分配给子网机器,使得子网机器可以和公网进行通信。当数据传输完后,就回收此公网IP到地址池中。
3.端口地址映射
通过改变子网机器发送到公网的源端口号(对外的公网IP为路由器的公网IP,修改后的端口号为路由器上的端口号),最大限度地节省IPv4地址。

端口地址映射.png

NAT 种类

从NAT功能上做区分,可以将NAT分为四种:对称NAT完全锥形NATIP限制锥形NAT端口限制锥形NAT

NAT种类.png

如何区分?

1.对称NAT vs 锥形NAT

在区分之前,必须先明白一点:NAT 会为子网机器的每一个网络进程都分配一个地址和端口,从而能够将子网网络进程与公网地址做映射。

准备一个子网客户端,两台公网服务器。

  1. 用客户端上的同一个进程,同一个socket,分别给两台服务器发数据
  2. 服务器收到数据后,会得到客户端的IP地址(公网的IP)
  3. 将两台服务器获取到的客户端的IP地址做对比。如果相同,则为锥形NAT,如果不同,则为对称NAT。

2.限制锥形NAT vs 完全锥形NAT

准备一个子网客户端,两台公网服务器。

  1. 客户端给服务器1发数据,服务器1收到数据后,会得到客户端的IP地址(公网的IP)
  2. 服务器1将客户端的IP地址告诉服务器2,由服务器2发数据到客户端的IP地址(服务器1告知的)
  3. 如果子网机器能收到数据,则为完全锥形NAT,如果收不到数据,则为限制锥形NAT。

3.IP限制锥形NAT vs 端口限制锥形NAT

准备一个子网客户端,一台公网服务器。

  1. 客户端给服务器的8888端口发数据
  2. 服务器获取到客户端IP地址后,用另一个端口给客户端发数据(8889)
  3. 如果客户端收到数据,则为IP限制锥形NAT,如果客户端收不到数据,则为端口限制锥形NAT。(这里的结论还不严谨)
  4. 最后一步,子网机器用同一个socket,再给服务器8888端口发数据,服务器收到数据,则上面结论成立(严谨)。

网络穿透

网络穿透,就是能够让公网的机器(多数指的是网关)找到子网的机器。
穿透下图中的两个网关,使得在两个在不同子网下的机器可以相互通信。网络穿透的本质就是一个子网的机器给另一个网关的公网IP地址和端口发送数据,利用其记录的映射表,使得另一个子网的机器可以接收到数据。
举个栗子,子网机器192.168.1.3:2341给公网机器180.93.45.46:8888发送数据的过程中,在网关(NAT1)会产生一条映射记录。后续其他公网或者子网的机器发送数据到112.93.13.56:43891,就可以让子网机器192.168.1.3:2341收到数据。


网络穿透.png

穿透完全锥形NAT

两端的NAT,只要有一方是完全锥形NAT,就可以穿透。


穿透完全锥形NAT.png
  1. 子网机器192.168.1.3:2341给服务器180.93.45.46:8888发送数据。服务器可以获取到公网的IP地址和端口号112.93.13.56:43891
  2. 服务器告知子网机器192.168.2.6:6583的子网机器1的网关信息112.93.13.56:43891
  3. 子网机器192.168.2.6:6583给112.93.13.56:43891发送数据,此时子网机器192.168.1.3:2341可以收到数据,且能够获取到子网机器192.168.2.6:6583的公网IP和端口号(180.20.198.42:9681)
  4. 子网机器192.168.1.3:2341回发数据给180.20.198.42:9681,子网机器192.168.2.6:6583可以收到数据。穿透成功。

穿透限制锥形NAT

穿透限制锥形NAT.png
  1. 子网机器192.168.1.3:2341给服务器180.93.45.46:8888发送数据。服务器可以获取到公网的IP地址和端口号112.93.13.56:43891
  2. 服务器告知子网机器192.168.2.6:6583的子网机器192.168.1.3:2341的网关信息112.93.13.56:43891
  3. 子网机器192.168.2.6:6583给112.93.13.56:43891发送数据,此时子网机器192.168.1.3:2341是收不到数据的
  4. 在步骤3发送数据后,子网机器192.168.2.6:6583马上发送数据给服务器180.93.45.46:8888,要求子网机器192.168.1.3:2341发数据到180.20.198.42:9681
  5. 服务器通知子网机器192.168.1.3:2341,数据里包含公网IP地址180.20.198.42.9681
  6. 子网机器192.168.1.3:2341发送数据给180.20.198.42.9681,由于此数据被认为是步骤3的回复数据,所以此数据会被允许通过。网关180.20.198.42.9681被穿透。
  7. 子网机器192.168.2.6:6583发送数据给112.93.13.56:43891,子网机器192.168.1.3:2341收到数据。网关112.93.13.56:43891被穿透。

穿透对称NAT

下面以限制锥形NAT(NAT1),穿透对称NAT为例


穿透对称NAT.png
  1. 子网机器192.168.1.3:2341发送数据给服务器180.93.45.46:8888,请求与子网机器192.168.2.6:6583进行透传
  2. 服务器发数据给子网机器192.168.2.6:6583,数据内容包括另一子网网关的公网IP地址和端口号112.93.13.56:43891
  3. 子网机器192.168.2.6:6583收到数据,发送数据给112.93.13.56:43891。此时数据时不会被允许进入子网机器192.168.1.3:2341的网段。但此时NAT2会产生新的映射记录(iAddr:iPort)(这个端口是不会有人知道的,只能靠猜)
  4. 子网机器192.168.2.6:6583发送数据给服务器的另一个端口8889,此时NAT2会产生一条新的映射记录(mAddr:mPort)。同时服务器也能获取到mAddr:mPort
  5. 服务器发送信息通知子网机器192.168.1.3:2341,告知数据mAddr:mPort。此时根据iAddr:iPort和mAddr:mPort产生的时间间隔很短,可以猜测iPort的值。(为了提高猜测的准确性,可以在产生iAddr:iPort之前,做一次步骤4的操作(nAddr:nPort),这样iAddr:iPort就会被夹在nAddr:nPort和mAddr:mPort之间,提高猜测的准确性。)(TeamViewer就是这么做的)
  6. 猜测到准确iPort的值之后,就可以进行穿透限制锥形NAT的步骤4了

(图片均来自网络)

感谢King老师


2020.3.26 23:37 广州

相关文章

  • 去中心化 P2P 网络穿透

    由于我对一些奇奇怪怪的技术比较感兴趣,就特别想去了解它的原理。最近看到两个关键词——去中心化,网络穿透。了解了相关...

  • 一文了解“区块链”是个啥,紧跟时代步伐

    一、首先要了解中心化、去中心化、P2P网络及共识机制 1、中心化:我们现在的网络环境几乎都是中心化的,用户通过电脑...

  • P2P打洞--内网穿透

    去中心化技术与P2P框架的实现 关于去中心化的网络架构, 也是服务器架构范畴...

  • Hyperledger Fabric 1

    网络结构演变 中心化 分布式(服务拆分,微服务,横向扩展 ... 服务提供方仍然依赖中心机构) 去中心化 p2p ...

  • 134|P2P:不是网络借贷!而是去中心化是不二的法门

    134|P2P:不是网络借贷!而是去中心化是不二的法门 P2P: Peer to Peer,意思是,我们平级对平级...

  • 什么是DApps?

    去中心化的应用程序 - DApps 去中心化应用程序(DApps)是在P2P网络上而非在一台独立的计算机中运行的应...

  • 共识机制(未完)

    背景 加密货币都是去中心化的,去中心化的基础就是P2P节点众多。如何吸引用户成为节点?通过激励机制。但是,去中心化...

  • 比特币网络

    P2P网络 无中心化的身份对等网络是比特币网络的基础。具有如下特点:1、网络拓扑结构:没有中心节点,节点之间全互联...

  • 节点在区块链中有什么作用?

    什么是节点? 节点是p2p(去中心化)网络。通过使用此类网络,不由一台服务器或单个实体来控制网络及其参与者。相反,...

  • 《An Accelerated Method for Messa

    Abstract 区块链基于P2P网络,支持当前加密货币的去中心化共识。 由于比特币和山寨币都利用底层的区块链,因...

网友评论

      本文标题:去中心化 P2P 网络穿透

      本文链接:https://www.haomeiwen.com/subject/uslfuhtx.html