首页 > 技术文章 > BT种子是如何工作的?为什么很小的种子能下载很大的文件?

HMingR 2020-09-21 10:01 原文

生活中常见的种子一般指的是BT种子,即BitTorrent。是一种p2p传输协议,用于在对等网络中,用户群和用户群之间的文件共享。并且对于一个文件,用户群越多,那么下载速度就越快。

为什么BT协议会出现?

  • 人多或者带宽小时速度慢:以前我们下载网络上的文件,通过HTTP、HTTPS、FTP、FTPS等协议从文件所在服务器上下载,那么存在一个问题,如果下载的人太多,但是服务器带宽有限加上受到服务器性能限制需要管理太多连接,那么每个人的下载速度就会很慢。
  • 如果服务器宕机,那么还没有完成下载的人就会下载失败。

 BT协议原理

  先看看一个.torrent 文件中包含了什么信息

  在Centos环境下,需要先安装dumptorrent,依次执行以下命令行:

sudo yum install gcc make
wget http://downloads.sourceforge.net/project/dumptorrent/dumptorrent/1.2/dumptorrent-1.2.tar.gz
tar -xvf dumptorrent-1.2.tar.gz
cd dumptorrent-1.2
make
sudo cp dumptorrent /usr/local/bin       #设置一个全局变量

  安装完成之后执行 dumptorrent -v <torrent-filepath>

./dumptorrent -v ../98c7924e669409e969534ea39c6c9339.torrent. #我没有设置dumptorrent全局变量,所以直接在解压文件夹下操作

在使用vim打开时,会发现下面有一块区域是乱码的,类似这样:  

这一部分信息是torrent文件的核心,在制作torrent时,会将文件进行分块处理,每一个块都有一个hash值。这些值的目的一是为了在传输过程中进行数据校验,防止他人恶意的篡改文件;二是用来在交换分区的时候标示分区。

查看两个.torrent文件,发现文件结构是

    • Name:种子名称
    • Size:种子大小
    • Announce:Tracker首选地址,bt协议的核心,后面会说
    • Info Hash:torrent文件内容的Hash特征值,是所有分块hash以及所有的文件信息合并之后再进行hash生成的值。
    • Created By:该种子的制作人
    • Created Date:制作时间
    • Announce List:备用Tracker地址
  • 当用户通过软件打开.torrent文件之后,会先和Announce字段后面的Tracker服务器进行通信,通过Info Hash告诉服务器想要下载的文件。当Tracker收到通信请求之后会记录客户端的IP,然后正在下载该文件的其他客户端的IP。
  • 客户端收到IP List之后,会尝试去连接这些客户端,如果能连接上,则告诉对方我需要哪些分块和我有哪些分块。这样,通过客户端和客户端之间的分块互补然后将文件拼凑起来,则可以实现每个正在下载的客户端都是一个服务器。所以,下载的人越多,每个下载的人的速度也就越快;反之,如果没有人正在下载,则只能等待。

以上就是torrent下载文件的步骤,可以发现bt协议也有几个问题:

  • Tracker服务器在整个下载流程中是十分重要的但是又是明文公开的,所以如果想要阻止用户下载文件,则只需要将Tracker服务器关闭就可以了。该问题BT的发明者提出了DHT概念,就算Tracker连不上,也可以通过分布式哈希表DHT技术,通过DHT,在网络中搜索下载统一文件的邻居节点,虽然慢了点,但是也能找到。
  • bt的握手消息是明文的Bittorrent Protocol。由于下载文件比较占用运营商的带宽,所以运营商在发现握手信息是bt协议时会立刻断开或者限制速度。

 

参考:BT种子的原理是什么? 

推荐阅读