中科大计网学习记录笔记(十):P2P 应用
前言:
学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊
文章目录
- 2.6 P2P 应用
- 2.6.1 P2P 的基本理解
- 2.6.2 理论计算对比
- 2.6.3 P2P 文件共享
- 2.6.4 案例 —— BitTorrent
- 2.6.5 结构化的 P2P 架构
2.6 P2P 应用
💡 P2P(Peer-to-Peer,点对点)应用是一种允许直接通信和资源共享的网络应用程序。在P2P网络中,每个参与者都可以充当客户端和服务器,从而实现对等的通信和资源共享。
2.6.1 P2P 的基本理解
- P2P 网络架构中没有(或者极少)有一直运行的服务器,任意的端系统之间都可以实现直接的通信。
- 内容的上载和下载理由了
peer
节点的服务能力。
👉 常见的能够理由 P2P 架构来优化性能或者实现的案例有:
- 文件分发
- 流媒体
- VoIP(通过互联网协议进行语音通信)
💡 大多数大型的云盘应用通常采用混合架构,既包括 CS 架构,也包括 P2P 架构。
- 这种 混合架构 能够充分利用中心服务器提供的 稳定性 和 可靠性。
- 同时通过 P2P 技术在用户之间直接传输 文件块,从而降低了中心服务器的负载并提高了下载速度。
- 也就是说使用 P2P 架构不代表完全舍弃 CS 架构,两者混合使用会使得系统更加稳定。
2.6.2 理论计算对比
❓ 问题:从一台服务器上分发大小为 F
的文件到 N
个节点需要多少时间?
👉 这里暂时忽略掉传播延迟,这里仅考虑传输延迟也就是将数据传输到链路上的时间
👉 计算得出上载的时间为
-
N F u s \frac{NF}{u_s} usNF
-
也就是上传
N
个大小为F
的文件所需的时间
👉 用户下载的最长时间为
-
F d m \frac{F}{d_m} dmF
-
也就是文件的大小除以用户中最小的下载速度
这两个中的最大值就是 CS 模式下实现分发大小为 F
的文件到 N
个节点需要的最短时间即:
D ≥ m a x ( N F u s , F d m ) D \ge max (\frac{NF}{u_s} , \frac{F}{d_m}) D≥max(usNF,dmF)
随着用户量 N
增大,前一项会占据绝对的主导地位,这就导致 D
会随着 N
的增大而 线性的增长
👉 与 CS 模式不同的是 P2P 模式在随着 N
增大的时候其服务器的数量也会增大,即 us 会变为 Nus,最终会导致下载速度随着用户的增大变化不大。
即:
D ≥ m a x ( F u s , F d m , N F u s + ∑ u i ) D \ge max(\frac{F}{u_s}, \frac{F}{d_m}, \frac{NF}{u_s + \sum u_i}) D≥max(usF,dmF,us+∑uiNF)
速度对比:
2.6.3 P2P 文件共享
💡案例:
- Alice 在自己的电脑上运行 P2P 的客户端,然后她请求“双截棍.MP3”
- 应用程序自动显示有该资源的对等方(peer)
- 然后 Alice 随机选择其中一个对等方,文件从这个对等方中得到这个文件
- 而 Alice 得到这个文件后又可以作为一个服务器来供其他的对象下载。
❗ P2P 文件共享要解决的两大问题
- 如何定位所需要的资源
- 如何处理
peer
的加入和离开的记录
👉 有三种可能的方案:集中、分散、半分散
🍀 方案一:集中式的目录
- 以 Napster1 最初的设计来举例:最初的 Napster 最初采用了集中式的目录来解决上面的两个问题,即有一台集中式的目录服务器,当用户 上线 的时候会告知服务器她的 IP 地址和它所具有的内容,来提供目录服务和登记用户的上线和下线。
- 这种架构存在着几个问题
- 单点故障的问题:中央目录服务器如果挂掉就会导致单点故障
- 性能瓶颈的问题:用户量很大的时候集中式的目录服务器会变为性能的瓶颈
- 侵犯版权的问题
🍀 方案二:完全分布式
- 与Napster不同,Gnutella是一种分散式的P2P网络,没有单一的中心服务器。在Gnutella网络中,每个参与者都是一个 对等节点,它们彼此连接并共享文件。
- 邻居关系的建立和维护是Gnutella网络正常运行的关键部分,通过邻居关系可以快速的发送查询信息,而邻居又向它的其他邻居发送查询,指数级的扩散速度可以很快的使查询信息 遍布全网,称为泛洪查询。(解决了目录的问题)
- 泛洪查询可能会导致问题查询在网络中一直传播,可以采用限制 TTL 或者记录查询请求的方式解决。
- 邻居关系的建立:在应用安装的时候,配置文件中配置几个经常在线上的节点,当一个节点上线的时候向这个节点发送请求,这几个经常在线的节点继续向它的邻居节点发请求,这些节点最终都会向上线节点发送回复,上线的节点在这些节点中挑选几个作为自己的邻居节点。
🍀 方案三:混合型的方式
- KaZaa是一个基于P2P技术的文件共享应用程序,KaZaa允许用户共享和下载各种类型的文件,如音乐、视频、图像和软件。
- 每个对等方要么是一个组长,要么隶属于一个组长,对等方与组长之间有 TCP 连接,组长之间也有 TCP 连接,通过组长转发查询到其他组长来查询到哪个主机有这个资源。
2.6.4 案例 —— BitTorrent
💡 BitTorrent是一种用于文件共享的 协议和程序,它允许用户通过点对点的方式快速下载和分享文件。相比传统的直接下载方式,BitTorrent可以更有效地利用带宽,提高下载速度,并降低对中央服务器的依赖。
👉 BitTorrent协议的工作原理是将一个文件分割成小块,然后将这些小块分布到网络中的多个用户之间进行共享。
- 当一个用户想要下载 某个文件 时,他会连接到一个称为
tracker
的服务器,获取 与该文件相关的信息,如其他用户的IP地址和已经下载的文件块。 - 然后,用户会与其他拥有该文件的用户建立点对点的连接,从他们那里下载缺失的文件块,直到完成整个文件的下载。
👉 BitTorrent在文件的管理和下载过程中利用了一种称为位图(bitmap)的数据结构。
- 位图是一种将每个文件块的下载状态表示为二进制位的数据结构。
- 在BitTorrent中,每个文件被划分为固定大小的块,每个块的下载状态(已下载或未下载)由位图中的相应位表示。
- 当BitTorrent客户端连接到tracker服务器时,它会获取一个包含所有文件块的位图。这样,客户端就知道了其他对等节点所拥有的文件块和哪些文件块尚未下载。客户端使用这些信息来选择与哪些对等节点建立连接以下载所需的文件块。
- 在下载过程中,当客户端成功下载一个文件块时,它会将相应的位图位设置为1,表示该文件块已经下载。如果客户端检测到某个文件块下载失败或损坏,则会将相应的位图位重置为0,以便重新下载该文件块。
👉 Tit-For-Tat 机制
- 一个节点 Alice 在提供服务的时候收到了八十个请求,这个 peer 会优先提供给比如说前面给这个节点提供服务最好的四个节点。
- 等到传输一段时间后会随机选择一个节点为其提供服务,主要是为了优化疏通网络,当随机选择的这个节点接收到了 Alice 的服务的时候会在下个 Alice 可能向它发送的请求中将 Alice 排到靠前的位置
2.6.5 结构化的 P2P 架构
💡 结构化的P2P架构是一种按照特定规则组织节点和数据的对等网络结构。在结构化P2P网络中,节点通常按照一定的拓扑结构连接,使得节点之间可以高效地定位和交换信息。
👉 拓扑结构:结构化P2P网络通常基于一定的拓扑结构
- 如分布式哈希表(DHT)、树形结构、超立方体等。这些结构能够有效地管理节点和数据的分布。
👉 节点标识:每个节点在结构化P2P网络中都有一个唯一的标识符
- 通常是通过哈希函数生成的。这个标识符可以用来定位节点的位置和数据的存储位置。
Napster是一个历史悠久的音乐共享服务,是最早期的P2P文件共享应用之一;最初作为一个音乐交换服务,允许用户共享和下载MP3音乐文件。 ↩︎
相关文章:

中科大计网学习记录笔记(十):P2P 应用
前言: 学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程 该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信…...

Python算法题集_LRU 缓存
Python算法题集_LRU 缓存 题146:LRU 缓存1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【队列字典】2) 改进版一【有序字典】3) 改进版二【双向链表字典】 4. 最优算法 本文为Python算法题集之一的代码示例 题146:LRU …...
局部加权回归
局部加权回归(Local Weighted Regression)是一种非参数回归方法,用于解决线性回归模型无法很好拟合非线性数据的问题。它通过给不同的样本赋予不同的权重,使得在拟合模型时更加关注靠近目标点附近的样本数据。 局部加权回归的基本…...

国内国外最好的数据恢复软件评测,哪种数据恢复软件最有效?
随着数字和商业格局在多个领域不断发展,变得更加依赖数据,威胁数据的努力也同样存在。 计算机病毒、勒索软件和恶意软件是导致数据丢失的主要威胁,可能会让您的组织陷入停机或严重影响您的工作效率。而解决这个问题的方法就是数据恢复。 什么…...

bugku 1
Flask_FileUpload 文件上传 先随便传个一句话木马 看看回显 果然不符合规定 而且发现改成图片什么的都不行 查看页面源代码,发现提示 那应该就要用python命令才行 试试ls 类型要改成图片 cat /flag 好像需要密码 bp爆破 根据提示,我们先抓包 爆破 …...

C++ bfs再探迷宫游戏(五十五)【第二篇】
今天我们用bfs解决迷宫游戏。 1.再探迷宫游戏 前面我们已经接触过了迷宫游戏,并且学会了如何使用 DFS 来解决迷宫最短路问题。用 DFS 求解迷宫最短路有一个很大的缺点,需要枚举所有可能的路径,读入的地图一旦很大,可能的搜索方案…...

【Spring原理进阶】SpringMVC调用链+JSP模板应用讲解
🎉🎉欢迎光临🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟特别推荐给大家我的最新专栏《Spring 狂野之旅:底层原理高级进阶》 🚀…...

23种计模式之Python/Go实现
目录 设计模式what?why?设计模式:设计模式也衍生出了很多的新的种类,不局限于这23种创建类设计模式(5种)结构类设计模式(7种)行为类设计模式(11种) 六大设计原则开闭原则里氏替换原…...

Qt可视化大屏布局
科技大屏现在非常流行,这里分享一下某个项目的大屏布局(忘了源码是哪个博主的了) 展示 这个界面整体是垂直布局,分为两个部分,标题是一个部分,然后下面的整体是一个layout布局,为另外一部分。 l…...
re:从0开始的CSS之旅 14. 显示模式的切换
1. 两个属性 display 属性可以用于转换元素的显示模式 可选值: block 转换为块元素 inline 转换为行内元素 inline-block 转换为行内块元素 none 不显示元素,并且不占用元素的位置 visibility 属性用于设置元素是否显示 可选值: visible 显示…...
K8S系列文章之 [Alpine基础环境配置]
用户手册:Alpine User Handbook 官方WIKI:Alpine Linux WIKI 安装 安装的实际逻辑是通过 setup-alpine 脚本去调用其他功能的脚本进行配置,可以通过 vi 查看脚本。如果某个部分安装失败,可退出后单独再次执行。通过镜像文件&a…...

单页404源码
<!doctype html> <html> <head> <meta charset"utf-8"> <title>简约 404错误页</title><link rel"shortcut icon" href"./favicon.png"><style> import url("https://fonts.googleapis.co…...

MySQL-运维
一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysql启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的…...

Waymo数据集下载与使用
在撰写论文时,接触到一个自动驾驶数据集Waymo Dataset 论文链接为:https://arxiv.org/abs/1912.04838v7 项目链接为:https://github.com/waymo-research/waymo-open-dataset 数据集链接为:https://waymo.com/open waymo提供了两种…...
蓝桥杯每日一题----素数筛
素数筛 素数筛的作用是筛选出[2,N]范围内的所有素数,本次主要讲解两种方法,分别是埃氏筛和欧拉筛。证明时会提到唯一分解定理,如果不知道的小伙伴可以先去学一学,那我们开始啦! 1.埃氏筛 主要思想:当找到…...

20240212请问如何将B站下载的软字幕转换成为SRT格式?
20240212请问如何将B站下载的软字幕转换成为SRT格式? 2024/2/12 12:47 百度搜索:字幕 json 转 srt json srt https://blog.csdn.net/a_wh_white/article/details/120687363?share_token2640663e-f468-4737-9b55-73c808f5dcf0 https://blog.csdn.net/a_w…...

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)
文章目录 6.1 使用 CSS 变量进行设计:魔法配方的调配6.1.1 基础知识6.1.2 重点案例:创建可定制的主题6.1.3 拓展案例 1:响应式字体大小6.1.4 拓展案例 2:使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…...
2024-02-11 多进程、多线程 work
1. 创建一个多进程服务器和多线程服务器 a. 多进程 #include<myhead.h> #define PORT 9999 //端口号 #define IP "192.168.125.113" //IP地址//定义信号处理函数,用于回收僵尸进程 void handler(int signo) {if(signo S…...

详解结构体内存对齐及结构体如何实现位段~
目录 编辑 一:结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏,知来者犹可…...

Linux网络编程——tcp套接字
文章目录 主要代码关于构造listen监听accepttelnet测试读取信息掉线重连翻译服务器演示 本章Gitee仓库:tcp套接字 主要代码 客户端: #pragma once#include"Log.hpp"#include<iostream> #include<cstring>#include<sys/wait.h…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...