簡述
Bittorrent(BT) wiki:https://wiki.theory.org/index.php/BitTorrentSpecification
文件分發協議,下載過程主要包括:BT客戶端Peer(有.torrent文件)首先解析.torrent文件得到Tracker地址,然後連接Tracker服務器。Tracker服務器迴應Peer的請求,提供下載者其他Peer(包括髮布者)的IP。Peer再連接其他Peer,根據.torrent文件,兩者分別對方告知自己已經有的塊,然後交換對方沒有的數據。
Peer每得到一個塊,需要算出下載塊的Hash驗證碼與.torrent文件中的對比,如果一樣則說明塊正確,不一樣則需要重新下載這個塊。這種規定是爲了解決下載內容準確性的問題
尋址方式
DHT網絡(分佈式Hash表) + PEX(Peer Exchange) + MagNet指紋
DHT
在不需要服務器的情況下,每個客戶端負責一個小範圍的路由,並負責存儲一小部分數據,從而實現整個DHT網絡的尋址和存儲。
MagNet
文件的“數字指紋“,需要藉助DHT網絡來索引需要下載的文件的,在對等網絡中進行信息檢索和下載文檔。和基於“位置”連接的統一資源定位符(URL)不同,磁力鏈接是基於元數據(metadata)文件內容,屬於統一資源名稱(URN)。是在分佈式數據庫中,通過散列函數值來識別、搜索來下載文檔。
peer與tracker
tracker:管理BitTorrent協議的服務器。
Peer:遵循BitTorrent協議來交換文件數據用戶
Data與Piece
Data:遵循BitTorrent協議傳輸的文件。
Piece:文件對應的切片數據(數據傳輸的最小單位)。
Data依據bittorrent被分爲較小片段在peers之間傳輸,其中Piece大小是固定的,除了最後一塊片段的大小是不規則的,其餘片段的大小都是一致的。
MetaInfo
MetaInfo文件是什麼?:就是“.torrent”文件,包含協議運行所需的所有詳細信息的文件。就是說,我們拿到MetaInfo就可以找到對應的文件。
主要包括Tracker信息和文件信息,Tracker信息主要是BT下載中需要用到的Tracker服務器的地址和針對Tracker服務器的設置,文件信息是根據對目標文件的計算生成的,計算結果根據BitTorrent協議內的B編碼規則進行編碼
GitHub-Go
Taipei Torrent: https://github.com/jackpal/Taipei-Torrent
較輕量的,基於命令行接口的Torrent客戶端,主要功能有支持多Torrent文件,Magnet鏈接,DHT,UPnP/NAT-PMP打洞,也提供簡單的tracker服務。
anacrolix/torrent:https://github.com/anacrolix/torrent
實現了BitTorrent協議相關功能包,以及提供較豐富的命令行工具集。支持加密協議,DHT,PEX,uTP以及多種擴展