Рубрика «Peer-to-Peer»

P2P-форум с нуля | от NAT hole punching до автономной и полностью децентрализованной сети - 1


Многие, кто работают с интернет-сокетами в любой сфере IT, задаются вопросом о пробросе портов. Связано это с тем, что практически во всех домашних/общественных/корпоративных роутерах реализован механизм NAT, который перекрывает прямой доступ к устройствам в этих подсетях извне, общаясь с внешним интернетом от их имени.

У NAT есть киллер-фича — он представляет собой идеальный фаервол: атаки извне не могут использовать порты локальных устройств напрямую, следовательно, это решает проблему атак на сетевую уязвимость ОС.

Но, это доставляет и неудобства, например, если ты захочешь подключиться или хотя бы увидеть устройство за NAT в благих целях, то ты чисто теоретически не сможешь это сделать — у него относительно тебя нет IP-адреса.

Разнообразные сервисы работают на серверах, т. е. имеют некую ноду, которая имеет белый адрес в интернете (находится не за NAT). Все пользователи же подключаются к этому единому серверу. В таком случае проблема «невидимости» пользователей отпадает. Однако чисто серверное взаимодействие ограничивает скорость участников, так ещё и не отказоустойчиво. Если сервер упадёт, то все клиенты отправятся за ним (считаем, что это одноклеточный сервис не на всяких там kubernetes).

Как вы уже могли были догадаться, даже в реалиях, когда практически все устройства находятся за NATами, P2P реален. Когда вы являетесь участником bittorrent-раздачи, трансфер больших данных осуществляется напрямую. Как это работает? Поиск ответа на этот вопрос завёл меня в глубокие дебри, разгребая которые я написал оверлейную p2p-сеть, где трекерами являются сами её участники. Интересно? Тогда добро пожаловать под кат.Читать полностью »

Container image: доставить это немедленно - 1

Привет, меня зовут Дмитрий Светляков, я руководитель группы эксплуатации облачной платформы ВКонтакте. Занимаюсь администрированием 12 лет, и более 6 из них — контейнерными технологиями.

В рунете мало информации о том, как ускорить доставку container image. Надеюсь, наш опыт поможет администраторам больших контейнерных инсталляций ускорить доставку образов на конечные узлы, организовать альтернативный источник их получения и сделать этот процесс отказоустойчивым. 
Читать полностью »

Пиринговые мессенджеры — враг государства? - 1

В случае полного отключения интернета одна из главных проблем — общение с товарищами и родственниками. Опыт Гонконга показывает, что для этого хорошо подходят децентрализованные P2P-мессенджеры, которые работают без интернета, используя mesh-сеть по протоколам Wi-Fi Direct, Bluetooth, Apple Multipeer Connectivity Framework, ANT+, LoRa и др.

Для эффективной коммуникации приложение нужно скачать максимальному количеству человек до начала блокады интернета. Иначе придётся искать файлы после блокады. Человек с нужными файлами станет настоящим авторитетом в офисе или в классе (как это было в Беларуси в августе 2020 года — за файлами Psiphon люди реально приезжали из других микрорайонов города).

Вообще, вся история сетей wireless mesh намекает на то, что эта технология крайне не нравится правоохранительным органам.
Читать полностью »

Приветствую вас, уважаемые читатели. В предыдущей статье я рассказал, как сделать простую звонилку в браузере при помощи PeerJS. А сегодня планирую рассмотреть, как обмениваться сообщениями между двумя пользователями напрямую без задержек.
Кому это интересно? Если Вы разрабатываете онлайн игру, в которой необходим быстрый обмен данными между игроками, тогда прямой обмен сообщениями это пожалуй то, что вам нужно.
Читать полностью »

Приветствую всех читателей Хабра. В этом году довелось писать модуль видеосвязи для одного учебного портала для созвона по видеосвязи прямо на сайте учителя с учеником. Раннее такую задачу решать не приходилось. После недолгих поисков обнаружил, что есть 2 пути: Flash и WebRTC. WebRTC в чистом виде оказался сложноват, и в общем-то это естественно, так как задача видеосвязи не является простой. Но потом я наткнулся на PeerJS, который является оберткой для WebRTC. В этой статье я расскажу, как быстро организовать свою браузерную звонилку.
Читать полностью »

Скачиваемый файл заполнен нулями

Нуль-блоками я называю блоки(части файла) заполненные нулевыми байтами. Можно заранее посчитать их хеши и не запрашивать эти блоки у источников а сразу помечать их уже загруженными.

Нуль-блоки не надо хранить на диске. Благодаря sparse флагу операционная система просто помечает этот участок файла как заполненный нулями и не хранит эти нули на диске.

Свойства файла заполненного нулями

Файл размером 16MB занимает на диске 4KB

Также показывая что участки скачиваемого файла заполнены нулями можно мотивировать пользователя отказаться от скачивания и распространения битого файла. В моей версии Shareaza эти участки помечаются красной полосой сверху на полосе прогресса загрузки файла.

Откуда берутся нуль-блоки в файле

  1. Раздающий не дождался полного скачивания и проверки файла и выложил неполный(partial) файл.
  2. Результат повреждения сектора диска раздающего.

Это те варианты которые пришли в голову.

Почему эти файлы продолжают распространяться

  1. Видео/аудио файл может иметь нуль-блок в середине и спокойно воспроизводится просто перескакивая то место где попался нуль-блок. Тем самым он может казаться целым.
  2. Образ диска также может иметь нуль-блоки в разных местах и это проявит себя только при попытке чтения файлов из этих блоков.Читать полностью »

Разработка под WebAssembly: реальные грабли и примеры - 1

Анонс WebAssembly состоялся в 2015-м — но сейчас, спустя годы, всё ещё немногие могут похвастаться им в продакшне. Тем ценнее материалы о подобном опыте: информация из первых рук о том, каково с этим жить на практике, пока что в дефиците.

На конференции HolyJS доклад об опыте использования WebAssembly получил высокие оценки зрителей, и теперь специально для Хабра подготовлена текстовая версия этого доклада (видеозапись также приложена).
Читать полностью »

Мало смысла в IPFS, если использовать его только как бесплатный хостинг для сайта в сети интернет. Поэтому мы научимся здесь загружать наш сайт через локальный IPFS шлюз пользователя.

Пользователю это даст быстрый доступ к его локальной копии нашего сайта.

Также мы научимся переключать на локальный шлюз IPFS сайты, которые этого ещё не делают.

Напомню: InterPlanetary File System — это новая децентрализованная сеть обмена файлами (HTTP-сервер, Content Delivery Network). О ней я рассказывал в статье "Межпланетная файловая система IPFS".

image

Читать полностью »

Интернет на магнитах 5 — Маяки и сообщения (личные, публичные и обновления) - 1Я вспомнил что не рассказал важную часть для обеспечения возможности общения и обновления контента в P2P сетях.

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

Как это работает

Шаблон маяка создаётся однократно и используется для создания маяков для связи с автором.

Общий алгоритм получения

  1. Публикуется шаблон маяка.
  2. Формируется маяк.
  3. Поиск этого маяка и файла с хешем маяка в имени.
  4. Загрузка найденных файлов или просмотр шары источников маяка.

Общий алгоритм отправки такой

  1. Пишем сообщение.
  2. Шифруем открытым ключом адресата.
  3. Формируем маяк по шаблону адресата.
  4. Получаем хеш от маяка и вставляем в имя файла с сообщением.
  5. Публикуем маяк и файл с сообщением в p2p сетях.

Наше сообщение и маяк свободно могут копировать другие участники сети. Так как оно зашифровано они не смогут его прочитать но помогут его держать онлайн пока его не получит адресат.

Читать полностью »

Даже традиционные, тяжелые отрасли, такие как строительство, трансформируют бизнес-модели через цифровые экосистемы. Шведский строительный гигант NCC через развитие внутреннего стартапа разработал пиринговое приложение для быстрых сделок на вторичные строительные материалы.

image
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js