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地址紧缺问题.构建防火墙.保证网络安全等方面 ...
随机推荐
- H3C路由交换常用命令
1.查看Linux下查看端口状态 root@root:~# netstat -an|grep -E "6002|6003" 2.H3C交换机显示当前配置 [H3C]display ...
- R︱mlr包帮你挑选最适合数据的机器学习模型(分类、回归)+机器学习python和R互查手册
一.R语言的mlr packages install.packages("mlr")之后就可以看到R里面有哪些机器学习算法.在哪个包里面. a<-listLearners() ...
- FusionCharts中图的属性的总结归纳
FusionCharts中图的属性的总结归纳 1.横坐标label间隔显示 labelStep="4" 2.柱状图有椭圆角 useRoundEdges="1"
- Linux查看非root运行的进程
Linux查看非root运行的进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -N PID TTY TIME CMD ...
- java.lang.NoClassDefFoundError: org/apache/jsp/jsp/Container_jsp
1.错误描述 八月 20, 2014 7:10:18 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.servi ...
- faultString = "java.lang.NullPointerException : null"
1.错误描述 (mx.messaging.messages::ErrorMessage)#0 body = (null) clientId = "E75F6AF8-5E0E-4184-3AF ...
- Struts(五)Action的访问
在struts开发中,Action作为框架的核心类,实现对用户的请求的处理,Action被称为业务逻辑控制器.一个Action类代表一次请求或调用.Action就是用来处理一次用户请求的对象 Acti ...
- Python Cookbook(第3版)中文版:15.18 传递已打开的文件给C扩展
15.18 传递已打开的文件给C扩展¶ 问题¶ 你在Python中有一个打开的文件对象,但是需要将它传给要使用这个文件的C扩展. 解决方案¶ 要将一个文件转换为一个整型的文件描述符,使用 PyFile ...
- 关于transform的3D变形函数
继续transform的3D用法: translate3d(x,y,z)定义3D转换 transformX(x)只用x轴的值进行转换: transformY(y)只用y轴的值进行转换: transfo ...
- 【BZOJ4805】欧拉函数求和(杜教筛)
[BZOJ4805]欧拉函数求和(杜教筛) 题面 BZOJ 题解 好久没写过了 正好看见了顺手切一下 令\[S(n)=\sum_{i=1}^n\varphi(i)\] 设存在的某个积性函数\(g(x) ...