我能够让 p2p 网络发现本地网络中的新节点,并能够使用 libp2p-rust 中的 gossipsub 协议和 mDNS 发布消息 现在我想发现公共网络中的节点,我正在查看存储库中的示例并浏览了一些:
虽然感觉他们正在解决类似的问题,所以我想了解两者之间的区别 中继服务器、会合协议、信令服务器和跟踪服务器。以及何时使用什么?
rendezvous 是一种用于各种对等发现(例如服务、中继等)的协议。 “会合”对等点通常是位于公共固定地址的众所周知的对等点。通常,当对等点启动时,它会连接到一组固定的集合服务器来查询其他对等点并注册自己,以便其他对等点可以找到它。集合点服务器充当集中式路由表/目录。集合点服务器的一种流行用途是在发布-订阅网络中向订阅某个主题的对等节点进行广告。这就是一些区块链网络的引导方式。集合点服务器还在它们之间使用发布-订阅来传播广告数据,以便它们都向对等点广告相同的信息。
注意:这不是非常“去中心化”,但非常方便,并且是大多数使用 libp2p“引导程序”的 p2p 网络的方式。使用集合服务器形成中心辐射型网络拓扑,即使是短暂的。 如果您的目标是创建没有固定基础设施的亚稳定 p2p 网络,那么 Rendezvous 不适合您,您将不得不使用其他对等发现方法。
中继服务器是指公共可用的 libp2p 对等点将流量从一个对等点中继到另一个对等点。当一个或两个对等点位于 NAT 后面并且没有公共可路由 IP 地址时,通常会执行此操作。
dcutr 是一种使用中继服务器作为信令服务器通过 NAT 进行打洞的方法,这样即使一个或两个对等点位于 NAT 之后,对等点之间也可以直接连接。
autonat 是对等点用来发现它是否位于 NAT 之后的协议/方法。它允许要求其他对等点拨回发起对等点。这通常与中继服务器结合使用,如果发起对等方位于 NAT 之后,中继服务器会接收回拨并中继流量。
为了更好地理解这一点,您必须记住,所有 libp2p 对等点通常都充当 服务器 以及客户端。这意味着它们向其他对等点进行出站拨号,并接受来自其他对等点的入站拨号。当对等方位于 NAT 之后时,它通常没有公共可路由 IP 地址。它接受入站拨号的最佳方法是首先连接到中继服务器并获得代表其接受入站拨号的预留。一旦发生入站拨号,中继服务器可以继续中继流量,或者可以尝试在 NAT 中打孔并在 NAT 对等点和拨号对等点之间建立直接连接。