深入浅出区块链
陈浩
元界 CTO
40265 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
深入浅出区块链
15
15
1.0x
00:00/00:00
登录|注册

第10讲 | 深入区块链技术(二):P2P网络

在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素。P2P 网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。今天我们就来看看区块链技术的第一个核心要素:P2P 网络。
如果我们简单来看 P2P 技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯、从文件共享到协同处理,多种领域都有它的身影出现。
同样的,P2P 的网络协议也有很多,比较常见的有 BitTorrent、ED2K、Gnutella、Tor 等,也就是我们常说的 BT 工具和电驴。
比特币、以太坊等众多数字货币都实现了属于自己的 P2P 网络协议,但是这种模式并不同于以上讨论的 P2P 网络协议,所以我们今天讨论的重点主要是区块链技术的 P2P 技术,也就是比特币和以太坊的 P2P 网络。
由于区块链的 P2P 网络技术知识繁多,我们主要提炼其中的四个内容进行讲解:区块链的网络连接与拓扑结构、节点发现、局域网穿透与节点交互协议。
希望读完本篇可以让你对目前成熟的区块链 P2P 网络的拓扑结构以及运行原理有个大体的认知。

网络连接与拓扑结构

1. 网络连接

除去少数支持 UDP 协议的区块链项目外,绝大部分的区块链项目所使用的底层网络协议依然是 TCP 协议。
所以从网络协议的角度来看,区块链其实是基于 TCP/IP 网络协议的,这与 HTTP 协议、SMTP 协议是处在同一层,也就是应用层。
在“区块链的常见误区”这篇文章中,我们提到了“区块链是否会颠覆互联网”这一说法,如果要是认真分析的话,它颠覆的层面其实最多只到 HTTP 协议,不能再多了。
以 HTTP 协议为代表的、与服务端的交互模式在区块链上被彻底打破了,变更为完全的点对点拓扑结构,这也是以太坊提出的 Web3.0 的由来。
比特币的 P2P 网络是一个非常复杂的结构,考虑到矿池内部的挖矿交互协议与轻节点。我们仅仅讨论全节点这种场景下的 P2P 网络发现与路由。
比特币的 P2P 网络基于 TCP 构建,主网默认通信端口为 8333。
以太坊的 P2P 网络则与比特币不太相同,以太坊 P2P 网络是一个完全加密的网络,提供 UDP 和 TCP 两种连接方式,主网默认 TCP 通信端口是 30303,推荐的 UDP 发现端口为 30301。

2. 拓扑结构

P2P 网络拓扑结构有很多种,有些是中心化拓扑,有些是半中心化拓扑,有些是全分布式拓扑结构。
比特币全节点组成的网络是一种全分布式的拓扑结构,节点与节点之间的传输过程更接近“泛洪算法”,即:交易从某个节点产生,接着广播到临近节点,临近节点一传十十传百,直至传播到全网。
(比特币全球节点图,图来自网络)
全节点与 SPV 简化支付验证客户端之间的交互模式,更接近半中心化的拓扑结构,也就是 SPV 节点可以随机选择一个全节点进行连接,这个全节点会成为 SPV 节点的代理,帮助 SPV 节点广播交易。

节点发现

节点发现是任何区块链节点接入区块链 P2P 网络的第一步。这与你孤身一人去陌生地方旅游一样,如果没有地图和导航,那你只能拽附近的人问路,“拽附近的人问路”的这个动作就可以理解成节点发现。
节点发现可分为初始节点发现,和启动后节点发现。初始节点发现就是说你的全节点是刚下载的,第一次运行,什么节点数据都没有。启动后发现表示正在运行的钱包已经能跟随网络动态维护可用节点。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出区块链》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(23)

  • 最新
  • 精选
  • 许成浩
    第二种方式就是,代码中硬编码( hard-code )了一些地址,这些地址我们称之为种子节点(seed-node),当所有的种子节点全部失效时,全节点会尝试连接这些种子节点。 这句话是有点迷糊、种子节点全部失效时,全节点尝试连接这些种子节点

    作者回复: 不好意思,应该是基于DNS的种子节点全部失效时,会尝试连接Hard code的种子节点。

    4
    17
  • 区块链先锋
    节点和区块有什么区别

    作者回复: 节点是启动的MySQL服务,区块是里面的表

    4
  • guanhua
    陈老师,请问区块同步方式1中,先同步区块头过程中就可以进行合法性验证了吗?之后再同步区块体就直接复制吗? 每个区块头里面不都包含对上一个整个区块的哈希吗?

    作者回复: 每个头都包含上个区块的整块哈希的。

    4
  • 艾草
    比特币使用的是Gossip算法,以太坊使用的是Kademlia算法 还有 为什么老师说tcp/ip是应用层,在osi模型里,tcp是传输层,ip是网络层。

    作者回复: 区块链其实是基于TCP/IP网络协议之上的,这与HTTP协议、SMTP协议是处在同一层,也就是应用层。 这里说的是区块链,不是TCP/IP哦,是说区块链的P2P网络协议在应用层。

    3
  • 一身菜味
    看起来像是gossip协议

    作者回复: 是的呢

    3
  • Aaron
    根据节点的发现机制,完全可以爬取所有节点的信息

    作者回复: Sipa有一套简单的代码,叫bitcoin-seeder。可以参考

    3
  • 呼啦斯卡
    tcp/ip不是应用层协议

    作者回复: 是的,与HTTP,SMTP协议在同一层,应用层。

    2
    1
  • wahaha
    没有公网IP的两个节点不能用TCP直接互通吧?用UDP可以打洞来直接互通,不知有哪种区块链支持UDP打洞?

    作者回复: 有的呀,uunp协议

  • Ud
    请问1、一个节点要与多少个节点保持长连接?2、如果一个节点发起广播,如何保证不被其他节点循环广播同一个消息

    作者回复: 你好,这个是算法可配置的,一般是8个或更多。

  • 慢摇哥哥
    陈老师,两个问题请教:bitnodes.earn.com显示比特币网络上才1万出头的节点,会不会太少有安全问题;另外,有很多节点的NETWORK显示Hangzhou Alibaba Advertise Co.,Ltd,这是因为这些矿工运行在阿里云的原因?

    作者回复: 一万个节点是全节点,属于核心节点,类似电信的骨干网络。算上轻节点,不开放的节点,可能在百万以上。 是的,很多开发和测试节点会在云上搭建,生产环境也首选在云上的。

收起评论
大纲
固定大纲
网络连接与拓扑结构
1. 网络连接
2. 拓扑结构
节点发现
显示
设置
留言
23
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部