Pull to refresh

Простота в дизайне. Эпизод 2. DHT и PEX

Website development *
Peer-to-peer сеть BitTorrent очень популярна. И тем обидней, что базируется такая сеть на веб-сайт, трекер, что совершенно не пиртупирно и потенциально опасно. Соответственно, с тех пор, как жив BitTorrent, предпринимались различные попытки децентрализовать и оставшуюся часть — получение списка пиров.

Есть у студентов computer science популярный шаблон мышления: «Децентрализовать? DHT!». DHT, Distributed Hash Tables — умозрительно простая идея: диапазоны ключей хэш-таблицы разбрасываются на пиров, выстраиваются взаимные ссылки и ура. Ура — в жопе дыра. Потому что при столкновении с реальной сетью, в отличие от симулятора или кластера, начинается преогромное количество проблем. Более половины пиров, например, скрыты за NATами и фэйрволами, поэтому на запросы DHT одним пирам они отвечают, а другим — нет, причём труднопредсказуемым образом. Пиры постоянно приходят и уходят, некоторые пиры глючат, есть злоумышленные пиры, кто-то подключён по диал-апу. Чтобы всё это предусмотреть и подкрутить соответствующие затычки, пришлось серьёзно потрудиться. И получившийся код всё равно вызывает нарекания. Коренная проблема в том, что DHT вынужден строить свою отдельную P2P-сеть по своим отдельным правилам. Что плохо влияет на сложность, эффективность, безопаснось.

Другая попытка в том же направлении — PEX (Peer EXchange)*, gossip протокол, в котором уже соединённые пиры просто обмениваются адресами тех, к кому они уже присоединены. У протокола была нелёгкая судьба, потому что изначально Брам Коэн (автор BitTorrent) был уверен, что PEX будет вести к распадению роя. Он сделал по-быстрому какой-то симулятор и увидел полный распад. Некоторое время назад мне показалось, что я понимаю, почему и него рои распадались. Я тоже сделал симулятор, но при разумных параметрах распадения роя добиться не удалось. Видимо, была у него какая-то ошибка.

А PEX работает отлично. Его изначально реализовали в неофициальных клиентах, кажется Azureus и µTorrent (второй ещё не был куплен BitTorrent Inc). Постепенно реализация µTorrent, под названием ut_pex, стала общепринятой. Протокол очень эффективен: я с моего лаптопа своим специальным BitTorrent-пауком за пару-тройку минут переписывал всех пиров в 100-тысячном рое. Логика работы простая, экспоненциальная. Получив от трекера двадцать пиров и успешно присоединившись к двум, мы тут же по ut_pex получаем ещё двести. Ну и так далее. Сам протокол чрезвычайно прост и состоит из одного (!) сообщения. Ещё один популярный шаблон мышления: все думают, что сообщения должно быть два: запрос и ответ. Нет, запроса нет. Просто сообщения так малы, что экономить нет смысла. А с запросами куча мороки. Поэтому если пир видит, что вы понимаете ut_pex, он просто периодически шлёт вам IP-адреса. Реализация ut_pex в libtorrent-rasterbar занимает в 7 раз меньше места, чем довольно компактная реализация DHT там же**.

* А то, что сейчас написано про PEX в Википедии — это original research или попросту лажа.

** Внимательный читатель, возможно, заметит подтасовку — ut_pex не обеспечивает полной децентрализации трекинга, ведь ему нужны стартовые пиры. Поделюсь секретом. DHT этого тоже не обеспечивает. Во-первых, пользователи всё равно идут на сайт, потому что иначе их собрать сложно. Во-вторых, из того что я знаю, DHT на практике бутстрапится с корневых серверов (только это большой секрет! :) )

The cheapest, fastest, and most reliable components of a computer system are those that aren't there. — G. Bell
Total votes 59: ↑51 and ↓8 +43
Views 4.9K
Comments 30

Из чего состоит мировой торрент-трафик?

Decentralized networks


Попытка оценки. Только факты.

Студент Принстона, Sauhard Sahi, провел небольшое исследование, с целью оценить, из какого рода данных состоит мировой торрент-трафик. Для этого он подключился к сети Mainline DHT, основному DHT, используемом Bitorrent, uTorrent, Transmission и др. (Azureus/Vuze использует по умолчанию иную DHT-систему, но существует плагин, позволяющий ему использовать и Mainline DHT), и получил данные и фрагменты из 1021 случайно выбранного торрента, находящегося в раздаче.
Читать дальше →
Total votes 92: ↑86 and ↓6 +80
Views 4.3K
Comments 119

BitTorrent и DHT: взаимная совместимость клиентов

Decentralized networks
При чтении комментариев ко блогозаписи «Объединение браузеров в непотопляемый трекер» меня более всего поразило известие о том, что торрентовая распределённая таблица хэшей (так называемая DHT) является не общей для всех торрентовых клиентов распределённой базою знаний о файлах (как, например, Kad для eMule), а отдельной для некоторых типов клиентов, то есть разработчики битторрентовых клиентов умудрились устроить взаимно несовместимые DHT.

Ещё в мае я пошёл обсудить это в Фидонете (в моей эхоконференции Ru.Internet), и получил следующий ответ от Константина Кузова (2:5019/40.1):

— Пора бы уже привыкнуть, что на хабре вещают такое же кол-во бреда как и где-либо ещё. DHT у всех торрент-клиентов совместим, на него есть спека.

— Единственный клиент, который «несовместим» с ним — это azureus (vuze), в который прикрутили DHT, когда той спеки ещё в проекте не было, поэтому у azureus своя реализация DHT и соответственно своя DHT сеть, но с помощью плагина mainline dht он может использовать одновременно со своей и официальную DHT.

— ЗЫ. Ну и так, для галочки, DHT — говно, это шаг назад, обратно к тем тормозным p2p-сетям, для замены которых и разрабатывали bittorrent. Лишь куча лишнего трафика и практически нулевая польза. Лучше бы все с таким же упоением во все клиенты двигали поддержку чего-нибудь такого.

— Даже жаль, что подобные фичи в основном есть в поделках аля Blizzard Downloader.

(Конец цитаты.)

Но сомнения не оставляют меня: я догадываюсь, что пользователи не любят отказываться от настроек по умолчанию, так что не станут устанавливать в Vuze плагин Mainline DHT. А ведь Vuze занимает значительную долю битторрентового файлообмена.

Я продолжаю сидеть на eMule.
Total votes 48: ↑18 and ↓30 -12
Views 1.9K
Comments 13

Kademlia DHT: Основы

Decentralized networks
Здравствуйте!
В этой статье, как и, надеюсь, в последующих, я хочу рассказать об одной из современных структурированных пиринговых сетей. Данный материал включает в себя мою переработку документаций, описаний и статей, найденных по теме. В качестве введения представлена общая краткая теория p2p-сетей, DHT, а уж затем следует основная часть, которой посвящена заметка.

Читать дальше...
Total votes 54: ↑52 and ↓2 +50
Views 33K
Comments 35

Модные штучки

Popular science
Сегодня я настроен поговорить о технологиях, которые были весьма модны и породили вал публикаций, но по прошествии лет так и не привели к каким-либо значимым практическим результатам, либо их ниша оказалась настолько узка, что её сопоставление с первоначальными ожиданиями создаёт сатирический эффект. Как правило, такие технологии создают у новичков при первом ознакомлении впечатление «магии», чего-то, решающего все проблемы невероятно хитрым образом, но трезвая профессиональная оценка в биг-О, реальных числах и обстоятельствах заканчивается диагнозом: «пустышка».
Как показывает опыт, у таких модных штучек более или менее ярко присутствуют четыре качества: «магичность» (восхищает сложностью), неестественность (идёт против шерсти, естественного порядка вещей), сложность (это всегда плохо) и неприменимость (лишь в конкретных обстоятельствах, но какие обстоятельства ни возьми — оно неприменимо).
Итак, приступим к вскрытию.

Читать дальше →
Total votes 11: ↑7 and ↓4 +3
Views 355
Comments 8

BitTorrent DHT можно использовать для DDoS

Decentralized networks IPv6 *
На 27-м конгрессе CCC (Chaos Communication Congress) обсуждалась тема DDoS-атак через DHT (презентация “Lying To The Neighbours” в PDF).

Использовать BitTorrent для DDoS умели и раньше: нужно было прописать IP-адрес жертвы в качестве трекера — и он получал множество запросов. Но проблема в том, что для подобного способа нужен популярный торрент.

Новая методика экплойта DHT даёт возможность использовать уже существующую сеть пиров. Если вкратце, то алгоритм такой: надо стать популярным пиром в сети, чтобы получать много запросов find_node от соседних пиров.
Читать дальше →
Total votes 41: ↑34 and ↓7 +27
Views 5.7K
Comments 9

Поиск по торрентам в DHT-сети

Self Promo
Мало найдётся людей среди пользователей и читателей Хабра, которым не доводилось бы пользоваться торрентами. И наверняка многие понимают уязвимость центральных звеньев этой системы — торрент-трекеров (истории с Пиратской бухтой и бывшим torrents.ru, ныне рутрекером, — тому подтверждение).

Однако не все знают, что уже давно существует альтернатива традиционным трекерам — DHT-сеть, позволяющая организовывать раздачи без трекера. До сих пор она не получила большого распространения из-за невозможности поиска внутри сети — нужный файл можно было скачать только при наличии magnet-линка раздачи. Однако недавно появился первый и уникальный пока поисковый сервис по DHT-сети BTDigg.org.

Сервис с весьма лаконичным дизайном заточен под одну функцию — поиск:


Поисковик по хэшам торрентов


Чтобы снизить зависимость от трекеров, в 2007 году разработчиками протокола bittorrent была принята его модификация на основе DHT-структуры, которая позволяла делать раздачи без трекера.

Что такое DHT-сеть? Фактически, это распределённая сеть торрент-клиентов, которая хранит идентификаторы (хеши) всех публичных раздач — т.н. magnet-link, которые представляют собой 160-битное случайное число. DHT-узлы клиентов отвечают за анонсирование своих торрентов и за поиск запрашиваемых. Благодаря тому, что все современные клиенты поддерживают DHT, можно сказать, что в этой сети есть практические все публичные торренты (приватные торренты сеть «не видит» и не позволяет скачивать). Практически — потому что DHT в клиенте может быть отключен. Поиск идёт по мета-информации, которую содержит в себе торрент-файл — то есть, проще говоря, он ищет по названию торрента и по названиям файлов входящих в него. Пользователь открывает magnet-линк в своём торрент-клиенте, тот находит всех раздающих файл и дальше качает как обычно — участия трекера в этой цепочке нет.

Читать дальше →
Total votes 107: ↑104 and ↓3 +101
Views 147K
Comments 73

Lua что новенького в BitTorrent DHT?

Decentralized networks
Какое-то время назад я написал для Shareaza внешний DHT Tracker на Lua (GitHub). Для Shareaza это обычный локальный трекер, а по сути это BitTorrent DHT клиент, который позволяет ей качать торенты по магнет ссылкам без трекера.

Так вот, пока клиент работает, он отлавливает пакеты с неизвестными ему полями и сохраняет для дальнейшего анализа (если опция включена).

Итак, что новенького мы наловили в BitTorrent DHT.
Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Views 2.7K
Comments 10

Yac 2011: Технический отчёт

High performance *Hadoop *
Эх, раз, да ещё раз,
Да ещё yet another раз…


Не так давно завершилась конференция Яндекс YaC 2011 и теперь, когда стали доступны записи выступлений, я хочу представить вам технический отчёт о её посещении. В отчете я сосредоточился на той информации, которую вы можете получить, посмотрев запись того или иного доклада, и решить стоит ли тратить на это время. Для некоторых тем добавил дополнительные ссылки на ключевые ресурсы, а так же, по мотивам общения с авторами, описал устройства двух NoSQL технологий Яндекса: Elliptics Network и хранилища писем в Яндекс почте.

Итак, Yac 2011, как это было.
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views 2K
Comments 3

Распределённый поисковик YaCy версия 1.0

Search engines *


Активисты движения за свободное ПО запустили новый проект: поисковую систему YaCy, которая в перспективе может составить конкуренцию Google, Yahoo/Bing, «Яндекс» и прочим закрытым коммерческим поисковикам. Версия YaCy 1.0 вышла после пяти лет разработки, и теперь присоединиться к сети наконец-то может любой желающий.
Читать дальше →
Total votes 44: ↑43 and ↓1 +42
Views 17K
Comments 31

Failsafe resource allocator over DHT

API *Big Data *
У нас есть некоторый диапазон чисел от 0 до N, надо написать две функции int alloc() и free(int). Первая выбирает один из свободных идентификаторов из диапазона [0, N), а вторая соответственно — «возвращает» его для повторного использования(полагаем, что число N достаточно мало, что бы идентификаторы могли закончится если их не возвращать, но больше чем число выделенных в каждый конкретный момент времени идентификаторов). При этом на «нижнем уровне» у нас есть только DHT. Нету блокировок, и, кроме того, от алгоритмов требуется отказоустойчивость — если какой-то из узлов кластера «сложится» во время выполнения алгоритма поведение системы должно быть предсказуемо. Если задача интересна, а также интересно узнать почему отказоустойчивый сервис с такой сигнатурой невозможно корректно использовать, и как надо исправить сигнатуру что бы это стало возможно — добро пожаловать под кат.

Читать дальше →
Total votes 11: ↑10 and ↓1 +9
Views 2.3K
Comments 0

Как работает поиск в Kad Network

Decentralized networks
Sandbox
Довольно часто встречаются жалобы на то, что в Mainline DHT битторрента нет поиска по ключевым словам. Обычно просьбы о добавлении такого поиска на форумах BitTorrent Inc. игнорируются или получают традиционный ответ о том, что DHT не позволяет искать по ключевым словам, а только по индивидуальным ключам. Это в принципе верно, но существует такой выход из этой прискорбной ситуации как создание инвертированного индекса ключевых слов у каждой ноды.

Собственно так и работает поиск в Kad Network, реализации распределённой хэш-таблицы, основанной на довольно широко используемом протоколе Kademlia. Kad Network используется такими программами как eMule, iMule, aMule и MLDonkey для поиска хэшей файлов по ключевым словам и источников файлов по их хэшам.
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Views 9.7K
Comments 2

Как устроены облака Яндекса: Elliptics

Яндекс corporate blog NoSQL *
За последние несколько лет в мире IT появилась модная тенденция – использование всего «облачного» для разработки новых продуктов. Публичных облачных провайдеров не так много, самый популярных среди них – Amazon. Однако многие компании не готовы доверять приватные данные кому-либо, при этом хотят хранить их надежно, и поэтому поднимают частные небольшие облачка.

Любое облако состоит из двух основных компонентов: Единой Точки Входа (ЕТВ) и Облачной Магии (ОМ). Рассмотрим облачное хранилище Amazon S3: в роли ЕТВ используется довольно удобный REST API, а Облачную Магию обеспечивают эльфы, работающие на долларах. Компании, желающие разместить в S3 небольшие видеофайлы или базу данных, предварительно считают на калькуляторе сумму, которую они будут платить в месяц при планируемой нагрузке.

Эта статья про другое облачное хранилище, в котором эльфы питаются Духом Свободы, электричеством и еще им нужно немножечко «кокаина».

Называется это хранилище Elliptics.
Есть желающие стать Повелителями Облаков? Прошу под кат.
Total votes 94: ↑89 and ↓5 +84
Views 46K
Comments 61

Технические подробности о защищённом P2P-чате BitTorrent

Instant Messaging *Cryptography *


Компания BitTorrent сообщила технические подробности реализации криптографически защищённого P2P-сервиса BitTorrent Chat, который сейчас находится в закрытом альфа-тестировании. Его главным преимуществом является отсутствие центрального сервера, так что сообщения передаются напрямую с устройства отправителя на устройство абонента без посредников.
Читать дальше →
Total votes 46: ↑42 and ↓4 +38
Views 19K
Comments 47

Twister: Децентрализованный, P2P аналог Twitter'a

Cryptography *
Recovery mode


Сегодня я хочу рассказать вам о таком интересном проекте как Twister.

Twister — это сервис микроблогинга (аналогичный твиттеру), но его отличает несколько очень интересных технологий которые были использованы одновременно.

А именно: Bitcoin Block Chain, Bittorrent DHT, Bittorrent Swarm.

Другими словами — это полностью анонимный, децентрализованный сервис микроблогинга который вобрал в себя всё лучшее от Bittorrent и Bitcoin.
Читать дальше →
Total votes 95: ↑82 and ↓13 +69
Views 39K
Comments 84

Облачная платформа Яндекса: подробнее про Elliptics

Яндекс corporate blog Open source *
Некоторое время назад я начал рассказывать на Хабре про Elliptics — наше отказоустойчивое распределенное key-value хранилище (к слову, свободное и распространяемое под GPL-лицензией). Тогда я в общем описал устройство Elliptics: про архитектуру и основные принципы работы, за счет чего достигается надежность системы, как систему можно расширять, и как она ведет себя при сбоях.

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

image

Сегодня — про сетевую и программную архитектуру Elliptics и некоторые из его особенностей. Также я подробно расскажу про кэш и нашу низкоуровневую библиотеку для локального хранения данных — Eblob.
Читать дальше →
Total votes 87: ↑80 and ↓7 +73
Views 27K
Comments 52

Погодная станция на Ethernet (HTTP+Modbus) с питанием по POE

DIY
Доброго времени суток хабр-сообщество.
С момента моего последнего поста про умный дом прошло много времени. Я решил его делать начиная с погодной станции.


Рисунок 1 — Фотография макетного образца

Несмотря на обилие статей про погодные станции на arduino (http://habrahabr.ru/post/165747/, habrahabr.ru/post/171525, habrahabr.ru/post/213405 ) Я все-таки решил опубликовать своё решение.

Функционал


Функции которые она выполняет:
  • Измерение температуры
  • Измерение влажности
  • Измерение давления
  • Измерение освещенности
  • Индикация измеренных параметров
  • Выдача измеренных параметров по интерфейсу HTTP в виде XML документа
  • Выдача по протоколу HTTP XSLT процессора для стилизации XML при отображении браузером
  • Выдача информации по Modbus (его предполагаю использовать в качестве протокола управления умным домом)
  • Питание через Passive POE

Читать дальше →
Total votes 42: ↑38 and ↓4 +34
Views 35K
Comments 35

Сделаем битторрент лучше

Decentralized networks Network technologies *
Последнее время среди пользователей файлообменных сетей все чаще звучат призывы к переходу в подпространство: анонимные сети типа i2p tor и т.п.

Несомненно, у этой идеи есть масса положительных сторон, однако, по сути это означает сломать устоявшиеся системы обмена трафиком, некоторые из которых формировались более 10 лет и начать строить заново, пусть с учетом старых ошибок, но и постаравшись не наделать новых. На даный момент сеть битторрент – это десятки, а наверное даже сотни миллионов устоявшихся связей, «разорвав» которые крайне сложно будет восстановить всё в полном обьеме.

Давайте все же посмотрим на нашего старичка, и поразмыслим, настолько ли все плохо, и можно ли исправить те недостатки, которые у него есть.
Читать дальше →
Total votes 66: ↑58 and ↓8 +50
Views 39K
Comments 74

Программируем BitTorrent-клиент. Чистый Delphi

Open source *Delphi *
Recovery mode
Sandbox
Прошло 8 лет после написания статьи Игорем Антоновым (Spider_NET) про создание торрент-клиента на C#, но в сети так и не появилось самого простого примера, как это можно сделать на Delphi.

Чтобы развеять сомнения по поводу неэффективности языка Delphi в таком «непростом» деле, как написание полноценного битторрент-клиента, я и решил написать эту статью.

Сразу скажу, что наш торрент-клиент на Delphi будет с открытым исходным кодом и будет поддерживать практически все современные битторрент-технологии, в том числе DHT, magnet-ссылки, последовательная закачка и т.д.
Читать дальше →
Total votes 56: ↑32 and ↓24 +8
Views 30K
Comments 57

Как не стать ботом в Bittorrent DHT и других P2P сетях

Decentralized networks
image

Сеть Bittorrent DHT позволяет найти источники торрента по хешу из магнет-ссылки. Сеть состоит из узлов которые могут быть как Bittorent клиентами так и вредоносными программами которые препятсвуют нормальной работе сети. Они мешают клиенту получить источники торрента, перенаправляют запросы на атакуемые узлы, заполняют список узлов бесполезными адресами.

Пока я работал над счетчиком пиров и сидов(DHT Scrape) в этой сети я наткнулся на такие виды атаки.
Читать дальше →
Total votes 30: ↑23 and ↓7 +16
Views 29K
Comments 13
1