Открыть изображение »
Дивный децентрализованный мир
История децентрализации интернета — от фидо до биткоина
28 октября 2014 :: 16 комментариев :: 13585 просмотров :: 1782 слова

upd: У поста вышло большое продолжение про блокчейн

В последние несколько недель я совершил серьезное погружение в мир децентрализованных сетей. У того были вполне практические причины, но скорее мне самому было интересно наконец разобраться в их устройстве и истории. Обожая сложные и неочевидные штуки, я решил немного прокачаться в этой области, а для начала историческое введение.

Сначала был фидонет. Созданный в 1984-м году геем-анархистом для обмена информацией между BBS'ками (досками объявлений), он стал первым иметь ряд черт, присущих децентрализованным сетям. Информация хранилась на компьютерах пользователей и серверах, которые в ночные часы одновременно созванивались по телефону и обменивались ей. Идея была привлекательна и интересна, но так и не захватила мир. В 1990-м придумывают Интернет.

Спустя более чем 10 лет, в 1999-м году, когда интернет уже вошел всеми своими TCP/IP в процветающие дома США, появляется Napster — первая децентрализованная файлообменная сеть. Для работы ему требовался сервер, на котором хранился индекс (список) файлов, доступных для скачивания. Индекс хранил IP-адреса пользователей, владеющих этими файлами, потому непосредственно скачивание производилось уже без участия сервера.

Схема работы Napster. Напоминает современные торренты

Именно Напстер, специализировавшийся только на mp3-файлах, запустил бум децентрализованных файлообменников и привлек такое большое внимание к ним. Так в 2000-м году запускаются сети Gnutella и eDonkey. Создатели Gnutella — Nullsoft (да, они же создатели плеера WinAmp), вдохновляются успехом Napster, улучшают его и предлагают полный отказ от центрального сервера со списком файлов. Вместо этого, каждый клиент Gnutella знает ip'шники нескольких «соседних», которым отправляет поисковый запрос (имя файла). Если те не знают ответа, они отправляют его своим соседям, те своим и так далее пока файл не будет найден. Если файл не найден за 7 таких уровней, «хопов», запрос отбрасывается. Естественно, у такой организации были и существенные минусы — запрос мог выполняться около 2-х минут, а так же ранние реализации такого стихийного распространения вызывали перегруз и отказ в обслуживании у всей сети. Неловко, да. Потом алгоритм усовершенствовали.

Сеть Gnutella, как и Napster, начинают бешено набирать популярность. Настолько бешено, что AOL, владеющий тогда Nullsoft'ом открещивается от нее, называя «unauthorized freelance project» и быстренько увольняет её создателей. Типичное поведение крупных компаний. Фанаты реверсят протокол, выпускают открытую реализацию, которая доживает и до наших дней. Однако именно алгоритм распространения запросов, несмотря на свою красоту, мешает сети вырасти во что-то большое и ведет к уменьшению её популярности.

Схема работы Gnutella

eDonkey, запущенный в том же 2000-м году, тоже зависит от сервера. Точнее от серверов. Они так же выполняют роль хранителей индекса, однако теперь их множество и ни один из них не хранит весь список файлов. Это уже можно назвать настоящей децентрализацией, каждый сервер знает файлы только тех клиентов, которые подключены к нему. Отказ одного из серверов не повлияет на систему, просто клиентам придется ввести в настройках другой.

Клиент запрашивает файл только у своего сервера, однако тот имеет возможность опросить так же другие сервера на предмет наличия этого файла у их клиентов. Для поддержания такого общения, сервера тоже раз в N'ное время общаются между собой hello-сообщениями, в которых не только убеждаются в активности соседей, но и обмениваются списками новых известных серверов. Скачивание файлов, как и положено, происходит напрямую между клиентами, минуя сервер.

На волне общего ажиотажа появляется проект Freenet, призванный создать свой собственный распределенный децентрализованный интернет поверх существующего, запускается в 2000-м году. Однако как и любое другое ПО с "free" в названии особо ничего не добивается даже по сей день.

4 апреля 2001 года (через несколько дней мне исполнялось 10 лет ^_^) Брэм Коэн пишет на языке Python клиент и протокол с одним названием BitTorrent. Протокол резко набирает популярность по причине своей простоты, экономности, а главное — открытости. Napster был полностью проприетарен, Gnutella отреверсена фанатами, eDonkey имел закрытую серверную часть. BitTorrent же был полностью описан, понятен и метил на звание первого нормального стандарта.

Будучи похожим на eDonkey, он убирал взаимодействие между серверами (получившими название «трекеры»), перекладывая эту задачу на создателей раздач. Так же в отличии от eDonkey, где релизы оформлялись в виде ссылок специально формата (как magnet-ссылки, появившиеся позже), BitTorrent вводит понятие .torrent-файла. В нем описывается список входящих в раздачу файлов, размеры «кусков» для скачивания, а так же для каждого куска SHA-1 хеш (контрольная сумма). Эрудированному читателю становится очевидно, что чем на меньше куски релизер поделит раздачу - тем больше размер .torrent-файла, ведь приходится хранить больше хешей, однако чем размер куска больше — тем больше ошибок скачивания, а соответственно и перезакачек.

В конце .torrent-файла так же описываются трекеры, к которым клиент будет обращаться. Таких трекеров может быть множество. Тем самым решается проблема eDonkey с коммуникацией между трекерами. Она просто не нужна. Клиент просто подряд обращается ко всем описанным трекерам, спрашивая, известен ли тому кусок с определенным SHA-1. Этим хаком пользуются создатели ретрекеров (специальных трекеров в локальной сети, которые работают как кеширующие прокси, что не только ускоряет раздачи, но и экономит трафик провайдерам). Стало уже стандартом добавлять адрес "retracker.local:80" в список трекеров раздачи. Если такой адрес недоступен, он будет просто отброшен клиентом.

Общение с сервером происходит по обычному протоколу HTTP (иногда HTTPS), обычными GET-запросами. А вот формат кодирования .torrent-файла, ответа от трекера, а так же общения между клиентами, хоть и является текстовым, но весьма необычен — bencode (поцаны жили в эпоху без json, крутились как могли). Однако погружение в дебри протокола BitTorrent я хочу оставить на следующую статью, если эта вызовет хоть какой-то отклик.

Нам же интересно то, что у протокола BitTorrent стало появляться множество расширений. Одно из самых интересных для нас — поддержка DHT (механизма распределенных хеш таблиц). Механизм DHT позволяет клиентам, участвующим в раздаче, обмениваться между собой не только самими файлами, а выполнять роль мини-трекеров. Грубо говоря клиент может рассказать только что подключившемуся к нему другу, что вон там за углом он видел еще толпу поцанов с таким же файлом. Это позволяет сети BitTorrent работать без трекера и выводит ее на новый уровень отказоустойчивости.

Летом 2001 года, заваленный судебными тяжбами, умирает Napster. Точнее его продают и покупают копирасты, издеваются над трупом, используя бренд для собственных целей. BitTorrent плавно начинает занимать место лидера и на поприще файлообмена его еще долго ничего не затмит.

2002-2003 годы — рождение Tor (The Onion Router) и I2P (Invisible Internet Project), которые знаменуют собой появление Темного Интернета. Эти ребятки, хоть и немного по-разному, пытаются создать оверлейную децентрализованную сеть поверх существующего Интернета, отличающуюся паталогической параноидальностью. В России набирают популярность в 2012-2013 годах после Честных Выборов и всего с ними связанного, но бурного роста не показывают на фоне наличия всяких открытых и более быстрых классических VPN и проксей.

В октябре 2008 года в интернете появляется непримечательная pdf'шка под названием «Bitcoin: A Peer-to-Peer Electronic Cash System» за авторством некоего Satoshi Nakamoto. Вслед за ней, в 2009-м, выходит приложение Bitcoin и исходный код протокола. Но замечают его лишь в 2011-м, когда его начинают форсить зарубежные СМИ. Это привлекает сначала майнеров, а затем и спекулянтов на появляющиеся биржи.

Однако нам биткоин интересен не его платежеспособностью, а внутренним устройством. Модель blockchain, на которой основана вся валюта — это первое интересное применение распределенной базы транзакций (событий). В сети bitcoin отсутствует понятие «баланса кошелька». Баланс пользователя сладывается из его входящих и исходящих транзакций, сами «деньги» не хранятся нигде. Blockchain хранит список событий «А заплатил В», «В заплатил С», а не состояний «баланс А = 20». Такой подход редок, но его используют и в других областях. Где-то читал, что инстаграм так организует часть своей БД.

Майнинг же имеет практическую пользу для всей сети: транзакции не сразу добавляются в blockchain, а объединяются в блоки, которые присоединяются к нему. У блока должна быть определенный хеш чтобы присоединить его к цепочке, майнеры и занимаются тем, что пытаются угадать, то есть засрать блок рандомными битами так, чтобы получить такой хеш. Сложность хеша подбирается каждые 2016 блоков так, чтобы на его угадывание у всех майнеров в мире уходило примерно 10 минут. Угадываемый хеш имеет определенные свойства, которые гарантируют, что этот блок идет строго за тем, к которому был присоединен, а любое изменение в блоках вызовет каскадный отказ всех блоков за ними (потому что их хеши тоже посчитаны так, чтобы указывать на хеш предыдущего).

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

Схематическое описание генерации блока майнером

В 2010-2011 появляются децентрализованные социальные сети Diaspora и Twister. Но особого успеха не имеют, так как требуют установки себе на компьютер веб-сервера, а значит уже ограничены в росте тем 0,01% населения планеты, которое знает слово «веб-сервер». Быстро дохнут, так и не обретя своей славы.

2011 год — OpenGarden. Проприетарный проект, ставящий перед собой целью создать ячеистую сеть из устройств, находящихся рядом. Благодаря серьезному проникновению мобильных устройств впервые идеи mesh networking'а получают небольшой шанс на воплощение в жизнь. Однако идея делиться своим интернетом со всеми вокруг не находит должного отклика среди простых пользователей, в отличии от выходящего в марте 2014 года месседжера Firechat.

Основанный на той же самой технологии коммуникации различных устройств (iOS, Android, ноутбуков) по Wi-Fi и Bluetooth на небольшом (до 60 метров) расстоянии, FireChat получает мировую огласку после попытки революции в Гонконге в сентябре 2014 года, во время которой власти отключают протестующим интернет и те организовывают одну большую mesh network из собственных смартфонов.

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

Выходящим за рамки привычных интернетов, провайдеров, но и не являющимися игрушками для гиков, как Tor и I2P, а технологиями, доступными даже последней домохозяйке. Мой отец не знает где на клавиатуре компьютера Esc, но без проблем установит приложение на подаренный мной iPhone. Именно мобильные устройства снижают порог вхождения в новый цифровой мир.

Пока все обсуждали новые розовые обои в iOS 7, Apple выпустила в ней то, что пока почему-то не заметил никто — Multipeer Connectivity Framework. Apple уже начинает догадываться к чему всё идет?

Добрые люди уже отсниффили протокол FireChat'а и работает всё достаточно просто — JSON-сообщение доставляется просто всем, кто рядом. Если в такой понадобится маршрутизация — классические алгоритмы роутинга в mesh-сетях OLSR и B.A.T.M.A.N. разработаны давно и ждут своего часа.

Технологии уже все есть. Осталось самое сложное — придумать как эти технологии обернуть в полезный для пользователя опыт. Алгоритмы статистического анализа естественного языка были разработаны пол века назад, но только Гуглы и Яндексы смогли использовать их на пользу простым людям. Всё устройство и проблемы распределенных децентрализованных сетей были исследованы уже давно, а вот действительно полезной вещи кроме фильмов на торрентах на них до сих пор не придумали. Если дать людям технологию — она так и останется уделом 0,01% упоротых гиков типа нас. Если дать новый удобный способ решения проблем на основе этой технологии — это способно изменить мир.

Еще? Тогда вот
Комментарии
2
Cornholio ⸬ 28 октября 2014, 15:29 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Прочитал. Збс. Жду следующие посты!
0
The_Mindless ⸬ 28 октября 2014, 15:37 ⸬ Luk'yanovka, RU ⸬ Apple лог
#
По генерации нодов в DHT писал свою бакалаврскую :) Не менее интересно было бы прочитать следующий пост
1
vas3k ⸬ 28 октября 2014, 15:46 ⸬ LT ⸬ Apple лог
#
The_Mindless, ебани коммент по поводу того как там все устроено. Коротко своими словами :
0
Manchenkoos ⸬ 28 октября 2014, 16:08 ⸬ RU ⸬ Apple лог
#
О я тоже жду продолжение. ;) Я считаю что будущие за p2p технологиями!
0
ReDetection ⸬ 28 октября 2014, 16:08 ⸬ Novosibirsk, RU ⸬ Apple лог
#
Кхм, забыл упомянуть tox. Тоже считай поверх DHT, но чат, файлы, звонки, и т.п.

The_Mindless, +1, ждём
0
s_mordvinov ⸬ 28 октября 2014, 16:15 ⸬ Moscow, RU ⸬ Windows лог
#
Defcon!
0
vas3k ⸬ 28 октября 2014, 16:26 ⸬ LT ⸬ Apple лог
#
s_mordvinov, шаришь!
ReDetection, слышал, но не думал, что он особо популярен.
0
ReDetection ⸬ 28 октября 2014, 16:31 ⸬ Novosibirsk, RU ⸬ Apple лог
#
ну в узких кругах, примерно как и tor. у них на гитхабе дохуищща коммитов у ядра, дохуищща уже клиентов сделано, даже несколько под iOS, и один из них уже совсем торт. :)
0
ak3n ⸬ 28 октября 2014, 16:42 ⸬ Yekaterinburg, RU ⸬ Linux лог
#
Спасибо, клево. Было бы интересно почитать про протокол BitTorrent (или пнуть в сторону нормального описания, а то один раз пробовал реализовать и на чем-то сдох).
0
vas3k ⸬ 29 октября 2014, 07:56 ⸬ LT ⸬ Apple лог
#
ak3n, тогда будет, как и планировал, следующим постом. Попробую :)
0
adVISeR ⸬ 31 октября 2014, 13:16 ⸬ Prague, CZ ⸬ Apple лог
#
Почитай ещё про мультиагентные системы, это конечно несколько из другой оперы, но довольно интересно.
0
Hanggard ⸬ 31 октября 2014, 14:53 ⸬ Novosibirsk, RU ⸬ Windows лог
#
Блин, интересно стало аж. Вот так почитаешь про новые технологии и загораешься, т.к. понимаешь, что идеи реально бродят рядом с тобой…
0
noname ⸬ 01 ноября 2014, 07:18 ⸬ DE ⸬ Windows лог
#
Этот текст очень приятно читать.
Спасибо за него.
0
JasonX ⸬ 01 ноября 2014, 10:35 ⸬ Krasnodar, RU ⸬ Windows лог
#
ботнет забыли!

и вот вам залипалочка - http://map.ipviking.com/
0
gOuTM ⸬ 05 ноября 2014, 09:29 ⸬ London, GB ⸬ Windows лог
#
аффтар, ждем подробностей про bitcoin!
0
Xerby85 ⸬ 18 ноября 2017, 10:29 ⸬ Moscow, RU ⸬ Windows лог
#
Жаль, конечно, что до сих пор есть люди, путающие интернет и www. Интернет был придуман в восьмидесятых.
(не заполняйте это поле)

me@vas3k.ru :: telegram :: twitter :: instagram :: facebook :: github