Skip to content

CupIvan/f2f

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

F2F-сеть. Идеи

Для чего нужно

  • Распределённая p2p-сеть с тем условием, что подключаемся только к друзьям.
  • Безопасность. Данные отправляем только проверенным узлам.
  • Распределённый мессенджер (аналог jabber). Сообщения отправляются напрямую собеседнику. Децентрализация.
  • Распределённые http сайты (аналог ipfs). Кеширование по всей цепочке друзей.
  • Распределённая DNS. Домены вида *.f2f
  • Ускорение интернета: запрашиваем данные от друзей, которые в локальной сети + не тратится траффик.

Ресурсы

  • карты OpenStreetMap
  • научные публикации Sci-Hub
  • библиотека Flibusta
  • музыка Zvooq
  • распределённый треккер для фильмов/сериалов (аналог торрентов)

Подключение к сети

Для подключения к сети необходимо иметь в ней друзей. Для этого прописываем их IP адреса в конфиге. Тут такой момент: у пользователя может быть несколько устройств с разными IP, поэтому нужно как-то предусмотреть ID пользователя и чтобы он мог привязывать к нему свои устройства, либо перепривязывать при смене IP. Для шифрования траффика и получения уникальных IPv6 устройств будет использоваться cjdns сеть.

DNS

У любого узла сети есть своя DNS книга (аналог i2p). В ней указаны какие друзья знают какой-либо домен + его цифровая подпись. Соответственно он может прописать себе любой домен. Фича: в разных частях сети могут быть несколько вариантов резолва.

  1. Спрашиваем у друзей - знаешь ли ты такой-то домен.
  2. Дружеский узел проверяет у себя и говорит - да или нет.
  3. Если этот домен часто спрашивают и узел не знает где он - спрашивает у своих друзей. В конечном итоге если в сети есть узел, который считает что это он и есть этот домен - он ответит и построится цепочка узлов, которые знают куда отправлять пакеты для этого узла.
  4. Если друг говорит, что знает домен - он возвращает его цифровую подпись. Так мы сможем определить одинаковые ли домены знают мои друзья. Возможная проблема: допустим есть site.f2f, у меня 20 друзей знают его и возвращают одну и ту же подпись. Затем одного взломали или он оказался токсичным и он станет возвращать другую подпись. Соответственно этому другу запросы для этого домена возвращать не нужно и его надо пометить как подозрительный.

Сайты и файлы

Механизм работы следующий:

  1. По сути я спрашиваю у друга - дай мне такой-то URL, например site.f2f/file.zip
  2. Если у друга нет в кеше файла - то если у него есть друзья, которые знают site.f2f - он у них спрашивает этот файл и т. д. по цепочке.
  3. Здесь можно также запрашивать параллельно куски файла у разных друзей. Например у первого запросить первый 1Кб, у второго второй 2Кб и т.д. Работа ведётся по протоколу UDP, так что как раз можно отправлять небольшие датаграммы.
  4. Перед запросом файла также нужно построить маршрут: это опрос друзей, знают они этот сайт или нет, соответственно они спросят у своих друзей и т.д. В итоге будут автоматом построены каналы данных.
  5. Если мы получаем кусок файла - то кешируем его у себя. Здесь можно прямо реконструировать файлы на диске.
  6. Нежелательный контент: т.к. мы пропускаем траффик через себя (система открытая), то можем посмотреть кто какие файлы запрашивает. Можно дополнительно сделать фильтр - какие файлы/домены мы не хотим поддерживать и кешировать. Т.е. если нас будут спрашивать про какой-нибудь нежелательный домен pirat.f2f мы сразу говорим "не знаю таких" и траффик на этот узел через нас идти не будет.

Мессенджер

Отправлять сообщения можно на адреса вида alice.f2f - фактически это какой-то узел сети. На этом узле работает сервер, который хранит сообщения (mysql). В принципе можно это всё сделать пока на PHP. Если у Алисы несколько устройств - они коннектятся к этому серверу и синхронизируются. У обычных людей сервера нет и они будут запускать это всё на обычном компе/телефоне.

Кейс: Общаемся утром на ноутбуке (где запущен сервер), затем поехали на работу и нужно продолжить общение уже с рабочего компа. Причём нужно как-то на него закачать историю с ноутбука, а он выключен. Можно закачать историю например от собеседника, но если он в оффлайне, то это проблематично.

Монетизация

Интерес держать f2f ноды можно повысить, если как-то оплачивать транзитный траффик. Чем больше пропускаешь через себя, тем больше приходит виртуальных денежек. Соответственно при отправке нужно давать монеты друзьям? Либо оплачивать хранение данных, но непонятно как это всё отслеживать.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors