以太坊系列之五: p2p的nat模块--以太坊源码学习

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: p2p的nat模块该模块相对比较简单,因为nat的真正实现并不在此模块,主要是使用了第三方的nat-upnp和nat-pmp来实现真正的穿透(端口映射).对外公布的接口```go// An implementation of nat.

p2p的nat模块

该模块相对比较简单,因为nat的真正实现并不在此模块,主要是使用了第三方的nat-upnp和nat-pmp来实现真正的穿透(端口映射).

对外公布的接口
```go
// An implementation of nat.Interface can map local ports to ports
// accessible from the Internet.
type Interface interface {
// These methods manage a mapping between a port on the local
// machine to a port that can be connected to from the internet.
//
// protocol is "UDP" or "TCP". Some implementations allow setting
// a display name for the mapping. The mapping may be removed by
// the gateway when its lifetime ends.
AddMapping(protocol string, extport, intport int, name string, lifetime time.Duration) error
DeleteMapping(protocol string, extport, intport int) error

// This method should return the external (Internet-facing)
// address of the gateway device.
ExternalIP() (net.IP, error)

// Should return name of the method. This is used for logging.
String() string

}
```

主要有三个关键函数一个是添加映射,一个是删除映射,另一个是获取外部IP.使用起来非常直观,我们这里看一个例子,nat.go中的Map函数中,

m.AddMapping(protocol, extport, intport, name, mapTimeout);

我看ethereum使用的时候,extport和intport都一样.

Interface总共有四个实现分别是upnp,pmp,extIP和startautodisc,从名字可以看出这四个实现都没有暴露给调用者,也就是内部使用,其中extIP是在本机IP就是公网IP的情况下使用,也就是无需端口映射的时候使用.upnp和pmp是对两种端口映射协议的使用封装,而startautodisc则是对这两者的再次封装统一.

那么nat模块怎么使用呢,用起来其实很简单.下面是示例代码,不完整.
   //获取nat实例,
   var m nat.Interface=nat.Any()
   //然后就可以使用AddMapping等操作了,

   //nat还提供了更方便的函数Map来保持端口映射
   //用法如下 来自server.go
   nat.Map(srv.NAT, srv.quit, "tcp", laddr.Port, laddr.Port, "ethereum p2p")
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
机器学习/深度学习 数据采集 存储
Nat. Mach. Intell. | 基于神经网络的迁移学习用于单细胞RNA-seq分析中的聚类和细胞类型分类...
Nat. Mach. Intell. | 基于神经网络的迁移学习用于单细胞RNA-seq分析中的聚类和细胞类型分类...
203 0
Nat. Mach. Intell. | 基于神经网络的迁移学习用于单细胞RNA-seq分析中的聚类和细胞类型分类...
|
存储 算法 5G
【软考学习12】页式存储、段式存储、段页式存储和物理逻辑地址转换
【软考学习12】页式存储、段式存储、段页式存储和物理逻辑地址转换
1259 0
|
算法 C#
《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)
123 0
|
网络虚拟化 数据安全/隐私保护 网络架构
计算机网络学习24:虚拟专用网VPN与网络地址转换NAT
因特网中对目的地址是私有地址的IP数据报一律不进行转发。 并且私有地址只能是本地使用,不可以作为对外的IP地址。 很显然,各部门都需要一个合法的具有IP地址的路由器。 这样,他们各自的专用网才能利用公用的因特网进行通信。
计算机网络学习24:虚拟专用网VPN与网络地址转换NAT
|
网络协议 网络架构 索引
P2P之UDP穿透NAT的原理与实现 - 增强篇
为了方便操作,推荐你使用一个远程登陆软件,可以直接在一台机器上操作所有的相关的计算机,这样很方便,一个人就可以完成所有的工作了。呵呵,本人就是这么完成的。欢迎有兴趣和经验的朋友来信批评指正,共同进步。
3183 0
|
机器学习/深度学习 数据可视化 算法
Nat. Commun. | 从单细胞转录组数据中学习可解释的细胞和基因签名嵌入
Nat. Commun. | 从单细胞转录组数据中学习可解释的细胞和基因签名嵌入
314 0
Nat. Commun. | 从单细胞转录组数据中学习可解释的细胞和基因签名嵌入
|
机器学习/深度学习 自然语言处理 算法
Nat. Mach. Intell. | 深度神经网络中的捷径学习
Nat. Mach. Intell. | 深度神经网络中的捷径学习
238 0
Nat. Mach. Intell. | 深度神经网络中的捷径学习
|
机器学习/深度学习
Nat. Methods | 学习微生物与代谢产物之间相互作用的神经网络
Nat. Methods | 学习微生物与代谢产物之间相互作用的神经网络
160 0
Nat. Methods | 学习微生物与代谢产物之间相互作用的神经网络
|
机器学习/深度学习 存储 算法
Nat. Commun | 结合二维深度神经网络和迁移学习 预测RNA二级结构
Nat. Commun | 结合二维深度神经网络和迁移学习 预测RNA二级结构
237 0
Nat. Commun | 结合二维深度神经网络和迁移学习 预测RNA二级结构
下一篇
无影云桌面