BitTorrent 協(xié)議規(guī)范_第1頁(yè)
BitTorrent 協(xié)議規(guī)范_第2頁(yè)
BitTorrent 協(xié)議規(guī)范_第3頁(yè)
BitTorrent 協(xié)議規(guī)范_第4頁(yè)
BitTorrent 協(xié)議規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、BitTorrent 協(xié)議規(guī)范BitTorrent 是一種分發(fā)文件的協(xié)議。它通過(guò)URL來(lái)識(shí)別內(nèi)容,并且可以無(wú)縫的和web進(jìn)行交互。它基于H TTP協(xié)議,它的優(yōu)勢(shì)是:如果有多個(gè)下載者并發(fā)的下載同一個(gè)文件,那么,每個(gè)下載者也同時(shí)為其它下載者上傳文件,這樣,文件源可以支持大量的用戶進(jìn)行下載,而只帶來(lái)適當(dāng)?shù)呢?fù)載的增長(zhǎng)。(譯注:因?yàn)榇罅康呢?fù)載被均衡到整個(gè)系統(tǒng)中,所以提供源文件的機(jī)器的負(fù)載只有少量增長(zhǎng)一個(gè)BT文件分布系統(tǒng)由下列實(shí)體組成:一個(gè)普通的web服務(wù)器一個(gè)靜態(tài)的“元信息”文件一個(gè)跟蹤(tracker服務(wù)器終端用戶的web瀏覽器終端下載者理想的情況是多個(gè)終端用戶在下載同一個(gè)文件。要提供文件共享,那么一

2、臺(tái)主機(jī)需要執(zhí)行以下步驟:Ø運(yùn)行一個(gè)tracker服務(wù)器(或者,已經(jīng)有一個(gè)tracker服務(wù)器在運(yùn)行了也可以Ø運(yùn)行一個(gè)web服務(wù)器,例如apache,或者已經(jīng)有一個(gè)web服務(wù)器在運(yùn)行了。Ø在web服務(wù)器上,將文件擴(kuò)展名.torrent 和MIME類型application/x-bittorrent關(guān)聯(lián)起來(lái)(或者已經(jīng)關(guān)聯(lián)了Ø根據(jù)tracker服務(wù)器的URL 和要共享的文件來(lái)創(chuàng)建一個(gè)“元信息”文件(.torrent。Ø將“元信息”文件發(fā)布到web服務(wù)器上Ø在某個(gè)web頁(yè)面上,添加一個(gè)到“元信息”文件的鏈接。Ø運(yùn)行一個(gè)已經(jīng)擁有完整文

3、件的下載者(被成為origin,或者seed,種子要開(kāi)始下載文件,那么終端用戶執(zhí)行以下步驟:Ø安裝BT(或者已經(jīng)安裝Ø訪問(wèn)提供 .torrent 文件的web服務(wù)器Ø點(diǎn)擊到 .torrent 文件的鏈接(譯注:這時(shí)候,bt會(huì)彈出一個(gè)對(duì)話框Ø選擇要把下載的文件保存到哪里?或者是一次斷點(diǎn)續(xù)傳Ø等待下載的完成。Ø結(jié)束bt程序的運(yùn)行(如果不主動(dòng)結(jié)束,那么bt會(huì)一直為其它人提供文件上傳各個(gè)部分之間的連通性如下:網(wǎng)站負(fù)責(zé)提供一個(gè)靜態(tài)的文件,而把BT輔助程序(客戶端放在客戶端機(jī)器上。Trackers從所有下載者處接收信息,并返回給它們一個(gè)隨機(jī)的pe

4、ers的列表。這種交互是通過(guò)HTTP或HT TPS協(xié)議來(lái)完成的。下載者周期性的向tracker登記,使得tracker能了解它們的進(jìn)度;下載者之間通過(guò)直接連接進(jìn)行數(shù)據(jù)的上傳和下載。這種連接使用的是BitTorrent 對(duì)等協(xié)議,它基于TCP。Origin只負(fù)責(zé)上傳,從不下載,因?yàn)樗呀?jīng)擁有了完整的文件。Origin是必須的。元文件和tracker的響應(yīng)都采用的是一種簡(jiǎn)單、有效、可擴(kuò)展的格式,被稱為bencoding,它可以包含字符串和整數(shù)。由于對(duì)不需要的字典關(guān)鍵字可以忽略,所以這種格式具有可擴(kuò)展性,其它選項(xiàng)以后可以方便的加進(jìn)來(lái)。Bencoding格式如下:對(duì)于字符串,首先是一個(gè)字符串的長(zhǎng)度,然

5、后是冒號(hào),后面跟著實(shí)際的字符串,例如:4:spam,就是“ sp am”整數(shù)編碼如下,以i 開(kāi)始,然后10進(jìn)制的整數(shù)值,最后以e結(jié)尾。例如,i3e表示3,I-3e表示-3。整數(shù)沒(méi)有大小限制。I-0e是無(wú)效的。除了i0e外,所以以0起始的整數(shù)都無(wú)效。I0e當(dāng)然表示0。列表編碼如下,以l開(kāi)始,接下來(lái)是列表值的編碼(也采用bencoded編碼,最后以e結(jié)束。例如:l4:s pam4:eggse 表示spam, eggs。字典編碼如下,以d開(kāi)始,接下來(lái)是可選的keys和它對(duì)應(yīng)的值,最戶以e結(jié)束。例如:d3:cow3:moo4:sp am4:eggse,表示cow:moo,spam:eggs,而d4:s

6、paml1:al:bee 表示spam:a,b。鍵值必須是字符串,而且已經(jīng)排序(并非是按照字母順序排序,而是根據(jù)原始的字符串進(jìn)行排序。元文件是采用bencoded編碼的字典,包括以下關(guān)鍵字:announce tracker的服務(wù)器info 它實(shí)際上是一個(gè)字典,包括以下關(guān)鍵字:Name:一個(gè)字符串,在保存文件的時(shí)候,作為一個(gè)建議值。僅僅是個(gè)建議而已,你可以用別的名字保存文件。Piece length:為了更好的傳輸,文件被分隔成等長(zhǎng)的片斷,除了最后一個(gè)片斷以外,這個(gè)值就是片斷的大小。片斷大小幾乎一直都是2的冪,最常用的是256k(BT的前一個(gè)版本3.2,用的是1M作為默認(rèn)大小Pieces:一個(gè)長(zhǎng)

7、度為20的整數(shù)倍的字符串。它將再被分隔為20字節(jié)長(zhǎng)的字符串,每個(gè)子串都是相應(yīng)片斷的hash 值。此外,還有一個(gè)length或files的關(guān)鍵字,這兩個(gè)關(guān)鍵字只能出現(xiàn)一個(gè)。如果是length,那么表示要下載的僅僅是單個(gè)文件,如果是files那么要下載的是一個(gè)目錄中的多個(gè)文件。如果是單個(gè)文件,那么length是該文件的長(zhǎng)度。為了能支持其它關(guān)鍵字,對(duì)于多個(gè)文件的情況,也把它當(dāng)作一個(gè)文件來(lái)看,也就是按照文件出現(xiàn)的順序,把每個(gè)文件的信息連接起來(lái),形成一個(gè)字符串。每個(gè)文件的信息實(shí)際上也是一個(gè)字典,包括以下關(guān)鍵字: Length:文件長(zhǎng)度Path:子目錄名稱的列表,列表最后一項(xiàng)是文件的實(shí)際名稱。(不允許出現(xiàn)

8、列表為空的情況。Name:在單文件情況下,name是文件的名稱,而在多文件情況下,name是目錄的名稱。Tracker查詢。Trakcer通過(guò)HTTP的GET命令的參數(shù)來(lái)接收信息,而響應(yīng)給對(duì)方(也就是下載者的是經(jīng)過(guò)bencoded編碼的消息。注意,盡管當(dāng)前的tracker的實(shí)現(xiàn)需要一個(gè)web服務(wù)器,它實(shí)際上可以運(yùn)行的更輕便一些,例如,作為apache的一個(gè)模塊。Tracker GET requests have the following keys:發(fā)送給Tracker的GET請(qǐng)求,包含以下關(guān)鍵字:Info_hash:元文件中info部分的sha hash,20字節(jié)長(zhǎng)。這個(gè)字符創(chuàng)幾乎肯定需要被

9、轉(zhuǎn)義(譯注:在URL中,有些字符不能出現(xiàn),必須通過(guò)unicode進(jìn)行編碼Peer_id:下載者的id,一個(gè)20字節(jié)長(zhǎng)的字符串。每個(gè)下載者在開(kāi)始一次新的下載之前,需要隨機(jī)創(chuàng)建這個(gè)id。這個(gè)字符串通常也需要被轉(zhuǎn)義。Ip:一個(gè)可選的參數(shù),給出了peer的ip地址(或者dns名稱?。通常用在origin身上,如果它和tracker在同一個(gè)機(jī)器上。Port:peer所監(jiān)聽(tīng)的端口。下載者通常在在6881 端口上監(jiān)聽(tīng),如果該端口被占用,那么會(huì)一直嘗試到6889,如果都被占用,那么就放棄監(jiān)聽(tīng)。Uploaded:已經(jīng)上載的數(shù)據(jù)大小,十進(jìn)制表示。Downloaded:已經(jīng)下載的數(shù)據(jù)大小,十進(jìn)制表示Left:該pe

10、er還有多少數(shù)據(jù)沒(méi)有下載完,十進(jìn)制表示。注意,這個(gè)值不能根據(jù)文件長(zhǎng)度和已下載數(shù)據(jù)大小計(jì)算出來(lái),因?yàn)楹芸赡苁菙帱c(diǎn)續(xù)傳,如果因?yàn)闄z查文件完整性失敗而必須重新下載的時(shí)候,這也提供了一個(gè)機(jī)會(huì)。Event:一個(gè)可選的關(guān)鍵字,值是started、compted或者stopped之一(也可以為空,不做處理。如果不出現(xiàn)該關(guān)鍵字,。在一次下載剛開(kāi)始的時(shí)候,該值被設(shè)置為started,在下載完成之后,設(shè)置為completed。如果下載者停止了下載,那么該值設(shè)置為stopped。Tracker的響應(yīng)是用bencoded編碼的字典。如果tracker的響應(yīng)中有一個(gè)關(guān)鍵字failure reason,那么它對(duì)應(yīng)的是一個(gè)

11、字符串,用來(lái)解釋查詢失敗的原因,其它關(guān)鍵字都不再需要了。否則,它必須有兩個(gè)關(guān)鍵字:I nterval:下載者在兩次發(fā)送請(qǐng)求之間的時(shí)間間隔。Peers:一個(gè)字典的列表,每個(gè)字典包括以下關(guān)鍵字:Pee r id,Ip,Port,分別對(duì)應(yīng)peer所選擇的id、ip地址或者dns名稱、端口號(hào)。注意,如果某些事件發(fā)生,或者需要更多的peers,那么下載者可能不定期的發(fā)送請(qǐng)求,(downloader 通過(guò)HTTP 的GET 命令來(lái)向tracker 發(fā)送查詢請(qǐng)求,tracker 響應(yīng)一個(gè)peers 的列表如果你想對(duì)元信息文件或者tracker查詢進(jìn)行擴(kuò)展,那么需要同Bram Cohen協(xié)調(diào),以確保所有的擴(kuò)展

12、都是兼容的。BT對(duì)等協(xié)議基于TCP,它很有效率,并不需要設(shè)置任何socket選項(xiàng)。(譯注:BT對(duì)等協(xié)議指的是peer與peer之間交換信息的協(xié)議對(duì)等的兩個(gè)連接是對(duì)稱的,消息在兩個(gè)方向上同樣的傳遞,數(shù)據(jù)也可以在任何一個(gè)方向上流動(dòng)。一旦某個(gè)peer下載完了一個(gè)片斷,并且也檢查了它的完整性,那么它就向它所有的peers宣布它擁有了這個(gè)片斷。連接的任何一端都包含兩比特的狀態(tài)信息:是否choked,是否感興趣。Choking是通知對(duì)方,沒(méi)有數(shù)據(jù)可以發(fā)送,除非unchoking發(fā)生。Choking的原因以及技術(shù)后文解釋。一旦一端狀態(tài)變?yōu)閕nterested,而另一端變?yōu)榉莄hoking,那么數(shù)據(jù)傳輸就開(kāi)始

13、了。(也就是說(shuō),一個(gè)pee r,如果想從它的某個(gè)peer那里得到數(shù)據(jù),那么,它首先必須將它兩之間的連接設(shè)置為interested,其實(shí)就是發(fā)一個(gè)消息過(guò)去,而另一個(gè)peer,要檢查它是否應(yīng)該給這個(gè)家伙發(fā)送數(shù)據(jù),如果它對(duì)這個(gè)家伙是unc hoke,那么就可以給它發(fā)數(shù)據(jù),否則還是不能給它數(shù)據(jù)Interested狀態(tài)必須一直被設(shè)置任何時(shí)候。要用點(diǎn)技巧才能比較好的實(shí)現(xiàn)這個(gè)目的,但它使得下載者能夠立刻知道哪些peers將開(kāi)始下載。對(duì)等協(xié)議由一個(gè)握手開(kāi)始,后面是循環(huán)的消息流,每個(gè)消息的前面,都有一個(gè)數(shù)字來(lái)表示消息的長(zhǎng)度。握手的過(guò)程首先是先發(fā)送19,然后發(fā)送“BitTorrent protocol”。19就是

14、“BitTorrent protocol”的長(zhǎng)度。后續(xù)的所有的整數(shù),都采用big-endian 來(lái)編碼為4個(gè)字節(jié)在協(xié)議名稱之后,是8個(gè)保留的字節(jié),這些字節(jié)當(dāng)前都設(shè)置為0。接下來(lái)對(duì)元文件中的info 信息,通過(guò)sha1 計(jì)算后得到的hash值,20個(gè)字節(jié)長(zhǎng)。接收消息方,也會(huì)對(duì)info 進(jìn)行一個(gè)hash 運(yùn)算,如果這兩個(gè)結(jié)果不一樣,那么說(shuō)明對(duì)方要的文件,并不是自己所要提供的,所以切斷連接。接下來(lái)是20個(gè)字節(jié)的peer id。這就是握手過(guò)程接下來(lái)就是以消息長(zhǎng)度開(kāi)始的消息流,這是可選的。長(zhǎng)度為0 的消息,用于保持連接的活動(dòng)狀態(tài),被忽略。通常每隔2分鐘發(fā)送一個(gè)這樣的消息。其它類型的消息,都有一個(gè)字節(jié)長(zhǎng)的

15、消息類型,可能的值如下:choke, unchoe, interested, not interested類型的消息不再含有其它數(shù)據(jù)了。bitfield永遠(yuǎn)也僅僅是第一個(gè)被發(fā)送的消息。它的數(shù)據(jù)實(shí)際是一個(gè)位圖,如果downloader已經(jīng)發(fā)送了某個(gè)片斷,那么對(duì)應(yīng)的位置1,否則置0。Downloaders如果一個(gè)片斷也沒(méi)有,可以忽略這個(gè)消息。(通過(guò)這個(gè)消息,能知道什么了?have類型的消息,后面的數(shù)據(jù)是一個(gè)簡(jiǎn)單的數(shù)字,它是下載者剛剛下載完并檢查過(guò)完整性的片斷的索引。(由此,可以看到,peer通過(guò)這種消息,很快就相互了解了誰(shuí)都有什么片斷request類型的消息,后面包含索引、開(kāi)始位置和長(zhǎng)度長(zhǎng)度是2的冪。當(dāng)前的實(shí)現(xiàn)都用的是215 ,而關(guān)閉連接的時(shí)候,請(qǐng)求一個(gè)超過(guò)2 17的長(zhǎng)度。(這種類型的消息,就是當(dāng)一個(gè)peer希望另一個(gè)peer給它提供片斷的時(shí)候,發(fā)出的請(qǐng)求cancel類型的消息,它的數(shù)據(jù)和request消息一樣。它們通常只在下載趨向完成的時(shí)候發(fā)送,也就是在結(jié)束模式“階段發(fā)送。在一次下載接近完成的時(shí)候,最后的幾個(gè)片斷需要很長(zhǎng)時(shí)間才能下載完。為了確保最后幾個(gè)片斷盡快下載完,它向所有的peers發(fā)送下載請(qǐng)求。為了保證這不帶來(lái)可怕的低效,一旦某個(gè)片斷下載完成,它就其它peers發(fā)送cancel

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論