- Распределённая p2p-сеть с тем условием, что подключаемся только к друзьям.
- Безопасность. Данные отправляем только проверенным узлам.
- Распределённый мессенджер (аналог jabber). Сообщения отправляются напрямую собеседнику. Децентрализация.
- Распределённые http сайты (аналог ipfs). Кеширование по всей цепочке друзей.
- Распределённая DNS. Домены вида
*.f2f - Ускорение интернета: запрашиваем данные от друзей, которые в локальной сети + не тратится траффик.
- карты OpenStreetMap
- научные публикации Sci-Hub
- библиотека Flibusta
- музыка Zvooq
- распределённый треккер для фильмов/сериалов (аналог торрентов)
Для подключения к сети необходимо иметь в ней друзей. Для этого прописываем их IP адреса в конфиге. Тут такой момент: у пользователя может быть несколько устройств с разными IP, поэтому нужно как-то предусмотреть ID пользователя и чтобы он мог привязывать к нему свои устройства, либо перепривязывать при смене IP. Для шифрования траффика и получения уникальных IPv6 устройств будет использоваться cjdns сеть.
У любого узла сети есть своя DNS книга (аналог i2p). В ней указаны какие друзья знают какой-либо домен + его цифровая подпись. Соответственно он может прописать себе любой домен. Фича: в разных частях сети могут быть несколько вариантов резолва.
- Спрашиваем у друзей - знаешь ли ты такой-то домен.
- Дружеский узел проверяет у себя и говорит - да или нет.
- Если этот домен часто спрашивают и узел не знает где он - спрашивает у своих друзей. В конечном итоге если в сети есть узел, который считает что это он и есть этот домен - он ответит и построится цепочка узлов, которые знают куда отправлять пакеты для этого узла.
- Если друг говорит, что знает домен - он возвращает его цифровую подпись. Так мы сможем определить одинаковые ли домены знают мои друзья.
Возможная проблема: допустим есть
site.f2f, у меня 20 друзей знают его и возвращают одну и ту же подпись. Затем одного взломали или он оказался токсичным и он станет возвращать другую подпись. Соответственно этому другу запросы для этого домена возвращать не нужно и его надо пометить как подозрительный.
Механизм работы следующий:
- По сути я спрашиваю у друга - дай мне такой-то URL, например
site.f2f/file.zip - Если у друга нет в кеше файла - то если у него есть друзья, которые знают
site.f2f- он у них спрашивает этот файл и т. д. по цепочке. - Здесь можно также запрашивать параллельно куски файла у разных друзей. Например у первого запросить первый 1Кб, у второго второй 2Кб и т.д. Работа ведётся по протоколу UDP, так что как раз можно отправлять небольшие датаграммы.
- Перед запросом файла также нужно построить маршрут: это опрос друзей, знают они этот сайт или нет, соответственно они спросят у своих друзей и т.д. В итоге будут автоматом построены каналы данных.
- Если мы получаем кусок файла - то кешируем его у себя. Здесь можно прямо реконструировать файлы на диске.
- Нежелательный контент: т.к. мы пропускаем траффик через себя (система открытая), то можем посмотреть кто какие файлы запрашивает. Можно дополнительно сделать фильтр - какие файлы/домены мы не хотим поддерживать и кешировать. Т.е. если нас будут спрашивать про какой-нибудь нежелательный домен
pirat.f2fмы сразу говорим "не знаю таких" и траффик на этот узел через нас идти не будет.
Отправлять сообщения можно на адреса вида alice.f2f - фактически это какой-то узел сети. На этом узле работает сервер, который хранит сообщения (mysql). В принципе можно это всё сделать пока на PHP. Если у Алисы несколько устройств - они коннектятся к этому серверу и синхронизируются.
У обычных людей сервера нет и они будут запускать это всё на обычном компе/телефоне.
Кейс: Общаемся утром на ноутбуке (где запущен сервер), затем поехали на работу и нужно продолжить общение уже с рабочего компа. Причём нужно как-то на него закачать историю с ноутбука, а он выключен. Можно закачать историю например от собеседника, но если он в оффлайне, то это проблематично.
Интерес держать f2f ноды можно повысить, если как-то оплачивать транзитный траффик. Чем больше пропускаешь через себя, тем больше приходит виртуальных денежек. Соответственно при отправке нужно давать монеты друзьям? Либо оплачивать хранение данных, но непонятно как это всё отслеживать.