← Web3 / web3 / ipfs-gateway / concepts
Interplanetary File System (IPFS)
Interplanetary File System (IPFS) представляет собой одноранговую сеть хранения файлов. Вместо хранения файлов на одном сервере, как это происходит при традиционном веб-хостинге, IPFS распределяет файлы между множеством компьютеров по всему миру.
Любой компьютер может присоединиться к сети IPFS, установив программное обеспечение IPFS, и начать размещать и раздавать файлы.
Если кто-то загружает файл в сеть IPFS, его может просматривать и скачивать любой другой участник сети IPFS: центральный сервер здесь не задействован.
Идентификаторы контента
Каждому файлу, добавленному в IPFS, присваивается уникальный адрес, полученный на основе хеша содержимого файла. Этот адрес называется идентификатором контента (CID). CID содержит два элемента информации, объединенных в одну строку: хеш файла и идентификатор использованного алгоритма хеширования.
Поскольку CID вычисляется на основе самого контента, два идентичных файла всегда дают одинаковый CID, а любое изменение файла приводит к другому CID. Именно поэтому IPFS называют «адресуемой по содержимому»: файлы находят по тому, что в них содержится, а не по тому, где они хранятся.
IPFS использует SHA-256 ↗ по умолчанию и кодирует результат с помощью Base58 ↗ , схема кодирования, которая исключает визуально схожие символы (например, ноль и заглавную букву O), чтобы уменьшить количество ошибок при ручном вводе.
CID обычно выглядит так: QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco
IPFS также поддерживает другие кодировки (Base32 ↗) и алгоритмы хеширования (SHA-3 ↗, BLAKE2 ↗).
Загрузка в IPFS
IPFS отслеживает, у каких компьютеров какие файлы, с помощью Распределенная хеш-таблица (DHT) ↗ , система поиска, которая сопоставляет CID с сетевыми адресами компьютеров, хранящих это содержимое. Ни один отдельный компьютер не хранит всю таблицу целиком, вместо этого каждый компьютер в сети хранит лишь ее часть и знает, где найти остальное.
«Загрузка» содержимого в IPFS не означает отправку файла на центральный сервер. Это означает объявление сети о том, что у вас есть это содержимое, путем добавления записи в DHT, которая сопоставляет CID вашего файла с вашим сетевым адресом. Когда кто-то другой хочет скачать этот файл, он ищет CID в DHT, находит ваш адрес и скачивает данные напрямую от вас.
Поскольку один и тот же файл может размещаться на нескольких компьютерах, загрузки распределяются между ними всеми. Если один из хостов выходит из строя, остальные продолжают отдавать контент. Именно эта избыточность обеспечивает IPFS преимущество в скорости и надёжности перед хостингом на одном сервере.
Каталоги
Вы можете загружать не только отдельные файлы. Например, рассмотрим папку с именем example, в котором ровно один файл, example_text.txt, содержащий строку I'm trying out IPFS.
Если бы эта папка была загружена с помощью команды ipfs add -r ./example, и папка, и находящийся в ней файл будут иметь собственный CID. В этом случае папка будет иметь CID QmdbaSQbGU6Wo9i5LyWWVLuU8g6WrYpWh2K4Li4QuuE8Fr а файл будет иметь CID QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy.
После этого получить доступ к файлу можно двумя способами:
- Прямой запрос файла:
https://cloudflare-ipfs.com/ipfs/QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy - Запрос файла по имени из каталога:
https://cloudflare-ipfs.com/ipfs/QmdbaSQbGU6Wo9i5LyWWVLuU8g6WrYpWh2K4Li4QuuE8Fr/example_text.txt
Хотя CID файла меняется только при изменении самого файла, CID каталога меняется каждый раз, когда any файлов в нем изменится или если файлы будут добавлены либо удалены.
Директории позволяют адресовать целый статический сайт с помощью одного CID и открывать разные страницы сайта, запрашивая соответствующие файлы внутри директории.
Дополнительные материалы
Подробнее о дополнительных понятиях можно узнать в IPFS ↗ документация.