您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
如何从头开始构建类似BitTorrent的P2P网络?
节点,文件,过程如何从头开始构建类似BitTorrent的P2P网络?
发布时间:2020-12-06加入收藏来源:互联网点击:
接收节点的 HTTP 端点接收 POST 请求,并调用 Node 对象上的接收远程过程调用的方法。
此接收远程过程调用方法的返回值通过 HTTP 端点转换为 HTTP 响应,并发送回调用节点的网卡。
网络接收响应,并将其传递给节点 A,节点 A 反过来更改状态或对这些新信息做出响应。
正如你所见到的,从节点的角度来看,并没有什么变化:每个节点都发送和接收相同的信息,但是网络对象和 HTTP 端点抽象出节点之间的通信。
第三阶段:RPC/HTTP 在互联网环境下传递
一旦我们知道节点间的通信使用 HTTP 协议,我们的下一步就是将节点部署到互联网上的多个系统上。如果系统直接在公共互联网上运行,或者它们位于已配置打开端口的防火墙之后,这种方法就可以很好地工作。
NAT 防火墙后的节点则是另一回事。它们可以很好地加入网络并检索文件,但如果没有端口转发的话,它们就不能接收传入的 HTTP 连接,因此不能对网络做出贡献。
从长远来看,目标是基于 TCP / UDP 协议的远程过程调用和文件传输协议,同时支持 STUN 和 TURN 服务器来处理公共 IP / 端口发现和传入连接。但是,在这个项目中,我们需要一种快速绕过 NAT 和防火墙的方法。
为此,我们构建了对 Ngrok 的支持,这是一个第三方隧道服务,这样,防火墙后面的节点就可以成为我们网络中完全正常运行、功能齐全的成员。
灵活的节点实例化和启动脚本
我们意识到现在有许多不同的节点配置 / 环境需要支持和测试。此外,我们还需要一种能够在这些配置之间快速、无缝切换的方法。
在每个环境中,一个节点广播它的 IP / 端口,以及它所托管的每个切片或种子的完整 URL / 路径。
如果我们只在本地环境中工作的话,那么所有节点都在不同的 TCP 端口从“本地”进行广播。
如果节点直接在互联网上,它应该广播自己的公共 IP 和端口。
如果节点具有完全限定的域名,那么该节点应该广播该域名,而不是数字 IP 地址。
如果节点位于防火墙之后,且防火墙已正确配置用于 NAT 转换 / 端口转发,则该节点仍然可以依赖它的公共 IP 和端口。
如果节点位于没有转发端口的防火墙后面,则需要:
建立到 Ngrok 服务器的隧道,并注意到它唯一的 Ngrok 地址,这样它就可以将地址广播给其他节点。
要知道它是一个 “Leech” 节点,而不是广播它所托管的任何文件的位置信息。
我们确定了节点可能拥有的许多配置,并创建了环境变量来表示这些选项。我们的节点实例化代码对这些变量做出反应,我们设计了一系列 Bash 脚本,来为我们工作的每个环境标准化这些配置:测试、本地、局域网、广域网等。
系统架构
我们最终的系统架构如下所示:
顶级对象是 XorroNode,它是一个模块化的 Sinatra 应用程序。
每个 XorroNode 包含:
一个单独的 Kademlia 节点,负责维护自己的路由表和分布式哈希表。
用于向其他节点发起远程过程调用的网卡。
用于从其他节点、Web UI 和文件传输接收远程过程调用的 Sinatra 端点。
用于文件接收、切分和清单文件的创建。谢谢
上一篇:两个女孩同时爱上了一个男孩,而且谁也不肯放手,他该怎么办?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |