P2P应用
# P2P应用
# 纯 P2P 架构
特点
- Peer-to-peer
- 没有服务器
- 任意端系统之间直接通信
- 节点阶段性接入Internet
- 节点可能更换IP地址
# 文件分发: 客户机/服务器 vs P2p
- 问题 : 从一个服务器向
个节点分发一个文件需要多长时间
# 文件分发: 客户机/服务器(C/S)
- 服务器串行地发送
个副本的时间 - 时间:
- 时间:
- 客户机
需要 时间下载
# 文件分发: P2P
# C/S vs P2P
# BitTorrent
- tracker: 跟踪参与torrent的节点
- torrent: 交换同一个文件的文件块的节点组
基本特点
- 文件划分为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"
BT 技术对网络性能的危害
# 索引技术
P2P系统的索引
信息到节点位置(IP地址+端口号)的映射
文件共享(电驴)
- 利用索引动态跟踪节点所共享的文件的位置
- 节点需要告诉索引它拥有哪些文件
- 节点搜索索引,从而获知能够得到哪些文件
即时消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启IM应用时,需要通知索引它的位置
- 节点检索索引,确定用户的IP地址
# 集中式索引
Napster最早采用集中式索引
- 节点加入时,通知中央服务器
- IP 地址
- 内容
- Alice 查找 "Hey Jude"
- Alice 从 Bob 处请求文件
内容和文件传输是分布式的,但是内容定位是高度集中式的
存在的问题
- 单点失效问题
- 性能瓶颈
- 版权问题
# 洪泛式查询: Query flooding
特点
- 完全分布式架构
- Gnutella采用这种架构
- 每个节点对它共享的文件进行索引,且只对它共享的文件进行索引
特点
- 覆盖网络(overlay network): Graph
- 节点X与Y之间如果有TCP连接,那么构成一个边
- 所有的活动节点和边构成覆盖网络
- 边:虚拟链路
- 节点一般邻居数少于10个
工作过程
- 查询消息通过已有的TCP连接发送
- 节点转发查询消息
- 如果查询命中,则利用反向路径发回查询节点
缺点
- 会加重网络的负担
# 层次式覆盖网络
特点
- 介于集中式索引和洪泛查询之间的方法
- 每个节点或者是一个超级节点,或者被分配一个超级节点
- 节点和超级节点间维持TCP连接
- 某些超级节点对之间维持TCP连接
- 超级节点负责跟踪子节点的内容
# P2P案例应用: Skype
特点
- 本质上是P2P的:用户/节点对之间直接通信
- 私有应用层协议
- 采用层次式覆盖网络架构
- 索引负责维护用户名与IP地址间的映射
- 索引分布在超级节点上
编辑 (opens new window)