BT種子是如何工作的?為什么很小的種子能下載很大的文件?


生活中常見的種子一般指的是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種子的原理是什么? 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM