最近開發了乙個免費教程的**,產生了仔細了解bt協議的想法,所以寫了這一篇文章,後續還會寫一些關於搜尋和索引的東西,都是在開發這個**的過程中學習到的技術,敬請期待。
1 簡介
相信很多人都聽說過bt協議。但是當我問周圍的人究竟什麼是bt協議呢?他們的解釋讓我對bt協議的理解變得更含糊,為了弄清楚心中的問題,我開始了自己對bt協議的學習。
我在官網 上找到一篇文章the bittorrent protocol specification。這個標題翻譯過來就是「bittorrent協議規範」,是bittorrent協議的基礎篇,為什麼說是基礎篇呢?
bt協議是乙個協議簇。
有點像tcp/ip協議一樣,bt協議不是乙個簡單的協議,而是一系列相關的協議組成的,而且這個協議簇一直在進化。
既然這篇文章的主題是「基礎篇」,所以它的內容主要來自bep_0003,也就是bittorrent協議規範,因為其它的協議都是以這個協議為基礎的,可見這個的重要性。
接上篇。
peer protocol
bt peer協議是基於tcp或者utp協議(utp協議也是bt協議簇中的乙個,後面會專門寫一篇關於utp協議的文章)。
peer鏈結兩端包含2位的狀態:choked,unchoked和interested,uninterested。choking表示不會傳送資料知道乙個unchoking動作發生。後面將會解釋為什麼會存在choking這個狀態。
peer連線一開始是choked和uninterested狀態。
peer連線協議由握手和緊跟著的無窮的用長度做字首的字串流。握手由19(十進位制字串)跟著字串'bittorrent protocol'開始。開始的字串是長度。
後面所有的整數都是使用4位元組big-endian(高位元組序)
20位元組hash的後面是20位元組的peer id,這個id會傳送給bt tracker伺服器,而且會出現在bt tracker返回的peer列表裡面。
上面就是一次握手所有的內容。接下來是可選一系類的長度做字首的訊息。長度為0表示keepalives(保持連線),被忽略。保持連線訊息每兩分鐘傳送一次。
peer messages
所有的非保持連線的訊息由乙個表示型別的位元組開始。
型別列表如下:
'choke', 'unchoke', 'interested', 和 'not interested' 這四個訊息沒有訊息體。
request訊息包含index、begin、length三個字段。最後兩個是位元組偏移。length通常是2的指數除非是檔案的最後一塊。當前所有bt協議的實現版本中length的值是16kib,關閉連線的request中length欄位的值要大於16kib。
piece訊息包含index、begin、piece欄位。它們的值和request訊息是相關的。
乙個好的choking演算法必須具備幾個好的特性。它應該能控制併發數量來獲取更高的tcp效能。它應該避免過快的choking和unchoking。最後它應該每過一段時間就嘗試空閒連線來找到更好的連線,這就是所謂的unchoking優化。
我的個人部落格**
bt協議詳解 基礎篇(上)
最近開發了乙個免費教程的 產生了仔細了解bt協議的想法,所以寫了這一篇文章,後續還會寫一些關於搜尋和索引的東西,都是在開發這個 的過程中學習到的技術,敬請期待。1 簡介 相信很多人都聽說過bt協議。但是當我問周圍的人究竟什麼是bt協議呢?他們的解釋讓我對bt協議的理解變得更含糊,為了弄清楚心中的問題...
HTTP協議 基礎篇
定義 1.http協議 超文字傳輸協議 它可以使瀏覽器更高效,網路傳輸減少。它不僅保證正確快速的傳輸文字,還能確定那一部分內容首先顯示 如文字先於圖形 2.http是乙個應用層協議,由請求和響應構成,是乙個標準的客戶端伺服器模型,http是乙個無狀態的協議。並且永遠都是客戶端發起請求,伺服器回送響應...
協議篇 6 FTP協議詳解
檔案傳輸協議 ftp file transfer protocol 是網際網路中使用最廣泛的檔案傳輸協議。ftp使用互動式的訪問,允許客戶指定檔案的型別和格式 如指明是否使用 ascii碼 並允許檔案具有訪問許可權 如訪問檔案的使用者必須經過授權,並輸入有效的口令 檔案傳輸協議有基於 tcp的 ft...