别再装纯说不懂BT种子了
目錄
- BitTorrent協議
- BitTorrent的核心思想
- BT種子
- 磁力鏈接(Magnet URI scheme)
- 磁力鏈接的本質
- DHT網絡結構
- DHT網絡結構的構建過程
- 拆分子樹的過程
- 桶的構建
- 總結
BitTorrent協議
如果你想要下載一個不存在的敏感資源,你會怎么做?
最簡單地方法當然是找一個有資源的哥們,讓他把這些資源分享給你。早期的互聯網就是這么共享文件的。
但是這樣存在很多問題?
1、 比如下載的人一多,每個人的帶寬就變小了,下載速度會變慢。
2、 更危險的是這些資源是敏感資源,你的哥們本來就不應該分享給你,如果你的哥們被抓了,那么大家也別下載。
由此就誕生了一個BitTorrent協議。
資源不再由一個人或者一個中心服務器提供,而是由所有人提供給所有人。下載的人越多,速度越快。這種模式叫Peer To Peer(用戶群對用戶群)。也就是P2P下載。
BitTorrent的核心思想
把文件分成很多個小塊,讓下載者互相連接。
比如:以120M視頻為例,假設被分成895個128KB的文件塊后,下載了第306塊的用戶A就可以和下載了第11塊的用戶B,交換彼此下載好的部分。參與的人越多,互相交換的就越密集,下載就越快。
為了做到這點,BitTorrent協議需要資源共享者生成一個包含下載信息的種子文件,后綴是.torrent,這就是我們常說的BT種子。
BT種子
種子文件包含文件的名字、大小、分塊后分塊文件的大小、哈希值以及Tracker服務器的地址。
Tracker很重,通過Traker我們才可以找到其他下載者的聯系方式。
當你用下載軟件打開種子,就會開始聯系種子文件里內置的Traker服務器,告訴Traker我要下載這個文件。服務器會記錄下你的IP,并把其他正在下載或者下載完成的人的IP返回給你,這樣你們就可以愉快地組隊下載。當然如果沒有找到正在下載的人,資源發布者也不在線,你就只能以0kb/s的速度等著。
不難發現Tracke服務器是P2P網絡的弱點,如果Tracker關閉或者封禁,你就無法找到同伴,也難以完成下載。
磁力鏈接(Magnet URI scheme)
為了擺脫Tracker服務器的依賴,今天最流行的下載方式是磁力鏈接(Magnet URI scheme)。通常是這樣一串神秘代碼:
magnet:?xt=urn:btih:E7FC73D9E20697C6C440203F5884EF52F9E4BD28鏈接結構:
magnet:協議名
xt:exact topic 的縮寫,表示資源定位點。BTIH(BitTorrent Info Hash)表示哈希方法名,這里還可以使用 SHA1 和 MD5。這個值是文件的標識符,是不可缺少的。
最重要的是這40位16進制字符碼,它是磁力鏈接的唯一標識符。
任何文件丟進哈希算法都能得到這樣一串字符,40位,16進制,只標識這個文件。簡單理解就是文件ID,它能幫我們找到我們下載的東西。
磁力鏈接的本質
是把所有人變成小型Tracker,每個人都拿著一份動態更新的地址和文件信息, 我要找我連接的10個人,他們再找與他們連接的10個人,一傳十,十傳百…我找到小明,小明找到小紅,小紅找到了資源發布者,我與資源發布者就連上線了。
DHT網絡結構
但是這種所有人找所有的方案是不太行的,不僅占用了大量的資源,效率也非常低,還有可能重復傳播,造成廣播災難。這時就需要補充一個關鍵信息,距離。這里的距離不是空間上的距離,而是邏輯上的距離。這種距離跟DHT網絡結構有關。
DHT網絡結構的構建過程
如上述所說,每個磁力鏈接都有一個唯一的文件ID(40位16進制的字符),可以產生24*40 即2160種組合,用只有0和1的二進制表示,就是160個0和1。而每個節點也有一串160位的0和1作為節點ID。(這里的節點理解為你的電腦)根據這160位數,我們可以計算節點與節點之間,節點與資源之間的距離。
假設小明發布了一個文件,就能計算他所知道的節點ID與這個文件ID的距離,讓算出來距離最短的節點再計算它知道的節點ID和文件ID的距離,重復這個過程(遞歸調用),就能找到與文件ID距離最短的一批節點ID。把小明提供的下載信息存在這里。這樣下載者也只需要找到和文件ID距離最近的節點ID,就能建立連接,開始下載。
距離怎么計算呢?在kademlia網絡中,用異或算法來計算節點之間的邏輯距離,值越小表示越近。
相同就是0,不同就是1。比如0和0相同,得0。0和1不同,得1。1和1相同,得0。
為了方便理解,把160位縮減為4位。假設你的ID為0100,目標節點為1111,那么你們之間得二進制距離就是1011。換算成十進制就是
1 * 23 + 0 * 20 + 1 * 21 + 1 * 20=11
有了距離我們就可以在二叉樹里快速查找目標了。
4位數即分叉4次,即24,16條路徑。每條路徑得終點就是一個節點ID。
接下來你作為0100,你就可以拆分這顆二叉樹了。
拆分子樹的過程
1、 從第一個分叉開始,把不包含你的那部分子樹拆分
2、 然后在剩下的子樹中再次拆分
3、重復步驟2,直到只剩下你自己
桶的構建
從上述結果中看出,你就可以拆分出4棵子樹
在拆分好的子樹中,每個子樹中選2個點,就得到了4個K桶。
剛才算過,你距離目標文件的距離是1011,即是11,也就是說離1111(目標文件)最近的肯定是3號K桶里的2個節點。接下我們可以去聯系這兩個節點,讓他們來找1111(目標文件)。
以1110為例,它也可以拆分出4棵子樹
得到4個K桶
計算1110和1111之間的距離0001,即距離為1。即在0號K桶。1111(目標文件)就在這里。
這種網絡結構就叫DHT,分布式哈希表。一個高寬容度的去中心化網絡。
只需要一串文件ID和存儲到本地的K桶數據,你就可以高效地找到要下載的文件,而資源的發布者和傳播者也只需要分箱40個字符串就好,足夠簡單、方便、隱私。
在真實的DHT網絡,每個K桶至少記錄了8個節點,任何一個節點的下線,都不會影響整個網絡的運行。作為文件和節點ID,2160也足夠大,達到全地球70億人,每秒下載10000個種子,也足夠下載百萬億年直到宇宙終結。
總結
這些天才的設計,讓我們擁有了一個無法被審查和追蹤的去中心化網絡,這也催生了很多盜版產業,但也讓很多內容有機會避開審查,因為網站可以被隔離,被拔線,被禁止訪問,但種子不會。只要種子不死,那些不存在的敏感資源,就還活在互聯網上,沒有任何人可以毀掉。
總結
以上是生活随笔為你收集整理的别再装纯说不懂BT种子了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小虫虫】邮购笔记本的注意事项
- 下一篇: Chrome谷歌浏览器无法自动同步的解决