如果你有持续关注 Polkadot 、 Ethereum 2.0 或 Substrate 的开发近况,你应该听说过 libp2p。Libp2p 是一个便于使用者开发去中心化点对点应用的网络框架,它原先是 IPFS 的网络协议延申,如今已自成一家。

愿景

所有的分布式点对点网络,都会面临一系列不同于传统网络的挑战。Libp2p 是个通用工具包,有了它,开发者就可以在分布式应用上使用可插拔的网络。

与传统网络最大的不同在于,分布式计算不适用“ 客户端/服务器 ”这种模式。典型的 客户端/服务器 ”是:在你的家用网络中,每台设备都有个私有 IP ;当你向服务器请求数据时,路由器会用家里的公用 IP 替换掉设备的私有 IP ,同时记下应该向哪一台设备返回数据。

假设你的设备都扮演客户端的角色,那一切正常;但如果今天你的路由器收到来自外部世界的请求,又该如何?这条请求信息不是你发出请求的响应——它本身就是请求,而且请求发送方认为你就是台服务器。当你的其中一台设备开始扮演服务器的角色时,路由器却懵了。它搞不清楚究竟是哪一台设备在扮演服务器——这就是 NAT 穿透问题,而 libp2p 工具能够帮助我们解决。

为了因应在客户端也需要充当节点(服务器)的场景,节点间不可避免地需要与许多硬件、操作系统及通讯协议发生交互,Libp2p 也负责处理对等网络通信及握手协议。加密和安全性是 WEB3 设计的基础,libp2p 支持非加密传输协议( e.g. TCP、UDP)及加密传输协议( e.g. TLS、 Noise )

许多网络协议的发展在 90 年代停滞不前,而后面对许多安全漏洞的出现,产生了越来越多的补丁包。这也是 libp2p 为什么要模块化的原因,你可以在 libp2p 上更新任何你想添加的东西,同时保证后向兼容性。

模块化

Libp2p 从一开始就设计得非常模块化,因此能够部署在不同的点对点网络上。我们通常会以一组 IP 地址及通信端口来描述传统的点对点应用,但 libp2p 使用多重地址的概念。举例来说:

  • /ip4/90.46.231.22/udp/25000 —— 节点 IP 地址是 90.46.231.22 ,且在 25000 端口上监听 UDP 协议。

  • */ip6/fe80::0202:b3ff:fe1e:8329/udp/1567/*quic —— 应该在 UDP 端口 1567 上使用 QUIC 协议传输信息。

  • /dnsaddr/example.com/tcp/80/ws —— 在 TCP 端口 80 上使用 WebSocket 协议,同时以 DNS 服务器解析域名 example.com 。

事实上,使用多重地址的想法就是为了让 libp2p 能够扩展新的协议(就像上面那个使用 QUIC 的例子一样),因此使用 libp2p 的项目不要求支持所有协议。后续我们希望,比如,将蓝牙通讯加到传输协议中。

Libp2p 模块化的第二个原因主要是针对协议协商过程。一旦两个节点建立通信, libp2p 就只需处理用于连接的协议了。

虽然 libp2p 鼓励节点支持一组通用的协议,但就技术角度出发,这不是必须的。模块化能让 libp2p 工具面对新的协议、想法,及部署新的协议版本时,轻松地支援旧的版本,不需要增加技术负债。

主要的 libp2p 协议

虽然 libp2p 没有强制要求节点需要支持哪些协议,但仍然鼓励节点兼容常用的几种,包括:

  • secio —— 负责加密通讯。

  • mplex 或 yamux —— 在 secio 之上的负责多路径复用的协议。

多路径复用是将多个独立数据流聚合在单个连接通道的过程。就像你熟悉的,你的公寓可能只有一条同轴电缆或光纤电缆,但能够满足你和室友想在 Netflix 看不同电影的需求。数据以多路径复用的方式传进你家,并经过反向编译传递给正确的设备。

一旦我们有能力做到这些事,只要我们想要,就能几乎无限地创建子数据流,并使用许多不同种类的协议。这些协议包括:

  • identify —— 获得节点信息:包含节点所监听的多路径,及节点识别我们的多路径信息;这与 STUN 协议 所做的事类似。

  • ping —— ping 远端服务,确保服务仍在响应。

  • kademlia —— 发现节点及分布式记录存储。

  • floodsub 和 gossipsub —— 两种消息发布/订阅协议。

  • 当然, 也包含用户想要自定义的协议。

在 Substrate 工具中,每个项目都能自定义网络协议。 举例来说,BBQ Birch 测试网使用的协议称为 bbq ,而 Polkadot 使用的协议称为 dot 。

Libp2p 的全球布局

推荐使用 libp2p 的另一个原因是它被去中心化项目所采用。Libp2p 在 IPFS 早期时就提供支持,并且将继续支持多个新兴项目,如 Filecoin 、以太坊 2.0 (可能)、 Agoric,当然还有 Substrate 和 Polkadot 。多个项目共用同个网络协议的优势在于:节点性能能够在多个网络中共享。让我们接着看 relay 协议的例子。

在去中心化场景下,我们总是希望节点能够直接与其他节点进行通信。然而实际上,许多节点是无法访问的,因为它们可能存在 NAT 穿透问题,或使用的平台不允许外部访问。

为了解决这个问题, libp2p 提供了一种名为 relay 的协议,允许节点充当另外两个节点的 proxy 代理。所有的通信都经过加密,并且经过远程身份认证,所以代理服务不会遭遇中间人攻击( man-in-the-middle )。

因为越来越多的项目使用 libp2p 作为他们的网络协议,所以他们都能受惠于 relay 节点,进而达到资源共享。

在过去,当公司在推出一款应用时,只需要关注应用的体验和逻辑——而不需要重新发明 TCP/IP 协议。Libp2p 设计的初衷就是为了支持未来的去中心化网络协议,它的宗旨是让开发者进行应用程序开发时,能确保他们的服务是可达且可用的。Libp2p 在 Rust 、JavaScript 和 Go 语言上完成实现,在 Java, Haskell 和 Python 上的开发也正快速地推进中!

在此查看 Rust code : libp2p/rust-libp2p


原文链接: https://medium.com/paritytech/why-libp2p-13085ed0c9c8
作者: tomaka

为什么 ETH2.0 要选择 libp2p ?相关推荐

  1. ETH2.0 Serenity中网络的详细介绍

    以太坊第四阶段Serenity中网络的概述 特别感谢Hsaio-Wei Wang.Kevin Mai-Hsuan Chia.John Adler的编辑和有价值的反馈. 在分片区块链中网络是一个难题,我 ...

  2. 解压大于4g的文件_4G显卡“到期”,ETH2.0即将到来,以太坊矿工何去何从?

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 来源:金色财经 2020年,币圈吸金且吸睛的莫过于以太坊.无论是DeFi还是ET ...

  3. 万向区块链蜂巢学院 | 关于ETH2.0路线图,搞研究的大脑在想什么?

    以太坊2.0是2020年区块链行业最火热的话题之一.万向区块链蜂巢学院线上公开课第42期,邀请了以太坊爱好者社区负责人阿剑.链闻研究总监潘致雄.MYKEY研究部门负责人姚翔.HashKey Capit ...

  4. 【超越白皮书7】你需要知道关于ETH2.0的几个事实

    摘要: 万众期待的ETH2.0升级终于要迎来它的第一个里程碑,预计在今年第三季度,ETH2.0 阶段0 信标链有望上线.这次升级的整体构想之宏伟,调整范围之广泛,使得它不同于过往的历次"补丁 ...

  5. ETH2.0将开启超级牛市,BitOffer以太坊ETF基金涨幅超10倍

    近日,以太坊团队发布公告称,将于12月1日上线以太坊2.0信标链主网,以太坊2.0升级将会给整个加密行业布局带来巨大颠覆,将智能合约推向一个新的高度,推动加密货币市场提前进入牛市.据BitOffer交 ...

  6. Eth2.0 节点的网络通信

    本文为以太坊基金会研究员 Kevin Mai-Hsuan Chia 做的关于 Eth2.0 节点通信组件的幻灯片.本页只作入口,具体内容由文内超链接进入. Part-1 对比 Eth1.0 的节点内部 ...

  7. WINCE6.0组件选择说明

    WINCE6.0组件选择说明 图1 RAS/PPP组件前面的√标识表示我们手动选择,TAPI2.0前面的■标识表示选组件时根据依赖关系自动选择的,PPPoE前面的□标识组件没有选择.

  8. eth一张_听说eth2.0利好落地了?那么为何eth反而涨了?

    今天给大家推荐一个朋友的公众号:「狙神看趋势」,狙神老师是数字货币早期布道者,主要擅长趋势分析以及小币种埋伏,多次带领粉丝抄底逃顶,近期社群会免费布局一个趋势主流币种,大家可以扫码关注公众号,添加助手 ...

  9. 股权证明pos记账权是根据不同节点_中币(ZB)说真的,区块链第四期:关于ETH2.0,你需要了解的——PoS...

    最近,以太坊又重新回到币圈中心了,ETH价格从11月4日一路飙升,从443美元最高涨到622美元.虽然目前区块链和数字货币已经被更多人认可了,但是首先攫取币圈用户目光的依然还是币价.树莓之前在微博超话 ...

最新文章

  1. ADB设置连接android真机
  2. idea 提示vue插件_Vue + SpringBoot + MyBatis 音乐网站
  3. CSDN公众号新功能上线,居然还能搜出小姐姐???(文末有福利)
  4. 【AI视野·今日CV 计算机视觉论文速览 第208期】Fri, 28 May 2021
  5. teamviewer 可用设备上限_2020:抚州办公楼采暖设备种类齐全
  6. BioPython-1
  7. 简单的Site to site ipsec ×××实验
  8. c#中用声音提示报警
  9. 分布式数据:缓存技术
  10. Unity TUIO雷达入门
  11. python xps_python处理xps文件_从XPS文档中提取文本
  12. 【算法随记二】线卷积积分及其在图像增强和特效方面的应用(一)
  13. Java多线程(7):JUC(下)
  14. 【2021年度总结】积跬步,「卷」千里,2022 继续「卷」
  15. MySQL 的主从复制原理详解高级
  16. 2020年南京社保减免优惠政策(2-12月汇总)
  17. 给初学Java的老铁,知道这4点太重要了!
  18. 实现数据库存入html代码,并在前端就页面返回。
  19. 使用Echarts实现圆环图
  20. 计导 第 10 章 软件工程

热门文章

  1. 浏览器使用video播放m3u8类的直播流媒体
  2. 连锁超市如何部署远程监控系统
  3. 上门女婿 黄河九十九道湾
  4. 计算机语言python课程名称,MOOC背景下的计算机语言课程的改革与发展——以Python语言为例...
  5. 输出如下图案,请填空完成程序。j,n输入答案函数图案题目图片.
  6. 苹果4s忘记id密码怎么办_大哭!iPhone手机ID密码忘记了怎么办?3种方法轻松解决问题...
  7. 由于Skyline RabbitMQ导致NI Package Manager安装失败
  8. MICCAI 2021 | 深圳大学MUSIC医学超声实验室萌新的论文分享!
  9. 数据库时间 用bigint_mysql数据库字段bigint使用
  10. layui数据表格隐藏列,如ID列方法