好的,所以我正在考虑为一个 AI 项目的许多不同服务编写一个 p2p 协议,我想我会来这里看看我是否能获得一些关于如何获得初始连接的想法。
我遇到了几种建立初始连接的方法:
1)您在互联网上有一个静态 IP 地址,可以在其他对等方上分发信息。这不好,因为:a)它是单点故障,服务可能会脱机,阻止任何新连接创建与对等方的初始连接,b)IP 地址可能会更改。这可以通过使用一个域名来缓解,该域名指向提供对等点数据的服务位置的当前 IP 地址,但是理论上这可以被黑客通过欺骗或 arp 中毒、dns 攻击等破坏。
2)您可以强制用户为另一个对等方提供初始 IP 地址或主机名,由用户自行查找主机名/IP 地址/端口号。这很好,但如果有人发布虚假信息,或者他们在谷歌或其他搜索网站上找不到同行,那么显然它是错误的。
3) 你可以把它留给对等方在一个中心位置发布他们自己的存在 - 例如一组 IRC 频道或一组网站。同样,除非它通过一个中央可信域,否则很难确定对等点的真实性。
4)您可以使用某种 nmap 风格的发现算法,通过子网搜索适当的协议。这种方法的问题是它很慢,并且可能会引起防火墙等事物的注意。
5) 这是 3) 的变体,您可以允许同行在网站上宣传自己的信息,然后不必在合适的位置(特定网站或网站组)寻找信息,您可以让google 的搜索算法会找到它,并为您进行发现,但是您可以想象,google 可能需要几天的时间来缓存网站数据以及对等点的信息。同样,您可以提供某种方法来验证广告数据的真实性。
6) 如果您对锁定某些人的专有 p2p 网络感兴趣(例如,您可能想要一个文件共享网络并且您不希望执法部门能够访问它,或者 MPIAA),那么您可以使用 2) 然后有一个推荐系统,您需要初始连接提供推荐人的 IP 地址,然后该服务可以连接到推荐人的 IP 地址并询问推荐人是否确实推荐了推荐人。
这就是我目前所能想到的,但如果有人想出任何其他方法来做到这一点,我会非常感兴趣。