计算机网络所有笔记
P2P文件分发
P2P(peer to peer)应用的特性:
- 没有服务器
- 任意端系统之间直接进行通信
- 节点阶段性接入Internet
- 节点可能更换IP地址
P2P的明显的缺点:复杂,难以维护
从单一服务器向大量主机分发文件,在CS文件分发中,该服务器必须向每个对等方发送该文件的一个副本,即服务器承受了极大地负担,并且消耗了大量的服务器带宽
P2P体系结构的拓展性
用一个具体的样例进行对比:将一个文件分发给一个固定对等方集合的 分发时间的差异
分发时间:所有N个对等方得到该文件的副本所需要的时间
假设因特网具有足够的带宽,Us :服务器接入链路的上载速度 Ui :第i对等方接入链路的上载速率
Di :第i对等方接入链路的下载速率 F :分发的文件长度(单位:比特)N :获得文件副本的对等方的数量
CS的分发时间(服务器上传和最慢的对等方下载时间):
D
c
s
=
m
a
x
(
N
F
/
U
s
,
F
/
m
i
n
i
(
d
i
)
)
Dcs = max( NF/Us, F/mini(di) )
Dcs=max(NF/Us,F/mini(di))
P2P结构的文件分发:
两者分发时间的曲线函数对比
P2P对于文件分发来说具有很强的 可拓展性,他的分发时间不会因为N的增长而呈现线性增长,因此被广泛应用于文件分发
BitTorrent
BitTorrent是一种用于文件分发的流行P2P协议。
参与一个特定文件分发的所有对等方的集合被称为是 洪流(torrent),在一个洪流中的对等方彼此下载等长度的文件块,典型块的长度为256KB。一个对等方首次加入的时候没有块,对着时间的流逝慢慢的积累。
每个 洪流中具有一个基础的设施结点: 追踪器(tracker),当一个对等方加入洪流的时候,向追踪器注册自己并且 周期性的通知追踪器自己还在洪流里面
过程解释:
当新的对等方Alice加入洪流的时候,追踪器随机的将对等方子集的IP地址发送给Alice,那么Alice就试图跟子集中的对等方进行TCP连接。与Alice成功的创建一个TCP连接的对等方为: 邻近对等方,随着时间的流逝邻近对等方也是会进行变化的
不同的对等方具有不同的文件 块的子集,Alice周期性的通过(TCP连接)询问邻近对等方的块列表 = > 这样才能获得块的内容啊 😃
获取chunk
- 在任一时刻,不同的结点持有文件的不同chunk集合
- 结点(Alice)定期查询每个邻居所持有的chunk列表
- 结点发送请求,请求获取缺失的chunk
那么Alice应该向邻居申请哪些块呢?首先肯定的Alice没有的,其次根据 稀缺优先:比如说块a仅有两个对等方拥有,而块b有100对等方拥有,那我肯定是优先申请块a的,要不然那两个跑了不就申请不到了吗
发送chunk:tit-for-tat
样例:
BitTorrent的危害
我不知道、我不知道、我不知道 但是我随便找了篇文章看了看link
P2P应用:索引技术
索引主要是信息到(IP地址 + 端口号)的映射,主要用于文件共享和即时消息
球球的logo还是比较可爱的哈 😃
集中式索引
任何结点加入都需要通知中央服务器它的IP地址和内容
过程解释:
- 结点加入的时候向中央服务器报告内容和Ip地址
- Alice想要查找“Hey Jude”,那么中央服务器就告诉她Bob有这个内容
- Alice就从Bob处请求文件
集中式索引的问题
如同DNS设置集中式服务器的缺点差不多,不多赘述了
洪泛式查询
完全分布式的架构,每个主机都仅仅是索引自己的文件,那我们想要查询我自身没有的东西应该怎么办呢?
肯定也是不存在一个主机拥有全部的文件吧
那就通过已经拥有的TCP连接,向连接的主机进行查询,如果命中就返回
层次式覆盖网络
超级结点采用了洪泛式的索引
样例
|