摘 要: 以較為流行的網(wǎng)絡(luò)文件下載軟件BitTorrent為例,探討基于對等網(wǎng)技術(shù)的分布式模式下文件分發(fā)的工作原理,并采用簡單而有效的算法實現(xiàn)了大型文件的高效和可靠下載。
關(guān)鍵詞: 文件分發(fā) 對等網(wǎng) BitTorrent
隨著網(wǎng)絡(luò)的普及,一些基于傳統(tǒng)媒介(光盤、磁帶等)的信息(影視、音樂等)逐漸以網(wǎng)絡(luò)作為傳播的媒介。這些網(wǎng)絡(luò)資源往往以較大的文件形式出現(xiàn),供大家下載。方便、高效且可靠地獲取這類網(wǎng)絡(luò)文件是當(dāng)今網(wǎng)絡(luò)技術(shù)一個值得探索的課題。隨著連接網(wǎng)絡(luò)的終端數(shù)量急劇增加和網(wǎng)絡(luò)結(jié)構(gòu)的多樣化與復(fù)雜化,傳統(tǒng)的集中式文件分發(fā)模式面臨著伸縮性、連接突發(fā)性和可靠性問題,因此迫切需要研究新的應(yīng)用模式。本文將以最近較流行的一種網(wǎng)絡(luò)文件下載軟件BitTorrent為例,討論基于P2P(Peer to Peer)對等網(wǎng)絡(luò)技術(shù)的分布式文件分發(fā)模式的工作原理和實用算法。
1 文件分發(fā)的二種模式
1.1 傳統(tǒng)的集中模式
傳統(tǒng)的集中式文件分發(fā)模式如圖1所示。當(dāng)有一個較大的文件要通過網(wǎng)絡(luò)向位置分散的用戶分發(fā)時,系統(tǒng)會把要發(fā)布的文件上傳到Web服務(wù)器或FTP服務(wù)器上,然后通知用戶從該中心服務(wù)器下載文件。服務(wù)器承擔(dān)了全部的上傳(服務(wù)器向下載者傳遞文件)開銷,它的處理能力和傳輸速率是影響文件分發(fā)速度的瓶頸。隨著用戶數(shù)量的增多,每個用戶可獲得的下載速度將會降低,同時服務(wù)器也會因負(fù)載過大而宕機。因此很多服務(wù)器都會限制用戶人數(shù)和下載速度,給用戶帶來諸多不便。

1.2 基于P2P的分布式模式
P2P技術(shù)認(rèn)為所有互聯(lián)的設(shè)備互為對等體。由于用戶與服務(wù)器之間的連接是雙向的,用戶彼此之間也是可以互相訪問的,所以,當(dāng)多個用戶同時下載同一個文件時,他們可以互相上傳已經(jīng)下載的文件的一部分。這樣重新分配向用戶上傳的開銷之后,將大大減輕服務(wù)器的壓力,從而可以克服集中模式的缺點。這種基于P2P的分布式文件的分發(fā)模式如圖2所示。BitTorrent實現(xiàn)了這種分布式文件分發(fā)模式。

BitTorrent的基本工作原理是:在把文件上傳到服務(wù)器之前把它分成N個部分(塊)。假設(shè)用戶甲在服務(wù)器隨機下載了第i個塊,用戶乙在服務(wù)器隨機下載了第j個塊,則用戶甲的BitTorrent就會根據(jù)情況從用戶乙下載第j個塊,而用戶乙的BitTorrent就會根據(jù)情況從用戶甲下載第i個塊。這樣不但減輕了服務(wù)器的負(fù)載,也加快了用戶(甲和乙)的下載速度,提高了效率,還減少了地域之間的限制。例如用戶丙從服務(wù)器下載的速度可能很慢,但是從距離較近的用戶甲和用戶乙下載的速度就會快很多。所以與傳統(tǒng)的模式不同,用BitTorrent下載時用戶越多,下載速度越快。
1.3 技術(shù)難點
基于P2P技術(shù)的分布式文件分發(fā)模式有著優(yōu)良的伸縮性,但是如何保證效率和可靠性是其面臨的技術(shù)難題。具體來說,需要解決下述幾個問題。
(1)為了保證對等體(用戶)能夠盡快得到所需的文件,需要有效找出哪些對等體已有文件的哪些部分以及它們應(yīng)該被送到哪里。
(2)對等體的連接是隨機的,經(jīng)常只有幾分鐘。因此,實際的部署要考慮這個因素。
(3)為了維持網(wǎng)絡(luò)的穩(wěn)定,理論上所有對等體下載速度的總和應(yīng)該等于上傳速度的總和。即既需要保證對等體的下載速度,又要使每個對等體的下載速度與它們的上傳速度相當(dāng)。
(4)要盡量避免文件的某些部分落在極少數(shù)對等體中,而可能被永久丟失(擁有這些部分的對等體不再提供上傳)。
下面從原理入手探討B(tài)itTorrent是如何采用簡單實用的算法解決這些問題。
2 BitTorrent的技術(shù)框架
2.1 部 署
為建立一個BitTorrent式的文件分發(fā)部署,需要將一個帶.torrent擴展名的靜態(tài)文件放到Web服務(wù)器上。該文件一般只有幾百KB,包含待下載的文件信息,如文件長度、文件名、哈希數(shù)據(jù)和跟蹤器的URL。跟蹤器使用基于HTTP的非常簡單的協(xié)議幫助對等體互相發(fā)現(xiàn)對方。在該協(xié)議中,對等體發(fā)出的請求消息包含要下載的文件信息和監(jiān)聽的端口號等。跟蹤器返回的響應(yīng)消息包括正在下載同一個文件的對等體的信息。對等體根據(jù)這些信息彼此建立連接。為了使文件可以被下載,最初必須啟動一個被稱為“種子”的對等體,它至少有該文件的一個拷貝。
2.2 分發(fā)機制
跟蹤器是對等體彼此發(fā)現(xiàn)的惟一途徑。通常,標(biāo)準(zhǔn)的跟蹤器算法返回一個隨機的對等體列表。這種隨機列表有非常好的健壯性。許多對等體選擇算法能夠共同形成一個有用的規(guī)則圖,綜合這些信息就能找到所需要的分塊信息。注意,所有對等體之間的連接是雙向傳輸?shù)摹?br />
為了跟蹤每個對等體有哪些文件塊,BitTorrent把文件分割成固定長度的塊,典型的長度是256KB。每個對等體向它的所有對等體(對等體群)報告自己擁有哪些塊。為了校驗數(shù)據(jù)的完整性,所有塊的數(shù)據(jù)經(jīng)SHA1哈希算法處理后被放在.torrent文件中。只有驗證了一個塊的哈希數(shù)據(jù)之后,對等體才能報告它有這個塊。這種簡單的方法被證明是可行的。
對等體從它們能連接到的對等體群下載塊。有時對等體群可能沒有它們想要的塊,或者當(dāng)前不允許它們下載。這種禁止對等體下載的策略(即阻塞)將在后面討論。讓對等體通告自己擁有哪些文件塊消耗的帶寬低于10%,但卻可以保證對等體利用其全部上傳能力。
2.3 請求的流水線
BitTorrent通過TCP傳遞數(shù)據(jù)。為避免2個塊發(fā)送之間的延遲總是保持幾個待處理的請求。BitTorrent通過在線上把塊進一步分割成更小的子塊來充分利用這一優(yōu)點。子塊的典型長度是16KB,并且總是保留一定數(shù)量,一般是5個。一旦有請求待發(fā),立即被流水線化。這樣,每到達1個子塊,就有1個請求馬上被送出。
2.4 塊選擇算法
若選擇塊按照合適的順序下載將得到較高的性能;否則,會導(dǎo)致無法上傳所有的塊,或不能上傳某些塊。
2.4.1 優(yōu)先級
BitTorrent首選的塊選擇策略是:一旦某個子塊被請求,則它所屬塊的剩余子塊的請求將先于其他塊的子塊。這樣使對等體能夠盡可能快地獲得完整的塊。
2.4.2 稀有優(yōu)先原則
在選擇哪一個對等體作為下一個被下載對象時,對等體一般先下載自己的對等體群稀有的塊,該技術(shù)被稱為稀有優(yōu)先原則。這是為了確保對等體總是擁有它們的對等體群想要的塊,一旦需要就能開始上傳。該技術(shù)也能確保那些較常見的塊被推遲上傳,以留住那些正在提供上傳的對等體,從而獲得那些較常見的塊。
信息理論指出直到種子上傳了文件的所有部分,下載才能完成。對于那些只有一個種子的部署,該種子的上傳能力略低于N個用戶的當(dāng)前速度和,顯然當(dāng)用戶從種子下載不同的塊時性能最好。由于每個對等體能獲知它的對等體群有種子已經(jīng)上傳的塊,因此稀有優(yōu)先原則在只從種子下載新塊時很有效。
對于有些部署,若原始的種子最終因為開銷的原因宕機,只留下在線的用戶去上傳,則有可能導(dǎo)致某個特定的塊再也無法從任何在線的用戶那里得到。而稀有優(yōu)先原則會盡可能快地復(fù)制稀有塊,以避免此類問題的產(chǎn)生。
2.4.3 尾塊的處理
文件的末尾塊有時會被非常低速的對等體請求,這不會影響下載的完成,但可能會延長完成下載所用的時間。為了避免這種情況發(fā)生,如果對等體還沒有所請求塊的所有子塊,則向所有的對等體發(fā)出這些子塊的請求。一旦某子塊到達,就立即發(fā)送取消該子塊的消息以避免發(fā)送不必要的請求。
3 阻塞算法
在P2P分布式模式中,所有對等體之間的連接是雙向的,即每個對等體在下載數(shù)據(jù)的同時也可以向其他對等體上傳數(shù)據(jù)。BitTorrent采用分布式的資源分配策略。每個對等體從它的對等體群以最快速度下載所請求的塊,同時,它可以自主地通過一種算法(阻塞算法)選擇向哪些對等體提供上傳服務(wù)。起初,每個連接的上傳方向是被禁止的(即阻塞),因此每個對等體要向其他對等體上傳數(shù)據(jù)之前就必須清除阻塞。阻塞是暫時拒絕上傳,而下載仍然繼續(xù)。因此,當(dāng)要清除阻塞時,不需要重新建立連接。
阻塞算法不是BitTorrent通信協(xié)議的一部分,但對于取得好的性能是必要的。好的阻塞算法會利用所有可用的資源,為所有對等體提供一致的下載速度,并且在某種程度上阻止對等體只下載而不上傳。
一般,每個對等體總是清除固定數(shù)量(缺省值為4)的對等體的阻塞,所以需要確定要清除哪些對等體的阻塞。清除哪些對等體的阻塞是嚴(yán)格基于當(dāng)前的下載速度。為了避免因為對等體快速的阻塞和清除阻塞而浪費資源,要求每個對等體每10秒重新計算一次阻塞誰。而10秒足夠TCP把新的傳輸速度提高到最大。
如果每個對等體只是簡單地把當(dāng)前提供最佳下載速度的其他對等體作為上傳的對象,則無法知道當(dāng)前未被使用的連接的速度是否比正在使用的連接的速度更快。因此,任何時候每個對等體在它的對等體群中都指定一個作為“樂觀的清除阻塞”對等體,即總是清除對該對等體的阻塞而不考慮它當(dāng)前的下載速度。對等體群中的對等體以30秒(3個阻塞期)為周期依次被指定為“樂觀的清除阻塞”對象。而30秒足夠連接的雙方把上傳和下載速度提高到極限。
4 結(jié)束語
目前,BitTorrent已經(jīng)被廣泛地應(yīng)用,常常可以為幾百個并發(fā)的下載者提供幾百兆字節(jié)的文件服務(wù)。實踐證明這種新型的基于P2P技術(shù)的文件分發(fā)模式具有良好的伸縮性、高效率和可靠性,克服了傳統(tǒng)集中模式的困難,促使網(wǎng)絡(luò)應(yīng)用的核心從中央服務(wù)器向終端設(shè)備擴散,使用戶在Internet上的共享行為被提到更高層次,用戶以更主動的方式參與到網(wǎng)絡(luò)活動中。這必將促進更多新應(yīng)用的開發(fā)。
參考文獻
1 Cohen B.Incentives Build Robustness in BitTorrent.http://bitconjurer.org/Bit Torrent/bittorrentecon.pdf,2003
2 劉寶旭,李雪瑩,于傳松等.對等網(wǎng)技術(shù)及應(yīng)用概述.計算機工程與應(yīng)用,2003;(6)
