技術特點
2003年,軟體工程師Bram Cohen發明了BitTorrent協定。
BitTorrent(簡稱BT)是一個檔案分發協定,每個下載者在下載的同時不斷向其他下載者上傳已下載的數據。而在FTP,HTTP協定中,每個下載者在下載自己所需檔案的同時,各個下載者之間沒有互動。當非常多的用戶同時訪問和下載伺服器上的檔案時,由於FTP伺服器處理能力和頻寬的限制,下載速度會急劇下降,有的用戶可能訪問不了伺服器。BT協定與FTP協定不同,特點是下載的人越多,下載速度越快,原因在於每個下載者將已下載的數據提供給其他下載者下載,充分利用了用戶的上載頻寬。通過一定的策略保證上傳速度越快,下載速度也越快。在很短時間內,BitTorrent協定成為一種新的變革技術。
實現原理
普通的HTTP/FTP下載使用TCP/IP協定,BitTorrent協定是架構於TCP/IP協定之上的一個P2P檔案傳輸協定,處於TCP/IP結構的套用層。 BitTorrent協定本身也包含了很多具體的內容協定和擴展協定,並在不斷擴充中。
根據BitTorrent協定,檔案發布者會根據要發布的檔案生成提供一個.torrent檔案,即種子檔案,也簡稱為“種子”。
.torrent檔案本質上是文本檔案,包含Tracker信息和檔案信息兩部分。Tracker信息主要是BT下載中需要用到的Tracker伺服器的地址和針對Tracker伺服器的設定,檔案信息是根據對目標檔案的計算生成的,計算結果根據BitTorrent協定內的B編碼規則進行編碼。它的主要原理是需要把提供下載的檔案虛擬分成大小相等的塊,塊大小必須為2k的整數次方(由於是虛擬分塊,硬碟上並不產生各個塊檔案),並把每個塊的索引信息和Hash驗證碼寫入種子檔案(.torrent)中。所以,種子檔案(.torrent)就是被下載檔案的“索引”。
技術依賴
bittorrent 的發展依賴於peer-to-peer技術。對等網路 (Peer - to - Peer 簡稱 P2P) 的研究一直是國外知名學府和知名企業以及研發機構最關注的重點。它甚至被美國《財富》雜誌稱為改變網際網路發展的四大新技術之一 , 被認為是代表無線寬頻網際網路未來的關鍵技術。現廣泛套用於新技術與軟體等工程。
P2P是近年來網際網路最熱門的技術 ,在VoIP、下載、流媒體、協調技術等領域得到飛速發展 , 被財富雜誌評為影響網際網路的四大科技之一。P2P技術體現了網際網路最根本的內涵——自由和免費,它的主要優點如下:和檢索相關的節點上去 , 存儲有和該檢索 ;對等性高 : 非中心化 , 網際網路回歸本色——聯繫和傳輸 ;擴展性強 : 用戶擴展與資源、服務、系統同步擴展 ;健壯性高 : 服務分散和自適應 , 耐攻擊、高容錯性 ;性價比高 :P2P成本低、存儲和技術能力強 ;負載均衡 :分布存儲和技術 , 整個網路負載得以均衡。
在P2P網路中,每個參與的節點既是伺服器又是客戶端, 既是信息的提供者又是信息的消費者。P2P信息檢索的目的就是網路中的任意節點都可以提交檢索的請求 ,然後這些檢索通過相關信息的節點將會回應請求 ,把本地相某種路由機制被路由到關的內容以對等的形式直接傳送到請求節點上 , 如圖 2 所示。
圖中的檢索過程分為以下幾個階段 :每個節點在加入網路的時候 , 會對存儲在本節點上的內容進行索引 , 以滿足本地內容檢索的目的。然後按某種預定的規則選擇一些節點作為自己的鄰居 , 加入到P2P網路當中。發起者P提出檢索請求q,並將 q傳送給自己的鄰居 P的鄰居收到 q後 , 再按照某種策略轉發給它在網路中的其它鄰居節點。這樣 ,q就在整個網路中傳播開來。收到請求 q 的節點如果存儲有相應內容信息 , 則將對應的內容返回。
如何在一個大規模分布的環境下定位資源是個十分具有挑戰性的問題。集中在如何組建P2P網路,如何選擇有效的資源請求路由策略以便以較少的訊息通信開銷 ,獲得較多的相關查詢結果返回 , 同時能夠保證較好的服務均衡性。
下載特點
和常規下載檔案不一樣的是,當你進行BT下載時,你開始連結的地址都是.torrent結尾的檔案。其實只要下載此檔案,在本機運行此檔案一樣可以進行BT下載工作。而網上的BT下載連結都是由廣大用戶自己發布提供的,這樣使得下載資料非常廣,不受常規管理人員的限制。
種子
無論何種BT客戶端程式,默認設定都未對下載速度和上傳速度進行限制,這是因為BT軟體會給上傳速度較快的用戶優先提供服務,也就是說上傳速度越快,下載速度也越快,因此如果你使用的是寬頻的話,下載時就不要去限制上傳速度了。
當下載結束後,如果未關閉BT客戶端程式(例如一邊運行BT提供上傳服務,一邊瀏覽網頁、編輯文檔等),這時你將成為一個傳遞聖火的使者,即“種子”(seed)。換句話說,如果一個檔案被分成10個部分,但擁有第9部分的人只有一個,即只有一個種子,如果這位用戶由於某種原因斷線或關機,那么其他用戶就只能下載到90%了,在進行BT下載時是令人最為苦惱的。
想想自己下載時遇到的“種子數為0”的痛苦吧,將心比心,儘可能在下載結束後不要立即關閉BT程式視窗,做一個傳遞聖火的使者吧。
下載注意
下載者要下載檔案內容,需要先得到相應的.torrent檔案,然後使用BT客戶端軟體進行下載。
下載時,BT客戶端首先解析.torrent檔案得到Tracker地址,然後連線Tracker伺服器。Tracker伺服器回應下載者的請求,提供下載者其他下載者(包括發布者)的IP。下載者再連線其他下載者,根據.torrent檔案,兩者分別對方告知自己已經有的塊,然後交換對方沒有的數據。此時不需要其他伺服器參與,分散了單個線路上的數據流量,因此減輕了伺服器負擔。
下載者每得到一個塊,需要算出下載塊的Hash驗證碼與.torrent檔案中的對比,如果一樣則說明塊正確,不一樣則需要重新下載這個塊。這種規定是為了解決下載內容準確性的問題。
存在問題
一般的HTTP/FTP下載,發布檔案僅在某個或某幾個伺服器,下載的人太多,伺服器的頻寬很易不勝負荷,變得很慢。而BitTorrent協定下載的特點是,下載的人越多,提供的頻寬也越多,種子也會越來越多,下載速度就越快。
而有些人下載完成後關掉下載任務,提供較少量數據給其他用戶,為儘量避免這種行為,在非官方BitTorrent協定中存在超級種子的算法。這種算法允許檔案發布者分幾步發布檔案,發布者不需要一次提供檔案所有內容,而是慢慢開放的下載內容的比例,延長下載時間。此時,速度快的人由於未下載完必須提供給他人數據,速度慢的人有更多機會得到數據。
網路技術
又發展出DHT網路技術,使得無Tracker下載成為可能。
DHT全稱為分散式哈希表(Distributed Hash Table),是一種分散式存儲方法。在不需要伺服器的情況下,每個客戶端負責一個小範圍的路由,並負責存儲一小部分數據,從而實現整個DHT網路的定址和存儲。使用支持該技術的BT下載軟體,用戶無需連上Tracker就可以下載,因為軟體會在DHT網路中尋找下載同一檔案的其他用戶並與之通訊,開始下載任務。
有些軟體(比特精靈)還會自動通過DHT搜尋種子資源,構成種子市場。
另外,這裡使用的DHT算法叫Kademlia(在eMule中也有使用,常把它叫做KAD,具體實現協定有所不同)。
這種技術好處十分明顯,就是大大減輕了Tracker的負擔(甚至不需要)。用戶之間可以更快速建立通訊(特別是與Tracker連線不上的時候)。
相關概念
Tracker:收集下載者信息的伺服器,並將此信息提供給其他下載者,使下載者們相互連線起來,傳輸數據。
種子:指一個下載任務中所有檔案都被某下載者完整的下載,此時下載者成為一個種子。發布者本身發布的檔案就是原始種子。也指.torrent檔案。
做種:發布者提供下載任務的全部內容的行為;下載者下載完成後繼續提供給他人下載的行為。
功能
BitTorrent對於大型文檔和自由軟體如Linux、FreeBSD的發布幫助很大。對於發布數百MB以至數GB的檔案時,如Fedora的光碟鏡像格式檔,BitTorrent的使用能大大減低伺服器的數據流量從而減低發布的成本。另外,一般有新版本軟體推出時,伺服器必定人山人海,使用BitTorrent也能大大減低繁忙時間伺服器的負擔。
瀏覽器
Opera 9
BT軟體
p2psearcher
BT Plus!
BitBuddy
BitTornado
Azureus
比特精靈
比特彗星(BitComet)
BitTorrent
迅雷
Frostwire
uTorrent
脫兔
Flashget
QQ鏇風
歷史
2002年,Bram Cohen在CodeCon初次露面,發表首個BT軟體BitTorrent。它以Python寫成,以MIT許可證發布。
合法性
簡介
BT下載方式引起社會的廣泛討論。
利用BT免費發布著作權內容肯定損害著作權所有者的合法權益,但傳播非收費性內容的好處有目共睹。爭論的焦點是,是否應因此立法全面禁止BT,並且對從事BT下載的人作出懲罰。但到目前為止,中華人民共和國大陸和西歐國家等,如德國,對BT仍沒有任何法律上的約束。而在香港,已經有人(綽號為古惑天皇)因為發布電影的種子而被海關拘捕。2005年10月24日,香港司法機關裁定“古惑天皇”的侵權罪成立,需要即時“監禁”三個月。香港工商貿易部門領導曾俊華與“海關關長”湯顯明對今次裁決感到歡迎,並表示香港將不容忍任何侵權行為的存在,同時政府亦會隨時與商人合作打擊侵權行為。
BitTorrent
(簡稱BT,俗稱BT下載)是一個多點下載的源碼公開的P2P軟體,使用非常方便,就像一個瀏覽器外掛程式,很適合新發布的熱門下載。其特點簡單的說就是:下載的人越多,速度越快。 BitTorrent下載工具軟體可以說是一個最新概念P2P的下載工具、它採用了多點對多點的原理,一般簡稱 BT(BitTorrent) 也就是大家所說的變態下載。該軟體相當的特殊,一般我們下載檔案或軟體,大都由 HTTP 站點或FTP 站台下載,若同時間下載人數多時,基於該伺服器頻寬的因素,速度會減慢許多,而該軟體卻不同,恰巧相反,同時間下載的人數越多你下載的速度便越快,因為它採用了多點對多點的傳輸原理。
BitTorrent 強大實用的原因
(原文是Incentives Build Robustness in BitTorrent,不知道怎么翻譯比較好?)
Bram Cohen
2003年5月22日
翻譯:小馬哥
日期:2004-6-1
用途
BitTorrent 檔案發布系統採用針鋒相對(tit_for_tat)的方法來達到帕累托有效,與當前已知的協作技術相比,它具有更高的活力。本文將解釋BitTorrent 的用途,以及是怎樣用經濟學的方法來達到這個目標的。
BitTorrent 用來做什麼
當通過HTTP協定來下載一個檔案的時候,所有的上載開銷都在主機上。而使用 BitTorrent,當多個人同時下載同一個檔案的時候,他們之間也相互為對方提供檔案的部分片斷的下載。這樣,就把上載的開銷分攤到每個下載者那裡,也就可以在理論上支持無限多個下載者來下載同一個檔案。
研究人員以前也在尋找一種達到這種效果的可實用的技術[3]。這種技術原來並沒有在大的範圍內運用過,因為邏輯和的問題非常棘手。如果僅僅計算哪些 peers 擁有檔案的哪些片斷以及這些片斷應該被傳送給誰,那么很難只產生比較小的系統開銷。Peers之間的連線很少會超過幾個小時,通常是幾分鐘而已。最後,有一個普遍的問題,就是公平性。
我們將解釋BitTorrent 是如何很好的解決這些問題的。
1.1.BitTorrent接口
BitTorrent 的接口可能是最簡單的。用戶點擊希望下載的檔案的超級連結,然後會彈出一個標準的“保存到”對話框。此後,出現一個下載進度的視窗,在這個視窗中,除了顯示下載速率外,還顯示一個上載速率。BT在使用上非常簡單,使得BT能廣泛的被運用。
1.2.部署
決定採用BitTorrent的原因是因為有一些檔案需要發布。而下載者使用 BitTorrent,是因為這是他們獲取所需要的檔案的唯一途徑。下載者經常一完成下載,就停止為別人上載,雖然說,在BT客戶端完成下載之後,繼續為別人提供一段時間的上載是一種禮貌的行為。標準的實現是讓客戶端一直保持上載,除非視窗被關閉。
在一個典型的部署中,未完成的下載者
一台主機負責提供原始的檔案,下載者通過BT來下載這個檔案。下載者在下載的同時,為其它人提供上載,最後,離開這個系統。
技術框架
2.1發布內容
為了部署 BT,首先將一個擴展名為 .torrent 的檔案放在一個普通的web伺服器上。.torrent檔案包含了要共享的檔案的信息,包括檔案名稱、大小、檔案的散列信息和一個指向tracker的url。Tracker負責幫助下載者能夠獲取其它下載者的信息。Tracker和下載者之間使用一種很簡單的基於HTTP的協定進行互動,下載者告訴tracker自己要下載的檔案、自己使用的連線埠以及類似的信息,tracker告訴下載者其它下載同樣檔案的下載者的聯繫信息。下載者利用這些信息相互之間建立連線。一個被成為“種子”的下載者,必須首先被啟動,它知道完整的檔案信息。對tracker和web伺服器的頻寬需求很低,而種子必須至少傳送原始檔案的一份完整拷貝。
譯註:
P2P的核心思想就是沒有伺服器的概念,任何一個下載者既是client,又是server。
下載者從別人那裡取檔案的時候,稱為下載,而為別人提供檔案的時候,稱為上載(傳)。
為了完成一次部署,至少需要一個tracker和一個seed。所謂tracker,是一個伺服器,負責幫助peers之間相互建立連線。而seed,通常是第一個向tracker註冊,然後它就開始進入循環,等待為別人提供檔案,也就是說,第一個seed只負責上傳檔案。一旦有一個peer向tracker註冊後,就可以取得seed的信息,從而與seed建立連線。從seed處讀取檔案。由於原始的檔案,只有seed擁有,所有說,seed至少要上傳原始檔案的一份完整拷貝。如果又有一個peer加入進來,那么它可以同時和seed和前一個peer建立連線,然後從這兩者處獲取檔案。
2.2對等發布
所有和檔案下載相關的邏輯問題,通過 peers之間的互動來解決。一些關於下載和上傳的速率的信息被傳送給tracker,tracker蒐集這些信息用於統計。Tracker的職責被嚴格限定為“幫助peers相互發現對方”。
儘管tracker是peers之間相互發現的唯一途徑,也是peers之間相互協作的唯一地點,標準的tracker算法返回一個隨機的 peers的列表。隨機圖具有非常強大的特性,許多的peer選擇算法最終產生了一個冪律圖,冪律圖能以少量的攪拌來獲得分片。注意,peers之間的連線都是雙向傳輸的。
為了跟蹤每個peers都擁有什麼,BT將檔案切割為固定大小的片(典型的大小是256k)。每個下載者必須通知其它peers,它擁有哪些片。為了驗證檔案的完整性,對每個片斷都通過SHA1算法計算出它的hash信息,並保存在torrent檔案中。Peers只有在檢查了片斷的完整性之後,才會通知其它peers它擁有這個片斷。刪除代碼是一種被建議使用的幫助檔案分布的技術,但是這種更簡單的方法(既分片)也是可用的。
Peers不斷的從它能連線到的peers那裡下載檔案片斷。當然,它不能從沒有跟它建立連線的peers那裡下載任何東西。即使是建立了連線的peers,有的也並不包含它想要的片斷,或者還不允許它去下載。關於不允許其它peers從它那裡下載檔案片斷的策略,被稱為 阻塞choking,後文將進行討論。其它關於檔案分布的方法通常都要用到麻煩的樹結構,而且樹葉的上載能力並沒有被利用起來。簡單的讓 peers 宣布它擁有什麼會導致不到 10 % 的頻寬開支,卻可以可靠的使用所有的上載能力。
2.3流水作業
構架在TCP之上的套用層協定,例如BT,很重要的一點是應該同時傳送多個請求,以避免在兩個片斷髮送之間的延遲,因為那樣會嚴重影響傳輸速率。為了達到這種目的,BT將每個片斷又進一步分為子片斷,每個子片斷的大小一般是16k,同時,它一直保持幾個請求(通常是5個)被流水的同時傳送。流水作業所選擇的data(應該是指的同時傳送的請求數目,也就是5個request)的依據是能使得大多數連線變得飽和。
譯註:也就是說,每次傳送5個請求,然後過一段時間,又傳送5個請求。流水作業在HTTP 協定1.1版本中被廣泛運用。
2.4片斷選擇
選擇一個好的順序來下載片斷,對提高性能非常重要。一個差的片斷選擇算法可能導致所有的片斷都處於下載中,或者另一種情況,沒有任何片斷被上載給其它 peers。
2.4.1嚴格的優先權
片斷選擇的第一個策略是:一旦請求了某個片斷的子片斷,那么該片斷剩下的子片斷優先被請求。這樣,可以儘可能快的獲得一個完整的片斷
2.4.2最少的優先
對一個下載者來說,在選擇下一個被下載的片斷時,通常選擇的是它的peers們所擁有的最少的那個片斷,也就是所謂的“最少優先”。這種技術,確保了每個下載者都擁有它的peers們最希望得到的那些片斷,從而一旦有需要,上載就可以開始。這也確保了那些越普通的片斷越放在最後下載,從而減少了這樣一種可能性,即某個peer當前正提供上載,而隨後卻沒有任何的被別人感興趣的片斷了。
譯註:
也就說說,每個peer都優先選擇整個系統中最少的那些片斷去下載,而那些在系統中相對較多的片斷,放在後面下載,這樣,整個系統就趨向於一種更優的狀態。如果不用這種算法,大家都去下載最多的那些片斷,那么這些片斷就會在系統中分布的越來越多,而那些在系統中相對較少的片斷仍然很少,最後,某些 peer 就不再擁有其它 peer 感興趣的片斷了,那么系統的參與者越來越少,整個系統的性能就下降。
在BT系統中,充分考慮了經濟學的概念,處處從整個系統的性能出發,參與者越多,系統越最佳化。
信息理論顯示除非種子上傳了檔案的所有片斷,否則沒有任何下載者可以完成所有檔案的下載。如果在一個部署中,只有一個種子,而且種子的上載能力比它的大多數下載者都要差,那么,不同的下載者從種子那裡下載不同的片斷,性能就會變得比較好,因為,重複的下載浪費了種子獲取更多信息的機會。“最少優先”使得下載者只從種子處下載新的片斷(也就是整個系統中其它peer都沒有的片斷),因為,下載者能夠看到其它peers那裡已經有了種子已經上傳的片斷。
在某些部署中,原始的種子由於某些原因最終關閉,只好由剩下的這些下載者們來負責上傳。這樣顯然會帶來一個風險:某些片斷任何一個下載者都不擁有。“最少優先”也很好的處理了這種情況。通過儘快的複製最少的片斷,減少了這種由於當前的peers停止上載後帶來的風險。
2.4.3隨機的第一個片斷
“最少優先”的一個例外是在下載剛開始的時候。此時,下載者沒有任何片斷可供上傳,所以,需要儘快的獲取一個完整的片斷。而最少的片斷,通常只有某一個peer擁有,所以,它可能比多個peers都擁有的那些片斷下載的要慢。因此,第一個片斷是隨機選擇的,直到第一個片斷下載完成,才切換到“最少優先”的策略。
2.4.4最後階段模式
有時候,從一個速率很慢的peer那裡請求一個片斷。在下載的中間階段,這不是什麼問題,但是卻可能潛在的延遲下載的完成。為了防止這種情況,在最後階段,peer向它的所有的peers們都傳送某片斷的子片斷的請求,一旦某些子片斷到了,那么就會向其它peer傳送cancel 訊息,取消對這些子片斷的請求,以避免頻寬的浪費。實際上,用這種方法並沒有浪費多少頻寬,而檔案的結束部分也一直下載的非常快。
阻塞算法
BT並不集中分配資源。每個peer自己有責任來儘可能的提高它的下載速率。Peers從它可以連線的peers處下載檔案,並根據對方提供的下載速率給予同等的上傳回報(你敬我一尺,我敬你一丈)。對於合作者,提供上傳服務,對於不合作的,就阻塞對方。所以說,阻塞是一種臨時的拒絕上傳策略,雖然上傳停止了,但是下載仍然繼續。在阻塞停止的時候,連線並不需要重新建立。
阻塞算法並不屬於BT對等協定(指peers 之間互動的協定)的技術部分,但是對提高性能是必要的。一個好的阻塞算法應該利用所有可用的資源,為所有下載者提供一致可靠的下載速率,並適當懲罰那些只下載而不上傳的peers。
3.1帕累托有效
帕累托有效是指資源配置已達到這樣一種境地,即任何重新改變資源配置的方式,都不可能使一部分人在沒有其他人受損的情況下受益。這一資源配置的狀態,被稱為“帕累托最優”(Pareto optimum)狀態,或稱為“帕累托有效”(Pareto efficient)
在計算機領域,尋求帕累托有效是一種本地最佳化算法
BitTorrent的阻塞算法,用一種針鋒相對的方式來試圖達到帕累托最優。(原文不太好翻譯,我簡化了)。Peers對那些向他提供上傳服務的peers給予同樣的回報,目的是希望在任何時候都有若干個連線正在進行著雙向傳輸。
3.2 BitTorrent的阻塞算法
從技術層面上說,BT的每個peer一直與固定數量的其它 peers 保持疏通(通常是4個),所以問題就變成了哪些peers應該保持疏通?這種方法使得TCP的擁塞控制性能能夠可靠的飽和上傳容量。(也就是說,儘量讓整個系統的上傳能力達到最大)。
嚴格的根據當前的下載速率來決定哪些peers應該保持疏通。令人驚訝的是,計算當前下載速率是個大難題。當前的實現實質上是一個每隔20秒的輪詢。而原來的算法是對一個長時間的網路傳輸進行總計,但這種方法很差勁,因為由於資源可用或者不可用,頻寬會變化的很快。
為了避免因為頻繁的阻塞和疏通 peers造成的資源浪費,BT每隔10秒計算一次哪個peer需要被阻塞,然後將這種狀態保持到下一個10秒。10秒已經足夠使得TCP來調整它的傳輸性能到最大。
3.3.optimistic unchoking
如果只是簡單的為提供最好的下載速率的peers們提供上載,那么就沒有辦法來發現那些空閒的連線是否比當前正使用的連線更好。為了解決這個問題,在任何時候,每個peer都擁有一個稱為“optimistic unchoking”的連線,這個連線總是保持疏通狀態,而不管它的下載速率是怎樣。每隔30秒,重新計算一次哪個連線應該是“optimistic unchoking”。30秒足以讓上載能力達到最大,下載能力也相應的達到最大。這種和針鋒相對類似的思想非常的偉大。“optimistic unchoking”非常和諧的與“囚徒困境”合作。
3.4.反對歧視
某些情況下,一個peer可能被它所有的peers都阻塞了,這種情況下,它將會保持較低的下載速率直到通過“optimistic unchoking”找到更好peers。為了減輕這種問題,如果一段時間過後,從某個peer那裡一個片斷也沒有得到,那么這個peer認為自己被對方“怠慢”了,於是不再為對方提供上傳,除非對方是“optimistic unchoking”。這種情況頻繁發生,會導致多於一個的並發的“optimistic unchoking”。
3.5僅僅上傳
一旦某個peer完成了下載,它不能再通過下載速率(因為下載速率已經為0了)來決定為哪些 peers 提供上載了。採用的解決辦法是,優先選擇那些從它這裡得到更好的上載速率的peers。這樣的理由是可以儘可能的利用上載頻寬。
真實體驗
BitTorrent不僅僅早已經實現,而且早已經被廣泛的使用,它為許多並發的下載者提供成百兆的檔案下載。已知的最大的部署中,同時有超過1000個的下載者。當前的瓶頸(實際還沒有達到)看來是trakcer的頻寬。它(trakcer的頻寬)大概占用了頻寬總量的千分之一,一些小的協定擴展可能會使它降到萬分之一。