Изменения

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

Peer-to-peer

7686 байт добавлено, 23:46, 26 января 2017
Нет описания правки
К частично децентрализованным сетям относятся например eDonkey, BitTorrent, Direct Connect, The Onion Router.
===BitTorrent протокол===
[[Файл:Tracker.png|400px|thumb|right|Схема работы протокола BitTorrent.]]
достаточно редки).
==Friend-to-Friend=Как написать свой BitTorrent===FriendТрекер представляет из себя HTTP/HTTPS сервис, который отвечает на HTTP GET запросы. Запрос включает информацию о файле и дополнительную статистическую информацию о торренте. Ответ на запрос содержит список пиров, участвующих в данном торренте. Задача клиента -to-Friend -получить от сервера информацию о пирах через 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- это разновидность peerurl?param=value&param=value&…’. Подробнее узнать про кодирование url можно [https://en.wikipedia.org/wiki/Percent-toencoding здесь], а также можно воспользоваться питоновской библиотекой (pip install requests). О параметрах запроса можно узнать [https://wiki.theory.org/BitTorrentSpecification#Tracker_Request_Parameters тут].Примеры параметров: 'info_hash' -peer сетейхеш info части раскодированого torrent файла посчитанный SHA1 алгоритмом, в которой пользователи обмениваются данными только с теми peer‘peer_id’ -мистрока из 20 байтов, которым они доверяютподробнее про формат [https://wiki. Для аутентификации используются цифровые подписи и паролиtheory.org/BitTorrentSpecification#peer_id тут]. В отличие ответ от P2P пользователи не могут посмотреть сервера клиент получит закодированый список участников F2F сетипиров. Используйте Benconde раскодировщик, кроме своих друзейчтобы в части peers найти список адресов в формате ip_address:port. Из достоинств таких сетей  Далее, можно отметитьпытаться подключаться к любому из пиров по TCP, что F2F являются сильно более защищёнными от хакерских атакдля начала советуется поддерживать хотя бы одно соединение. Первое сообщение должно иметь вид handshake: <pstrlen><pstr><reserved><info_hash><peer_id>info_hash и peer_id уже встречались, а также для текущей версии протокола 'pstrlen'=19, 'pstr'=BitTorrent protoco, 'Reserved' восьмибитовая строка.От пира следует ожидать сообщение в аналогичном формате, и после этого проверить, соответствуют ли поля info_hash и peer_id ожидаемому, в них сильно меньше личеровслучае несоответствия лучше сразу закрыть соединение. Использование F2F Дальше существует 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 байтовым хвостом.* Сообщение типа mitm Bitfield может посылаться сразу после handshake и задавать множество имеющихся кусочков в виде битовой маски, размер которой(man in the middleв битах)задается в первых 4 байтах сообщения. Данный вид сообщения может говорить не о всех кусочках, то есть пользователи могут без опасений обмениваться секретными данными после этого пир может продолжать дополнять информацию сообщениями типа Have.* Сообщения Interested/Not Interested говорят о том, что скачивающий пир хочет/не хочет получить определенный кусочек.* Сообщения Choke/Unchoke говорят о том, что раздающий пир не готов/готов отдать кусочек.* Сообщение Request стоить посылать после того, как получили разрешение у пира(Unchoke) на конкретный кусочек, хвост у этого типа сообщения состоит за 4 байтов для номера кусочка, 4 байта для смещения внутри кусочка в байтах, и 4 байта для размера блоков, которыми вы хотите получать данные (напримеробычно это 2^14).* Сообщение Piece является ответом на Request и содержит данные одного блока. Хвост состоит из 4 байтов на номер кусочка, крипто-ключами4 байтов на смещение (как в предыдущем типе) со своими друзьямии последовательностью байтов описывающей данные блока.Этого уже вполне хватает, чтобы обмениваться файлами с другими пирами.
==Децентрализованные сети=====DHT===
Рассмотрим пример децентрализованной структурированной P2P сети.
системы децентрализованность: отсутствие каких-либо специально выделенных серверов,
отвечающих за поддержание структуры сети.
 
Распределенные хеш-таблицы могут найти множество применений. Например, у вас есть
какие-то данные, к которым вам нужен доступ, но их слишком много для хранения на
одном сервере -- вы используете DHT. Может быть, вы хотите свою торрент-систему,
где каждый участник, пока он будет находиться в сети, будет отвечать за какие-то
файлы -- в этом случае вам тоже подойдет DHT.
Рассмотрим вариант, предложенный Хордом (Chord). Скажем, что ключами нашей
Таким образом, мы рассмотрели пример децентрализованной структурированной P2P сети.
 ===Blockchain===
'''Blockchain''' -- распределённая база данных, представляющая из себя цепочку блоков в каждом из которых есть список транзакций.
====Bitcoin====
'''Bitcoin''' - это децентрализованная цифровая валюта работающая в сети интернет. Bitcoin основан на Blockchain технологии.
# Деньги могут быть украдены с помощью вредоносного ПО.
====Другие применения====
В июне 2016 года Шведский земельный реестр сообщил, что организация тестирует эту технологию с тем, чтобы перевести на её основу базу данных земельных участков в Швеции
Сбербанк в 2017 году запустит документооборот на основе blockchain. Это резко сократит затраты человеческих ресурсов, позволит избежать дублирования информации, перейти к совершенно новому способу подтверждения подлинности документов.
 
 
==Friend-to-Friend==
Friend-to-Friend -- это разновидность peer-to-peer сетей, в которой пользователи обмениваются данными только с теми peer-ми, которым они доверяют. Для аутентификации используются цифровые подписи и пароли.
В отличие от P2P пользователи не могут посмотреть список участников F2F сети, кроме своих друзей. Из достоинств таких сетей можно отметить, что F2F являются сильно более защищёнными от хакерских атак, а также в них сильно меньше личеров. Использование F2F-сетей позволяет избегать атак типа mitm (man in the middle), то есть пользователи могут без опасений обмениваться секретными данными (например, крипто-ключами) со своими друзьями.
4
правки

Навигация