【P2P】

文章目录

  • P2P应用
    • 纯P2P架构
    • 文件分发:C/S vs P2P
      • 文件分发时间:C/S模式
      • 文件分发时间:P2P模式
    • P2P文件分发:BitTorrent
    • P2P文件分发:BitTorrent
    • BitTorrent:请求,发送文件块
    • BitTorrent:tit-for-tat
    • P2P文件共享
    • 查询洪泛:Gnutella
    • Gnutella:协议
    • 利用不匀称性:KaZaA
    • KaZaA:查询
    • Kazaa小技巧
    • Distributed Hash Table (DHT)

P2P应用

纯P2P架构

  • 一个节点既是客户端又是服务器
  • 没有(或极少)一直运行的服务器
  • 任意端系统都可以直接通信
  • 利用peer的服务能力
  • Peer节点间歇上网,每次IP地址都有可能变化

例子:

  • 文件分发 (BitTorrent)
  • 流媒体(KanKan)
  • VoIP (Skype)

文件分发:C/S vs P2P

问题:从一台服务器分发文件(大小F)到N个peer需要多少时间?

  • Peer节点上下载能力是有限的

文件分发时间:C/S模式

  • 服务器传输:都是由服务器发送给peer,服务器必须顺序传输(上载)N个文件拷贝:
    在这里插入图片描述
  • 客户端:每个客户端必须下载一个文件拷贝
    在这里插入图片描述

文件分发时间:P2P模式

问题:从一台服务器分发文件(大小F)到N个peer需要多少时间?

  • Peer节点上下载能力是有限的资源

在这里插入图片描述

P2P文件分发:BitTorrent

  • 文件被分为一个个块256KB
  • 网络中这些peers发送文件块,相互服务

Torrent(洪流):节点的组,之间交换文件块
在这里插入图片描述

P2P文件分发:BitTorrent

  • Peer加入torrent:
    • 一开始没有块,但是将会通过其他节点处累积文件块
    • 向跟踪服务器注册,获得peer节点列表,和部分peer节点构成邻居关系 (“连接“)
  • 当peer下载时,该peer可以同时向其他节点提供上载服务
  • Peer可能会变换用于交换块的peer节点
  • 一旦一个peer拥有整个文件,它会(自私的)离开或者保留(利他主义)在torrent中

BitTorrent:请求,发送文件块

请求块:

  • 在任何给定时间,不同peer节点拥有一个文件块的子集
  • 周期性的,Alice节点向邻居询问他们拥有哪些块的信息
  • Alice向peer节点请求它希望的块,稀缺的块
    发送块:一报还一报tit-for-tat
  • Alice向4个peer发送块,这些块向它自己提供最大带宽的服务
  • 每个30秒:随机选择其他peer节点,向这个节点发送块

BitTorrent:tit-for-tat

(1) Alice “优化疏通” Bob
(2) Alice 变成了Bob的前4位提供者; Bob答谢Alice
(3) Bob 变成了Alice的前4提供者
更高的上载速率,发现更好的交易伙伴,获得更快的文件传输速率

在这里插入图片描述

P2P文件共享

  • 两大问题:
    • 如何定位所需资源
    • 如何处理对等方的
      加入与离开
  • 可能的方案
    • 集中
    • 分散
    • 半分散
      在这里插入图片描述
      在这里插入图片描述

查询洪泛:Gnutella

  • 全分布式
    • 没有中心服务器
  • 开放文件共享协议
  • 许多Gnutella客户端实现了Gnutella协议
    • 类似HTTP有许多的浏览器

覆盖网络:图

  • 如果X和Y之间有一个TCP连接,则二者之间存在一条边
  • 所有活动的对等方和边就是覆盖网络
  • 边并不是物理链路
  • 给定一个对等方,通常所连接的节点少于10个

Gnutella:协议

  • 在已有的TCP连接上发送查询报文
  • 对等方转发查询报文
  • 以反方向返回查询命中报文
    在这里插入图片描述
    在这里插入图片描述

利用不匀称性:KaZaA

  • 每个对等方要么是一个组长,要么隶属于一个组长
    • 对等方与其组长之间有TCP连接
  • 组长跟踪其所有的孩子的内容
  • 组长与其他组长联系
    • 转发查询到其他组长
    • 获得其他组长的数据拷贝
      在这里插入图片描述

KaZaA:查询

  • 每个文件有一个散列标识码和一个描述符
  • 客户端向其组长发送关键字查询
  • 组长用匹配进行响应:
    • 对每个匹配:元数据、散列标识码和IP地址
  • 如果组长将查询转发给其他组长,其他组长也以匹配进行响应
  • 客户端选择要下载的文件
    • 向拥有文件的对等方发送一个带散列标识码的
      HTTP请求

Kazaa小技巧

  • 请求排队
    • 限制并行上载的数量
    • 确保每个被传输的文件从上载节点接收一定量的带宽
  • 激励优先权
    • 鼓励用户上载文件
    • 加强系统的扩展性
  • 并行下载
    • 从多个对等方下载同一个文件的不同部分
    • HTTP字节范围首部
    • 更快地检索一个文件

Distributed Hash Table (DHT)

  • 哈希表
  • DHT方案
  • 环形DHT 以及覆盖网络
  • Peer波

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/614893.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java常用数据结构与集合

数据结构 数组: 内存地址连续检索效率高(可以通过下标访问成员)增删操作效率低(保证数据越界的问题,需动态扩容)长度固定,扩容的需要新的数组复制或者Arrays类的copyOf方法 链表 内存地址不连续查询快删除慢,因为需要移动指针又分双向链表…

基于Springboot的餐厅点餐系统

基于SpringbootVue的餐厅点餐系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 首页展示 菜品详情页 菜品信息 个人中心 后台管理 菜品信息管理 用户管理 菜…

为什么负载电流增加时电源电压会下降?

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 大家好,我是工程师看海。 在以前的文章中我总是提到当负载电流增加时,电源的输出电压会下降,很多同学在实…

Kubernetes学习笔记12

k8s核心概念:控制器: 我们删除Pod是可以直接删除的,如果生产环境中的误操作,Pod同样也会被轻易地被删除掉。 所以,在K8s中引入另外一个概念:Controller(控制器)的概念,…

mysql索引与优化问题

作为一个java程序员,mysql数据库面试应该是比较多的了;而关于数据库的面试,最多的就是性能问题,而以性能为起点,延伸出很多具体的问题。 我们使用第一性原理的方法来分析,为什么面试中一定会问数据库的索引…

70 个常用的GIS Python 库

由于其多功能性、广泛的库生态系统和用户友好的语法,Python 已成为地理信息系统 (GIS) 和遥感领域的主导语言。这个 70 个地理空间 Python 库的汇编展示了可用于 GIS 和遥感数据处理和分析的丰富工具包。 Python 在 GIS 中的重要性源于它处理复杂地理空间数据的能力…

【学习】软件测试人员使用Loadrunner进行性能测试的优势

在软件测试领域,性能测试是一项至关重要的环节,它关乎到软件系统的稳定性和用户体验。而在这其中,Loadrunner作为一款久经考验的性能测试工具,凭借其独特的优势,成为了众多企业和开发者眼中的“得力助手”。 首先&…

打造你的私有云盘:安全优先、支持分享 | 开源日报 No.222

nextcloud/server Stars: 25.2k License: AGPL-3.0 nextcloud/server 是一个安全的数据存储空间,可以存储文件、联系人、日历等,并在各设备之间同步。用户可以分享数据并通过应用商店扩展功能。该项目提供加密机制、HackerOne 悬赏计划和双因素认证以确…

2024阿里云学生服务器申请图文全流程,学生机免费续费攻略

2024年阿里云学生服务器免费申请,完成学生认证可以领取1个月免费学生机,完成任务可以再免费学费6个月时长,还可以领取高校计划学生300元无门槛优惠代金券,阿里云服务器网aliyunfuwuqi.com整理2024年最新阿里云大学生服务器申请入口…

2024年重庆市三支一扶考试报名详细流程

2024年重庆市三支一扶考试报名详细流程

【vue】defineEmits 传值 子传父

先行知识 【vue】导入组件【vue】defineProps 传数据 父传子 传值流程 App.vue <template><Header getWeb"emitsGetWeb" userAdd"emitsUserAdd"/><hr /><p>web.name: {{ web.name }}</p><p>web.url: {{ web.url }}&…

STL函数对象

1&#xff0c;函数对象 1.1 函数对象概念 概念&#xff1a; 重载函数调用操作符的类&#xff0c;其对象常称为函数对象函数对象使用重载的&#xff08;&#xff09;时&#xff0c;行为类似函数调用&#xff0c;也称为仿函数 本质&#xff1a; 函数对象&#xff08;仿函数&…