之前有伙伴介绍了计算机中点对点通信(P2P)的相关知识,那么,NAT类型是如何检测的?针对不同的NAT类型,我们都有什么穿越方法?这些穿越方法又如何实现?接下来小编将详细为您剖析。内容目录
基本概念
1、基本的NAT类型:只转换IP,不转换端口
2、NAPT:转换整个Endpoint (IP:PORT)
网络类型检测
步骤1:检测主机是否位于NAT后
步骤2:检测NAT是否是完全锥型
步骤3:检测NAT是否是对称型的
步骤4:检测NAT是限制型还是端口限制型
穿越方法介绍
简介
直接通信
打洞穿越
反向穿越
端口预测
根据NAT类选择穿越方法
穿越方法一览表
客户端的实现流程图
基本概念1、基本的NAT类型:只转换IP,不转换端口
一个基本NAT往往需要具有多个公网IP来满足多个内网节点中具有相同端口的应用程序的同时访问。由于这种类型的NAT设备限制大,现在已不常见。
2、NAPT:转换整个Endpoint (IP:PORT)
现在常用的NAT类型是NAPT,NAPT是一种向外的NAT类型("向外"指内网访问别人不受限,别人访问内网受限),根据限制的不同分为以下四种类型:
(1)完全锥型(FULL CONE NAT)
(2)限制锥型(RESTRICT CONE NAT)
(3)端口限制型(PORT RESTRICT CONE NAT)
(4)对称型(SYMMETRIC NAT)
网络类型检测如图,检测类型分为以下几步:
NAT类型检测
步骤1:检测主机是否位于NAT后
是否位于NAT后,是从受限的角度讲的,如果客户端部署在阿里云,配置了一个外网地址(阿里云的内网和外网IP地址不同,但是有固定的映射的关系),当你收到的请求100%和你自己配置的外网地址一致时,就可以称之为在公网;
步骤2:检测NAT是否是完全锥型
图中3、4两步,证明只要Endpoint(IP+PORT)对应就可以,换个IP和PORT发送请求,该节点依然能收到消息,说明外来访问并没有受限,这样的NAT类型就是完全锥型;
步骤3:检测NAT是否是对称型的
图中1、2、5、6步,说明每次节点的内网发起请求的Endpoint(IP+PORT)不变的情况下,公网的出口Endpoint(IP+PORT)都会变,这样的NAT类型就是对称型;
步骤4:检测NAT是限制型还是端口限制型
图中7、8两步,内网先发起请求到一个地址Endpoint(IP+PORT),如果对方换个PORT把请求发送回来,NAT不给转发,则NAT就是端口限制型,否则仅为限制锥型。
穿越方法介绍简介
穿越方法有四种:直接通信(direct)、打洞穿越(hole punching)、反向穿越(reverse)、端口预测(port prediction)。为了方便说明,我们假设有两个客户端节点(Peer)A和B.
首先,A和B都需要把自己从STUN服务器中获取的消息,注册到同一个服务器AssistServer(AssistServer是自建的一个公网服务,用于协调边缘节点互相发送消息),如图:
我们假定Peer A为发起端,Peer B为接收端,四种穿越方式的请求序列图分别如下所示。
直接通信
直接通信
打洞穿越
打洞穿越
从图中5、6、7三个步骤,可以看出,这是为应对Peer B处于端口限制型的NAT中,而做的设计。
反向穿越
如果Peer B所处的网络类型为对称型,Peer A的消息无法直达Peer B。那么我们就需要让Peer B首先发送消息,这其实是一种将Peer B变成发起端的方法。
反向穿越
端口预测
端口预测,就是统计客户端多次连接的地址,总结出客户端外网端口变化的规律,然后把预测出的下一个端口和外网地址发给对方,然后促成双方通信。这个方法穿透成功率极低,因此,如果碰上需要端口预测解决问题的时候,我们通常直接通过服务器转发的方式解决。
根据NAT类选择穿越方法穿越方法一览表
穿越方法一览表
客户端的实现流程图
平台转发,可以选择TRUN的方式,也可以自建服务转发,但这样会耗费服务端的流量,有可能得不偿失。本文中讲的方法,可以保证很高的穿透率,但本质还是有中心的。那么常见的P2P的穿越方式到底是中心的还是去中心的?还是有新的技术来实现P2P的去中心化?去年比较火的IPFS的穿透方式又是什么呢?这些问题,小编将在后续的文章中为您揭晓。