參考了btsource、jbittorrent實現和utorrent機制

參考了btsource、jbittorrent實現和utorrent機制

 一、做種
    現在很多BT軟件都提供了做種功能,在做種時,我們都必須指定tracker服務器地址,如果該地址無效,則做出來的種子對BT協議來說是沒有任何實際意義的。
二、bt tracker服務
    對於純BT協議來說,每個BT網絡中至少要有一臺Tracker服務器(追蹤服務器),tracker主要基本工作有以下幾個方面:
 記錄種子信息(torrent文件信息)  記錄節點信息  計算並返回節點列表給BT客戶端

    每次我們利用BT軟件做完種子後,總要找個論壇之類的來上傳自己的種子,這樣別人就可以下載到這個種子。爲什麼要上傳種子呢?原因:
上傳種子,其實就是把種子信息記錄到tracker服務器上 種子可以在論壇傳播,種子的擴展程度就決定了種子的健康度和下載度

    當其他用戶用BT軟件打開種子後,BT軟件會對種子進行解析(BDecode),主要得到種子的相關信息,包括:文件名、文件大小、tracker地址等。然後BT軟件會向tracker地址發送請求報文,開始進行下載。BT向tracker發送的是Get請求,請求的內容主要有以下幾個方面:


info_hash
必填
種子文件info字段的SHA1值(20字節)

peer_id
必填
節點標識,由BT客戶端每次啓動時隨機生成

port
必填
節點端口,主要用於跟其他節點交互

uploaded
必填
總共上傳的字節數,初始值爲0

downloaded
必填
總共下載的字節數,初始值爲0

left
必填
文件剩餘的待下載字節數

numwant
必填
BT客戶端期望得到的節點數

ip
選填
BT客戶端IP,選填的原因是Tracker可以得到請求的IP地址,不需要客戶端直接上傳

event
選填
started/stopped/completed/空。當BT客戶端開始種子下載時,第一個發起的請求爲started,
在下載過程中,該值一直爲空,直到下載完成後才發起completed請求。做種過程中,發送
的event也爲空。如果BT客戶端停止做種或退出程序,則會發起stopped請求。
 
    tracker收到該請求後主要進行以下幾步處理:
1.        根據info_hash查找種子信息,如果tracker沒有該種子的任何信息,tracker服務器可以返回錯誤或返回0個種子數
2.        如果tracker找到了種子信息,接下來就會去查找是否數據庫中已存在該peer_id的節點。接下來根據event的值進行相關處理。
3.        如果event是stopped,說明該節點已不可用,系統會刪除tracker上關於該節點的記錄信息。
4.        如果event是completed,說明種子節點+1,非種子-1。
5.        如果event是started,說明這是種子第一次連接tracker,tracker需要記錄該節點信息,此外如果left=0,說明這是一個種子節點。
6.        如果event是空,則說明節點正在下載或上傳,需要更新tracker服務器上該節點的信息。
7.        最後tracker從本地挑選出numwant個節點信息返回給BT客戶端,實際返回的節點數不一定就是numwant,tracker只是儘量達到這個數量。
 
Tracker響應
Tracker正常返回的信息結構主要是:


interval
必填
請求間隔(秒)

complete
選填
種子節點數

Incomplete
選填
非種子節點數

peers
ip
必填
IP地址

peer_id
選填
節點標識

port
必填
端口
如果Tracker檢查發現異常,可以返回錯誤信息:


failure reason
錯誤原因
 
Tracker如何挑選種子節點並返回給客戶端?
最普遍也是最簡單的方式,那就是隨機返回,tbsource採用的就是隨機返回的機制。不少研究論文也提出了相關的算法,如IP地址策略和階段返回策略。
IP地址策略是指根據IP地址所含拓撲信息來判斷兩個節點的距離,從而返回距離請求節點較近的節點列表。該方法主要適用於IPV6。
階段返回策略,根據節點的下載進度,返回下載進度相近的節點列表。
個人觀點:無論tracker採用什麼算法,對BT客戶端來說,能夠提高的下載效率都是很有限的,採用“高級”的算法有時反而會增加tracker的負載。因此隨機返回還算是比較高效的。
Bt協議中,有兩個策略可以用來提高整個BT網絡的健壯性和下載速度,它們分別是:最少片段優先策略(BT客戶端處理)和最後階段模式。爲了響應“最後階段模式”,當種子節點的下載進度大於80%(個人指定)時,tracker服務器應該儘量返回種子節點給客戶端,幫助客戶端儘快完成下載,使其成爲種子節點。
 
三、private tracker原理
         Privatetracker簡稱PT,目前主要應用於高清視頻下載。其實PT就是“我爲人人,人人爲我”這個目標的最佳實踐者。在實際的BT下載過程中,用戶通過種子下載完文件後,出於“自私”的考慮(怕佔用自己帶寬),往往會退出做種,從而降低種子的熱度。這就是爲什麼一個種子過了一段時間後,往往下載速度很慢或下載不完。
         爲了真正地實現BT理念,PT強制每個下載者必須上傳一定量數據後,才能進行下載。如何保證這種行爲呢?

    現在的PT一般存在於網絡社區中,每個註冊網絡社區的用戶都會分配到一個隨機的KEY,任何從社區下載的種子,都會包含用戶的KEY。每次用戶通過種子下載時,都會連接到社區的tracker服務器上,tracker服務器會檢查KEY對應用戶的上傳下載量,如果上傳量不滿足標準,則tracker服務器會記錄相關信息,並對該用戶的下載及社區活動進行相關限制。


//g個人覺得private Tracker比較好
發佈了100 篇原創文章 · 獲贊 6 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章