大家以前用 BT 或者电驴下载电影的时候,有没有想过一个问题: 没有中心服务器(像百度网盘那样),你的电脑是怎么知道哪部电影藏在地球另一端的某台电脑里的?
这就得请出 P2P 界的祖师爷级算法:Kademlia(简称 Kad)。
如果不全是技术词汇,咱们换个每个人都玩过的场景:找人。
1. 互联网版的“六度人脉”
想象一下,你要找一个叫“张三”的人,但他住在美国的一个小镇,你完全不认识他。你怎么找?
你肯定不会像无头苍蝇一样一家一家去敲美国人的门(那是笨办法)。 你会用**“混圈子”**的办法:
-
你先问你在美国留学的朋友 A:“你认不认识张三?”
-
A 说:“我不认识,但我认识一个住在那个州的朋友 B。”
-
B 说:“我不认识,但我认识一个就在那个小镇工作的朋友 C。”
-
C 说:“嗨!张三就是我隔壁邻居!”
这就叫 Kad 算法。
2. Kad 的通讯录逻辑
在 Kad 的世界里,每台电脑都有一个 ID(身份证号)。每台电脑不需要认识全世界所有的电脑,它只需要维护一个很鸡贼的“通讯录”:
-
离自己近的(ID 相似):记得特别清楚,连这一片有几只蚊子都知道。
-
离自己远的(ID 差别大):只记几个代表人物。
这就好比:
-
你自己小区的邻居,你全认识。
-
隔壁街道的,你认识几个热心的阿姨。
-
隔壁城市的,你只认识一两个老同学。
-
国外的,你可能只认识马斯克(知道名字而已)。
3. 找资源的“接力赛”
当你要找一部电影(假设这部电影的哈希值 ID 是 100)时:
-
你发现自己是 0,离 100 很远。
-
你翻翻通讯录,发现认识一个 ID 是 50 的大佬,于是你问 50:“你知道 100 在哪吗?”
-
50 毕竟离 100 近多了,它的圈子里有个 80。
-
80 又认识 95... 95 认识 99...
-
最后,99 说:“100 就在我旁边,给你!”
这个算法最牛的地方在于: 不管网络里有几亿台电脑,不管你离目标多远,Kad 算法都能保证你在极短的步骤内(通常是几十步)精准地揪出那个拥有资源的人。
而且,因为没有中央服务器,警察叔叔没法拔网线,黑客也没法攻击服务器。只要还有人在上网,这个网络就永远活着。这就是为什么比特币、以太坊、IPFS 都在用类似技术的原因。


评论