当前位置: 首页 > 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;但其收敛…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...