bt協議詳解 基礎篇(上)

2021-09-02 13:12:45 字數 2497 閱讀 4614

最近開發了乙個免費教程的**,產生了仔細了解bt協議的想法,所以寫了這一篇文章,後續還會寫一些關於搜尋和索引的東西,都是在開發這個**的過程中學習到的技術,敬請期待。

1 簡介

相信很多人都聽說過bt協議。但是當我問周圍的人究竟什麼是bt協議呢?他們的解釋讓我對bt協議的理解變得更含糊,為了弄清楚心中的問題,我開始了自己對bt協議的學習。

我在官網 上找到一篇文章the bittorrent protocol specification。這個標題翻譯過來就是「bittorrent協議規範」,是bittorrent協議的基礎篇,為什麼說是基礎篇呢?

bt協議是乙個協議簇。

有點像tcp/ip協議一樣,bt協議不是乙個簡單的協議,而是一系列相關的協議組成的,而且這個協議簇一直在進化。

既然這篇文章的主題是「基礎篇」,所以它的內容主要來自bep_0003,也就是bittorrent協議規範,因為其它的協議都是以這個協議為基礎的,可見這個的重要性。

2 bittorrent協議規範(中文版)

bt檔案分享由下列內容組成:

傳統的檔案伺服器

種子檔案(.torrent檔案)

bt tracker伺服器

檔案分享者

web瀏覽器

web瀏覽器使用者(多個)

乙個伺服器按照下面的步驟開始檔案分享過程

啟動乙個bt tracker伺服器

啟動乙個普通的web伺服器,如apache

生成乙個.torrent檔案,在檔案中新增bt tracker伺服器的位址

上傳torrent檔案到web伺服器

安裝bt客戶端

瀏覽web頁面

儲存torrent檔案到本地

bencoding編碼

strings(字串)編碼為:《字串長度》:《字串》 例如: 4:test 表示為字串"test",4:例子 表示為字串「例子」,字串長度單位為位元組,沒開始或結束標記

integers(整數)編碼為:i《整數》e,開始標記i,結束標記為e,例如:i1234e 表示為整數1234,i-1234e 表示為整數-1234,整數沒有大小限制,i0e 表示為整數0,i-0e 為非法,以0開頭的為非法如: i01234e 為非法

lists(列表)編碼為:le,開始標記為l,結束標記為e,列表裡可以包含任何bencoding編碼型別,包括整數,字串,列表,字典。例如: l4:test5abcdee 表示為二個字串["test","abcde"]

dictionaries(字典)編碼為de,開始標記為d,結束標記為e,關鍵字必須為bencoding字串,值可以為任何bencoding編碼型別,例如: d3:agei20ee 表示為,d4:path3:c:\8:filename8:test.txte 表示為

metainfo files

metainfo files(俗稱torrent檔案)使用bencoding進行編碼的乙個dictionaries資料型別,有兩個key

info : info又是乙個dictionaries(bencoding支援資料型別的巢狀),info裡面的字串都是使用utf-8編碼。

info dictionary: info字典

name(檔名) : 通常用作torrent檔案的檔名

piece length(檔案塊長度): 每乙個peace(檔案塊)的位元組長度。為了傳輸的方便,bt協議把檔案分成等大的檔案塊,除了最後一塊。每乙個檔案塊的長度通常是2的指數(bittorrent 3.2預設檔案塊大小是 1m)

pieces : pieces是乙個字串,它的長度是20的倍數,每一段20個字元表示對應檔案塊的sha1 hash值。

length和files 兩個中有且只有乙個會出現。當存在length key事,表示torrent種子檔案只包含乙個單一的檔案,length表示這個檔案的位元組數,俗稱檔案長度。

當torrent種子檔案包含多個檔案時,files表示總的檔案個數,

files : files也是乙個dictionaries資料型別,它有兩個key

files dictionary:

length: 檔案長度,總位元組數

path: 乙個utf-8編碼的字串陣列,最後乙個字串儲存真實的檔名,前面的字串儲存檔案路徑。長度為0表示path欄位不合法。

trackers

tracker伺服器接收get請求,乙個get請求由下列字段組成

tracker返回的內容是乙個bencoded dictionaries資料型別,如果返回的內容包含failure reason欄位,表示請求失敗,failure reason包含失敗的理由。如果沒有failure reason欄位,則返回內容必須包含interval和peers欄位。interval代表客戶端發起下一次請求的間隔,peers包含乙個peer列表。乙個peer由peer、id、ip、port組成。

bt tracker伺服器可以返回乙個壓縮的peer列表,見bep 23。

我的個人部落格**

bt協議詳解 基礎篇(下)

最近開發了乙個免費教程的 產生了仔細了解bt協議的想法,所以寫了這一篇文章,後續還會寫一些關於搜尋和索引的東西,都是在開發這個 的過程中學習到的技術,敬請期待。1 簡介 相信很多人都聽說過bt協議。但是當我問周圍的人究竟什麼是bt協議呢?他們的解釋讓我對bt協議的理解變得更含糊,為了弄清楚心中的問題...

HTTP協議 基礎篇

定義 1.http協議 超文字傳輸協議 它可以使瀏覽器更高效,網路傳輸減少。它不僅保證正確快速的傳輸文字,還能確定那一部分內容首先顯示 如文字先於圖形 2.http是乙個應用層協議,由請求和響應構成,是乙個標準的客戶端伺服器模型,http是乙個無狀態的協議。並且永遠都是客戶端發起請求,伺服器回送響應...

Extjs Panel基礎篇上

今天我們就來看看讓大家心動不已的ext的panel,很可能你以前習慣使用了html這種元素,發覺要做出很漂亮的介面是太困難了,加上自己的審美觀又不是那麼的強,那麼 extjs就可以很不好的幫助我們解決這個問題,你這需要進行簡單的配置乙個漂亮的面板就會出現在你的面前,下面我們就來看看吧!var p n...