不同于传统的 C/S 服务模型,取消了中心服务器,每个节点都可以作为客户端和服务端。
简介
BitTorrent 实际上是一个协议族,其基本协议是 BEP-3 ,其它的大部分协议都是围绕这个来进行扩展或补充。
如果要通过 P2P 协议进行下载,必须要包含如下的几个文件:
- 种子文件,一般后缀为
.torrent
,本质上是一个由 bencode 编码的文本文件,把资源分成很多虚拟块,并记录每个块的 hash 值,还包括了文件大小、名字、Tracker服务器等信息。 - BT 客户端,也就是专门解析 BT 协议的程序,例如迅雷、电驴等。
- Tracker 服务器,记录着 Peer 和种子相关信息,起着中心调控的作用。
在下载资源的时候,大致的流程如下:
- 客户端解码种子文件,得到 Tracker 服务器的地址和资源信息;
- 通过和 Tracker 服务器沟通得到其它已经下载该资源的 Peers 信息;
- 再和这些 Peers 沟通得到自己想要的部分。
可以看到,在上述的流程中,Tracker 是整个流程的关键部分,如果不能通过 Tracker 读取到 Peers 的相关信息,那么也就无法下载资源。
DHT 协议
为了弥补 Tracker 的单点问题,于是出现了 Distributed Hash Table, DHT 协议,该协议基于 Kademlia 建立。
参考
- 一个资源嗅探器的网站 bthub.io 。
- 官方网站 bittorrent.org 包括了很多相关协议的开发文档。
- 一个传输可视化的示例网站 mq8.org 。