[點(diǎn)晴永久免費(fèi)OA].torrent文件該如何理解?BT種子的技術(shù)原理是什么?
看到很多咨詢BT種子原理的問(wèn)題,在這里整理些資料,希望對(duì)需要的朋友有幫助。 可以分兩個(gè)層面來(lái)分析一下: 1、torrent文件的原理:如果這個(gè)問(wèn)題是指torrent文件本身,那么,當(dāng)你對(duì)一個(gè)文件(或者文件夾)制作成.torrent文件,實(shí)際上生成的.torrent文件里面主要包括了這些信息: A)這個(gè)文件(文件夾)中數(shù)據(jù)的SHA1值,比如一個(gè)1G的文件,如果按1M每塊進(jìn)行分塊,則會(huì)被分為了1000塊,torrent中就會(huì)有這1000個(gè)數(shù)據(jù)塊的指紋值(SHA1的hash值),這個(gè)占據(jù)了torrent文件的絕大部分空間。這些值的目的是為了下載的過(guò)程中進(jìn)行數(shù)據(jù)校驗(yàn),確保數(shù)據(jù)收到的和當(dāng)時(shí)源頭制作torrent時(shí)的源文件100%一致,防止惡意數(shù)據(jù)攻擊。 B)一般制作torrent文件時(shí),還會(huì)要指定一個(gè)或者多個(gè)Tracker的地址,比如http://www.a.com:8080/announce這種地址.torrent里面一般也會(huì)存儲(chǔ)了這個(gè)信息,這個(gè)其實(shí)也尤為重要。相當(dāng)于記錄了一個(gè)問(wèn)詢服務(wù)器的地址,這個(gè)問(wèn)詢服務(wù)器的作用,后面我再解釋。 C)文件或者文件夾內(nèi)每個(gè)文件的名字,方便下載文件時(shí),磁盤上直接命名好跟原始數(shù)據(jù)一樣的目錄結(jié)構(gòu)、文件名。 D)其它一些輔助和可擴(kuò)展的信息,比如可以配置一個(gè)P2SP的http地址輔助下載,比如制作軟件的名字、備注……。 E)上面信息生成后,torrent會(huì)把A)里面的這些信息,以及torrent里面的文件名等關(guān)鍵信息,再進(jìn)行一次Hash,生成一個(gè)新的SHA1值,作為torrent的HASH值,也就是我們經(jīng)常看到的下載軟件里面對(duì)這個(gè)種子命名的一個(gè)唯一的hash值,也有的在magnet這種磁力鏈接中可以看到這個(gè)值,這就是torrent的唯一標(biāo)記。 以上就是.torrent文件的內(nèi)容,可以用記事本打開,但可能看到亂碼。這個(gè)文件的編碼遵循了bencode編碼規(guī)則。但實(shí)際內(nèi)容就主要是上面這些。所以,torrent可以理解為對(duì)原始數(shù)據(jù)的一些記錄。 2、如果這個(gè)的問(wèn)題是指,BT是如何通過(guò).torrent開始進(jìn)行下載的,那么這個(gè)的原理大概是這樣的: A)下載軟件拿到.torrent文件后,先進(jìn)行打開,讀取里面的這些信息,載入內(nèi)存。 B)torrent中有Tracker的地址,下載軟件拿到后,會(huì)去跟Tracker進(jìn)行通訊,告訴Tracker:我要下載這個(gè)文件(通過(guò)hash值作為標(biāo)記); Tracker收到請(qǐng)求后,會(huì)記錄這個(gè)客戶端的公網(wǎng)IP(記錄這廝在下載這個(gè)文件),同時(shí)呢,會(huì)返回給他:我這邊還知道哪些人也在下載這個(gè)文件,一般是會(huì)返回200個(gè)IP(如果不夠,當(dāng)然就有多少返回多少)。當(dāng)然了,如果下載過(guò)程中,協(xié)議要求你必須5分鐘跟tracker通訊一次,如果太久不通訊,tracker就認(rèn)為你下線了,會(huì)把你從節(jié)點(diǎn)列表中刪除的。 C)客戶端拿到了一堆IP后,就開始挨個(gè)去嘗試連接,連上后就開始互相通訊了。比如告訴對(duì)方,我有哪些分塊,問(wèn)問(wèn)對(duì)方有哪些,然后把我有的給對(duì)方;讓對(duì)方把他有的某一塊給我,這樣就你來(lái)我往開始了下載。當(dāng)然,如果很悲催的情況下,此時(shí)沒別人在線,那就只能沒速度了,就只能不停的找啊找啊找朋友,直到找到一個(gè)好朋友。 D)當(dāng)然,如果torrent中有一個(gè)P2SP的Http地址輔助下載,那么也可以同時(shí)從這個(gè)Http服務(wù)器要數(shù)據(jù),也會(huì)把這個(gè)服務(wù)器當(dāng)成一個(gè)普通的節(jié)點(diǎn),每次要1塊數(shù)據(jù),通過(guò)Http協(xié)議里面的Range標(biāo)記,指定只要一部分?jǐn)?shù)據(jù)過(guò)來(lái)輔助下載。 整個(gè)BT的基本原理和過(guò)程就是這樣,當(dāng)然,這只是BT的基本原理,要做好一個(gè)完善的BT還是有很多路要走的。比如: 1)如果Tracker服務(wù)器出問(wèn)題了,連不上這個(gè)問(wèn)詢的服務(wù)器,就拿不到周圍的鄰居節(jié)點(diǎn),怎么辦?---NB的BT發(fā)明者提出了DHT的概念,就算Tracker連不上了,也可以通過(guò)分布式哈希表DHT技術(shù),通過(guò)DHT網(wǎng)絡(luò)慢慢的尋找志同道合的鄰居節(jié)點(diǎn),只是沒有Tracker那么直接那么快速,但慢一些總還是有機(jī)會(huì)找到鄰居的。 2)網(wǎng)絡(luò)是復(fù)雜的,特別是各個(gè)聰明的運(yùn)營(yíng)商,為了不讓自己的用戶消耗太多帶寬,很多地區(qū)的運(yùn)營(yíng)商對(duì)P2P是有封鎖的,比如某城寬帶等。他們的做法早期是分析協(xié)議里面的握手消息,BT的握手消息是明文的Bittorrent Protocol,粗暴的運(yùn)營(yíng)商看到剛建立完連接就發(fā)這個(gè)明文會(huì)立即斷開連接;文明點(diǎn)的運(yùn)營(yíng)商看到后不斷開連接,但會(huì)限速到20K讓你慢慢下載。當(dāng)然,BT后來(lái)也發(fā)明了加密協(xié)議,運(yùn)營(yíng)商也升級(jí)了封鎖的設(shè)備,也開始模擬自己是一個(gè)客戶端,嘗試分析加密后的協(xié)議,精彩紛呈。所以,要做一個(gè)穩(wěn)定的靠譜的P2P系統(tǒng)還是有不少坑要趟的。 3)還有很多其他的,比如BT對(duì)磁盤的調(diào)度、緩存的機(jī)制、文件分塊的調(diào)度算法、服務(wù)器對(duì)幾百萬(wàn)幾千萬(wàn)用戶量時(shí)的性能提升等等。 另外,如果您需要一個(gè)完整的BT系統(tǒng)或者P2P分發(fā)數(shù)據(jù)下載系統(tǒng),也可以看看點(diǎn)量BT ,已經(jīng)歷經(jīng)10幾年的改進(jìn)和上百家用戶的使用,包括搜狐暢游、上海征途等眾多知名的大公司。目前應(yīng)該是最穩(wěn)定和完善的P2P商業(yè)內(nèi)核,很方便內(nèi)嵌到自己的軟件系統(tǒng)中,不再需要從頭制造輪子。 該文章在 2019/3/27 21:43:24 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |