Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391543
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: Delphi

2012-02-29 19:18:28

来源:

种子文件本质上是
文本文件,包含Tracker信息和文件信息两部分。

1.Tracker信息主要是BT下载中需要用到的Tracker服务器的地址和针对Tracker服务器的设置;
2.文件信息是根据对目标文件的计算生成的,包括以下字段:
  1. announce - tracker的URL
  2. info - 该条映射到一个字典,该字典的键将取决于共享的一个或多个文件:
  3. name - 建议保存到的文件和目录名称
  4. piece length - 每个文件块的字节数。通常为28 = 256KB = 262144B
  5. pieces - 每个文件块的SHA-1的整合Hash。因为SHA-1会返回160-bit的Hash,所以pieces将会得到1个160-bit的整数倍的字符串。和一个length(相当于只有一个文件正在共享)或files(相当于当多个文件被共享):
  6. length - 文件的大小(以字节为单位)
  7. files - 一个字典的列表(每个字典对应一个文件)与以下的键:
  8. path - 一个对应子目录名的字符串行表,最后一项是实际的文件名称
  9. length - 文件的大小(以字节为单位)

它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件),并把每个块(是块,不是整个文件)的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。

下载启动
  1. BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。
  2. Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已经有的块,然后交换对方所没有的数据
  3. 此时不需要其他服务器参与,分散了单个线路上的数据流量,因此减轻了服务器负担。

防止重复下载
  1. 下载者每得到一个块,需要算出下载块的Hash验证码与种子文件中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容准确性的问题。

下载过程中的变化
  1. 用户下载的文件内容越来越完整,对应的,拥有完整种子文件的用户也会越来越多,使文件的“寿命”不断延长。

算法扩展
  1. 为了解决某些用户“下完就跑”的现象,在非官方BitTorrent协议中还存在一种慢慢开放下载内容的超级种子的算法。

网络技术扩展
  1. DHT技术可以在无Tracker的情况下下载。
  2. DHT全称为分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。使用支持该技术的BT下载软件,用户无需连上Tracker就可以下载,因为软件会在DHT网络中寻找下载同一文件的其他用户并与之通讯,开始下载任务。
  3. 有些软件(如比特精灵)还会自动通过DHT搜索种子资源,构成种子市场。




阅读(4857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~