论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
使用 Async Rust 构建简单的 P2P 节点
使用 Async Rust 构建简单的 P2P 节点
西河刘卡车医
论坛元老
|
2023-5-21 17:31:05
|
显示全部楼层
|
阅读模式
楼主
主题
1926
|
帖子
1926
|
积分
5778
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
使用 Async Rust 构建简单的 P2P 节点
P2P 简介
P2P:peer-to-peer
P2P 是一种网络技术,可以在不同的计算机之间共享各种计算资源,如 CPU、网络带宽和存储。
P2P 是当今用户在线共享文件(如音乐、图像和其他数字媒体)的一种非常常用的方法。
Bittorrent 和 Gnutella 是流行的文件共享 p2p 应用程序的例子。以及比特币和以太坊等区块链网络。
它们不依赖中央服务器或中介来连接多个客户端。
最重要的是,它们利用用户的计算机作为客户端和服务器,从而将计算从中央服务器上卸载下来。
传统的分布式系统使用 Client-Server 范式来部署
P2P 是另一种分布式系统
在 P2P 中,一组节点(或对等点,Peer)彼此直接交互以共同提供公共服务,而无需中央协调器或管理员
P2P 系统中的每个节点(或 Peer)都可以充当客户端(从其他节点请求信息)和服务器(存储/检索数据并响应客户端请求执行必要的计算)。
P2P 网络中的所有节点不必完全相同,一个关键特征将 Client-Server 网络与 P2P 网络区分开来:缺乏具有唯一权限的专用服务器。在开放、无许可的 P2P 网络中,任何节点都可以决定提供与 P2P 节点相关的全部或部分服务集。
P2P 的特点
与 Client-Server 网络相比,P2P 网络能够在其上构建不同类别的应用程序,这些应用程序是无许可、容错和抗审查的。
无许可:因为数据和状态是跨多个节点复制的,所以没有服务器可以切断客户机对信息的访问。
容错性:因为没有单点故障,例如中央服务器。
抗审查:如区块链等网络。
P2P 计算还可以更好地利用资源。
P2P 的复杂性
构建 P2P 系统要比传统 Client-Server 的系统复杂
传输:P2P 网络中的每个 Peer 都可以使用不同的协议,例如HTTP(s)、TCP、UDP等。
身份:每个 Peer 都需要知道其想要连接并发送消息的 Peer 的身份。
安全性:每个 Peer 都应该能够以安全的方式与其他 Peer 通信,而不存在第三方拦截或修改消息的风险等。
路由:每个 Peer 可以通过各种路由(例如数据包在 IP 协议中的分布方式)从其他 Peer 接收消息,这意味着如果消息不是针对自身的,则每个 Peer 都应该能够将消息路由到其他 Peer。
消息传递:P2P 网络应该能够发送点对点消息或组消息(以发布/订阅模式)。
P2P 的要求 - 传输
TCP/IP 和 UDP 协议无处不在,在编写网络应用程序时非常流行。但还有其他更高级别的协议,如 HTTP(TCP上分层)和 QUIC(UDP上分层)。
P2P 网络中的每个 Peer 都应该能够启动到另一个节点的连接,并且由于网络中 peer 的多样性,能够通过多个协议监听传入的连接。
P2P 的要求 - Peer 身份
与 web 开发领域不同,在 web 开发领域中,服务器由唯一的域名标识(例如 www.rust-lang.org,然后使用域名服务将其解析为服务器的IP地址)
P2P 网络中的节点需要唯一身份,以便其他节点可以访问它们。
P2P 网络中的节点使用公钥和私钥对(非对称公钥加密)与其他节点建立通信。
P2P 网络中的节点的身份称为 PeerId,是节点公钥的加密散列。
P2P 的要求 - 安全
加密密钥对和 PeerId 使节点能够与它的 peers 建立安全、经过身份验证的通信通道。但这只是安全的一个方面。
节点还需要实现授权框架,该框架为哪个节点可以执行何种操作建立规则。
还有需要解决的网络级安全威胁,如 sybil 攻击(其中一个节点运营商利用不同身份启动大量节点,以获得网络中的优势地位)或 eclipse 攻击(其中一组恶意节点共谋以特定节点为目标,使后者无法到达任何合法节点)。
P2P 的要求 - Peer 路由
P2P 网络中的节点首先需要找到其他 peer 才能进行通信。这是通过维护 peer 路由表来实现的,该表包含对网络中其他 peer 的引用。
但是,在具有数千个或更多动态变化的节点(即节点加入和离开网络)的 P2P 网络中,任何单个节点都难以为网络中的所有节点维护完整而准确的路由表。Peer 路由使节点能够将不是给自己准备的消息路由到目标节点。
P2P 的要求 - 消息
P2P 网络中的节点可以向特定节点发送消息,但也可以参与广播消息协议。
例如,发布/订阅,其中节点注册对特定主题的兴趣(订阅),发送该主题消息的任何节点(发布)都由订阅该主题的所有节点接收。这种技术通常用于将消息的内容传输到整个网络。
P2P 的要求 - 流多路复用
流多路复用(Stream multiplexing)是通过公共通信链路发送多个信息流的一种方法。
在 P2P 的情况下,它允许多个独立的“逻辑”流共享一个公共 P2P 传输层。
当考虑到一个节点与不同 peers 具有多个通信流的可能性,或者两个远程节点之间也可能存在多个并发连接的可能性时,这一点变得很重要。
流多路复用有助于优化 peer 之间建立连接的开销。
注意:多路复用在后端服务开发中很常见,其中客户端可以与服务器建立底层网络连接,然后通过底层网络连接多路复用不同的流(每个流具有唯一的端口号)。
Libp2p
libp2p 是一个由协议、规范和库组成的模块化系统,它支持 P2P 应用程序的开发。
它目前支持三种语言:JS、Go、Rust
未来将支持 Haskell、Java、Python等
它被许多流行的项目使用,例如:IPFS、Filecoin 和 Polkadot 等。
Libp2p 的主要模块
传输(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 发送消息。
P2P 节点的身份
P2P Node
PeerId: 12d3k.....
[code]~/rust via
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
西河刘卡车医
论坛元老
这个人很懒什么都没写!
楼主热帖
【容器~原始真解】Docker —— 容器的 ...
轻量级CI/CD发布部署环境搭建及使用_06 ...
工行、建行、农行的 IT 架构是什么样的 ...
全双工与半双工技术剖析
PHP判断远程文件是否存在的四种方法 ...
超融合一体机上新,打通信创落地的“顶 ...
Spring--循环依赖的原理(四)--为什么用 ...
继承和多重继承
MySQL高可用架构搭建实战
一文了解华为FusionInsight MRS HBase ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
前端开发
快速回复
返回顶部
返回列表