
IPFS网络中的参与者被称为节点。节点是在本地计算机上运行的IPFS程序,用于存储文件并连接到IPFS网络。它们是IPFS的最关键的方面。如果没有运行IPFS守护程序的节点(如下所述),就不会有IPFS网络。
整个IPFS文档、问题和相关代码中都会出现节点这个术语。这是一个非常笼统的术语,所以它的含义取决于上下文。节点有三个主要类别:IPFS节点,数据节点,以及应用的 libp2p 节点。
IPFS节点是运行在计算机上的程序,可以与其他IPFS节点交换数据。我们用不同的术语来指代不同的节点名称,具体取决于上下文。
- 节点:指的是网络上的单个点时使用节点。这是一个非常笼统的术语。例如,当你打开IPFS桌面时,你将自己建立为一个节点,并具有与其他节点互动的潜力,请参阅配置一个节点。
- 对等:谈论一个节点(甚至是你自己的节点)与其他节点的关系时,请使用peer。它指的是他们的关系是平等的,没有中央权威,所以你的节点是其他对等点的对等点。请查阅观察对等点,节点间交换文件和与内容提供者对等。
- 供应商:守护者。在谈论一个节点的活动状态时使用daemon。当一个节点在线并在后台运行,监听对其数据的请求,它被称为守护进程。请查阅让你的节点的在线实例:当谈论一个库或程序时使用实例,例如Go或JS版本。在一个特定的时间点在IPFS节点上运行。对等体ID是相同的,所以就IPFS网络而言,它仍然是同一个节点。
请参阅Go-IPFS和JS-IPFS。
数据节点, 在谈论IPFS上的实际数据时使用数据节点,如DAG节点。UnixFS 节点和 IPLD 节点。当你用ipfs add myfile.txt命令添加一个文件时。IPFS会把它们分割成几个节点,每个节点都包含文件的一个块并相互链接。请参阅Merkle定向无环图(DAGs)、Unix文件系统(UnixFS),并继续关注正在进行中的星际关联数据(IPLD)模型文档。
libp2p peer在谈论可以在其上构建应用程序的 libp2p 节点时,使用 libp2p peer。它们通常被称为libp2p中的对等点,因为它为传输、安全、对等点路由和内容发现等基本对等体元素提供了解决方案。参见概念。
类型
有不同类型的 IPFS 节点。根据不同的使用情况,一个IPFS节点可以提供一种功能:
- 预加载
- 中继
- 引导
- 委托路由
预加载
用于通过在一个随机选择的预加载节点的HTTP API上调用ipfs refs -r <CID>,使UnixFS DAG公开可用。这会将CID放入预加载节点的需要列表中中,使其从用户那里获取数据。然后其他请求内容的节点可以使用bitswap从预加载节点解析它,因为数据现在已经存在于预加载节点的块存储中。
预加载节点的特点:
- 它们公开了API端口的Go-IPFS节点。一些HTTP API命令是可以访问的。
- 可以被在浏览器上下文中运行的JS-IPFS节点使用。
- JS-ipfs节点保持连接到所有预加载节点的libp2p群端口,在引导列表中添加预加载节点。
- 通常与委托路由节点在同一服务器上,尽管委托路由服务和预加载服务的地址是不同的。这是通过让不同的多地址解析到同一台机器来完成的。
- 预载节点在默认的JS-IPFS配置中是作为引导节点,所以它们将始终保持与libp2p群连接。
- 它们被配置为常规的引导节点,但作为惯例,在它们的/dnsaddr multiaddr中加入了“preload”字符串。
预加载节点的限制:
- Protocol Labs提供的默认预加载节点每小时进行一次垃圾回收,因此预加载的内容只能存活这么长时间。但是,这是可配置的。你可以使用自定义的策略运行节点。
- 要求客户端对预加载的内容进行智能处理:对大的DAG进行递归预加载。
只适用于dag-pb CIDs,因为这是refs命令所能理解的所有内容。它很难找到非dag-pb内容,例如,需要连接到发布的js-ipfs实例,或者需要由委托节点将其放在DHT上。
中继
如果一个IPFS节点认为自己无法访问公共互联网,IPFS节点可以选择使用中继节点作为一种VPN,试图访问无法到达的节点。
中继节点的特点:
- 实现电路中继协议的V1或V2版本。
- 可以是Go-IPFS或JS-IPFS节点;但也有独立的实现:js-libp2p-relay-server (支持电路v1),go-libp2p-relay-daemon (支持电路 v1 和 v2),它们同时被Go-IPFS和JS-IPFS节点使用。
- JS-IPFS节点也可以使用中继节点来克服在JS-IPFS实现中缺乏传输兼容性的问题。具有WebSockets/webRTC传输的浏览器节点,可以与一个只通过TCP通信的Go-IPFS节点使用支持两种传输方式的中继节点进行通信。这在默认情况下是不启用的,需要进行设置。
中继节点的限制:
- 任何人都可以无限制地使用v1中继节点,除非go-libp2p-relay-daemon与ACL(访问控制列表)设置一起使用。
- v2中继是“有限中继”,被设计用于通过中继进行直接连接升级(又称打孔)。
- 在go-ipfs中不可配置;使用预设的继电器列表
请参阅p2p-电路继电器
引导
Go-IPFS和JS-IPFS节点都使用引导节点来最初进入DHT。
引导节点的特点:
- 所有默认的引导节点都是公共DHT的一部分。
- Go-IPFS或JS-IPFS节点所连接的引导节点列表可在其配置文件中进行配置。
引导节点的限制:
- 如果一个IPFS节点在其配置中只有一个引导节点,而该引导节点下线,则如果IPFS节点重新启动,它将失去对公共DHT的访问权限。
关于引导的更多信息
委托路由节点
当IPFS节点无法独立运行分布式哈希表(DHT)逻辑时,它们会将该任务委托给委托路由节点。发布适用于任意CID编解码器(压缩/解压缩技术),因为js-delegate-content模块在块级别发布CIDs,而不是IPLD或DAG级。
委托路由节点的特点:
- 它们是Go-IPFS节点,其API端口暴露,一些API命令可在/api/v0访问。
- Go-IPFS和JS-IPFS节点均可使用。
- JS-IPFS节点使用它们来查询DHT并发布内容,而无需自己实际运行DHT逻辑。
- 通常与预加载节点在同一服务器上,尽管委托路由服务和预加载服务的地址是不同的。这是通过不同的多地址解析到同一台机器来完成的。
- 委托路由节点在默认的JS-IPFS配置中是作为引导节点,因此它们会始终保持与它们的libp2p群连接。
- 它们被配置为常规的引导节点,但在它们的多地址解析中有“preload”字符串。
委托路由节点的限制:
- 在Protocol Labs提供的默认委托节点上,垃圾收集每小时进行一次。因此提供的内容只能存活那么久。如果上传的JS-IPFS节点仍在运行,它将将使用相同的发布机制定期发布重新提供,从而延长了DHT上内容的生命周期。
实现
Protocol Labs管理着IPFS规范的两个主要实现:Go-IPFS和JS-IPFS。这些实现使用特定类型的节点来执行服务器、浏览器和其他客户端功能。
Go-IPFS
Go实现旨在具有完整IPFS功能的服务器和用户机器上运行,从而实现实验。新的IPFS功能通常在任何其他实现之前在Go-IPFS上创建的。
功能包括:
- 默认情况下启用TCP和QUIC传输。
- /ws/传输默认禁用。
- 具有子域支持的HTTP网关,用于内容根之间的源隔离。
- 多种实验性功能
请参阅API > 使用Go
JS-IPFS
Javascript实现旨在具有有限的IPFS功能的浏览器中运行。
特点包括:
- 可以使用安全的WebSockets连接到服务器节点。
- WSS需要在服务器上手动设置TLS。
- 可以使用集中式的ws-webrtc-star信号服务,使用WebRTC连接到浏览器节点。
JS-IPFS实现的具体限制是:
- 除非使用WSS,否则JS-IPFS节点无法连接到主公共DHT。只能连接到其他JS-IPFS节点。
- DHT的性能无法与Go-IPFS的实现相提并论。
- HTTP网关是存在的,但它没有子域支持(无法打开 TCP 端口)
查看更多关于 IPFS 节点的信息
原文链接:https://docs.ipfs.io/concepts/nodes/
---煤油灯科技victorlamp.com翻译整理---