当前位置: 首页 > news >正文

P2P 网络 简单研究 1

起因, 目的:

P2P 网络, 一道题。题目描述, 在下面。
P2P 网络,我以前只是听说过,并不深入。如果我有5台电脑的话,我也想深入研究一下。

P2P 简介:

P2P(Peer-to-Peer)网络是一种分布式网络架构,其中所有节点(即网络中的计算机或设备)作为对等节点(peers),既可以作为客户端请求资源,也可以作为服务器向其他节点提供资源。与传统的客户端-服务器架构不同,P2P网络没有中央服务器或单一控制点,所有参与的节点都有相同的地位。


一、P2P网络的工作原理

在P2P网络中,每个节点都可以:

  • 上传(提供资源):如共享文件、数据块、计算资源。
  • 下载(请求资源):从其他节点获得需要的资源。

数据或资源在多个节点之间分散存储。即使某些节点离线,其他节点仍可以继续为网络提供服务。常见的P2P网络采用动态查找算法(如DHT,即分布式哈希表)来高效地寻找目标资源。


二、P2P网络的分类

  1. 纯P2P网络(Pure P2P)

    • 所有节点地位完全平等,没有中央服务器。
    • 优点:真正的去中心化,系统可靠性高。
    • 缺点:节点的查找可能会更复杂。
    • 例子:早期的Napster、Gnutella网络。
  2. 混合P2P网络(Hybrid P2P)

    • 存在部分中央服务器或超级节点用于协调或加速资源发现。
    • 优点:资源查找更高效。
    • 缺点:部分依赖中央组件,去中心化程度较低。
    • 例子:Skype(早期版本)、BitTorrent。

三、P2P网络的优缺点

优点:

  1. 去中心化:没有单点故障,即使部分节点离线,网络依然可以运行。
  2. 可扩展性强:节点越多,资源提供和网络吞吐量越大。
  3. 高效的资源利用:用户不仅消费资源,还贡献资源,形成网络的自我维持。
  4. 容错性强:数据存储在多个节点上,某些节点失效时不会导致资源丢失。

缺点:

  1. 安全性风险:由于缺乏集中管理,网络容易成为恶意软件传播和非法活动的温床。
  2. 数据一致性问题:节点之间的数据同步困难,可能出现版本冲突或数据丢失。
  3. 带宽和性能限制:部分节点设备性能较弱,可能影响整体网络效率。
  4. 法律和监管问题:由于资源匿名共享,P2P网络常涉及版权侵权等法律风险。

四、P2P网络的应用

  1. 文件共享

    • BitTorrent:用户可以下载文件的多个部分,并从不同节点中获取数据。
    • eDonkey/eMule:分布式的文件分享网络。
  2. 即时通信和VoIP

    • Skype(早期):利用超级节点进行点对点语音和视频传输。
  3. 区块链

    • 比特币和以太坊等加密货币使用P2P网络进行分布式账本维护,每个节点存储完整的区块链副本。
  4. 分布式计算

    • SETI@home 等项目通过P2P方式将计算任务分发到全球各地的计算机上处理。
  5. 视频和内容分发

    • WebRTC:用于浏览器之间的点对点连接,实现实时视频和文件共享。

五、P2P网络的关键技术

  1. 分布式哈希表(DHT)

    • 用于高效地存储和查找资源,例如Kademlia协议。
  2. 数据分片和冗余

    • 大文件被分割成小块存储在多个节点上,提供冗余防止数据丢失。
  3. 节点发现和路由

    • 使用协议如Chord、Pastry等来实现快速的节点搜索和消息传递。

P2P网络通过去中心化和资源共享的模式,广泛应用于文件分发、实时通信、加密货币等领域。但由于安全、版权等问题,它也面临着一定的挑战。未来,P2P技术在区块链分布式云计算中的应用前景非常广阔。

P2P 一个计算题

问题描述:

P2P.
A server distributes a file with the size of 10^9 bytes to n hosts.
The upload rate of the server is 3.5 Mbps.
The i-th host (i = 1,2,…,n) has a download rate of 0.5i Mbps.
For all hosts, the upload rate is 1 Mbps.
Calculate the minimum distribution time as a function of n for P2P distribution and clientserver distribution,
and plot the two curves.
(n = 1,2,…,100).


解答过程:

1. Client-Server 公式

T C S ( n ) = 1 0 9 × 8 3.5 × 1 0 6 = 8 × 1 0 9 3.5 × 1 0 6 秒 T_{CS}(n) = \frac{10^9 \times 8}{3.5 \times 10^6} = \frac{8 \times 10^9}{3.5 \times 10^6} \, \text{秒} TCS(n)=3.5×106109×8=3.5×1068×109

这是计算将 1GB 文件(即 (10^9 \times 8) 比特),通过 3.5 Mbps 上传速度传输所需的时间。


2. P2P 和 Client-Server 模式的时间计算公式依据

这些公式的来源基于 计算机网络领域的经典理论,特别是:

  1. Client-Server 模式

    • 服务器的总上传速度决定了整个系统的瓶颈,因为所有数据都必须通过服务器传输。时间只与文件大小和服务器上传速度有关。

    公式
    T C S = 文件大小 (bits) 服务器上传速度 (bps) T_{CS} = \frac{\text{文件大小 (bits)}}{\text{服务器上传速度 (bps)}} TCS=服务器上传速度 (bps)文件大小 (bits)

  2. P2P 模式

    • 在 P2P 网络中,主机之间可以相互上传,所以总的分发速度不仅依赖于服务器,还依赖于所有主机的上传速度和下载速度。
    • 最小分发时间受两个瓶颈约束:
      • 下载瓶颈:所有主机的总下载速度决定了他们接收数据的速度。
      • 上传瓶颈:服务器和所有主机的上传速度决定了数据的供给速度。

    公式
    T P 2 P ( n ) = max ⁡ ( 文件大小 (bits) ∑ i = 1 n 主机的下载速度 , 文件大小 (bits) 总上传速度 ) T_{P2P}(n) = \max\left(\frac{\text{文件大小 (bits)}}{\sum_{i=1}^{n} \text{主机的下载速度}}, \frac{\text{文件大小 (bits)}}{\text{总上传速度}}\right) TP2P(n)=max(i=1n主机的下载速度文件大小 (bits),总上传速度文件大小 (bits))

  3. 画图:

代码 2 xxx
import numpy as np
import matplotlib.pyplot as plt# 文件大小 (字节 -> bit)
file_size = 10 ** 9 * 8  # 1 GB = 8 * 10^9 bits# 服务器的上传速度 (Mbps -> bps)
server_upload = 3.5 * 10 ** 6# 每个主机的上传速度 (Mbps -> bps)
host_upload = 1 * 10 ** 6# 定义 n 的范围
n_values = np.arange(1, 101)  # 从 1 到 100# Client-Server 模式的分发时间 (恒定)
T_CS = file_size / server_upload# P2P 模式的分发时间计算
T_P2P = []
for n in n_values:# 总下载速度total_download = np.sum([0.5 * i * 10 ** 6 for i in range(1, n + 1)])# 总上传速度 (包括服务器和所有主机)total_upload = server_upload + n * host_upload# 计算 P2P 模式的时间time_p2p = max(file_size / total_download, file_size / total_upload)T_P2P.append(time_p2p)# 绘制两种分发时间的曲线
plt.figure(figsize=(10, 6))
plt.plot(n_values, [T_CS] * len(n_values), label='Client-Server time', linestyle='--', color='red')
plt.plot(n_values, T_P2P, label='P2P time', color='blue')
plt.xlabel('server nums (n)')
plt.ylabel('dis time (seconds)')
plt.title('P2P vs Client-Server time cost')
plt.legend()
plt.grid(True)
plt.show()

分发文件--------耗时对比
分发文件-耗时对比

P2P 聊天过程

老哥留步,支持一下。

请求支持

相关文章:

P2P 网络 简单研究 1

起因, 目的: P2P 网络, 一道题。题目描述, 在下面。 P2P 网络,我以前只是听说过,并不深入。如果我有5台电脑的话,我也想深入研究一下。 P2P 简介: P2P(Peer-to-Peer)网络是一种分…...

RAG(检索增强生成)面经(1)

1、RAG有哪几个步骤? 1.1、文本分块 第一个步骤是文本分块(chunking),这是一个重要的步骤,尤其在构建与处理文档的大型文本的时候。分块作为一种预处理技术,将长文档拆分成较小的文本块,这些文…...

卫爱守护|守护青春,送出温暖

2024年10月10日,艾多美爱心志愿者来到校园。艾多美“卫艾守护”项目于吉林省白山市政务大厅会议室举办了捐赠仪式,东北区外事部经理黄山出席了捐赠仪式仪式,为全校女同学捐赠了青春关爱包。 此次捐赠,面向吉林省自山市第十八中学、…...

ubuntu-24.04.1 系统安装

使用VMware虚拟机上进行实现 官网下载地址: https://cn.ubuntu.com/download https://releases.ubuntu.com 操作系统手册: https://ubuntu.com/server/docs/ (里面包含安装文档) 安装指南(详细)&#xff1a…...

华为OD机试真题---生成哈夫曼树

华为OD机试中关于生成哈夫曼树的题目通常要求根据给定的叶子节点权值数组,构建一棵哈夫曼树,并按照某种遍历方式(如中序遍历)输出树中节点的权值序列。以下是对这道题目的详细解析和解答思路: 一、题目要求 给定一个…...

小红书新ID保持项目StoryMaker,面部特征、服装、发型和身体特征都能保持一致!(已开源)

继之前和大家介绍的小红书在ID保持以及风格转换方面相关的优秀工作,感兴趣的小伙伴可以点击以下链接阅读~ 近期,小红书又新开源了一款文生图身份保持项目:StoryMaker,是一种个性化解决方案,它不仅保留了面部的一致性&…...

Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控

Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控 文章目录 Docker 环境下 GPU 监控实战:使用 Prometheus 实现 DCGM Exporter 部署与 GPU 性能监控一 查看当前 GPU 信息二 dcgm-exporter 部署1)Docker r…...

联想小新打印机M7328w如何解决卡纸,卡了一个小角在里面,然后再次打印的时候,直接卡住,不能动了。灯显示红色。

1、今天打印一张纸,应该是不小心放歪了,打出来的也是有些斜,然后打出来缺少了个角。 图中的小纸就是从打印机的左边的角,用镊子取出来的,手不太好拿,所以拿个工具比较合适。 2、那么碰到这种卡纸应该如何处…...

软件可靠性之MTTR、MTBF、MTTF、MTTD区别

一.概念解释 1.MTBF(Mean Time Between Failures):指两次故障之间的平均时间,通常用于衡量设备或系统的可靠性。 2.MTTF(Mean Time to Failure):指设备或系统的平均无故障运行时间。 3.MTTR&am…...

Qt-QDockWidget浮动窗口相关操作(49)

目录 描述 使用 描述 在 Qt 中,浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗口⼀般是位于核心部件的周围,可以有多个。 使用 创建我们可以参考下面的语法格式 使用起来也很简单,不过只能创建一个 Q…...

图形用户界面-GUI的基本概念和组件之一

前言 GUI(Graphical User Interface,图形用户界面,简称图形界面)编程实际是引用java.awt或javax.swing类包中的窗口类、控制组件类、布局类、事件类等,通过将控制组件类,如菜单、按钮、文本框等&#xff0c…...

【MATLAB代码】基于RSSI原理的蓝牙定位程序(N个锚点、三维空间),源代码可直接复制

文章目录 介绍主要功能技术细节适用场景程序结构运行截图源代码详细教程:基于RSSI的蓝牙定位程序1. 准备工作2. 代码结构2.1 清理工作环境2.2 定义参数2.3 生成锚点坐标2.4 定义信号强度与距离的关系2.5 模拟未知点的位置2.6 定位函数2.7 绘图2.8 输出结果2.9 定义定位函数3. …...

Pyenv 介绍和安装指南 - Ubuntu 24

原文: https://www.qiulin-dev.top/articles/81aab753-0d0e-470c-b08f-2643c876841b 1. Pyenv 介绍 Pyenv 是一个非常流行的 Python 版本管理工具,它可以让你在同一台机器上安装并管理多个不同的 Python 版本,解决了不同项目需要不同 Python…...

zookeeper实现RMI服务,高可用,HA

这可不是目录 1.RMI原理与说明1.1含义1.2流程1.3rmi的简单实现1.4RMI的局限性 2.zookeeper实现RMI服务(高可用、HA)2.1实现原理2.2高可用分析2.3zookeeper实现2.3.1代码分析2.3.2公共部分2.3.3服务端2.3.4客户端2.3.5运行与部署2.3.6效果展示与说明 1.RM…...

通过Express + Vue3从零构建一个用户认证与授权系统(一)项目结构设计

项目背景 本文基于 TypeScript Express Vue3 ,从零构建一个用户认证与授权管理系统。这个系统的核心部分包括前端、后端和数据库。我们需要确保各部分合理分层、易于维护和扩展,让我们一步步去实现我们的系统。 一、项目结构设计 1. 前端 (Vue 3 E…...

JavaScript 第13章:Ajax 与异步请求

在Web开发中,异步请求是一种非常重要的技术,它可以让网页在不重新加载的情况下与服务器交互。本章将介绍两种常用的异步请求技术:XMLHttpRequest 和 Fetch API,以及它们如何用于处理JSON数据交换,并通过一个实战案例—…...

速卖通商品详情接口技术解析及Python代码示例

速卖通商品详情接口技术解析及Python代码示例 速卖通(AliExpress)作为全球知名的跨境电商平台,其开放平台提供了丰富的API接口,允许开发者集成速卖通的各项功能,实现商品搜索、详情查询、订单管理等一系列操作。本文将…...

邻接表的有向网(C语言代码)

#include <stdio.h> #include <stdlib.h> #define MVNum 100 //最大顶点数 //边表结构体 typedef struct ArcNode { //表结点 int adjvex; //邻接点的位置 struct ArcNode* nextarc; //指向下一个…...

大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成

大模型生成PPT大纲优化方案&#xff1a;基于 nVidia NIM 平台的递归结构化生成 待解决的问题 生成PPT大纲是一种大模型在办公场景下应用的常见需求。 然而&#xff1a; 目前直接让大模型生成大纲往往是非结构化的&#xff0c;输出格式多样&#xff0c;难以统一和规范&#…...

MRSO算法(JCR2区)

原论文摘要&#xff1a;智能技术的快速发展促使利用自然行为来解决复杂问题的优化算法得以发展。其中&#xff0c;鼠群优化算法&#xff08;Rat Swarm Optimizer&#xff0c;RSO&#xff09;受老鼠的社会和行为特征启发&#xff0c;在各个领域已展现出潜力&#xff0c;但其收敛…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...