为了使本章更加随意马虎描述,现对五个观点做一个不严谨的非学术的定义。
1> 客户端:用户直接操作的终端软件。2> 节点:对通信网络中机器的简称,包括客户端机器,做事器机器,路由器等等3> P2P:描述终端与终端直接通信的办法。4> 网络穿透:实现终端与终端直接通信的一种技能方案。5> 去中央化网络:包含终端,做事器,以及之间通信办法,一起组成的通信网络。5.1 中央化网络与去中央化为了更好的理解去中央化网络,先来理解传统的中央化网络拓扑图(图 5-1)。不论常用的 B/S 还是 C/S,都是一种星型构造,而中央化节点正是做事器,每一个客户端只能与做事器通信。如果客户端与客户端之间须要通信,必须要得通过做事器进行路由处理,才能把数据路由到另一个客户端。在通信过程中,做事器与客户端是充当着不同角色的,不同功能的。做事器是对所有客户端供应做事的,这样的通信网络,被称为中央化网络。
在去中央化网络中,每个客户端都是平等的,没有客户端与做事器之分,客户端之间相互供应做事,不存在“分外”身份。客户端之间交互连接,每个客户端同时也对外供应做事,同时也利用其他客户真个供应的做事。在此种环境下,再被称为客户端不太妥了。以是此时的客户端被称为节点。这样没有中央做事器的网络,被称为去中央化网络。不仅仅解除了中央化做事器绝对掌握的风险,也提高了网络传输效率,也去除了中央化做事器数据路由的压力。

5.2 网络地址映射 NAT
在私网与外网通信的过程中,私网与公网连接的边沿节点被称为路由器。比如私网内部网络为 192.168.1.0 的网络。路由器的公网 IP 为 112.93.114.32,做事器的公网 IP 地址为120.93.24.180。做事器发送数据与路由器公网 IP 时,能够将数据映射到私网中的机器;私网内的机器发送数据给做事器,路由器也能够映射为公网 IP 地址的过程,成为网络地址映射。
NAT (Network Address Translation,网络地址映射)是将公网地址映射为私网地址。而能够进行映射的网络装置被称为 NAT 路由器。
5.2.1 NAT 的事理
由于环球网络通信机器增加,IPv4 地址紧缺,以是提出了 NAT 的理论,通过公网 IP 地址与端口映射到私网机器的 IP 地址与端口。这样就能通过少量的公有 IP 地址能够代表较多的私有 IP 地址,有助于减缓可用 IPv4 地址的耗尽。
私网内机器上操作系统中的一个网络进程,与公网做事器 120.93.24.180 机器通信,NAT 路由器为每一个网络进程分配一个网络 IP 地址与端口,用于与公网做事器通信。与此同时,公网做事器与私网内的网络进程通信,也是通过 NAT 路由器分配的网络 IP 地址与端口进入私网到达网络进程。
5.2.2 NAT 的实现
NAT 的实现方案有三种,静态转换,动态转换,端口地址映射。
静态转换(Static NAT):私网 IP 地址转换为公网 IP 地址,公网 IP 与私网 IP 地址通过一对一的配置,配置后是不能变动的。通过静态转换,实现对私网中的网络进程进行访问。私网有多少私有地址须要与公网通信,须要配置与之对应的外网 IP 地址,并不节省公网 IP地址,以是一样平常不用。
动态转换(Dynamic NAT):为私网分配多个公网 IP 地址,组成一个公网 IP 地址池。私网内部地址须要转换时,NAT 路由器从公网 IP 地址池中取出一个 IP 地址,分配给私网机器用于网络通信。当私网机器数据传输结束后,NAT 路由器收回公网 IP 地址,返回 IP 地址池中。分配后的 IP 地址是不能再用于其他数据传输。在公网 IP 地址数量略少于私网机器数量的时候,可以采取动态转换。
端口地址映射(Port Address Translation, PAT):改变私网内机器发送到公网数据包的源端口并进行端口转换 (如图 5-6。私网内部的所有主机均可共享一个公网 IP 地址,实现对公网的访问,从而能够最大限度的节省 IP 地址资源。同时,有隐蔽私网中的所有主机,有效避免其他公网机器的攻击。目前 NAT 路由器运用最广的便是端口地址映射。
5.2.3 NAT 的运用
NAT 在互联网中被广泛运用,小到家庭网关,大到企业广域网出口乃至到运营商业务网络出口,实在 NAT 在用户身边随处可见。一个用户连接到公网进行上网,本地私有网络机器经由多层 NAT,而用户对此一无所知。
私网内有两台机器(如图 5-8)192.168.1.23 和 192.168.1.24 与公网通信,机器上的网络进程分别是 QQ/微信与头条/抖音。在数据传输的过程中,NAT 路由器会为每一个网络进程分配相应端口与公网通信。
5.3 NAT 种类从 NAT 的技能实现角度,可以分为三种,静态转换(Static NAT),动态转换(DynamicNAT),端口地址映射(Port Address Translation,PAT)。从 NAT 的功能,可以分为四种:完备锥型 NAT(Full Cone NAT),对称 NAT(SymmetricNAT),IP 限定锥型 NAT(IP Restricted Cone NAT),端口限定锥形 NAT(Port RestrictedCone NAT)。
5.3.1 完备锥型 NAT
完备锥型 NAT(Full Cone NAT),私网机器的网络进程(iAddr:iPort)被 NAT 路由器映射为公网地址(pAddr:pPort),后续该网络进程的所有数据报文都被转换为公网地址(pAddr:pPort),公网任何一台机器发送报文到(pAddr:pPort),会被转发到私网机器的网
络进程(iAddr:iPort)。如图 5-10 所示。
5.3.2 对称 NAT
对称 NAT(Symmetric NAT),NAT 路由器会为私网机器的每一个网络进程都会分配一个地址与端口,从而把私网网络进程(iAddr1:iPort1)与公网地址(pAddr1:pPort1)。后续NAT 路由器会把私网机器地址端口(iAddr1:iPort1)与公网地址端口(pAddr1:pPort1)完备相同的报文看作一个连接。如图 5-11 所示。
私网机器的网络进程每与一台公网机器通信,NAT 路由器都会重新分配一个地址端口。这样使得每一个通信链路都是经由 NAT 路由器不同的端口。公网机器往私网发送报文也是经由不一样的端口。
5.3.3 IP 限定锥形 NAT
限定锥型 NAT(Restricted Cone NAT),别号 IP 限定锥型 NAT。为了更好理解四种 NAT,故本篇中一贯称为 IP 限定锥型 NAT。限定锥型 NAT,只许可映射关系的对应公网 IP 地址机器,传输数据到私网机器。其他的公网 IP 地址机器发送数据给 NAT 路由器的公网 IP 地址与端口时,则会被 NAT 路由器丢弃。
私网机器网络进程(192.168.1.3:2341)发送报文到公网地址(180.93.45.46:8080)的做事器,在 NAT 路由器上产生了映射公网地址(112.93.114.33:34523)。有以下两种环境分开谈论
环境一:私网机器网络进程没有发送报文给其他公网机器,NAT 路由器只许可公网 IP地址为 180.93.45.46 的机器数据进入,其他地址机器的数据报文则会被 NAT 路由器阻挡,不许可进入内网。
环境二:私网机器网络进程同时发送报文给另一台公网机器,此时 NAT 路由器天生了NAT 映射记录,则另一台公网机器发送报文与公网地址(112.93.114.33:34523),NAT 路由器是许可报文进入私网。先由私网机器发送报文到公网机器,限定锥形 NAT 路由器方能许可公网机器报文进入私网。
5.3.4 端口限定锥形 NAT
端口限定锥形 NAT(Port Restricted Cone NAT),在 IP 限定锥型 NAT 的根本上,又添加了一层端口限定。限定了发送报文进入私网的 IP 地址与端口。如图 5-12 所示,私网机器(192.168.1.3:2341)发送报文数据到公网机器(180.93.45.46:8080)的过程中,在 NAT 路由器上产生了(112.93.114.33:34523)记录。
有以下两种环境谈论。
环境一:私网机器网络进程没有发送报文给公网机器(180.93.45.46)其他端口,则 NAT路由器只许可公网地址(180.93.45.46:8080)的数据报文进入私网。
环境二:私网机器网络进程发送数据给公网机器(180.93.45.46)的其他端口,NAT 路由器天生一条 NAT 记录,则许可该端口的数据报文到达网络进程。
5.4 NAT 鉴别方案
已经理解了四种 NAT 的功能,本小节先容四种 NAT 之间的逻辑关系,并且用打算机逻辑流程实现判断 NAT 的方案。
完备锥型 NAT(Full Cone NAT),对称 NAT(Symmetric NAT),IP 限定锥型 NAT(IPRestricted Cone NAT),端口限定锥形 NAT(Port Restricted Cone NAT)。这四种 NAT 的逻辑关系,可以将 NAT 划分为一颗二叉树,如图 5-13 所示。NAT 分为两种对称 NAT 与锥型NAT,锥型 NAT 分为两种限定锥型 NAT 与完备锥型 NAT。限定锥型 NAT 分为两种端口限定锥型 NAT 与 IP 限定锥型 NAT。叶子节点恰好是划分出来的四种 NAT,同级节点互补,合为整集。
判别网关是属于哪种 NAT 的方案,就能参照图 5-13 所示,按照二叉树的层级逐层判断,从而确定网关的 NAT 类型。三次判断分别为对称 NAT 与锥型 NAT,限定锥型 NAT 与完备锥型NAT,端口限定锥型 NAT 与 IP 限定锥型 NAT。
5.4.1 对称 NAT 与锥型 NAT
对称 NAT 与锥型 NAT 的差异,在于私网机器与不同的公网机器通信在 NAT 路由器上产生映射表记录的条数。对称 NAT 与 N 台公网机器通信则天生 N 条记录;而锥形 NAT 与 N 台公网机器通信则天生 1 条记录。
判断流程如下,如图 5-14 所示:
步骤 1:私网机器(192.168.1.3:2341)发送报文到做事器 1(180.93.45.46:8888)的 NAT路由器产生了对外公网 IP(112.93.114.33:23454),此时做事器 1 获取客户端 IP 地址即为对外公网 IP(112.93.114.33:23454)步骤 2:私网机器(192.168.1.3:2341)发送报文到做事器 2(118.56.189.34:8888)。做事器 2 获取客户端 IP 地址(iAddr:iPort)步骤 3:做事器 1 获取客户真个 IP 地址,发送给做事器 2。做事器 2 比拟做事器 1 发过来的地址与做事器 2 获取的客户端 IP 地址。若两个客户端 IP 地址同等,则为锥型 NAT;若不一致则为对称 NAT。5.4.2 完备锥形 NAT 与限定锥形 NAT
完备锥型 NAT 与限定锥形 NAT 的差异,在于其他公网机器发送报文到 NAT 路由器对外公网 IP 地址能否到达私网机器,NAT 路由器的 NAT 类型是完备锥型 NAT 的话,私网机器能够收到报文数据,限定锥形 NAT 则不能收到报文数据。
判断流程如下,如图 5-15 所示:
步骤 1:私网机器网络进程(192.168.1.3:2341)发送报文给做事器 1(180.93.45.46:8888)。做事器 1 获取到客户端 IP 地址(即 NAT 路由器对外公网 IP 地址)。步骤 2:做事器 1 将获取的客户端 IP 地址发送给做事器 2。步骤 3:做事器 2 收到客户端 IP 地址往后,发送报文给客户端 IP 地址。探测客户端 IP 地址能否收到报文数据。若是完备锥型 NAT,则私网机器能够收到报文;若是限定锥形 NAT,则私网不能收到报文数据。步骤 4:私网机器网络进程收到报文数据,连续发送报文给做事器 1。做事器 1 收到了报文数据。判断结束。做事器 1 收到报文数据,则为完备锥型 NAT;否则为限定锥型 NAT。5.4.3 IP 限定锥形 NAT 与端口限定锥形 NAT
IP 限定锥型 NAT 与端口限定锥型 NAT 的差异,在于公网机器的其他端口发送报文数据给私网机器网络进程能否收到。网络进程能收到同一台公网机器的其他端口发送的报文数据则为 IP 限定锥型 NAT,否则为端口限定锥型 NAT。
判断流程如下,如图 5-15 所示:
步骤 1: 私网机器网络进程(192.168.1.3:2341)发送报文给做事器(180.93.45.46:8888)。做事器获取到客户端 IP 地址。步骤 2:做事器从另一个端口(180.93.45.46:8888),发送报文数据给客户端 IP 地址。若私网机器能够收到报文则为 IP 限定锥型 NAT,若不能则为端口限定锥型 NAT。步骤 3:私网机器网络进程回发报文给做事器 8888 的端口,收到报文数据,判断结束。若收到数据则为 IP 限定锥形 NAT,否则为端口限定锥型 NAT。5.4.4 STUN 协议
STUN 最早是在 RFC3489 中定义,(Simple Traversal of UDP Through NATs),即用 UDP大略的穿透 NAT,作为一个完全的 NAT 穿透办理方案。在 RFC5389 中,把 STUN 协议定义为穿透 NAT 供应工具,而不是一个完全的办理方案。STUN(Session Traversal Utilities forNAT,NAT 会话穿越运用程序)是一种网络轻量级协议,它许可私网运用程序创造它们与公共互联网之间存在的 NAT 和防火墙及其他类型。它也可以让运用程序确定 NAT 分配给它们的公网 IP 地址与端口,STUN 是一种 Client/Server 的协议,也是一种 Request/Response的协议,默认端口 3478。本小节描述的 NAT 类型鉴别,是将 STUN 实现事理与细节,剖析与展示出来。
5.5 网络穿透网络穿透,即 NAT 穿透,能够让公网机器找到私网机器,并提高下载速率。如图 5-17所示,穿透图中两个网关路由器,从而报文数据能够直接到达私网机器。穿透的实质是给一个 NAT 路由器的公网 IP 地址与端口发送报文数据,对应私网机器能够收到报文数据。比如图中 NAT1,私网机器(192.168.1.3:2341)发送报文到公网做事器(180.93.45.46:8888)的过程中,在 NAT 路由器上产生了一条公网映射记录(112.93.14.56:43891)。后续其他外网机器(192.168.2.6:6583)发送报文数据给公网映射记录(112.93.14.56:43891),使得私网机器(192.168.1.3:2341)能够收到该报文数据。
5.5.1 穿透完备锥形 NAT
穿透过程中,两端私网机器都是在 NAT 路由器之下的。两端 NAT 只要有一方为完备锥型NAT 的时候,是可以穿透的。穿透逻辑如图 5-18 所示。比如 NAT1 为完备锥形 NAT,NAT2 为任意 NAT。
步骤 1:私网机器 1(192.168.1.3:2341)发送报文给做事器(180.93.45.46:8888)。做事器获取到私网机器 1 的公网 IP 地址与端口(112.93.14.56:43891)。步骤 2:做事器收到信息后,关照私网机器 2(192.168.2.6:6583),关照信息内含私网机器1 的公网 IP 地址与端口(112.93.14.56:43891)。步骤 3:私网机器 2(192.168.2.6:6583)发送数据给私网机器 1 的公网 IP 地址与端口(112.93.14.56:43891),此时私网机器 1 就能收到私网机器 2 发送的报文数据,并且能过获取私网机器 2 的公网 IP 地址与端口(iAddr:iPort)。步骤 4:私网机器 1 回发报文信息给私网机器 2 的公网 IP 地址与端口(iAddr:iPort),此时私网机器 2 能够收到报文数据。穿透流程结束。
5.5.2 穿透限定锥形 NAT
限定锥型 NAT 的特点是限定了其他公网机器报文数据传输。如果在采取完备锥型 NAT 的穿透步骤,就会在步骤 3 不能到达私网机器。针对付两端 NAT 都是限定锥形 NAT 的情形,穿透流程如图 5-19 所示。
步骤 1:私网机器 1(192.168.1.3:2341)发送报文给做事器(180.93.45.46:8888),做事器获取私网机器的公网 IP 地址(112.93.14.56:43891)。步骤 2:做事器发送关照报文给私网机器 2(192.168.2.6:6583),关照报文中内含私网机器1 的公网 IP 地址(112.93.14.56:43891)。步骤 3:私网机器 2 发送报文数据到私网机器 1 的公网 IP 地址(112.93.14.56:43891)。由于 NAT1 是限定锥型 NAT,此时私网机器 1 是不能收到报文数据的。步骤 4:私网机器 2 进行完步骤 3 往后,立即发送报文给做事器(180.93.45.46:8888),哀求私网机器 1 发送数据给私网机器 2 的公网 IP 地址。步骤 5:做事器关照私网机器 1,关照信息内含公网 IP 地址(180.20.198.42.9681)。步骤 6:私网机器 1 发送报文数据给私网机器 2 的公网 IP 地址。由于步骤 3 发送报文给私网机器 2 的公网 IP 地址,此份报文会被 NAT2 的路由器认为是步骤 3 的回答。以是此步骤会被许可通过。此时已经穿透了 NAT2。步骤 7:私网机器 2 回发报文给私网机器 1,此时穿透了 NAT1。穿透流程结束。
5.5.3 穿透对称 NAT
对称 NAT 的特点是每一个不同公网机器的通信,都会被分配不同的映射端口通信。若参照限定锥型 NAT 的穿透流程,则在不能准确地知道步骤 3 所产生的公网 IP 地址与端口。穿透流程如图 5-20 所示。NAT1 为限定锥型 NAT,NAT2 为对称 NAT。
步骤 1:私网机器 1(192.168.1.3:2341)发送报文数据给做事器(180.93.45.46:8888),要求与私网机器 2 进行透传。步骤 2:做事器(180.93.45.46:8888)发送关照信息给私网机器 2。关照信息内含私网机器1 的公网 IP 地址(112.93.14.56:43891)。步骤 3:私网机器 2 收到关照信息,发送报文数据给私网机器 1 的公网 IP 地址。此时由于NAT1 为限定锥形 NAT,数据是不被许可进入私网的。同时由于 NAT2 为对称 NAT,以是会在这次报文发送过程中,会被产生新的映射记录,分配公网地址与端口(iAddr:iPort)。步骤 4:私网机器 2 进行完步骤 3 往后,发送报文信息给做事器的另一个端口 8889,此步骤也会在路由器上产生一条新的映射记录,分配公网地址与端口(mAddr:mPort)。做事器同时也获取到新的公网地址与端口(mAddr:mPort)。步骤 5:做事器(180.93.45.46:8889)发送关照信息给私网机器 1。关照信息内含步骤 4 产生的新记录公网地址与端口(mAddr:mPort)。此时根据 iPort 与 mPort 产生的相隔韶光很短,可以来判断 iPort 的值,即须要穿透的端口。为了判断的根据准确,可以在产生 mPort之前也加上一次新记录,即再步骤 3 以前让 NAT 路由器产生一条记录,这样准确度会大大穿透的概率。步骤 6:根据 mPort 的值,来预测 iPort 的值,发送报文信息给私网机器 2 的公网地址与端口(mAddr:mPort)。准确的 mPort 值,则能够穿透 NAT2。步骤 7:收到穿透报文信息后,回答报文信息。流程完毕。
希望本文技能点,对你有帮助。
关注+回答:1 领取干系教程
小编专注于C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等多个知识点高等技能分享