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