IPFS: NAT traversal(NAT穿越)

IPFS是一个p2p网络,那么一定绕不开的一个问题就是NAT穿越。之前的文章里面也提到过IPFS网络连通性使用的ICE NAT穿越框架,本文简单介绍一下什么是NAT。
为什么有NAT技术?
NAT主要用来缓解全球的IPv4地址不够用的情况,IPv4地址最多能提供2^32个(4,294,967,296),现在IPv4已经变得非常紧张了,IPv6发展了这么多年,一直没能取代IPv4的地位,IPv6可以容纳的地址数量是是2^128,可以给地球上的每一粒沙子分配一个ip地址(万物互联的物联网必须要使用ipv6)。
什么是 NAT(Network Address Translation,网络地址转换)?
NAT允许内网计算机共享一个公网ip地址(这样就可以达到节约ip地址了作用了),NAT对于p2p网络、VoIP电话、视频游戏等需要客户端作为服务端进行通信的应用非常重要,如果没有NAT这些应用,甚至都不能正常工作。
首先放一张图(图是小编随手画的,好像挺难看
),这是我们现在大多数使用路由器的网络结构。路由器右边是内网,计算机A、B、C使用的是内网ip,路由器左侧是公网,路由器使用的是公网IP,通常情况下,公网计算机M是无法访问内网计算机A、B、C的。

NAT大致分为两大类:圆锥形和对称型
圆锥形又分为三种
Full Cone:计算机A链接公网计算机M后,NAT打开一个端口,以后公网上任何发送到这个端口的数据(不限于M)都可以访问到A,这个时候任何从公网上发过来的数据都可以通过该端口到达内网计算机A,只限制的端口,没有限制ip地址。
Address Restricted Cone:内网计算机A通过路由器链接了外网计算机M,NAT打开一个端口,这个时候外网计算机M(只限于M)可以通过任何端口和内网计算A进行通信。限制了ip地址,没有限制端口。
Port Restricted Cone:内网计算机A通过路由器链接了外网计算机M,NAT打开一个端口,M可以通过这个端口跟A进行通信,这种即限制了ip地址又限制了端口。
Symmetric NAT(对称形)
对称型NAT和圆锥形不同的地方在于:
圆锥形NAT对于同一台内网计算机,无论与那一台的外网服务器通信,NAT所分配的端口不变。
对称型NAT对于同一台内网计算机与不同的外网计算机通讯会分配不同的端口号,对称型NAT一般不能用于p2p软件。
NAT的实现有很多种
STUN:Session Traversal Utilities for NAT
TURN:Traversal Using Relays around NAT
ICE: Interactive Connectivity Establishment
......
具体的协议工作方式不在本文的谈论范围,有兴趣的读者可以参考一下资料
https://en.wikipedia.org/wiki/NAT_traversal
http://www.eyeball.com/standards/stun-turn-ice/
最后是我们的重点:IPFS 和 ICE NAT traversal
IPFS网络采用是 ICE NAT traversal框架来实现的NAT通信
ICE不是一个协议,而是一个框架(framework),整合STUN、TURN和其他类型的NAT协议,该框架可以让客户端利用各种NAT方式打通网络,从而完成NAT通信,这对于IPFS的p2p网络非常重要。
根据小编的测试结果:IPFS的p2p网络适应性非常强,在各种复杂的网络环境下都可以轻松实现NAT通信,以后使用ipfs和挖矿的读者在网络设置上面会减少很多麻烦了。![]()
作者飞向未来,致力于IPFS/Filecoin在中国的技术推广,他的微信公众号和社群,目前是中国最活跃最顶级的IPFS社群。作者飞向未来是圆方圆区块链的特邀嘉宾,所有转载都已经得到飞向未来本人授权。
更多飞向未来导师的公众号,可以在IPFS指南公众号中找到。
圆方圆链圈

IPFS: NAT traversal(NAT穿越)的更多相关文章
- udp打洞( NAT traversal )的方法介绍
http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html http://www.gzsec.com/oldversion/ ...
- NAT and Traversal NAT(TURN/STUN/ICE)
http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html -------------------------------- ...
- (转)NAT与NAT穿越学习总结--ICE过程讲的不错
转:http://cgs1999.iteye.com/blog/1994072 1.引言网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防 ...
- P2P NAT检测和穿越方式
一. NAT类型 本文转自:http://www.cnblogs.com/hummersofdie/archive/2013/05/21/3090163.html 1.基本的NAT类型:只 ...
- IPFS家族(一)
IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页.让我们来简单看一下IPFS家族成员. 协议实验室的主页:https: ...
- 转:WebRTC技术及应用2 – NAT穿越技术的使用
评:webrtc自带的打洞,穿透协议. 转: http://www.unclekevin.org/?p=924 959 views WebRTC技术及应用2 – NAT穿越技术的使用 发表回复 (题图 ...
- NAT原理与NAT穿越
最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下. 先做一个约定: 内网A中有:A1(192.168.0.8).A2(192.168.0.9)两用户 网关X1(一个NAT设备)有 ...
- NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等
这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. 学习交流 移动端即时通讯学习交流: 21589 ...
- p2p网络中的NAT穿透技术----常见NAT穿越解决方案
转:http://blog.csdn.net/cllzw/article/details/46438257 常见NA丁穿越解决方案 NAT技术在缓解IPv4地址紧缺问题.构建防火墙.保证网络安全等方面 ...
随机推荐
- hdu 2047递推
A[N]表示以E或者F结尾的情况下的方案数,B[N]表示以O结尾的情况下的方案数,F[N]=3*A[N-1]+2*B[N-1] 同时,A[N]=2*B[N-1]+2*A[N-1],B[N-1]=A[N ...
- POJ - 3414 bfs [kuangbin带你飞]专题一
状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可. d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量. AC代码 #include<cst ...
- R实战 第三篇:数据处理(基础)
数据结构用于存储数据,不同的数据结构对应不同的操作方法,对应不同的分析目的,应选择合适的数据结构.在处理数据时,为了便于检查数据对象,可以通过函数attributes(x)来查看数据对象的属性,str ...
- js中的Object.defineProperty()和defineProperties()详解
ECMAS-262第5版在定义只有内部采用的特性时,提供了描述了属性特征的几种属性.ECMAScript对象中目前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描述 ...
- 对HI3531的GPIO使用的再分析
在一个嵌入式系统中使用最多的莫过于 通用输入输出 GPIO口.看到论坛中经常有朋友问海思为什么没有提供GPIO驱动.其实不然. 在海思SDK xxx/osdrv/tools/board_tools/ ...
- 数据结构--hashtable(散列表)
散列 散列又叫hash.是通过关键字把数据映射到指定位置的一种数据结构.理想的散列表,是一个包含关键字的固定大小的数组 哈希表存储的是键值对,其查找的时间复杂度与元素数量多少无关,哈希表在查找元素时是 ...
- css在盒子中垂直居中和固定居中
顶部固定居中 <div class="w960 fixed"> 我是固定的 </div> .w960{ width: 960px; margin:0 aut ...
- dojo级联步骤
dojo级联步骤 1.数据请求回来后,检查数据格式是否满足下拉框的数据格式: 2.通过firebug进行调试,检查select下拉框子项结点是否取道: 3.查看API文档,保证改变store的方法是正 ...
- Linux显示工作路径
Linux显示工作路径 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ pwd /home/youhaidong
- 1118: 属于 static 类型 Object 的值的隐式强制指令的目标可能是非相关类型 Number。
1.错误描述 此行的多个标记: -1118: 属于 static 类型 Object 的值的隐式强制指令的目标可能是非相关类型 Number. -left 2.错误原因 /** * 刷新按钮函数 */ ...