談到BT,相信大家都不陌生。沒錯,今天要來談的就是這幾年在網路上非常重要,已經快要變成全民運動的── BT 程式。筆者有鑒於 BT 已經變成非常火紅的應用程式,但是了解這個程式的基本運作原理與影響的人卻寥寥無幾,於是決定撰寫這個主題;本篇會先介紹 BT 的源起與運作原理,接下來的幾篇則會根據這一兩年學術上對 BT 的觀察,介紹 BT 在各種使用情境下對網路行為的影響(當中包含一些相當出人意表的發現)。
BitTorrent ,簡稱 BT ,由 Bram Cohen 於 2002 年獨立完成其核心程式碼的撰寫。從 Bram Cohen 簡陋而陽春的個人網頁 上看來,他於 1993 年進入紐約州立大學就讀,輟學之後陸續做過研究員、網路程式設計師,就履歷上看來並不是非常特出, 2002 年間他發表的 BT 一開始也沒有獲得很大的關注。隔年五月他把 BT 的理論基礎寫成一篇簡短五頁的學術文章發表在「 Workshop on Economics of Peer-to-Peer Systems, 2003 」上 ,文章本身沒有知名教授的背書、用字遣辭顯然也不夠精練,然而這篇文章至今卻已累積了 474 篇的 reference 數。 2004 年六月時,據 CNN 報導, BT 已經佔據了網路上所有 P2P 流量的 53% 。至今, BT 程式檔的下載量已經超過一億三千五百萬人次,而這些數字還不包含網路上經其他使用者修改過的版本,如 BitComet 、 BitSpirit… 等等。
Bram Cohen照片,在他blog裡還有各種用電腦變形過後的照片 ,例如變身成美少女戰士的樣子。
就 Mr. Friday 自己的觀察, BT 程式已經成為眾多網路鄉民平日不可或缺的「資料來源」之一,就算沒有使用過,或多或少也會在生活中聽到相關的用語,比如說 torrent 檔、種子、斷種等等術語。更有甚者,許多網路應用也開始使用 BT 的模式,比如說某些 Linux 的 ISO 檔、魔獸世界 WOW 的更新檔就是透過 BT 方式在網路上散佈,也有一些網路電視程式是從 BT 處得到靈感來源,例如現在相當火紅的 PPStream 。
BT 最讓人驚奇的地方在於下載的速度極快。使用過的人都曉得, BT 下載往往比傳統的 FTP 、網頁下載來得快很多。這當中的原理可以從下圖解釋:
左圖是 FTP 與 HTTP 下載的基本原理,道理很簡單,擁有檔案的人負責將檔案傳送給所有想下載檔案的人。假設今天的同時下載這個檔案的人有三個( A 、 B 、 C ),則每個人的下載速度就是檔案擁有者上傳速度的 1/3 。
BT 的原理就比較複雜一點。擁有檔案(例如 File.txt )的人(稱為種子)會將檔案切很多很多的小塊(例如 File1.txt 、 File2.txt 、 … 、 File100.txt ),每當有人(假設也叫 A )想下載檔案時,種子(或者其他的下載者)就把一部份的小塊檔案寄給這個 A , A 就拿著這些檔案片段去跟另外一個也在下載的人 B 、 C 說:「 Hey !我有一部分的小檔案,你也有一部分的小檔案,我們來互相交換彼此沒有的部分吧!」。對於 A 來說,他就可以同時從種子與 B 、 C 處抓取檔案片段,因此下載的速度就會變快,而不僅限於種子頻寬的 1/3 。如果今天網路上的下載者不只 2 個,而是成千上萬,那麼理論上 A 的速度就可以一飛千里。透過這個「下載者互通有無」的想法,讓下載的速度來得比以往的 FTP 、 HTTP 還快。
BT 對於分享檔案的種子也有好處。以往如果要讓所有的下載者都抓到檔案,種子就不能下線,直到所有人都抓完檔案為止。頻寬的消耗也是單方面的:只消耗種子的上傳頻寬,因此常常造成種子端的網路塞車。 BT 就不會這樣:只要網路上出現另外一個把整個檔案都下載成功的人,等於就是出現另外一個新種子,原來的種子就可以下線休息去了──甚至不用等到新種子出現!沿用前例,原先的種子把檔案片段 1~3 給了 A ,片段 4~6 給了 B ,片段 7~10 給了 C ,那麼就算種子下線休息去了, ABC 之間仍然能夠透過互通有無的機制,把檔案下載成功。 BT 一方面減輕了單一種子的負擔,另一方面也延長了檔案的壽命-就算原先種子離開了,如果 A 、 B 、 C 當中有人志願留下來等到新下載者 D 出現,那麼檔案就能繼續流傳下去。
當然,要讓這套機制成功,還有幾個配套的措施:
(1) Torrent 檔與 Tracker :
由於 BT 中的種子、下載成員一直在變動,必須要有方法讓其他新成員找到他們,因此就出現了 Torrent 檔與 Tracker 。 Tracker 是個小程式,紀錄著目前所有下載成員的名單與網路位置。 Torrent 檔則是紀錄 Tracker 的位置與檔案片段的全部名稱。因此對於新成員來說,他首先要獲得的就是一個 torrent 檔,從 torrent 檔中他知道 tracker 的位置,然後再經由 tracker 與其他下載成員取得聯繫。
(2) Rarest First Policy
為了增進檔案分享的速度,每個成員會盡量分享網路上最少見的檔案片段。例如 A 擁有片段 1 、 2 、 3 , B 擁有 2 、 4 、 5 , C 擁有 1 、 3 、 5 ,則網路上最罕見的是片段 4 ,因此若有人想向 B 互通有無, B 會優先傳給他片段 4 。
(3) Choking Policy
當一個檔案很流行的時候,一個 BT 系統可能會同時擁有成千上萬的下載者。 A 身為一個參與者,必定會收到非常多人希望跟他交換檔案的請求。但是 A 的頻寬很小,只允許同時上傳給 4 個人(在 BT 最初原始程式裡預設是 4 ;其他軟體的設定就不一定了,我知道 BitComet 之前是 10 個),那麼 A 要如何決定拒絕這當中的誰呢?這叫做 choking (拒絕) policy 。 BT 的做法是:接受( unchoke )那些現在正上傳檔案給我、而且速度最快的前 4 個人! BT 的 Choking Policy 至為重要,因為它傳達出一種「施比受更有福」的概念:願意付出更多上傳頻寬的人,將會收到其他人的回報-更快的下載速度 。日後有許多關於 BT 的研究,都是針對這個特性作一番探討。
(4) Optimistic Unchoking
承續前述的理念,想要獲得更快的下載速度,就應該先將檔案分享給別人。 Optimistic Unchoking 是說,每個人每 30 秒就挑網路中任意一個人,將檔案上傳給他。這麼作的用意是發掘網路上未知的潛力檔案提供者:假如 A 與 K 之前並未有檔案的往來,但其實這兩個人住得很近,網路互傳的速度比其他人快。今天 A 透過 Optimistic Unchoking 隨機給 K 上傳了一些檔案片段,讓 K 驚覺 A 的上傳速度很快,進而允許 A 從 K 處下載檔案片段。如果 A 與 K 之間的連線速度很慢,那麼過 30 秒之後, A 會停止提供檔案給 K ,而去別處尋找下一個候選人。
透過上述的幾種機制, Bram Cohen 成功的開發出一套獨特的下載技術,也讓 BT 成為近幾年來最流行的話題,網路上更逐漸出現許多以 BT 為核心,內容卻略有不同的幾套下載軟體,如前述 BitComet 、 BitSpirit 等。這些軟體多少在技術上修改了 BT ,比如說改變檔案傳輸時使用的 port 、改變同時最多上傳人數等等,但技術的基本概念卻是不變的:透過鼓勵分享,達到更快的下載速度。
接下來的幾篇,會引述幾篇學術上研究 BT 機制的論文,讓我們看看 BT 這套機制透過長時間實驗與數學流體模型、機率模型、排隊模型、賽局理論 …… 等等的驗證下,在各方面的效能如何?這些論文又會給我們什麼啟示?敬請大家拭目以待,下回再見。
延伸閱讀: