计算机网络笔记(3) 网络应用P2P架构

P2P架构(Peer-to-peer)

P2P

  • 互相共享
  • 没有服务器
  • 任意端系统之间直接通信
  • 节点阶段性接入Internet
  • 节点可能更换IP地址

文件分发

典型应用:BitTorrent:上传速率高,则能够找到更好的交易伙伴,从而更快地获取文件

BitTorrent

BT

细节:

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

获取chunk:

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

发送chunk:tit-for-tat

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

索引技术

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

类似一本书上面的目录部分

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

集中式索引

内容和文件传输是分布式的,但是内容定位是高度集中式的

集中式

可能存在的问题:

  • 单点失效问题
  • 性能瓶颈
  • 版权问题

洪范式查询(Query flooding)

  • 完全分布式架构
  • Gnutella采用这种架构
  • 每个节点对他共享的文件进行索引,且只对他共享的文件进行索引

洪范式查询

  • 查询消息通过已有的TCP连接发生
  • 节点转发查询
  • 如果查询命中,则利用反向路径发回查询节点

覆盖网络(overlay network):Graph

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

层次式覆盖网络

介于集中式索引和洪范查询之间的方法

层次式

  • 每个节点要么是一个超级节点要么被分配给一个超级节点
    • 节点和超级节点间维持TCP连接
    • 某些超级节点对之间维持TCP连接
  • 超级节点负责跟踪子节点的内容

版权声明:本文为mosun_zgs原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。