1. 程式人生 > >BT技術原理(BitTorrent)

BT技術原理(BitTorrent)

第一部分:BT技術和P2P技術的區別?

轉載處:https://zhidao.baidu.com/question/9782615.html

BitTorrent(中文全稱位元流,簡稱BT,又稱變態下載)是一個多點下載的P2P軟體。不象FTP那樣只有一個傳送源,BT有多個傳送點,當你在下載時,同時也在上傳,使大家都處在同步傳送的狀態。

BT的工作原理?

BT首先在上傳者端把一個檔案分成了多個部分,客戶端甲在伺服器隨機下載了第N部分,客戶端乙在伺服器隨機下載了第M部分。

這樣甲的BT就會根據情況到乙的電腦上去拿乙已經下載好的第M部分,乙的BT就會根據情況去到甲的電腦上去拿甲已經下載好的第N部分。

2、BT下載會比http、FTP快嗎?
從原理上來說,由於BT先進的下載方式減輕了伺服器端的負荷,同時加快了客戶端的下載速度。所以BT下載的人越多,速度越快。而傳統的伺服器下載方式,速度取決於你的頻寬和伺服器分給你的頻寬。

3、什麼叫種子?

種子就是提供你下載的網友,而這個檔案有多少種子就是有多少個網友在下載同時上傳。

4、怎麼樣下載?

BT需要使用其特殊的軟體才能進行下載,如位元精靈。

5、裝完軟體了,接下來?

安裝好軟體後我們需要到一些提供BT種子的網站去。

 

第二部分:BT種子的技術原理是什麼?就是.torrent檔案該如何理解?

轉載處:https://blog.csdn.net/dianliang01/article/details/80663068  這個並不是原創作者,他也是轉的

看到很多諮詢BT種子原理的問題,在這裡整理些資料,希望對需要的朋友有幫助。

 

可以分兩個層面來分析一下:

  1、torrent檔案的原理:如果這個問題是指torrent檔案本身,那麼,當你對一個檔案(或者資料夾)製作成.torrent檔案,實際上生成的.torrent檔案裡面主要包括了這些資訊:

  A)這個檔案(資料夾)中資料的SHA1值,比如一個1G的檔案,如果按1M每塊進行分塊,則會被分為了1000塊,torrent中就會有這1000個數據塊的指紋值(SHA1的hash值),這個佔據了torrent檔案的絕大部分空間。這些值的目的是為了下載的過程中進行資料校驗,確保資料收到的和當時源頭製作torrent時的原始檔100%一致,防止惡意資料攻擊。

  B)一般製作torrent檔案時,還會要指定一個或者多個Tracker的地址,比如http://www.a.com:8080/announce這種地址.torrent裡面一般也會儲存了這個資訊,這個其實也尤為重要。相當於記錄了一個問詢伺服器的地址,這個問詢伺服器的作用,後面我再解釋。

  C)檔案或者資料夾內每個檔案的名字,方便下載檔案時,磁碟上直接命名好跟原始資料一樣的目錄結構、檔名。

  D)其它一些輔助和可擴充套件的資訊,比如可以配置一個P2SP的http地址輔助下載,比如製作軟體的名字、備註……。 E)上面資訊生成後,torrent會把A)裡面的這些資訊,以及torrent裡面的檔名等關鍵資訊,再進行一次Hash,生成一個新的SHA1值,作為torrent的HASH值,也就是我們經常看到的下載軟體裡面對這個種子命名的一個唯一的hash值,也有的在magnet這種磁力連結中可以看到這個值,這就是torrent的唯一標記。

  以上就是.torrent檔案的內容,可以用記事本開啟,但可能看到亂碼。這個檔案的編碼遵循了bencode編碼規則。但實際內容就主要是上面這些。所以,torrent可以理解為對原始資料的一些記錄。

  2、如果這個的問題是指,BT是如何通過.torrent開始進行下載的,那麼這個的原理大概是這樣的:

  A)下載軟體拿到.torrent檔案後,先進行開啟,讀取裡面的這些資訊,載入記憶體。

  B)torrent中有Tracker的地址,下載軟體拿到後,會去跟Tracker進行通訊,告訴Tracker:我要下載這個檔案(通過hash值作為標記); Tracker收到請求後,會記錄這個客戶端的公網IP(記錄這廝在下載這個檔案),同時呢,會返回給他:我這邊還知道哪些人也在下載這個檔案,一般是會返回200個IP(如果不夠,當然就有多少返回多少)。當然了,如果下載過程中,協議要求你必須5分鐘跟tracker通訊一次,如果太久不通訊,tracker就認為你下線了,會把你從節點列表中刪除的。

  C)客戶端拿到了一堆IP後,就開始挨個去嘗試連線,連上後就開始互相通訊了。比如告訴對方,我有哪些分塊,問問對方有哪些,然後把我有的給對方;讓對方把他有的某一塊給我,這樣就你來我往開始了下載。當然,如果很悲催的情況下,此時沒別人線上,那就只能沒速度了,就只能不停的找啊找啊找朋友,直到找到一個好朋友。

  D)當然,如果torrent中有一個P2SP的Http地址輔助下載,那麼也可以同時從這個Http伺服器要資料,也會把這個伺服器當成一個普通的節點,每次要1塊資料,通過Http協議裡面的Range標記,指定只要一部分資料過來輔助下載。

  整個BT的基本原理和過程就是這樣,當然,這只是BT的基本原理,要做好一個完善的BT還是有很多路要走的。比如:

  1)如果Tracker伺服器出問題了,連不上這個問詢的伺服器,就拿不到周圍的鄰居節點,怎麼辦?---NB的BT發明者提出了DHT的概念,就算Tracker連不上了,也可以通過分散式雜湊表DHT技術,通過DHT網路慢慢的尋找志同道合的鄰居節點,只是沒有Tracker那麼直接那麼快速,但慢一些總還是有機會找到鄰居的。

  2)網路是複雜的,特別是各個聰明的運營商,為了不讓自己的使用者消耗太多頻寬,很多地區的運營商對P2P是有封鎖的,比如某城寬頻等。他們的做法早期是分析協議裡面的握手訊息,BT的握手訊息是明文的Bittorrent Protocol,粗暴的運營商看到剛建立完連線就發這個明文會立即斷開連線;文明點的運營商看到後不斷開連線,但會限速到20K讓你慢慢下載。當然,BT後來也發明了加密協議,運營商也升級了封鎖的裝置,也開始模擬自己是一個客戶端,嘗試分析加密後的協議,精彩紛呈。所以,要做一個穩定的靠譜的P2P系統還是有不少坑要趟的。

  3)還有很多其他的,比如BT對磁碟的排程、快取的機制、檔案分塊的排程演算法、伺服器對幾百萬幾千萬使用者量時的效能提升等等。

  另外,如果您需要一個完整的BT系統或者P2P分發資料下載系統,也可以看看點量BT ,已經歷經10幾年的改進和上百家使用者的使用,包括搜狐暢遊、上海征途等眾多知名的大公司。目前應該是最穩定和完善的P2P商業核心,很方便內嵌到自己的軟體系統中,不再需要從頭製造輪子。