文章目录
P2P架构
- 没有(极少)一直运行的服务器
- 任意端系统都可以直接通信
- 利用peer的服务能力
- Peer节点间歇上网,每次IP地址都可能变化
CS VS P2P
CS
只有特定服务器服务客户端
P2P
每个节点既是服务器也是客户端
P2P文件共享
实现
- 定位所需资源
- 处理其他节点的加入与离开
非结构化P2P
集中式目录
每个节点上下线时要向目录服务器上报
上报信息
-
IP,是否在线
-
资源
缺点
- 不能挂,挂了就无法找到资源
- 节点上下线过多时忙不过来
完全分布式
节点信息都存放在其他节点中
网状分布,向邻居查询,依次查找,泛洪式查询
缺点
洪水泛滥
可以通过TTL或者其他的方法减小泛滥
层次式
分组长和组员
组长按照完全分布
组员按照集中式分布
结构化(DHT)P2P
- 哈希表
- DHT方案
- 环形DHT以及覆盖网络
- Peer波动
BitTorrent
是一种用于文件分发的流行P2P协议
Peer加入torrent:
- 一开始没有块,但是会通过其他节点处累积文件块
- 向跟踪服务器注册,获得peer节点列表,和部分peer节点构成邻居关系
当peer下载时,该peer可以同时向其他节点提供上载服务
peer可能会变换用于交换快的peer节点
扰动churn:peer节点可能会上线或下线
一旦一个peer拥有整个文件,它会(自私的)离开或者保留(利他主义)在torrent中
给其他节点分享文件,其他节点也会给你分享文件(互利互惠)
请求,发送文件块
请求块:
- 在任何给定的时间,不同peer节点拥有一个文件块的子集
- 周期性的,Alice节点向邻居节点询问他们拥有哪些块信息
- Alice块向peer节点请求他希望的块,稀缺的块
发送块:
在有很多节点排队时
- 根据和哪个关系好,优先给哪个发送块
- 随机给一个
两种发送方式配合使用
不能洒向人间都是爱,要侧重
优化疏通几个
然后每过一段时间,更新这几个优化输出的列表
跟踪服务器
发送块:
在有很多节点排队时
- 根据和哪个关系好,优先给哪个发送块
- 随机给一个
两种发送方式配合使用
不能洒向人间都是爱,要侧重
优化疏通几个
然后每过一段时间,更新这几个优化输出的列表
跟踪服务器
当一个peer节点想加入这个洪流时,需要找到 tracker server,他向tracker server注册自己,tracler server会分配一个peer节点列表给它,让它加入,它会周期的通知tracker server它还在这个洪流中