这是个很好的问题。用一句话来概况就是libp2p是一个模块化的协议系统,它的规范和程序库可以用来开发p2p网络应用程序。

对等节点基础

  对于我们对libp2p在上面的概要描述有很多内容需要进一步解释,我们先从最后提到的一点开始,“p2p网络应用程序”。你现在正在这里阅读这篇文章,很可能你正在进行p2p系统的开发,而且正需要寻求帮助,亦或者这是你第一次来探索p2p网络的世界。不论是那种情况,我们都应该先花一分钟时间来定义一下我们的术语,我们有一些术语你可以前往shared vocabulary进行查看。

  P2p网络是一种所有参与者能够或多或少的在平等地位的基础上进行直接通讯的网络。这并不是意味着所有节点都是相同的,他们在整个网络中可能有着不同的角色。可是,p2p网络定义的一个重要特征是没有servers 和clients,severs 和 clinets 是client / server model的特征。

  因为p2p网络的定义非常的广泛,现在许多已经建立的系统都属于p2p的范畴。最突出的例子就是文件共享系统bittorrent, 还有更多的最近激增的区款链网络系统。

Libp2p能解决什么问题?

  虽然P2p网络比client/server 模型有很多优点,但是它仍有很多挑战需要我们认真思考和在实践中进行克服。我们在建立IPFS的时候,我们是通过模块化的解决方案来处理这些挑战的,这样说为啥现在有了libp2p。现在libp2p已经从IPFS独立出来了, 它不再需要或依赖IPFS,现今有很多项目都是用libp2p作为他们的网络传输层。我们可以一起利用我们现在积累的经验解决这些基础性问题,这对整个开发者生态系统和整个世界上的用户都有益处。这里我将会简单罗列出libp2p所宣称的主要问题领域(2019年之前)。这些范围一直在增长,所以如果随着时间的推移他们有所变化,你也不要感到吃惊。我们将尽最大努力保持这些内容是最新的,但是如果你发现有些内容缺失或者有其他想法可以改善这些文档,请联系我们,让我们知道(reach out to let us know)。

传输

  libp2p的基础是传输层,它是负责与其他节点进行传送和接收数据。现今有很多方法通过网络进行数据传输,甚至包括现在正在开发和设计的方式。Libp2p提供了简单的接口用于适应现存的或未来的协议,这使得libp2p应用程序可以运行在许多不同的网络环境中。

身份

  在整个世界有数十亿的设备进行着网络连接,知道你正在跟谁说话是进行安全可靠通讯的关键。Libp2p使用公钥密码学(public key cryptography)作为节点身份认证的基础,公钥密码学可以提供两个基本特征。第一,它给全球每一个节点指定一个唯一的名字,也就是节点ID。第二,节点ID允许任何人通过检索公钥进行节点身份认证,这使得节点之间能够安全的通信。

安全

  最基本的需求是我们能够在节点之间安全的发送和接收数据,那就意味着我们能够相信我们正在通信的节点的身份,并且没有第三方能够读到我们谈话信息和修改他们。

  Libp2p支持传输层模块提供的通过升级通讯连接使其变成安全加密通道连接。这个过程非常灵活,还可以支持多种加密通讯方法。当前默认的是 secio,对 TLS 1.3 的支持正在开发。

节点路由

  当你想发送消息到其他节点,你需要两个关键信息:他们的节点ID和一种在网络上定位他们的方法以至于能够与他们建立连接。

  我们的很多例子只有我们想要连接节点的ID,我们还需要一个用来发现他们的网络地址的方法。节点路由是利用其它节点的信息来发现节点地址的过程。

  在一个节点路由系统中,一个节点如果知道我们所需节点的地址,它会发送给我们,否则它会把我们的查询信息发送给它认为最有可能知道答案的其它节点。随着我们联系越来越多的节点,我们不仅增加了我们查找所需节点的机会,而且更完善了我们的路由表视图,这使得我们能够回答来自其它节点的查询。

  目前libp2p中稳定的对等节点路由实现使用一个分布式哈希表,使用Kademlia路由算法迭代路由请求,使其逐渐接近所期望的对等节点ID。

内容发现

  在一些系统中,相比于知道正在跟谁通讯,我们更关心他们能够向我们提供什么。例如,我们想获得一些特定数据,但是我们并不关心我们是从哪里获得的因为我们能够验证这些数据的完整性。

  Libp2p基于这个目的提供了内容路由接口( content routing interface),现在稳定版本的实现使用的也是与节点路由相似的基于 Kademlia 的DHT算法。

消息、发布与订阅

  发送消息到其他节点是P2P系统的核心, 发布和订阅是一种向特定人群发送他们所感兴趣的消息的一种非常有用的模式。

  Libp2p定义了发布与订阅接口,用于向所有订阅了特定主题的节点发送相应的消息。当前稳定的接口实现有两种:floodsub使用起来非常简单,但是效率不高,它使用的是network flooding策略。 gossipsub定义了一个可扩展的gossip协议。episub目前也正在积极的开发中,它是对gossipsub进行了扩展,这是为単源组播和少数固定源向大量客户端广播进行优化的。

Llbp2p是什么?的更多相关文章

随机推荐

  1. 1redis介绍

    一,概述 是一种nosql数据库,保存在内存中,同时redis可以把内存同时保存到磁盘,即可以把数据持久化.支持较多的数据类型,string,list(队列和栈),set,sorted set,has ...

  2. Spider--实战--bs静态网页爬取TOP250电影

    import requests from bs4 import BeautifulSoup def gettop250(): headers={ 'user-agent':'Mozilla/5.0 ( ...

  3. 经典c程序100例==81--90

    [程序81] 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数.求??代表的两位数,及809*??后的结果. 1.程序分析: 2.程 ...

  4. 第05组 Alpha冲刺 (3/6)(组长)

    .th1 { font-family: 黑体; font-size: 25px; color: rgba(0, 0, 255, 1) } #ka { margin-top: 50px } .aaa11 ...

  5. 基于selenium微博个人主页视频下载

    # -*- coding: utf-8 -*- import selenium from selenium import webdriver import time import urllib.req ...

  6. 【进阶之路】Mybatis-Plus中乐观锁@version注解的问题与解决方案

    大家好,我是练习java两年半时间的南橘,从一名连java有几种数据结构都不懂超级小白,到现在懂了一点点的进阶小白,学到了不少的东西.知识越分享越值钱,我这段时间总结(包括从别的大佬那边学习,引用)了 ...

  7. php 抛出异常

    <?php //try里面执行的东西如果不成立,可直接 throw new Exception('异常信息'),那么try里面的程序将会被停止执行,直接执行catch里面的程序 try { if ...

  8. Ayoa:麻雀虽小、五脏俱全的思维导图工具

    Ayoa是一款简单好用的思维导图软件,在PC端可以使用Ayoa网页版,也就是不用下载即可使用,十分轻便省力.但麻雀虽小,五脏可十分俱全,同类的其他大型软件有的东西它可一点不少,甚至还有更多的特殊功能. ...

  9. pytest和unittest中参数化如何做

    参数化应用场景,一个场景的用例会用到多条数据来进行验证,比如登录功能会用到正确的用户名.密码登录,错误的用户名.正确的密码,正确的用户名.错误的密码等等来进行测试,这时就可以用到框架中的参数化,来便捷 ...

  10. Sonar检测Math.abs(new Random().nextInt()) “Use the original value instead”

    今天早上旁边同事喊我看一个Sonar检测出的问题: 当时看了好几眼没觉得这个有太大问题,于是又看了下Sonar建议: 这是说Math.abs()方法使用在数字上面可能返回最小值,觉得这个挺有意思的,于 ...