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