五.P2P应用
1. 原理与文件分发
(1)纯P2P架构
·无服务器
·任意端系统之间直接通信
·节点阶段性接入Internet
·节点可能更换IP地址
(2)文件分发:C/S vs P2P
·C/S结构:T = max{ T1, T2 } = max{ NF/us, F/min(di) }
- 服务器串行发送N个副本:T1 = NF/us
- 客户机i下载:T2 = F/di
·P2P结构:T = max{ T1, T2, T3 } = max{ F/us, F/min(di), NF/(us + ∑ui) }
- 服务器必须发送一个副本:T1 = F/us
- 客户机i下载:T2 = F/di
- 最快可能上传速率:us + ∑ui
- 总共需要下载NF比特:T3 = NF/(us + ∑ui)
2. BitTorrent协议
(1)Alice向tracker查询torrent的节点列表,和列表中的节点建立TCP连接
(2)文件划分为256KB的chunk
(3)节点加入torrent时无chunk,需向tracker注册以获得节点清单,与某些邻居建立连接,逐渐积累chunk
(4)下载的同时,节点需要向其他节点上传chunk
(5)节点动态地加入或离开,获得完整的文件后,可能离开或留下
(6)获取chunk
·给定任一时刻,不同节点持有文件地不同chunk集合
·Alice定期查询每个邻居所持有地chunk列表
·节点发送请求,请求获取缺失的chunk
- 稀缺优先:如某一chunk只有很少节点持有,那么先请求这一chunk
(7)发送chunk:tit - for - tat
·Alice向4个正在向Alice发送chunk、并且速率最快的邻居发送chunk,每10秒重新评估top 4
·每30秒随机选择一个其他节点,向其发送chunk,新选择的节点可能加入top 4
3. 索引技术
(1)搜索信息
·P2P系统的索引:信息到节点位置(IP地址 + 端口号)的映射
·文件共享:如电驴
- 利用索引动态跟踪节点所共享的文件位置
- 节点需要告诉索引它拥有哪些文件
- 节点搜索索引从而获知能够得到哪些文件
·即时消息:如QQ
- 索引负责将用户名映射到位置
- 当用户开启IM应用时,需要通知索引它的位置
- 节点检索索引,确定用户的IP地址
(2)集中式索引
·Napster
- Alice加入时通知中央服务器IP地址和查找内容
- 中央服务器通知Alice,Bob持有所需文件
- Alice和Bob建立连接传输文件
·问题:单点失效问题、性能瓶颈、版权问题
(3)洪泛式查询
·完全分布式架构,每个节点对且仅对其共享的文件进行索引
·Gnutella
- 查询消息通过已有的TCP连接发送
- 收到消息的节点转发查询消息
- 如果查询命中,则利用反向路径发回查询节点
·覆盖网络
- 节点X与Y之间如果有TCP连接则构成一条边
- 所有活动节点和边构成覆盖网络,节点邻居一般少于10个
·问题:大量消耗网络带宽,导致网络拥塞
(4)层次式覆盖网络:介于集中式与洪泛式之间
·每个节点是超级节点或普通节点
·普通节点仅与超级节点连接,超级节点进行互相连接
·超级节点负责跟踪子节点的内容
·Skype
- 文件传输本质为P2P结构,节点对之间直接通信
- 索引分布在超级节点上,负责维护用户名与IP地址间的映射
- 采用私有应用层协议