Bittorrent協(xié)議工作流程淺析
Bittorrent協(xié)議也就是BT下載軟件所使用的協(xié)議。那么這個(gè)協(xié)議規(guī)定了如何進(jìn)行下載,其中也包含了很多過(guò)程。我們這里主要講述一下在Bittorrent協(xié)議交互情況下的一些概念。
Bittorrent協(xié)議交互
考慮到不同軟件對(duì)Bittorrent協(xié)議的實(shí)現(xiàn)不同,我們下面的協(xié)議交互測(cè)量實(shí)驗(yàn)只針對(duì)于數(shù)據(jù)傳輸前后的報(bào)文進(jìn)行分析。我們實(shí)驗(yàn)用的是BitComet 0.63。以下是測(cè)量的一些現(xiàn)象:(假設(shè)我們的機(jī)器是主機(jī)A)
1、無(wú)種子時(shí)的通信現(xiàn)象
在沒(méi)有下載種子和提交下載命令的時(shí)候,可以看到主機(jī)與一系列IP地址的遠(yuǎn)端主機(jī)通信,發(fā)送大小為98字節(jié)的UDP報(bào)文,使用的端口都是17638。這些數(shù)據(jù)包可以看作是BitComet程序特有的給P2P網(wǎng)絡(luò)主機(jī)發(fā)送的消息包(因?yàn)樵贏BC下載程序中中就沒(méi)有這些UDP報(bào)文)
2、與tracker服務(wù)器通信
由于Tracker服務(wù)器提供Http/Https的服務(wù),對(duì)Http/Https的請(qǐng)求做出響應(yīng)。其中響應(yīng)里包含了peer的列表,幫助主機(jī)A獲得所需的信息。主機(jī)A通過(guò).torrent文件中所記錄的信息:tracker服務(wù)器列表和文件的info值發(fā)起對(duì)tracker服務(wù)器的HTTP連接,并用GET 命令獲得peer列表。
3、與peers通信
當(dāng)主機(jī)獲得peer列表后將主動(dòng)向這些IP地址發(fā)起TCP連接,端口隨機(jī)分布,而且之后的數(shù)據(jù)傳輸都建立在TCP之上。在一次觀測(cè)中發(fā)現(xiàn)一個(gè)IP(222.95.92.4 假設(shè)為B)地址占據(jù)了主要的流量,下面就對(duì)他們的通信進(jìn)行觀測(cè)分析:
在一次實(shí)驗(yàn)中(5M buffer)我們的主機(jī)A 與B的發(fā)送數(shù)據(jù)統(tǒng)計(jì)如下
|
|
Packets |
Bites |
|
A ->B |
2238 |
2142621 |
|
B->A |
1886 |
1367552 |
可以看到B作為A的主要數(shù)據(jù)來(lái)源, 也從A受到了相當(dāng)?shù)臄?shù)據(jù)量,說(shuō)明B地址的主機(jī)不是一個(gè)種子,而是與A一樣的下載者。
在三次TCP握手之后,A主機(jī)向B發(fā)起B(yǎng)ittorrent handshake,B回送一個(gè)handshake. 其中關(guān)于handshake報(bào)文的內(nèi)容信息可以參考,值得注意的是握手以字符19(0x13)開始,跟著是字符串'BitTorrent protocol',這可以作為檢測(cè)BT下載的一個(gè)關(guān)鍵字信息。握手完畢之后是長(zhǎng)度前綴和信息輪流出現(xiàn)的數(shù)據(jù)流。零長(zhǎng)度信息用來(lái)保持連接,被忽略。這種信息一般2分鐘發(fā)一次,但是在等待數(shù)據(jù)期間超時(shí)很容易發(fā)生。
Bittorrent協(xié)議中相關(guān)概念
Tracker:收集下載者信息的服務(wù)器,并將此信息提供給其他下載者,使下載者們相互連接起來(lái),傳輸數(shù)據(jù)。
種子:指一個(gè)下載任務(wù)中所有文件都被某下載者完整的下載,此時(shí)下載者成為一個(gè)種子。發(fā)布者本身發(fā)布的文件就是原始種子。
做種:發(fā)布者提供下載任務(wù)的全部?jī)?nèi)容的行為;下載者下載完成后繼續(xù)提供給他人下載的行為。



















