1. 顛覆下載常識的協定
如果要讓數萬人同時下載 Linux 安裝映像檔或巨大的遊戲更新檔等高達數 GB 的資料,會發生什麼事呢?在一般的 Web 伺服器(HTTP 下載)中,線路頻寬會被撐爆,導致伺服器崩潰。
為了解決這個問題,並不是「企業花錢準備多台超強大的伺服器(CDN)」,而是想出了「 藉助正在下載的用戶本身的 PC 運算能力,互相協助完成下載 」這種劃時代的方法,這就是 2001 年布萊姆·科亨(Bram Cohen)開發的「 BitTorrent 」。
BitTorrent 不單單只是非法下載的工具。即使在今日,它仍佔據全球網際網路流量相當大的比例,大型 IT 企業也使用它將巨大資料高速部署到內部伺服器群中,是電腦科學中「分散式傳輸演算法」的最高傑作之一。
2. 碎片(Piece)與群集(Swarm)的力量
BitTorrent 最大的發明,在於將 1 個巨大的檔案分割成「 碎片 (通常是 256KB 到數 MB 左右的零碎區塊)」來處理。
傳統的下載方式,是依序從伺服器接收檔案從頭到尾的資料。 但是在 BitTorrent 中,參與下載的人們(稱為群集,Swarm)之間,會不斷互相分享「誰擁有哪個碎片」的資訊。
然後,在從其他用戶(節點,Peer)那裡獲得自己沒有的碎片的同時, 也將自己已經下載完成的碎片,上傳分享給還沒有這些碎片的其他用戶 。
graph TD
Seed["種子 (100% 持有者)"] -->|"碎片 1"| PeerA["節點 A (20% 完成)"]
Seed -->|"碎片 2"| PeerB["節點 B (40% 完成)"]
Seed -->|"碎片 3"| PeerC["節點 C (10% 完成)"]
PeerA <-->|"交換碎片 1 和 2"| PeerB
PeerB <-->|"交換碎片 2 和 3"| PeerC
PeerC <-->|"交換碎片 3 和 1"| PeerA
Note over PeerA,PeerC: 用戶之間像拼圖一樣,互相交換彼此沒有的碎片
透過這個機制,源頭伺服器(種子)就不需要將完整的檔案傳送給所有參與者。只要將每個碎片分別交給任何一個人,之後參與者之間就會像交換拼圖碎片一樣讓資料自我繁殖,因而產生了「 參與者越多,整個網路的下載速度就越快 」這種宛如魔法般的現象。
3. 最稀有優先(Rarest First)演算法
BitTorrent 能夠如此高效運作的理由之一,就是決定下載碎片順序的「 最稀有優先(從最少見的開始優先) 」這項聰明的演算法。
如果所有人都依序從「檔案最前面的碎片」開始下載,群集中就會變成「全都是持有前半部碎片的人」,而持有後半部碎片的人會變得極度稀少。這樣一來,在源頭的種子消失的瞬間,就沒有任何人能 100% 完成檔案了。
因此 BitTorrent 會綜觀整個群集,強制每個節點遵守「 優先下載目前市面上最不流通(數量最少)的稀有碎片 」這個規則。 透過這種方式,所有的碎片都會均勻地擴散到網路中,即使源頭的種子不見了,僅靠剩下用戶之間的交換,也能順利完成檔案。
4. 以牙還牙策略(Tit-for-Tat):排除搭便車者(Free Rider)
P2P 網路中最大的挑戰,就是存在著「只顧著拿資料,卻完全不上傳(提供)給別人」這種自私的用戶(搭便車者)。如果全都是這種人,系統就會崩潰。
針對這個問題,BitTorrent 在協定層級內建了一個基於賽局理論、被稱為「 Tit-for-Tat(以牙還牙) 」的強大對策。
BitTorrent 的用戶端軟體會持續測量每個連線對象「以多快的速度上傳資料給自己」。然後,它會自動執行「 只將自己的資料作為回報,優先傳送給給予自己大量資料的對象(阻塞 Choke / 解除阻塞 Unchoke) 」的動作。
也就是說,限制上傳速度「只拿不給」的用戶,會被其他所有用戶判定為「因為那傢伙不給資料,所以我們也不給他」,進而被切斷連線,結果導致自己的下載速度變得極度緩慢。 這是一項令人驚嘆的演算法,它的設計讓利他行為(開放上傳)成為了滿足利己目的(加快自己的下載速度)的最佳解。
5. 從 Tracker 到 DHT 的進化(去中心化的極致)
早期的 BitTorrent 為了管理「哪個 IP 位址的人擁有這個檔案」的名單,需要被稱為「 Tracker 」的中央伺服器。這有一個弱點,就是一旦 Tracker 停機,用戶之間就無法找到彼此。
然而,現在的 BitTorrent 引進了 DHT(Distributed Hash Table:分散式雜湊表) 技術,因此連 Tracker 伺服器都不需要了(Trackerless)。 參與網路的數百萬用戶本身的 PC 會互相合作,建立一個巨大的「分散式名單」,因此即使完全沒有中央伺服器,也能找出擁有特定檔案的人並開始下載,進化成了終極的分散式系統。
6. 總結
BitTorrent 拋棄了「中央巨大伺服器分發給所有人」這種 20 世紀的思維,出色地體現了「集結成群的個體力量」這種網際網路本來擁有的自治分散哲學技術。
在其底層運作的「將檔案細碎化」、「從稀有的開始收集」、「回報合作者」等邏輯,至今仍對區塊鏈技術與分散式雲端儲存的設計帶來深遠的影響。
