P2P中的NAT类型检测方法和穿越方式

之前有伙伴介绍了计算机中点对点通信(P2P)的相关知识,那么,NAT类型是如何检测的?针对不同的NAT类型,我们都有什么穿越方法?这些穿越方法又如何实现?接下来小编将详细为您剖析。

目录

基本概念

1、基本的NAT类型:只转换IP,不转换端口

2、NAPT:转换整个Endpoint (IP:PORT)

NAT类型检测

步骤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类型检测

如图,检测类型分为以下几步:

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的穿透方式又是什么呢?这些问题,小编将在后续的文章中为您揭晓。

往期回顾: 内网穿透技术一览
关注“麻辣软硬件”,获取更多的精品软硬件知识

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值