應用層與 HTTP

點對點(peer-to-peer,P2P)

想像一個讀書會,與其由一位老師對三十位學生講課,不如讓每位學生都把自己抄好的頁面分享給其他所有人。加入的人越多,副本就越多,每個人也越快拿到整本書。這正是點對點(peer-to-peer,P2P)的精神:沒有特殊的、永遠開著的伺服器;取而代之的是一般的參與者(同儕,peer)彼此直接交談,而且每一個都同時扮演用戶端與伺服器的角色。

具體來說,在像 BitTorrent 這樣的 P2P 檔案分享系統裡,一個檔案被切成許多小片段。一個同儕一旦下載到某個片段,就能把那個片段上傳給其他還需要它的同儕。一個想要某檔案的同儕,會找到擁有該檔片段的其他人,並行地從不同同儕下載不同片段,同時也把自己已有的片段提供出去。沒有一台所有資料都必須流經的中央機器——工作與頻寬被分攤到每個參與者身上。

最醒目的特性是自我擴展:在主從式架構中,使用者越多,單台伺服器的負載就越重;但在 P2P 中,每位新使用者都帶來自己的上傳容量,因此系統的總服務能力會隨需求一起成長。然而代價是真實存在的——同儕來去難以預測(churn),在沒有中央目錄的情況下要找出誰擁有什麼比較困難,而且因為你是向陌生人下載,安全與信任也更棘手。許多真實系統其實是混合式的:用一個中央追蹤器或索引幫同儕互相找到對方,但大宗資料仍在同儕之間傳遞。

某個 Linux 發行版以 torrent 的形式釋出。第一天有一萬人下載。若是主從式架構,這個專案的單一伺服器會被壓垮。在 P2P 中,第一萬個下載者同時也在協助上傳,所以這群「蜂群」(swarm)反而越大越快——負載由那些製造負載的人自己分攤。

每個同儕既是消費者也是提供者,因此容量隨人群一起成長,而不是卡在單一伺服器上。

P2P 本質上並不等於「盜版」——它是一種被 Linux 鏡像站、區塊鏈,以及某些影片與軟體更新程式所採用的散布架構。在上面流動的是什麼內容,與它如何流動,是兩個不同的問題。

又称
P2P點對點對等網路