BT協議分析

BT系統的組成結構

  1 普通的Web服務器:   例如ApacheIIS服務器

2 一個靜態的種子文件:   .Torrent文件,採用Bencoding編碼

3  Tracker服務器:        追蹤下載同一文件的用戶

4 終端用戶的Web瀏覽器:用於下載種子文件

5  BT客戶端:            例如BitCommetBitSpirit

 

種子文件

1 格式介紹

  種子文件採用bencoding編碼,整個文件包含以下關鍵字:

    announce               Tracke服務器的UR以字符串)

announce-list(可選):  備用Tracker服務器列表(列表)

creation date(可選)種子創建的時I司。

comment(可選):        備註(字符串)

created by(可選):      創建人或創建程序的信息(字符串)

 Info:                          一個字典結構,包含文件的主要信息,分二種情況:單文件結構或多文件結構

單文件結構如下:

     length:                 文件長度,單位字節(整數)

    md5sum(可選)32個字符的文件的MD5校驗和,BT不使用這個值,只是爲了兼容一些程序所保留!(字符串)

    Name:                 文件名(字符串)

    Piece length:        每個塊的大小,單位字節(整數)

    Pieces:                每個塊的20個字節的SHAT Hash的值(二進制格式)

多文件結構如下:

    files:                    一個字典結構。

    Length:                文件長度,單位字節(整數)

    md5sum(可選):   同單文件結構中相同。

          Path:                   文件的路徑和名字,是一個列表結構,如test/test.txt列表 爲 14:test8test.txte

    Name:                 最上層的目錄名字(字符串))o

    Piece length:        同單文件結構中相同。

    Pieces:                同單文件結構中相同。

 

2 Bencoding編碼規則:

  1)字符串編碼:<字符串長度>:<字符串>

       例如字符串spam被編碼爲4:spam

   2)整數編碼:  i<整數>e

       例如數字23表示爲i23e-23表示爲i-23e0i0e

   3)列表編碼:  1<Bencoding編碼類型>e

       例如l4:spam4:eggse表示兩個字符串“spam”,“eggs

 (4字典編碼: d<Bencoding字符串><Bencoding編碼類型>e

       例如d3:cow3:moo4:spam4:eggse表示{“cow“=“moo“, “spam“=“eggs“}

          d4:path3:C:/8:filename8:test.txte表示{"path"="C:/","filename"="test.txt"}

 

3 文件舉例(以下是用記事本打開.torrent文件)

d8:announce40:udp://tracker.bitcomet.net:8080/announce13:creation datei1175422660e8:encoding3:GBK4:infod6:lengthi7080818e4:name18:gettingoveryou.mp310:name.utf-818:gettingoveryou.mp312:piece lengthi1048576e6:pieces140:琚瀲⒂!??M挷咲i?屩軒@EU50-?F?@%l?Iy~ ??R?d[1]f/>@陗罏?檣燐#o?翟木懣槾"­W?Dk鰛毆鴞?Y}0!$7:privatei1ee13:publisher-url7:http://19:publisher-url.utf-87:http://e

BT系統的通信過程(沒有采用DHT時)

BT客戶端通過種子文件獲得相關信息,在下載過程中定期與Tracker服務器交互(通過http協議或者https協議)。Tracker定期從下載者處接受信息,並返回一個Peers列表。

下載者週期性的向Tracker登記,Tracker根據各個下載者的登記信息不斷更新Peers列表。因此BT客戶端定時的向Tracker發出獲取Peers列表的請求,以便客戶端能獲得更快、更多的Peers,使得它的下載速度更快。

BT客戶端之間根據Peers列表的信息,向相應的BT客戶端發起連接,下載需要的部分,從而實現了各個客戶端之間的相互通信。這種連接是基於TCPBT對等協議。

 

Tracker查詢

     Tracker通過HTTPGET命令的參數來接收信息BT客戶單發送給Tracker服務器GET請求,包含一下關鍵字:

  Info_ hash:     種子文件中info部分的SHA-1 (Secure Hash Algorithm 1) ,  20

            字節長。每一個片斷都採用SHA-I,當BT客戶端每下載完一個片斷,都需要驗證數據的正確性。

  PeerId:          下載者的ID,一個20字節長的字符串。每個下載者在開始一次新的下載之前,隨機創建一個ID

  IP(可選):    給出了peerIP地址。

  Port:               peer所監聽的端口。下載者通常在在6881端口上監聽,如果該端口

被佔用,就會嘗試6882,如果還被佔用,那麼會一直嘗試到6889,如果都被佔用,那麼就放棄監聽。

  Uploaded:     已經上載的數據大小。

  Downloaded: 已經下載的數據大小。

  Left:              Peer還有多少數據沒有下載完。

  Event(可選):值可以爲started, completedstopped之一

Tracker響應

  BT客戶端向Tracker查詢後,Track會發出響應。響應是用Bencoding編碼的字典。

   1 如果響應中有關鍵字failure reason,則表示查詢失敗,其值爲一個字符串,解釋失敗原因。不再有其它關鍵字。

   2 否則有兩個關鍵字:

     Interval:   兩次發送請求的時間間隔

     Peers:      一個字典的列表,每個字典包括一下關鍵字Peer Id IP ,  Port,分別對應Peer所選擇的ID, IP地址。

 

BT對等協議

是基於TCP的應用層協議,用於Peer之間交換信息。連接後兩個Peer之間是對稱的,數據可以雙向傳送。當一個Peer下載完一個片段後,就會向所有Peer宣佈它擁有了這個片段。包括一下幾個消息:

1 Handshake消息

2 Bitfield消息

3 Have消息

4 Request消息

5 Cancel消息

6 Choke消息

7 Interested消息

8 keep-alive消息

 

注:在沒有采用DHTDistributed Hash TableDynamic Hash Table)技術時,對等體之間的互相發現需要通過Tracker服務器,因此如果沒有Tracker服務器,BT客戶端就不會獲得新加入的用戶的信息,速度會受很大影響甚至根本無法下載。現在很多BT軟件採用DHT技術的Kad算法,可以不通過服務器實現對等體之間的相互定位與發現,例如電驢就採用了kad網絡。

參考網站:http://www.bittorrent.org/

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章