Featured image of post 網路技術:BitTorrent 技術解說 - 高效分散傳輸巨大檔案的機制

網路技術:BitTorrent 技術解說 - 高效分散傳輸巨大檔案的機制

即使數萬人同時下載數 GB 的 OS 映像檔,伺服器也不會崩潰。為您解說 P2P 傑作「BitTorrent」創新的檔案分割與資料交換演算法。

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 世紀的思維,出色地體現了「集結成群的個體力量」這種網際網路本來擁有的自治分散哲學技術。

在其底層運作的「將檔案細碎化」、「從稀有的開始收集」、「回報合作者」等邏輯,至今仍對區塊鏈技術與分散式雲端儲存的設計帶來深遠的影響。

comments powered by Disqus