Изменения

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

Peer-to-peer

9854 байта добавлено, 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===
==Bitcoin=='''Blockchain''' -- распределённая база данных, представляющая из себя цепочку блоков в каждом из которых есть список транзакций.
====Bitcoin====
'''Bitcoin''' - это децентрализованная цифровая валюта работающая в сети интернет. Bitcoin основан на Blockchain технологии.
Ещё одним Идея создания распределённой криптовалюты сопряжена с трудностями основная из примеров использования peerних это проблема Двойного расходования (англ. Double-to-peer соединения является криптовалюта bitcoinspending). В отличие от обычных бумажных денег, которые нельзя просто так взять и скопировать'''Bitcoin''' -- это децентрализованная цифровая валюта работающая только Можно легко сделать копию электронного файла, который содержит информацию о кошельке, и попытаться потратить деньги в один момент в сети интернет, основанная на технологии blockchainразных частях света'''Blockchain''' -- Так как система распределённая база данных представляющая из себя цепочку блоков в каждом из которых есть список транзакций над bitcoin-минет такого сервера у которого можно было бы запросить информацию о текущем счёте. С одной стороны это сильно усложняет принцип работы, но с другой даёт огромные преимущества связанные с распределённостьюОсновная информация которую содержит каждый блок
[[Файл:Хэш_транзакций.png‎|thumb|right|300px|Схема получения хеша транзакций]]
Как уже говорилось информация о транзакциях разбита на блоки и хранится следующим образом.
Основная информация, которую содержит каждый блок.
* хеш всего блока
* хеш предыдущего блока в цепи
* свой порядковый номер в цепочке
* список транзакций (порядка 1000)
В качестве хеш функции используется sha-256.Для хеширования списка транзакций используется древовидный хеш.  
Blockchain в первую очередь распределённая база данных. Её содержимое хранится на множестве компьютеров по всему миру. Несмотря на то, что данные о всех транзакциях хранятся у всех участников в открытом виде, отельно взятому участнику нет возможности что-либо подменить в базе данных. Так как после любого изменения в блоке у него изменится хеш, а следующий блок знает значения хеша предыдущего, а значит будет очевидно, что блок подделан.
Чтобы реально подделать блок нужно изменить не только его, а ещё все следующие. То есть для этого злоумышленнику нужно обладать вычислительными мощностями большими чем у всего остального мира. А это на практике не возможно.
'''Адрес ''' - последовательность из 27-34 латинских букв и цифр. По сути — это всё, что нужно знать от получателя для перевода ему денег. В одном кошельке может быть сколько угодно адресов, но адреса между собой никак не связаны. Зная только адрес, можно выяснить, сколько денег было получено на него и с него отправлено, но нельзя выяснить, чей он, кто отправлял деньги и зачем.
'''Майнинг ''' - процесс, который решает две основные задачи , создания новых блоков с транзакциями и эмиссию биткоинов. Майнинг нужен для существования сети Биткоин, именно майнеры создают новые блоки и записывают в них все транзакции, которые произошли с момента создания предыдущего блока. Процесс майнинга требует решения математически сложной задачи, а значит, требует вычислительных ресурсов. Чтобы люди не забили на процесс майнингазанимались майнингом, каждый вновь найденный блок не только записывает свежие транзакции, но и даёт майнеру немного биткоинов.
Когда один из участников хочет перевести деньги другому, он рассылает информацию об этой транзакции всем участникам сети. Майнер, получив очередную транзакции проверяет, что она корректная. То есть что у отправителя достаточно денег на счёте. Так как каждый майнер хранит всю историю транзакций , это легко сделать. Если всё хорошо, то транзакция добавляется в список, иначе отвергается.
Сложность математической задачи для создания блока постоянно регулируется и поддерживается так, чтобы новый блок создавался в среднем раз в 10 минут.
 
Распределённость и общение между серверами через peer-to-peer соединения даёт большие преимущества bitcoin.
1. # Система по своей конструкции является очень надёжной. Например, чтобы обеспечить надёжность системы WebMoney нужно построить дублирующие сервера по всему миру чтобы защитить себя от поломок техники технических неисправностей и природных катострофкатастроф. Данных о всей истории транзакций bitcoin хранятся на множестве компьюторо компьютеров по всему миру и не нуждаются в хранение в дата -центрах. 2. # Для перевода денег нет необходимости доверять посреднику напрмер , например, банку или интернет порталу.3. # Нет возможности блокировать транзакции по политическим мотивам. Каждый узел сам принимает решение принять транзакцию или нет. 4. # Нет единого центра, который можно было бы взять под котнроль контроль силой и начать управлять валютой.
Недостатки данной системы.
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), то есть пользователи могут без опасений обмениваться секретными данными (например, крипто-ключами) со своими друзьями.
4
правки

Навигация