BT通信中數據下載的分析和實現

2009-08-21 14:36

BT通信中數據下載的分析和實現

關鍵字: Redeployment zlib 單態 AOP LightboxBT通信技術作爲一種優秀的P2P下載技術,在目前的文件共享方面的作用越來越重要。本文對BT通信協議規範進行簡單概述,分析了BT通信中數據下載的原理和實現方式。筆者結合自身實際工作中的經驗,介紹了BT通信中提高數據下載速度的策略。1 BT通信協議規範簡述

  BT(BitTorrent)通信協議是一種基於HTTP的分發文件的協議,由三部分組成:torrent文件格式、peer與Tracker服務器的通信協議、peers之間的通信協議。

  ●字符串類型,表示爲十進制數的字符串長度加冒號再跟原字符串。

  如4:spam就相當於'spam'。

  ●整型數據,表示爲前面加'i'、後面加'e'、中間是十進制數。

  如i3e就相當於3,i-3e就是-3。整型數據沒有長度限制;i-0e無效,以'i0'表示i0e。

  ●字典,表示爲一個'd'開頭,後面跟一個交替關鍵字(key)及其值對應的列表最後加一個'e'。

  torrent文件格式是由若干字段確定的,關鍵字段如表1所示。

  表1 torrent文件格式

字段 類型 含義 announce 字符串 主Tracker服務器的URL announce-list 列表 備用Tracker服務器的URL info 字典 文件的摘要信息 creation date 整型 torrent文件創建日期 created by 字符串 製作torrent文件的軟件名稱 encoding 字符串 發佈的文件資源名稱使用的編碼方式

   只有announce和info兩個字段是必須的,其它字段都可以省略。info字段還可用來確定共享的文件資源是由單文件還是由多文件組成:若 info字典中有length字段,則是單文件結構;若有files字段,則是多文件的目錄結構;length字段和files字段不能同時出現。

圖1

  
peer與Tracker服務器的通信採用HTTP/HTTPS協議,可利用TCP連接進行交互。peer向Tracker 發送一個HTTP的GET請求,並把自己的信息放在GET的參數中,這個請求的大致意思是:我是A,我想下載X文件,我的IP是IP1,我用的端口是 Port1。Tracker服務器對所有peers的信息進行維護,當它收到一個請求後,首先把該peer的信息記錄下來(如果己經記錄,就檢查是否需要 更新),然後將一部分(數目根據peer請求中設置的參數確定)參與下載同一個文件的peers的信息返回給該peer。

  最終的數據下載由各個peers的交互完成,peers之間的通信採用BT標準的Peer Wire 協議(BT對等協議),使用TCP連接。

  2 BT通信中的數據下載2.1 數據下載原理

   若干個peers提供文件共享,它們擁有完整的文件,並將自己的信息註冊到Tracker服務器上;其它peers每隔一定時間與Tracker服務器 進行通信,報告自己的信息並獲取其它peers的信息。peer在收到Tracker的響應後,與其它peers建立連接,下載本地所沒有的文件數據;爲 了使其它peers也可以從本地獲取文件數據,peer還要監聽本地某個端口,用於接收其它peers的連接和數據請求。這樣每個peer在下載的同時也 給其它peers上傳數據。

  舉例說明:假設peer A從提供文件共享的peers處隨機下載了文件的X部分,peer B則隨機下載了文件的Y部分,這樣A就會根據自己的情況去向B請求B已經下載好的Y部分,B也會向A請求A已經下載好的X部分,這樣就減輕了提供文件共享 的peers的負荷,也加快了peer A和B的下載速度,更減少了地域間的限制。如peer C要連接到提供文件共享的peers去下載這個文件的話,速度可能很慢,但到A和B上去下載就快多了。

  BT通信中,所有正在下載某個文件或者已經下好了某個文件但還沒有退出該文件下載網絡的peers都是發送源,故下載文件的peers越多,提供數據上傳的peers也越多,從而每個peers下載的速度也越快。

  2.2 數據下載的實現

  當peer從Tracker服務器上查詢到其它peers的信息後,就和其它peers建立TCP連接,然後與建立了連接的peer進行“兩次握手”:

   假設一個peer A和peer B建立了連接,A立刻利用這個連接向B發送BT對等協議中的“握手”消息。“握手”消息首先是發送整數19,然後發送字符串“BitTorrent protocol”,19即指示該字符串的長度;之後發送8個保留的字節,這些字節當前都設置爲0;接下來發送對torrent文件中的info信息進行 SHA-l加密計算後得到的hash值,20個字節長;最後發送20個字節的peer-id,用來標識A自身。同樣,peer B在與A的TCP連接建立之後,也向A發送BT對等協議的“握手”消息。A一旦接收到B的“握手”消息,那麼它就認爲“握手”成功,建立了BT對等協議層 次上的連接。A 發送了一個消息,同時接收了一個消息,所以這個握手過程是兩次“握手”。同樣,對B來說,在發送完“握手”消息之後,就等待A的“握手”消息,如果收到, 那麼它也認爲對等連接建立了。

  一旦對等連接建立之後,雙方就可以通過這個連接傳遞消息和交互數據了。TCP連接的兩個peers都保持 兩比特的狀態信息:是否choked,是否interested。choking是通知對方:沒有響應消息會發送,除非對方的unchoking發生。一 旦一個peer的狀態變爲interested,而另一peer的狀態變爲unchoking,那麼兩個peers之間的數據傳輸就可以開始了。也就是 說,一個peer如果想從它的某個peer那裏得到數據,那麼它首先必須將它們之間的連接設置爲interested,即發一個interested消息 過去,而另一個peer,要檢查它是否應該給這個peer發送數據,如果它對這個peer是unchoking,那麼就可以給它發數據,否則還是不能給它 發數據。

  peers之間通過bitfield消息互換所擁有的共享文件的數據塊的情況,若一個peer知道某個peer擁有自己需要的 數據塊,就會向該peer發送request消息請求該數據塊,所請求的數據塊通過其它peer的piece消息傳送過來;同時該peer響應其它 peer的request消息。一旦某個peer下載完了一個數據塊,並且也檢查了它的完整性,那麼該peer就向它所有的peers發送have消息, 宣佈它擁有了這個片斷。

  該播放器有如下功能:

  ●P2P下載功能;

  ●連接USB存儲設備功能;

  ●高清影視播放功能。

  P2P下載是播放器的核心功能之一,播放器內嵌遵守標準BT通信協議的下載客戶端程序,可以通過互聯網直接連接到公司提供的網站上獲取和更新電影種子列表,筆者負責優化和維護該下載程序,在實際測試中對於如何提高BT數據下載速度積累了一些經驗:

  1)超時機制

  由於與某個peer之間的網絡連接可能很慢,故要引入超時機制:一是連接超時,二是數據塊下載超時。

  當在某個時間段內,沒有收到某個peer的BT對等協議的交互消息時,就要斷開與該peer的連接,清除本地維護的該peer的信息,從而避免peer長時間不響應或響應很慢導致內存資源的浪費和數據下載效率的降低。

   爲了不頻繁的寫硬盤而佔用CPU和損傷硬盤,下載程序維護了一個固定大小的本地緩存,將正在下載中的數據塊進行緩存。BT通信中的數據下載以數據塊爲單 位進行,只有從某個peer處下載到一個完整的數據塊並通過SHA-1校驗後,纔將該數據塊寫入硬盤,並從本地緩存中刪除該數據塊。本地緩存的數據塊越 多,則該時刻正在向其它peers發出的數據請求越多,從而下載速度也越快。如果由於網絡連接慢而造成某一個數據塊要很久才能從peer處下載完,則本地 緩存就沒多少空間去容納下一準備請求的數據塊,從而導致後續數據塊的請求延遲,使得下載速度降低。所以需要對每個數據塊設置超時,超過預定時間,就從本地 緩存中清除該數據塊而去請求下一數據塊。

  2)外部服務器加速

  通過上述(1)的策略,經過與流行的BT下載軟件 BitComet的對比測試,對於同一個熱門種子,BitComet的平均下載速度在100KB/s,而筆者維護的BT下載程序的平均下載速度在40KB /s;對於同一冷門種子,BitComet的平均下載速度在20KB/s,且一直保持速度,而筆者維護的BT下載程序的平均下載速度在10KB/s,下載 速度斷斷續續。


圖2

  前面已經提到,進行同一文件BT下載的peers數目越多,各個peer的下載速度就越快。目前使用BitComet下載軟 件的用戶有數百萬計,而筆者公司產品正處於測試階段,筆者維護的BT下載程序目前最大用戶量僅30,這樣下載速度比BitComet慢也是正常的。想在短 時期內積累數量可觀的用戶羣,從而提高下載速度是有難度的,於是引入外部服務器加速機制,即所有我們的用戶要下載的文件先在該外部服務器(也稱 Cacher服務器)上下載完成。當我們的程序用戶要下載某個文件時,該外部服務器作爲一個“超級”peer,爲我們的用戶提供數據上傳。由於外部服務器 的帶寬是100Mbps,故可爲每個下載用戶提供至少50KB/s的上傳速度。經過測試,使用外部服務器加速後,使用我們的BT下載程序,一個文件任務的 下載速度可以達到120KB/s。構成的網絡如圖2所示。

  4 結束語

  本文通過對BT通信協議的分析,詳細闡述了其數據下載的原理,並在此基礎上對如何提高BT下載速度做了進一步的介紹,最後以筆者實際工作中的一個項目爲例,將提高BT下載速度的策略運用於實際工作,實際工作效果顯示,程序的下載速度能夠較好地滿足用戶要求。

參考文獻

  [1]Kurose J,Ross K著. 陳鳴譯. 計算機網絡——自頂向下方法與因特網特色(原書第三版).北京:機械工業出版社,2005

  [2]Bittorrent Protocol Specificationv1.0 http//wiki.

  theory.org/BitTorrentSpecifieation,Sep 2006

  [3]汪燕,柳斌. BitTorrent協議分析及控制策略. 試驗技術與管理,2006(1):21

  [4]程久軍,於魁飛. 一種基於P2P(Peer-to-Peer)文件共享應用的片段選擇算法. 技術通訊,Vol.43,2005

  收稿日期:8月6日  修改日期:8月8日


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