BT_FAQ
1.BT的核心思想是什么？
答：BT的核心思想就是没有服务器的概念，任何一个下载者既是客户端，又是服务器。
下载者从别人那里取文件的时候，称为下载，而为别人提供文件的时候，称为上载（传）。

2.如何完成一次BT的下载?
答：为了完成一次部署，至少需要一个相互发现对方的服务器(tracker),一个种子(seed),一个下载者(peer)(多个下载者就叫(peers))。所谓tracker，是一个服务器，负责帮助peers之间相互发现对方。而seed，通常是第一个向tracker注册，然后它就开始进入循环，等待为别人提供文件，也就是说，第一个seed只负责上传文件。一旦有一个peer向tracker注册后，就可以取得seed的信息，从而与seed建立连接。从seed处读取文件。由于原始的文件，只有seed拥有，所有说，seed至少要上传原始文件的一份完整拷贝。如果又有一个peer加入进来，那么它可以同时和seed和前一个peer建立连接，然后从这两者处获取文件，如果又有一个加入，那么它可以同时和seed和前二个peer建立连接，peer就可以把自己从别的peer下载的数据传给另一个peer了。

3.peer和peer之间是如何传数据的呢，它支不支持断点续传？
答：BT把整个文件（目录可以被看成是一个各个文件连起来的大文件）看成是由许多固定的片(piece)组成的。BT就是通过发送收取一片一片数据来通信的。而每一片都有自己一个唯一的校验码（这个校验码是通过这一片的数据以固定的算法算出来的)，这样下载者在停止下载后就可以通过比较校验码的方法来知道自己是否已有这一片数据了,从而实现断点续传。

4.那么各个peer是如何知道tracker的地址，又如何从地址中取到自己想要的IP地址呢,效验码又在哪里存的呢...？
答：是通过发布文件(后缀名为torrent的文件)。发布文件有几个非常重要的信息：
 (1)服务器列表(TrackServerList)：这个列表中的地址就是tracker的地址和端口号，可以有多个tracker.
 (2)效验码(Sha1)：这个效验码对于不同的文件是唯一的，peer就通过这个告诉tracker它想要哪些IP。
 (3)文件中还保存了片的个数，每一片的大小和顺序保存了每一片的效验码。

2.2对等发布
所有和文件下载相关的逻辑问题，通过 peers之间的交互来解决。一些关于下载和上传的速率的信息被发送给tracker，但tracker搜集这些信息仅用于得到一些统计。Tracker的职责被严格限定为“帮助peers相互发现对方”。
尽管tracker是peers之间相互发现的唯一途径，也是peers之间相互协作的唯一地点，标准的tracker算法返回一个随机的 peers的列表。（这样形成的）随机网络(random graph)具有非常强大的鲁棒性，许多的peer选择算法最终产生了一个幂次法则网（power law graph)，幂次法则网能以少量的扰动来获得分片。注意，peers之间的连接支持双向传输。

为了掌握每个peers都拥有什么，BT将文件切割为固定大小的片（典型的大小是256k）。每个下载者必须通知其它peers，它拥有哪些片。为了验证文件的完整性，对每个片断都通过SHA1算法计算出它的hash信息，并保存在torrent文件中。Peers只有在检查了片断的完整性之后，才会通知其它peers它拥有这个片断。删除代码（Erasure codes)是一种被建议使用的能协助文件分布的技术，但是这种更简单的方法（即分片＋ＨＡＳＨ）也是可用的。
Peers不断的从它能连接到的peers那里下载文件片断。当然，它不能从没有跟它建立连接的peers那里下载任何东西。即使是建立了连接的peers，有的也并不包含它想要的片断，或者还不允许它去下载。关于不允许其它peers从它那里下载文件片断的策略，被称为 阻塞choking，后文将进行讨论。其它关于文件分布的方法通常都要用到树结构，在树结构中树叶的上载能力并没有被利用起来。简单的让 peers 宣布它拥有什么导致不到 1 % 的带宽开支，却因此可以可靠地利用所有的上载能力。