文件被分为一个个块256KB
网络中的这些peers发送接收文件块,相互服务
-
请求块:
- 在任何给定时间,不同peer节点拥有一个文件块的子集
- 周期性的,Alice节点向邻居询问他们拥有哪些块的信息
- Alice向peer节点请求它希望的块,稀缺的块
-
发送块:一报还一报tit�for-tat
- Alice 向4个 peer 发送块,这些块向它自己提供最大带宽的服务
- 其他 peer 被 Alice 阻塞 (将不会从 Alice 处获得服务)
- 每10秒重新评估一次:前4位
- 每个30秒:随机选择其他 peer 节点,向这个节点发送块
- “优化疏通” 这个节点
- 新选择的节点可以加入这个top 4
- Alice 向4个 peer 发送块,这些块向它自己提供最大带宽的服务
-
两大问题:
- 如何定位所需资源
- 如何处理对等方的加入与离开
-
可能的方案
- 集中
- 分散
- 半分散
- 有一台集中式目录服务器,对等方连接时,它告知中心服务器 自己的IP地址 和 内容
- 其他对等方在下载数据是从中心服务器获取到 IP地址 去下载
Gnutella:协议
- 没用中心服务器, 开放文件共享协议
- 如果X和Y之间有一个TCP连接,则二者之间存在一条边
- 对等方加入
- 对等方X必须首先发现某些已经在覆盖网络中的其他对等方:使用可用对等方列表
- X接着试图与该列表上的对等方建立TCP连接,直到与某个对等方Y建立连接
- X向Y发送一个Ping报文,Y转发该Ping报文
- 所有收到Ping报文的对等方以Pong报文响应
- X收到许多Pong报文,然后它能建立其他TCP连接
通过组长来交换数据