Login
欢迎来到未来世界

您现在的位置是: 首页 > 计算机 > 区块链

区块链

深入浅出区块链之详解P2P网络(深入浅出区块链技术)

区块链 加入收藏
本篇文章给大家谈谈深入浅出区块链之详解P2P网络对应的信息,希望对各位有所帮助,不要忘了收藏本站喔。P2P网络如果我们简单来看P2P技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯、从文件共享到协同处理,多种领域都有它的身影出现。同样的,P2P的网络协议也有很多,比较常见的有BitTorrent、ED2K、Gnutella、

本篇文章给大家谈谈深入浅出区块链之详解P2P网络对应的信息,希望对各位有所帮助,不要忘了收藏本站喔。

P2P网络如果我们简单来看P2P技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯、从文件共享到协同处理,多种领域都有它的身影出现。

同样的,P2P的网络协议也有很多,比较常见的有 BitTorrent、ED2K、Gnutella、Tor等,也就是我们常说的BT工具和电驴。

比特币、以太坊等众多数字货币都实现了属于自己的P2P网络协议,但是这种模式并不同于以上讨论的P2P网络协议,所以我们今天讨论的重点主要是区块链技术的P2P技术,也就是比特币和以太坊的P2P网络。

网络连接与拓扑结构网络连接除去少数支持UDP协议的区块链项目外,绝大部分的区块链项目所使用的底层网络协议依然是TCP/IP协议。

所以从网络协议的角度来看,区块链其实是基于TCP/IP网络协议的,这与HTTP协议、SMTP协议是处在同一层,也就是应用层。

在“区块链的常见误区”这篇文章中,我们提到了“区块链是否会颠覆互联网”这一说法,如果要是认真分析的话,它颠覆的层面其实最多只到HTTP协议,不能再多了。

以HTTP协议为代表的、与服务端的交互模式在区块链上被彻底打破了,变更为完全的点对点拓扑结构,这也是以太坊提出的 Web3.0的由来。

比特币的P2P网络是一个非常复杂的结构,考虑到矿池内部的挖矿交互协议与轻节点。

我们仅仅讨论全节点这种场景下的P2P网络发现与路由。

比特币的P2P网络基于TCP构建,主网默认通信端口为8333。

以太坊的P2P网络则与比特币不太相同,以太坊P2P网络是一个完全加密的网络,提供UDP和TCP两种连接方式,主网默认TCP通信端口是30303,推荐的UDP发现端口为30301。

拓扑结构P2P网络拓扑结构有很多种,有些是中心化拓扑,有些是半中心化拓扑,有些是全分布式拓扑结构。

比特币全节点组成的网络是一种全分布式的拓扑结构,节点与节点之间的传输过程更接近“泛洪算法”,即:交易从某个节点产生,接着广播到临近节点,临近节点一传十十传百,直至传播到全网。

全节点与SPV简化支付验证客户端之间的交互模式,更接近半中心化的拓扑结构,也就是SPV节点可以随机选择一个全节点进行连接,这个全节点会成为SPV节点的代理,帮助SPV节点广播交易。

节点发现节点发现是任何区块链节点接入区块链P2P网络的第一步。

这与你孤身一人去陌生地方旅游一样,如果没有地图和导航,那你只能拽附近的人问路,“拽附近的人问路”的这个动作就可以理解成节点发现。

节点发现可分为初始节点发现,和启动后节点发现。

初始节点发现就是说你的全节点是刚下载的,第一次运行,什么节点数据都没有。

启动后发现表示正在运行的钱包已经能跟随网络动态维护可用节点。

01初始节点发现在比特币网络中,初始节点发现一共有两种方式。

第一种叫做DNS-seed又称DNS种子节点,DNS就是中心化域名查询服务,比特币的社区维护者会维护一些域名。

比如 seed.bitcoin.sipa.be 这个域名就是由比特币的核心开发者Sipa维护的,如果我们通过nslookup 会发现大约二十多个A纪录的IPv4主机地址。

我们通过nc命令尝试连接域名下的某个主机的8333端口会发现连接成功,运行结构如下。

第二种方式就是,代码中硬编码( hard-code )了一些地址,这些地址我们称之为种子节点(seed-node),当所有的种子节点全部失效时,全节点会尝试连接这些种子节点。

用在以太坊中,思路也大致相同,也是在代码中硬编码(hard-code)了一些种子节点做类似的工作。

02启动后节点发现在 Bitcoin的网络中,一个节点可以将自己维护的对等节点列表(peer list)发送给临近节点,所以在初始节点发现之后,你的节点要做的第一件事情就是向对方要列表:“快把你的节点列表给我复制一份。

”所以在每次需要发送协议消息的时候,它会花费固定的时间尝试和已存的节点列表中的节点建立链接,如果有任何一个节点在超时之前可以连接上,就不用去DNS seed获取地址,一般来说,这种可能性很小,尤其是全节点数目非常多的情况下。

而在以太坊网络中,也会维护类似的一个节点列表 (NodeTable),但是这个节点列表与比特币的简单维护不同,它采用了P2P网络协议中一个成熟的算法,叫做Kademlia网络,简称KAD网络。

它使用了DHT来定位资源,全称Distributed Hash Table,中文名为分布式哈希表。

KAD网络会维护一个路由表,用于快速定位目标节点。

由于 KAD网络基于UDP通信协议,所以以太坊节点的节点发现是基于UDP的,如果找到节点以后,数据交互又会切换到TCP协议上。

03黑名单与长连接公有区块链面临的网络环境是非常开放的,任何人只要下载好钱包,打开运行就进入了这个P2P网络,这也会带来被攻击的可能。

所以在比特币的代码中,会有一段去控制逻辑,你可以手动将你认为可疑的节点移除并加入禁止列表,同时去配置可信的节点。

当然,以上并不属于客户端的标准协议的一部分,任何人都可以实现属于自己的P2P网络层。

以太坊上有针对账户进行的黑名单处理,但是这属于业务层。

我没有找到很详尽的资料,所以你有兴趣的话,可以自己尝试一下。

不过总的来说,黑名单我们也可以通过操作系统的防火墙去处理,这并不算一个特别棘手的问题。

局域网穿透前面我们说到了区块链的P2P网络结构是一种全分布式的拓扑结构。

但是,如今我们的网络环境是由局域网和互联网组成的。

也就是说,当你在局域网运行一个区块链节点,在公网是发现不了的,公网上的节点只能被动接受连接,并不能主动发起连接。

如果这个局域网是你可以控制的,那么很好说,咱们只需要在VPC网络中配置路由,将公网IP和端口映射到局域网中你的IP和端口即可。

这个条件是非常苛刻的,那么到底有没有一种方案可以自行建立映射呢?答案是:有,就是NAT技术和UPnP协议。

NAT技术非常常见,这里使用的是源NAT,简而言之就是替换TCP报文中的源地址并映射到内网地址。

UPnP是通用即插即用(Universal Plug and Play)的缩写,它主要用于设备的智能互联互通,所有在网络上的设备马上就能知道有新设备加入。

深入浅出区块链之详解P2P网络的信息就聊到这里吧,感谢你花时间阅读本站内容,更多关于深入浅出区块链之详解P2P网络的信息别忘了在本站进行查找喔。

图集详情底部广告位