P2P原理简介

来源:互联网 发布:app p图软件 编辑:程序博客网 时间:2024/06/06 00:34

1 纯P2P架构

  • Peer-to-peer
  • 没有服务器
  • 任意端系统之间直接通信
  • 节点阶段性接入Internet
  • 节点可能更换IP地址

这里写图片描述

2 文件分发:客户机/服务器 vs. P2P

问题 : 从一个服务器向N个节点分发一个文件需要多长时间?

这里写图片描述

文件分发:客户机/服务器

服务器串行地发送N个副本

  • 时间: NF/us
  • 客户机i需要F/di时间下载

这里写图片描述

文件分发:P2P

  • 服务器必须发送一个副本
    • 时间: F/us
  • 客户机i需要F/di时间下载
  • 总共需要下载NF比特
  • 最快的可能上传速率: us + ∑ui

这里写图片描述

这里写图片描述

3 文件分发:BitTorrent

这里写图片描述

  • 文件划分为256KB的chunk
  • 节点加入torrent
    • 没有chunk,但是会逐渐积累
    • 向tracker注册以获得节点清单,与某些节点(
      “邻居”)建立连接
  • 下载的同时,节点需要向其他节点上传chunk
  • 节点可能加入或离开
  • 一旦节点获得完整的文件,它可能(自私地)离开或(无私地)留下

获取chunk

  • 给定任一时刻,不同的节点持有文件的不同chunk集合
  • 节点(Alice)定期查询每个邻居所持有的chunk列表
  • 节点发送请求,请求获取缺失的chunk
    • 稀缺优先
        

发送chunk: tit-for-tat

  • Alice向4个邻居发送chunk:正在向其发送Chunk,速率最快的4个
    • 每10秒重新评估top 4
  • 每30秒随机选择一个其他节点,向其发送chunk
    • 新选择节点可能加入top 4
    • optimistically unchoke

这里写图片描述

4 P2P应用:索引技术

P2P:收索信息

P2P系统的索引:信息到节点位置(IP地址+端口号)的映射。

文件共享(电驴)

  • 利用索引动态跟踪节点所共享的文件的位置
  • 节点需要告诉索引它拥有哪些文件
  • 节点搜索索引,从而获知能够得到哪些文件
      

即时消息(QQ)

  • 索引负责将用户名映射到位置
  • 当用户开启IM应用时,需要通知索引它的位置
  • 节点检索索引,确定用户的IP地址

集中式索引

Napster最早采用这种设计

1) 节点加入时,通知中央服务器:IP地址内容。
2) Alice查找“Hey Jude”。
3) Alice从Bob处请求文件。

这里写图片描述

集中式索引的问题

内容和文件传输是分布式的,但是内容定位是高度集中式的。会出现如下问题:单点失效问题、性能瓶颈、版权问题。

洪泛式查询: Query flooding

  • 完全分布式架构
  • Gnutella采用这种架构
  • 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引
  • 覆盖网络(overlay network): Graph

    • 节点X与Y之间如果有TCP连接,那么构成一个边
    • 所有的活动节点和边构成覆盖网络
    • 边:虚拟链路
    • 节点一般邻居数少于10个
        
  • 查询消息通过已有的TCP连接发送

  • 节点转发查询消息
  • 如果查询命中,则利用反向路径发回查询节点

这里写图片描述

层次式覆盖网络

  • 介于集中式索引和洪泛查询之间的方法
  • 每个节点或者是一个超级节点,或者被
    分配一个超级节点
    • 节点和超级节点间维持TCP连接
    • 某些超级节点对之间维持TCP连接
  • 超级节点负责跟踪子节点的内容

这里写图片描述

P2P案例应用:Skype

  • 本质上是P2P的:用户/节点对之间直接通信
  • 私有应用层协议
  • 采用层次式覆盖网络架构
  • 索引负责维护用户名与IP地址间的映射
  • 索引分布在超级节点上

这里写图片描述