Редактирование: Peer-to-peer

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 13: Строка 13:
 
К частично децентрализованным сетям относятся например eDonkey, BitTorrent, Direct Connect, The Onion Router.
 
К частично децентрализованным сетям относятся например eDonkey, BitTorrent, Direct Connect, The Onion Router.
  
===BitTorrent протокол===
+
==BitTorrent протокол==
  
 
[[Файл:Tracker.png|400px|thumb|right|Схема работы протокола BitTorrent.]]
 
[[Файл:Tracker.png|400px|thumb|right|Схема работы протокола BitTorrent.]]
Строка 65: Строка 65:
 
достаточно редки).
 
достаточно редки).
  
===Как написать свой BitTorrent===
+
==Friend-to-Friend==
Трекер представляет из себя HTTP/HTTPS сервис, который отвечает на HTTP GET запросы. Запрос включает информацию о файле и дополнительную статистическую информацию о торренте. Ответ на запрос содержит список пиров, участвующих в данном торренте.
+
Friend-to-Friend -- это разновидность peer-to-peer сетей, в которой пользователи обмениваются данными только с теми peer-ми, которым они доверяют. Для аутентификации используются цифровые подписи и пароли.
 +
В отличие от P2P пользователи не могут посмотреть список участников F2F сети, кроме своих друзей. Из достоинств таких сетей можно отметить, что F2F являются сильно более защищёнными от хакерских атак, а также в них сильно меньше личеров. Использование F2F-сетей позволяет избегать атак типа mitm (man in the middle), то есть пользователи могут без опасений обмениваться секретными данными (например, крипто-ключами) со своими друзьями.
  
Задача клиента --- получить от сервера информацию о пирах через HTTP соединение и далее, используя TCP соединение, связываться с пирами для получения/передачи данных.
+
==DHT==
Рассмотрим пример последовательности действий, следуя которой, можно создать примитивный BitTorrent клиент.
 
 
 
Для начала, можете найти в интернете любой .torrent файл. В таком файле содержится закодированная информация о торренте. В данном случае используется Bencoding кодирование про которое можно подробнее прочитать [https://wiki.theory.org/BitTorrentSpecification#Bencoding здесь], для этого, например, есть библиотека для питона bencode 3rd party library(pip install bencode).
 
 
 
Потребуется расшифровать и распарсить файл. Из всего, как минимум, понадобится часть announce url и info, в последней содержатся такие поля как piece length(длина кусочка), pieces(список хешей кусочков), paths и lengths для отдельных файлов (структура для торрента с отдельным файлом и несколькими может несколько различаться).
 
 
 
Далее, нужно сделать GET запрос серверу, используя announce url в формате ‘announce-url?param=value&param=value&…’. Подробнее узнать про кодирование url можно [https://en.wikipedia.org/wiki/Percent-encoding здесь], а также можно воспользоваться питоновской библиотекой (pip install requests). О параметрах запроса можно узнать [https://wiki.theory.org/BitTorrentSpecification#Tracker_Request_Parameters тут].
 
Примеры параметров: 'info_hash' - хеш info части раскодированого torrent файла посчитанный SHA1 алгоритмом, ‘peer_id’ - строка из 20 байтов, подробнее про формат [https://wiki.theory.org/BitTorrentSpecification#peer_id тут].
 
 
 
В ответ от сервера клиент получит закодированый список пиров. Используйте Benconde раскодировщик, чтобы в части peers найти список адресов в формате ip_address:port.
 
 
 
Далее, можно пытаться подключаться к любому из пиров по TCP, для начала советуется поддерживать хотя бы одно соединение.
 
 
 
Первое сообщение должно иметь вид
 
handshake: <pstrlen><pstr><reserved><info_hash><peer_id>
 
info_hash и peer_id уже встречались, а для текущей версии протокола 'pstrlen'=19, 'pstr'=BitTorrent protoco, 'Reserved' восьмибитовая строка.
 
От пира следует ожидать сообщение в аналогичном формате, и после этого проверить, соответствуют ли поля info_hash и peer_id ожидаемому, в случае несоответствия лучше сразу закрыть соединение.
 
 
 
Дальше существует 11 типов возможных сообщений: keep-alive, choke, unchoke, interested, not-interested, have, bitfield, request, piece, cancel, and port. Описание всех видов [https://wiki.theory.org/BitTorrentSpecification#Messages тут].
 
 
 
Сообщение состоит из 4 байтов задающих длину сообщения, 1 байт задает id сообщения(у сообщения вида Keep-alive этот бит пропускается), и хвост с дополнительной информацией.
 
 
 
* Сообщения типа Have говорят о наличии определенного кусочка у пира, номер кусочка задается 4 байтовым хвостом.
 
* Сообщение типа Bitfield может посылаться сразу после handshake и задавать множество имеющихся кусочков в виде битовой маски, размер которой(в битах) задается в первых 4 байтах сообщения.  Данный вид сообщения может говорить не о всех кусочках, после этого пир может продолжать дополнять информацию сообщениями типа Have.
 
* Сообщения Interested/Not Interested говорят о том, что скачивающий пир хочет/не хочет получить определенный кусочек.
 
* Сообщения Choke/Unchoke говорят о том, что раздающий пир не готов/готов отдать кусочек.
 
* Сообщение Request стоить посылать после того, как получили разрешение у пира(Unchoke) на конкретный кусочек, хвост у этого типа сообщения состоит за 4 байтов для номера кусочка, 4 байта для смещения внутри кусочка в байтах, и 4 байта для размера блоков, которыми вы хотите получать данные (обычно это 2^14).
 
* Сообщение Piece является ответом на Request и содержит данные одного блока. Хвост состоит из 4 байтов на номер кусочка, 4 байтов на смещение (как в предыдущем типе) и последовательностью байтов описывающей данные блока.
 
Этого уже вполне хватает, чтобы обмениваться файлами с другими пирами.
 
 
 
==Децентрализованные сети==
 
===DHT===
 
 
Рассмотрим пример децентрализованной структурированной P2P сети.
 
Рассмотрим пример децентрализованной структурированной P2P сети.
  
Строка 108: Строка 77:
 
системы децентрализованность: отсутствие каких-либо специально выделенных серверов,
 
системы децентрализованность: отсутствие каких-либо специально выделенных серверов,
 
отвечающих за поддержание структуры сети.
 
отвечающих за поддержание структуры сети.
 
Распределенные хеш-таблицы могут найти множество применений. Например, у вас есть
 
какие-то данные, к которым вам нужен доступ, но их слишком много для хранения на
 
одном сервере -- вы используете DHT. Может быть, вы хотите свою торрент-систему,
 
где каждый участник, пока он будет находиться в сети, будет отвечать за какие-то
 
файлы -- в этом случае вам тоже подойдет DHT.
 
  
 
Рассмотрим вариант, предложенный Хордом (Chord). Скажем, что ключами нашей  
 
Рассмотрим вариант, предложенный Хордом (Chord). Скажем, что ключами нашей  
Строка 149: Строка 112:
 
Таким образом, мы рассмотрели пример децентрализованной структурированной P2P сети.
 
Таким образом, мы рассмотрели пример децентрализованной структурированной P2P сети.
  
===Blockchain===
 
  
'''Blockchain''' -- распределённая база данных, представляющая из себя цепочку блоков в каждом из которых есть список транзакций.
+
==Bitcoin==
  
====Bitcoin====
 
'''Bitcoin''' - это децентрализованная цифровая валюта работающая в сети интернет. Bitcoin основан на Blockchain технологии.
 
  
Идея создания распределённой криптовалюты сопряжена с трудностями основная из них это проблема Двойного расходования (англ. Double-spending). В отличие от обычных бумажных денег, которые нельзя просто так взять и скопировать. Можно легко сделать копию электронного файла, который содержит информацию о кошельке, и попытаться потратить деньги в один момент в разных частях света. Так как система распределённая нет такого сервера у которого можно было бы запросить информацию о текущем счёте. С одной стороны это сильно усложняет принцип работы, но с другой даёт огромные преимущества связанные с распределённостью.
+
Ещё одним из примеров использования peer-to-peer соединения является криптовалюта bitcoin.
 +
'''Bitcoin''' -- это децентрализованная цифровая валюта работающая только в сети интернет, основанная на технологии blockchain.
 +
'''Blockchain''' -- распределённая база данных представляющая из себя цепочку блоков в каждом из которых есть список транзакций над bitcoin-ми.
 +
 
 +
Основная информация которую содержит каждый блок
  
[[Файл:Хэш_транзакций.png‎|thumb|right|300px|Схема получения хеша транзакций]]
 
Как уже говорилось информация о транзакциях разбита на блоки и хранится следующим образом.
 
Основная информация, которую содержит каждый блок.
 
 
* хеш всего блока
 
* хеш всего блока
 
* хеш предыдущего блока в цепи  
 
* хеш предыдущего блока в цепи  
 
* свой порядковый номер в цепочке
 
* свой порядковый номер в цепочке
 
* список транзакций (порядка 1000)
 
* список транзакций (порядка 1000)
В качестве хеш функции используется sha-256.
+
В качестве хеш функции используется sha-256
Для хеширования списка транзакций используется древовидный хеш.
 
  
 +
Blockchain в первую очередь распределённая база данных. Её содержимое хранится на множестве компьютеров по всему миру. Несмотря на то, что данные о всех транзакциях хранятся у всех участников в открытом виде, отельно взятому участнику нет возможности что-либо подменить базе данных. Так как после любого изменения в блоке у него изменится хеш, а следующий блок знает значения хеша предыдущего, а значит будет очевидно, что блок подделан.
 +
Чтобы реально подделать блок нужно изменить не только его, а ещё все следующие, но для этого злоумышленнику нужно обладать вычислительными мощностями большими чем у всего остального мира. А это на практике не возможно. 
  
Blockchain в первую очередь распределённая база данных. Её содержимое хранится на множестве компьютеров по всему миру. Несмотря на то, что данные о всех транзакциях хранятся у всех участников в открытом виде, отельно взятому участнику нет возможности что-либо подменить в базе данных. Так как после любого изменения в блоке у него изменится хеш, а следующий блок знает значения хеша предыдущего, а значит будет очевидно, что блок подделан.
+
Адрес - последовательность из 27-34 латинских букв и цифр. По сути — это всё, что нужно знать от получателя для перевода ему денег. В одном кошельке может быть сколько угодно адресов, но адреса между собой никак не связаны. Зная только адрес, можно выяснить, сколько денег было получено на него и с него отправлено, но нельзя выяснить, чей он, кто отправлял деньги и зачем.
Чтобы реально подделать блок нужно изменить не только его, а ещё все следующие. То есть для этого злоумышленнику нужно обладать вычислительными мощностями большими чем у всего остального мира. А это на практике не возможно.
 
  
'''Адрес''' - последовательность из 27-34 латинских букв и цифр. По сути — это всё, что нужно знать от получателя для перевода ему денег. В одном кошельке может быть сколько угодно адресов, но адреса между собой никак не связаны. Зная только адрес, можно выяснить, сколько денег было получено на него и с него отправлено, но нельзя выяснить, чей он, кто отправлял деньги и зачем.
+
Майнинг - процесс, который решает две основные задачи создания новых блоков с транзакциями и эмиссию биткоинов. Майнинг нужен для существования сети Биткоин, именно майнеры создают новые блоки и записывают в них все транзакции, которые произошли с момента создания предыдущего блока. Процесс майнинга требует решения математически сложной задачи, а значит, требует вычислительных ресурсов. Чтобы люди не забили на процесс майнинга, каждый вновь найденный блок не только записывает свежие транзакции, но и даёт майнеру немного биткоинов.
  
'''Майнинг''' - процесс, который решает две основные задачи, создания новых блоков с транзакциями и эмиссию биткоинов. Майнинг нужен для существования сети Биткоин, именно майнеры создают новые блоки и записывают в них все транзакции, которые произошли с момента создания предыдущего блока. Процесс майнинга требует решения математически сложной задачи, а значит, требует вычислительных ресурсов. Чтобы люди занимались майнингом, каждый вновь найденный блок не только записывает свежие транзакции, но и даёт майнеру немного биткоинов.
+
Когда один из участников хочет перевести деньги другому, он рассылает информацию об этой транзакции всем участникам сети. Майнер, получив очередную транзакции проверяет, что она корректная. То есть что у отправителя достаточно денег на счёте. Так как каждый майнер хранит всю историю транзакций это легко сделать. Если всё хорошо, то транзакция добавляется в список, иначе отвергается.  
  
Когда один из участников хочет перевести деньги другому, он рассылает информацию об этой транзакции всем участникам сети. Майнер, получив очередную транзакции проверяет, что она корректная. То есть что у отправителя достаточно денег на счёте. Так как каждый майнер хранит всю историю транзакций, это легко сделать. Если всё хорошо, то транзакция добавляется в список, иначе отвергается.  
+
Сложность математической задачи для создания блока постоянно регулируется и поддерживается так, чтобы новый блок создавался в среднем раз в 10 минут.  
  
Сложность математической задачи для создания блока постоянно регулируется и поддерживается так, чтобы новый блок создавался в среднем раз в 10 минут.
 
  
 
Распределённость и общение между серверами через peer-to-peer соединения даёт большие преимущества bitcoin.
 
Распределённость и общение между серверами через peer-to-peer соединения даёт большие преимущества bitcoin.
# Система по своей конструкции является очень надёжной. Например, чтобы обеспечить надёжность системы WebMoney нужно построить дублирующие сервера по всему миру чтобы защитить себя от технических неисправностей и  природных катастроф. Данных о всей истории транзакций bitcoin хранятся на множестве компьютеров  по всему миру и не нуждаются в хранение в дата-центрах.  
+
1. Система по своей конструкции является очень надёжной. Например, чтобы обеспечить надёжность системы WebMoney нужно построить дублирующие сервера по всему миру чтобы защитить себя от поломок техники и  природных катостроф. Данных о всей истории транзакций bitcoin хранятся на множестве компьюторо по всему миру и не нуждаются в хранение в дата центрах.  
# Для перевода денег нет необходимости доверять посреднику, например, банку или интернет порталу.
+
2. Для перевода денег нет необходимости доверять посреднику напрмер банку или интернет порталу.
# Нет возможности блокировать транзакции по политическим мотивам. Каждый узел сам принимает решение принять транзакцию или нет.  
+
3. Нет возможности блокировать транзакции по политическим мотивам. Каждый узел сам принимает решение принять транзакцию или нет.  
# Нет единого центра, который можно было бы взять под контроль силой и начать управлять валютой.  
+
4. Нет единого центра, который можно было бы взять под котнроль силой и начать управлять валютой.  
  
 
Недостатки данной системы.
 
Недостатки данной системы.
# Общий размер истории стремительно растёт. На январь 2017 года он занимает более 100 Гб. Следовательно со временем всё меньше людей с может себе позволить скачать всю историю и проверять истинность транзакций.  
+
1. Общий размер истории стремительно растёт. На январь 2017 года он занимает более 100 Гб. Следовательно со временем всё меньше людей с может себе позволить скачать всю историю и проверять истинность транзакций.  
# Деньги могут быть украдены с помощью вредоносного ПО.
+
2. Деньги могут быть украдены с помощью вредоносного ПО.
 
 
====Другие применения====
 
 
 
В июне 2016 года Шведский земельный реестр сообщил, что организация тестирует эту технологию с тем, чтобы перевести на её основу базу данных земельных участков в Швеции
 
 
 
Сбербанк в 2017 году запустит документооборот на основе blockchain. Это резко сократит затраты человеческих ресурсов, позволит избежать дублирования информации, перейти к совершенно новому способу подтверждения подлинности документов.
 
 
 
 
 
==Friend-to-Friend==
 
Friend-to-Friend -- это разновидность peer-to-peer сетей, в которой пользователи обмениваются данными только с теми peer-ми, которым они доверяют. Для аутентификации используются цифровые подписи и пароли.
 
В отличие от P2P пользователи не могут посмотреть список участников F2F сети, кроме своих друзей. Из достоинств таких сетей можно отметить, что F2F являются сильно более защищёнными от хакерских атак, а также в них сильно меньше личеров. Использование F2F-сетей позволяет избегать атак типа mitm (man in the middle), то есть пользователи могут без опасений обмениваться секретными данными (например, крипто-ключами) со своими друзьями.
 

Пожалуйста, учтите, что любой ваш вклад в проект «Викиконспекты» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Викиконспекты:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Чтобы изменить эту страницу, пожалуйста, ответьте на приведённый ниже вопрос (подробнее):

Отменить | Справка по редактированию (в новом окне)