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穿越)的更多相关文章

  1. udp打洞( NAT traversal )的方法介绍

    http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html http://www.gzsec.com/oldversion/ ...

  2. NAT and Traversal NAT(TURN/STUN/ICE)

    http://www.cnblogs.com/whyandinside/archive/2010/12/08/1900492.html -------------------------------- ...

  3. (转)NAT与NAT穿越学习总结--ICE过程讲的不错

    转:http://cgs1999.iteye.com/blog/1994072 1.引言网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防 ...

  4. P2P NAT检测和穿越方式

    一.      NAT类型 本文转自:http://www.cnblogs.com/hummersofdie/archive/2013/05/21/3090163.html  1.基本的NAT类型:只 ...

  5. IPFS家族(一)

    IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页.让我们来简单看一下IPFS家族成员. 协议实验室的主页:https: ...

  6. 转:WebRTC技术及应用2 – NAT穿越技术的使用

    评:webrtc自带的打洞,穿透协议. 转: http://www.unclekevin.org/?p=924 959 views WebRTC技术及应用2 – NAT穿越技术的使用 发表回复 (题图 ...

  7. NAT原理与NAT穿越

    最近在看东西的时候发现很多网络程序中都需要NAT穿越,特意在此总结一下. 先做一个约定: 内网A中有:A1(192.168.0.8).A2(192.168.0.9)两用户 网关X1(一个NAT设备)有 ...

  8. NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. 学习交流 移动端即时通讯学习交流: 21589 ...

  9. p2p网络中的NAT穿透技术----常见NAT穿越解决方案

    转:http://blog.csdn.net/cllzw/article/details/46438257 常见NA丁穿越解决方案 NAT技术在缓解IPv4地址紧缺问题.构建防火墙.保证网络安全等方面 ...

随机推荐

  1. 实战小项目BUG纪录

    果然,作为程序员最可爱的女朋友就是各种BUG,解决了你的开发能力和开发效率就会上升到一个新的层次.反之,在你面对BUG的时候,如果轻易的就放弃了,你也就失去了一次自我成长的机会.学习就是这样的,我们有 ...

  2. Java 多线程入门

    进程与线程 在学习Java多线程之前,先简单复习一下进程与线程的知识. 进程:进程是系统进行资源分配和调度的基本单位,可以将进程理解为一个正在执行的程序,比如一款游戏. 线程:线程是程序执行的最小单位 ...

  3. flask项目开发中,遇到http 413错误

    在flask项目中,上传文件时后台报http 413 Request Entity Too Large 请求体太大错误! 解决的2种方法: 1.在flask配置中设置 MAX_CONTENT_LENG ...

  4. home目录迁移至新分区

    在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区. 1.创建新分区. fidisk /dev/sda:用磁盘管理器打开磁盘 n:新建 +10g :设置分区为10G w :保存 保存 ...

  5. Hive:子查询

    Hive只支持在FROM子句中使用子查询,子查询必须有名字,并且列必须唯一:SELECT ... FROM(subquery) name ...

  6. GOF23种设计模式精解

    创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton( ...

  7. dojo实现省份地市级联---省份数据源

    province.json: { "identifier": "id", "label": "name", " ...

  8. 初识Go语言

    一.Go语言的主要特性: ①    开放源代码的通用计算机编程语言.开放源代码的软件(以下简称开源软件)更容易被修正和改进. ②    虽为静态类型.编译型的语言,但go语言的语法却趋于脚本化,非常简 ...

  9. class-提升方法Boosting

    1 AdaBoost算法2 AdaBoost训练误差分析3 AdaBoost algorithm 另外的解释3.1 前向分步算法3.2 前向分步算法与AdaBoost4 提升树4.1 提升树模型4.2 ...

  10. order调用mdp

    Java代码 else            {                crmMessageService[A1] .applyAsync(crmMdpRequest); } public v ...