Редактирование: 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 соединение, связываться с пирами для получения/передачи данных.
 
Рассмотрим пример последовательности действий, следуя которой, можно создать примитивный 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 этот бит пропускается), и хвост с дополнительной информацией.
+
==DHT==
 
 
* Сообщения типа 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==
  
 
'''Blockchain''' -- распределённая база данных, представляющая из себя цепочку блоков в каждом из которых есть список транзакций.  
 
'''Blockchain''' -- распределённая база данных, представляющая из себя цепочку блоков в каждом из которых есть список транзакций.  
  
====Bitcoin====
+
===Bitcoin===
 
'''Bitcoin''' - это децентрализованная цифровая валюта работающая в сети интернет. Bitcoin основан на Blockchain технологии.  
 
'''Bitcoin''' - это децентрализованная цифровая валюта работающая в сети интернет. Bitcoin основан на Blockchain технологии.  
  
Строка 190: Строка 154:
 
# Деньги могут быть украдены с помощью вредоносного ПО.
 
# Деньги могут быть украдены с помощью вредоносного ПО.
  
====Другие применения====
+
===Другие применения===
  
 
В июне 2016 года Шведский земельный реестр сообщил, что организация тестирует эту технологию с тем, чтобы перевести на её основу базу данных земельных участков в Швеции
 
В июне 2016 года Шведский земельный реестр сообщил, что организация тестирует эту технологию с тем, чтобы перевести на её основу базу данных земельных участков в Швеции
  
 
Сбербанк в 2017 году запустит документооборот на основе blockchain. Это резко сократит затраты человеческих ресурсов, позволит избежать дублирования информации, перейти к совершенно новому способу подтверждения подлинности документов.
 
Сбербанк в 2017 году запустит документооборот на основе blockchain. Это резко сократит затраты человеческих ресурсов, позволит избежать дублирования информации, перейти к совершенно новому способу подтверждения подлинности документов.
 
 
==Friend-to-Friend==
 
Friend-to-Friend -- это разновидность peer-to-peer сетей, в которой пользователи обмениваются данными только с теми peer-ми, которым они доверяют. Для аутентификации используются цифровые подписи и пароли.
 
В отличие от P2P пользователи не могут посмотреть список участников F2F сети, кроме своих друзей. Из достоинств таких сетей можно отметить, что F2F являются сильно более защищёнными от хакерских атак, а также в них сильно меньше личеров. Использование F2F-сетей позволяет избегать атак типа mitm (man in the middle), то есть пользователи могут без опасений обмениваться секретными данными (например, крипто-ключами) со своими друзьями.
 

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

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

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