把时间拨回 2003 年。这一年中国网民刚突破 6000 万,网际快车和 FlashGet 还在比拼谁的进度条画得更好看。迅雷这一年做出了一个奇怪的决定——它没有去抢谁的下载速度第一,而是申请了一项后来让整个行业都不太舒服的专利:一种把服务器资源、P2P 资源、镜像资源整合起来下载的协议。迅雷自己给它起了一个名字,叫 P2SP,Peer to Server & Peer。

为什么是 P2SP 而不是 P2P?因为邹胜龙很清楚一件事:纯粹的 P2P 在中国早期的带宽环境下是个伪命题。ADSL 上行普遍只有 512Kbps,大部分用户都关在 NAT 后面,没人愿意长期做种。BitTorrent 在欧美流行是因为欧美家庭带宽上下行对称,而中国的下载生态从一开始就被带宽的不对称性掐住了脖子。

把“在哪下”变成“哪都能下”

P2SP 的核心思想,后来被迅雷自己的工程师反复在博客园、CSDN 这些技术社区里讲过——它不是一个下载协议,它是一个“智能调度器”。当用户输入一个 HTTP 下载链接,迅雷客户端会同时做三件事:

第一,沿着原 URL 去源站拉数据,这是 P2S 的部分,保证至少有进度。第二,去 P2P 网络里查这个资源有没有被别人缓存,这是 P2P 的部分,蹭别人的上行带宽。第三,根据文件指纹(迅雷叫它“哈希值”),去所有已知镜像站、网盘、CDN 节点里找同一份文件,这是 SP 的部分,尽可能多开几条下行的路。

这三路数据最后在客户端被拼装成同一个文件。用户看到的是“正在从 5 个源同时下载”,进度条走得飞快,体验瞬间拉满。这件事在 2005、2006 年那会儿,对一个用着 1Mbps ADSL 的网民来说,基本是魔法。

P2SP 的精髓不是“用了 P2P”,而是承认现实:HTTP 太慢、P2P 太冷、镜像太散,真正能用的方案是把它们当成一个调度池。

为什么 2003 年才有这个想法

P2SP 不是一个天才的灵光一现,而是被中国独特的网络环境逼出来的方案。2003 年的中国,几个事实同时存在:第一,镜像站数量少且分散,大家下个 RedHat ISO 要靠 ftp.sjtu.edu.cn 和 ftp.tsinghua.edu.cn 互相转;第二,公网 IP 稀缺,大量用户处于多层 NAT 之后,主动做种的意愿极低;第三,骨干网国际出口拥堵,跨运营商访问经常出现“半天连不上”的尴尬。

在这种环境下,任何一种单一的下载模式都不够用。纯 HTTP 等于把所有人赶到一条独木桥上;纯 P2P 等于让一群没有公网 IP 的人互相找对方;纯镜像站分发则受限于镜像站的数量和同步延迟。P2SP 的解法是把它们全部当成候选池,客户端负责挑选哪条路最快、哪条路最稳、哪条路最便宜。

P2SP 留下的真正遗产

P2SP 在 2010 年代被反复讨论,很多声音说它是噱头、是营销概念。这种评价低估了它的历史意义。它真正的遗产不在协议本身,而在于它给整个下载行业带来的观念转变——下载这件事,从此不再是“找一个最快的源”,而是“把所有可能的源同时用起来”。

这个观念,后来在 CDN、P2P-CDN(PCDN)、以及现在的 IPFS 内容寻址里都能看到回响。Cloudflare 在全球部署 335 个节点,本质上就是把“源”打散成尽可能多的边缘;IPFS 的 CID 哈希寻址,本质上就是把“在哪下”变成“全世界谁有就给谁下”。它们的设计哲学,都和 P2SP 2003 年那次的顿悟是同一条线。

P2SP 没有解决的事

当然,P2SP 也不是银弹。它解决的是“热点资源抢带宽”的问题,但解决不了冷门资源的下载。一个十年前的老镜像,一个只在小圈子里流传的内部资料,一个上传者早就停机的种子,在 P2SP 网络里依然是无源之水。下载这件事真正的死结,是内容的“可寻址性”和“持久性”,这正是后面 IPFS 和 Arweave 想解决的核心问题。

下一篇我们会把时间线向前推两年,看一个美国程序员 Bram Cohen 如何在 2001 年用一种看起来很激进、其实非常优雅的方式,同样去解决“一根独木桥扛不住”的问题——BitTorrent。只不过他的解法不是把所有源塞进调度器,而是把每一个下载者都变成一个新的源。

参考资料