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地址紧缺问题.构建防火墙.保证网络安全等方面 ...
随机推荐
- OpenCV 之 空间滤波
1 空间滤波 1.1 基本概念 空间域,在图像处理中,指的是像平面本身: 空间滤波,则是在像平面内,对像素值所进行的滤波处理. 如上图所示,假设点 (x, y) 为图像 f 中的任意点,中间正方形 ...
- PHPmysqli的 其他函数 从数据库中读出数据并且打印出来
<?php // 认识其他mysqli其他函数 header( 'Content-Type:text/html;charset=utf-8 '); require 'prepareSrarmen ...
- 使用jsoup抓取新闻信息
1,jsoup简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和 ...
- Netty未来展望
作为<Netty权威指南(第2版)>的结尾章节,和读者朋友们一起展望下Netty的未来. 1应用范围 随着大数据.互联网和云计算的发展,传统的垂直架构逐渐将被分布式.弹性伸缩的新架构替代. ...
- java.io.FileNotFoundException: /opt/apache-tomcat-7.0.57/conf/server.xml (权限不够)
1 错误描述 youhaidong@youhaidong:~$ cd /opt/apache-tomcat-7.0.57 youhaidong@youhaidong:/opt/apache-tomca ...
- MFC中CFileDialog用法
用CFileDialog选择了一个文件后,使用FILE::fopen打开文件错误,使用 的是相对地址,和王工调试了半天,怎么跟踪也没发现错误,原来如此......... CFileDialog文件选择 ...
- 几个平台环境里视频编解码和图像scale的硬件加速的方法
记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...
- HttpServletRequest对象
一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
1.Action.RenderAction加载办法的视图,履行Controller → Model → View的次序,然后把产生的页面带回到本来的View中再回传.而Partial.RenderPa ...
- [翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能
[翻译] 比较 Node.js,Python,Java,C# 和 Go 的 AWS Lambda 性能 原文: Comparing AWS Lambda performance of Node.js, ...