Rust-libp2p

一、libp2p
-
是一个由协议、规范和库组成的模块化系统,支持P2P应用程序的开发。

二、主要模块
-

  • 传输(Transport):负责一个peer到另一个peer的数据的实际传输和接收
  • 身份(Identity):libp2p使用公钥密码(PKI)作为peer节点身份的基础,使用加密算法为每个节点生成唯一的peer id。
  • 安全(Security):节点使用其私钥对消息进行签名,节点之间的传输连接可以升级为安全的加密通道,以便远程peer可以相互信任,并且没有第三方可以拦截他们之间的通信。
  • Peer发现(Peer Discovery):允许peer在libp2p网络中查找并相互通信。
  • Peer路由(Peer Routing):使用其他peer的知识信息来实现与peer节点通信。
  • 内容发现(Content Discovery):):在不知道哪个peer节点拥有该内容的情况下,允许peer节点从其他peer节点获取部分内容。
  • 消息(Messaging):其中发布/订阅:允许向某个主题感兴趣的一组peer发送消息。

三、多地址(Multiaddresses)
-
在libp2p中,peer的身份在其整个生命周期内都是稳定且可验证的。
但是,libp2p区分了peer的身份和位置。

  • peer的身份是peer id。
  • peer的位置是可以到达对等方的网络地址。

    例如,可以通过TCP,websocket,QUIC或者其他任何协议访问peer。libp2p将这些网络地址编码成一个字描述格式,他叫multiaddress(multiaddr)。因此,在libp2p中,multiaddress表示peer的位置。

四、Swarm和网络行为
-
Swarm是libp2p中给定P2P节点内的网络管理器模块。
他维护从给定节点到远程节点的所有活动和挂起连接,并管理已打开的所有子流的状态。

五、Swarm的结构和上下文环境
-
Swarm代表了一个低级接口,并提供了对libp2p网络的细粒度控制。Swarm是使用传输、网络行为和节点peer id的组合构建的。

github

传输(Transport)会指明如何在网络上发送字节,而网络行为会指明发送什么字节,发送给谁。
需要注意的是,同一套代码在libp2p网络的所有节点上运行。

六、发现peer
-
mDNS是由RFC6762定义的协议,他将主机名解析为ip地址。在libp2p中,他用于发现网络上的其他节点。
在libp2p中实现的网络行为mDNS将自动发现本地网络上的其他libp2p节点。