深入剖析IPFS:点对点共享(5)- Libp2p

煤油灯科技2022-06-25 08:46

什么是 Libp2p?

从位置寻址系统转到点对点的内容寻址系统带来了很多挑战。具有防火墙和NAT的互联网被设计为在传统的Web2系统中(安全地)提供数据。

还有很多假设是内置的,比如假设每个人都依赖客户端-服务器架构,客户端连接的中央服务器,域名系统(DNS)用来给内容分配地址,然后客户端可以用它来访问该信息。

Libp2p是一个由协议、规范和库组成的模块化系统,可用于开发点对点网络应用程序。由于libp2p的架构方式,构建web2网络的许多需求和考虑不再适用。Libp2p最初是IPFS项目的一部分,并且仍然是IPFS的重要组成部分。作为IPFS的网络层,Libp2p为传输、安全、对等路由和内容发现等基本的点对点元素提供了灵活的解决方案。Libp2p在Go、JavaScript、Rust、Python和C++都有实现。

libp2p的超强能力是其模块化。在ProtoSchool的libp2p介绍教程中了解更多。

点对点的基础知识

这句话有很多东西需要解读!从最后一点开始——“点对点网络应用”。在这里可能是因为正在开发一个点对点系统,并且正在寻求帮助。同样,在这里也可能是因为刚开始探索点对点网络的世界。无论是哪种方式,我们都应该花上一分钟来定义我们的术语,这样我们就可以建立一些共享的词汇表。

点对点网络是参与者(被称为对等点或节点)在或多或少“平等的基础上”直接相互通信的网络。这并不一定意味着所有的对等点都是相同的;有些对等点在整个网络中可能有不同的角色。然而,点对点网络的一个决定性特征是,它们不需要一套特权“服务器”,这些服务器的行为与它们的“客户端”完全不同,就像占主导地位的客户端/服务器模型中的情况。

由于点对点网络的定义相当广泛,因此已经建立了许多不同类型的系统,都属于“点对点”的范畴。最突出的例子可能是bittorrent等文件共享网络,以及最近以点对点方式进行通信的区块链网络的扩散。

Libp2p能解决什么问题?

虽然点对点网络比客户端-服务器模型具有许多优势,但也存在一些独特的挑战,需要仔细思考和实践才能克服。

有了libp2p,就有可能在网络之间保留身份,克服网络审查问题,以及通过不同应用程序用来通信的不同传输协议上进行通信。

点对点的网络应用

点对点网络是一种参与者(称为“点”)作为平等的参与者直接相互通信的网络。这与传统的客户端—服务器模式形成了鲜明对比,在这种模式下,其中有特权的中央服务器可以向网络上的许多客户程序提供服务。这些客户程序通常不互相通信,它们只与中央服务器通信。

将Libp2p作为它们点对点应用程序的网络层的人,会立即腾出手来专注于自己的独特任务,因为他们知道Libp2p在一个分散的系统中处理大量的任务。同时,他们可以针对运输、身份和安全等关键要素定制Libp2p。一些使用Libp2p的应用是Filecoin、Parity和OpenBazaar。

Libp2p的特点

Addressing

Libp2p以一致的方式与许多不同的寻址方案一起工作。多地址(缩写为multiaddr)将多层寻址信息编码为单个“面向未来”的路径结构。例如,/ipv4/171.113.242.172/udp/162表示使用IPv4协议,地址为171.113.242.172,同时向162端口发送UDP数据包。

传输

用于将数据从一台机器转移到另一台机器的技术。传输是以两个核心操作来定义的,即监听和拨号。监听意味着可以接受来自其他对等方的传入连接。拨号是指打开监听对等方的的过程。Libp2p的核心要求之一是与传输无关,这意味着使用何种传输协议的决定权在应用程序的开发者手中(他们可能决定同时支持许多不同的传输)。

安全

Libp2p支持将传输连接升级为安全的加密通道。然后,可以信任正在通信的对等方的身份,并且没有第三方可以读取对话或在飞行中改变它。从IPFS 0.7开始,目前的默认值是TLS 1.3。以前默认的SECIO现在已被废弃,并在默认情况下禁用。

Peer identity

Peer Identity (通常写成PeerId)是对对等体网络中特定对等点的唯一引用。每个Libp2p对等点都有一个私钥,它对所有其他对等体保密,还有一个相应的公钥,与其他对等点共享。PeerId是对等方的公钥的加密哈希值。PeerId使用多重哈希格式进行编码。

Peer routing

Peer Routing是通过使用其他对等点的知识来发现对等点地址的过程。在对等体路由系统中,一个对等点可以给我们提供我们需要的地址(如果他们有),或者将我们的查询发送给另一个更有可能得到答案的对等点。Libp2p中的Peer routing使用分布式哈希表,使用Kademlia路由算法,迭代地将请求路由到更接近所需的PeerId。

内容发现

在内容发现中,需要得到一些特定的数据,但并不关心是谁发送的,因为能够验证其完整性。Libp2p为此提供了一个内容路由接口,主要的稳定实现使用与peer routing相同的基于Kademlia的DHT。

NAT traversal

网络地址转换(NAT)允许你在网络边界之间无缝移动流量。NAT将一个地址从一个地址空间映射到另一个地址空间。虽然NAT对于出站连接来说是透明的,但是对于入站连接的监听需要一些配置。Libp2p有以下几种主要的NAT traversal 方法可用:Automatic router configuration , Hole punching (STUN) , AutoNAT , and Circuit Relay (TURN) 。

Protocol

这些是用Libp2p本身构建的协议,使用核心Libp2p抽象,如传输、peer identity和寻址。每个Libp2p协议都有一个唯一的字符串标识符,用于连接首次打开时的协议协商过程。核心的Libp2p协议是Ping、Identify、secio、kad-dht和电路中继。

Stream multiplexing

通常缩写为stream muxing,这允许多个独立的逻辑流都共享一个公共的底层传输介质。Libp2p的stream multiplexer位于传输堆栈的“上方”,允许许多流在单个TCP端口或其他原始传输连接流动。目前的stream multiplexing实现是mplex、yamux、quic、spdy和muxado。

发布和订阅

通常缩写为pub-sub,这是一个对等点围绕他们感兴趣的主题进行聚集的系统。对某一主题感兴趣的对等点被称为订阅了该主题。对等点向主题发送消息,这些消息会被传递给订阅该主题的所有对等点。pub-sub的示例用途是聊天室和文件共享。关于更多细节和其他pub-sub设计的讨论,请参阅gossipsub规范。


原文链接:https://docs.ipfs.io/concepts/libp2p/


---煤油灯科技victorlamp.com翻译整理---

你可能也喜欢这些文章

科技互联网,科技,资讯,动态,洞察,量子,计算,AI,人工智能,机器人,区块链,Web3,分布式,操作系统,OS,芯片,视频,深度,论文