网络资源下载按照"下载方式"划分,可以分为:http/https下载、ftp/sftp下载、BT种子下载、磁力下载、ed2k下载等。
BT是Bit Torrent的缩写,中文意思为”比特流“。
BT下载过程是这样的:
-
下载者会先得到一个.torrent的种子文件。"种子文件"本质上是一个文本文件:由Tracker信息和文件信息两部分组成。其中Tracker(译:追踪者)信息就是在整个BT下载过程中非常重要的Tracker服务器的信息。包含Tracker服务器的地址和服务器相关的设置。而文件信息对应的是我们需要下载的文件的相关信息,包含文件块的大小,块索引,Hash验证码等。
-
下载者使用BT客户端软件进行下载,BT客户端会先对torrent文件进行解析,得到Tracker地址,根据地址连接到Tracker服务器。Tracker服务器会返回信息告知下载者,该文件其他下载者(此时其他下载者作为服务器)的IP地址。
-
下载者根据ip地址连接"其他下载者",下载者之间相互交换对方没有的文件块。在BT下载过程中,每个文件块的下载都会有验证和对比,确保数据下载的准确性。
在整个下载过程中,没有中心化的WEB服务器介入,全程点对点,用户对用户,只有一个Tracker服务器提供其他用户的ip地址。传统下载方式中服务器上行带宽的压力,在BT下载中不存在。参与下载的用户自行解决。
BT下载的缺点是依赖Tracker服务器,一旦Tracker服务器被关掉,就可以阻断下载。
那有没有一种方法,可以延续P2P下载的优势,还能不需要Tracker服务器呢,答案是:
DHT网络技术
。
DHT网络技术,英文全称为DIstributed Hash Table,分布式哈希表,是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由并存储一小部分数据,从而实现DHT网络的寻址和存储。新版BitComet允许同时连接DHT网络和Tracker,即:在完全不连接Tracker服务器的情况下,也可以下载文件,因为可以在DHT网络中寻找文件的其他下载者。
磁力下载过程是这样的:
-
当我们点击某个磁力链接地址,然后在某个下载软件中打开。软件会实例化一个DHT节点并加入DHT网络,将磁力链接中的40个字符提取并处理得到20字节的”infohash哈希信息“,向距离该infohash最近的几个节点发送get_peers请求,得到节点回复的peers列表。
-
然后下载软件会实例化一个BT客户端并向这些peers请求下载种子文件。种子文件中如果包含tracker服务器,就像BT下载那样下载数据。如果不包含Tracker服务器,那其中会有真正资源的node列表,则会向这些node节点发送下载请求,下载资源。