Вторник, 2024-11-26, 5:46 PM
Приветствую Вас Гость | RSS
Главная | BitTorrent сеть - Форум | Регистрация | Вход
Пиринговые сети
Форма входа

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
BitTorrent сеть
netnsk7072Дата: Понедельник, 2009-08-31, 4:21 PM | Сообщение # 1
Майор
Группа: Администраторы
Сообщений: 96
Репутация: 0
Статус: Offline
BitTorrent (букв. англ. «битовый поток») — пиринговый (P2P) сетевой протокол Коэна для кооперативного обмена файлами через Интернет.

Файлы передаются частями, каждый torrent-клиент, получая (скачивая) эти части, в это же время отдаёт (закачивает) их другим клиентам, что снижает нагрузку и зависимость от каждого клиента-источника и обеспечивает избыточность данных.
Первый torrent-клиент «BitTorrent» был создан Брэмом Коэном на языке Python 4 апреля 2001 года, запуск первой версии состоялся 2 июля 2001 года.

Принцип работы протокола

Перед началом скачивания клиент подсоединяется к трекеру, сообщает ему свой адрес и хеш-сумму запрашиваемого файла, на что в ответ клиент получает адреса других клиентов, скачивающих или раздающих этот же файл. Далее клиент периодически информирует трекер о ходе процесса и получает обновлённый список адресов.

Клиенты соединяются друг с другом и обмениваются сегментами файлов без непосредственного участия трекера, который лишь регулярно обновляет информацию о подключившихся к обмену клиентах и другую статистическую информацию. Для эффективной работы сети BitTorrent необходимо, чтобы как можно больше клиентов были способны принимать входящие соединения. Неправильная настройка NAT или брандмауэра могут этому помешать.

При соединении клиенты сразу обмениваются информацией об имеющихся у них сегментах. Клиент, желающий скачать сегмент, посылает запрос и, если второй клиент готов отдавать, получает этот сегмент. После этого клиент проверяет контрольную сумму сегмента и оповещает всех присоединённых пиров о наличии у него этого сегмента.

Каждый клиент имеет возможность временно блокировать отдачу другому клиенту (англ. choke). Это делается для более эффективного использования канала отдачи. Кроме того, при выборе — кого разблокировать, предпочтение отдаётся пирам, которые сами передали этому клиенту много сегментов. Таким образом, пиры с хорошими скоростями отдачи поощряют друг друга по принципу «ты — мне, я — тебе».

Обмен сегментами ведётся по принципу «ты — мне, я — тебе» симметрично в двух направлениях и в случайном порядке. Клиенты периодически сообщают друг другу об имеющихся у них сегментах. Обмен данными начинается, когда обе стороны в нём заинтересованы, то есть каждая из сторон имеет сегменты, которых нет у другой. Количество переданных сегментов подсчитывается, и если одна из сторон обнаруживает, что передаёт в среднем больше, чем принимает, она блокирует (англ. choke) отдачу. Таким образом, в протокол заложена защита от личеров.

При получении полного файла клиент переходит в специальный режим работы, в котором он только отдаёт данные (становится сидом).

Клиенты периодически информируют трекер об изменениях в состоянии закачек и обновляют списки IP-адресов.

Структура трафика

Как и в других протоколах передачи файлов, трафик протокола BitTorrent можно разделить на служебный и собственно скачиваемые/отсылаемые данные.

Общие особенности

* Отсутствие очередей на скачивание.
* Файлы закачиваются небольшими фрагментами; чем менее доступен фрагмент, тем чаще он будет передаваться. Таким образом, присутствие в сети «сидера» с полным файлом для загрузки необязательно — система распределяет сегменты между «пирами», чтобы в последующем они могли обмениваться недостающими сегментами.
* Клиенты (peers) обмениваются сегментами непосредственно между собой, по принципу «ты — мне, я — тебе».
* Скачанные фрагменты становятся немедленно доступны другим клиентам.
* Контролируется целостность каждого фрагмента.
* В качестве объекта раздачи могут выступать несколько файлов (например, содержимое каталога).

Протоколы и порты

Клиенты соединяются с трекером по протоколу TCP. Входящий порт трекера: 6969.

Клиенты соединяются друг с другом, используя протокол TCP. Входящие порты клиентов: 6881—6889.

Номера портов не фиксированы в спецификации протокола и могут изменяться при необходимости. Более того, в данный момент большинство трекеров используют обычный HTTP порт 80, а для клиентов рекомендуется выбрать случайный входящий порт.

DHT-сеть в BitTorrent-клиентах использует протокол UDP.

Кроме того, протокол UDP используется UDP-трекерами (поддерживается не всеми клиентами и не является официальной частью протокола) и для соединения клиентов друг с другом через UDP NAT Traversal (используется только в клиенте BitComet и не является официальной частью протокола).

Файл метаданных

Для каждого распространяемого файла создаётся файл метаданных с расширением .torrent, который содержит следующую информацию:

* URL трекера;
* общую информацию о закачиваемом файле (имя, длину и пр.);
* Контрольные суммы (точнее, хеш-суммы SHA1) сегментов закачиваемого файла.

Файлы метаданных могут распространяться через любые каналы связи: они (или ссылки на них) могут выкладываться на веб-серверах, размещаться на домашних страницах пользователей сети, рассылаться по электронной почте, публиковаться в блогах или новостных лентах RSS. Получив каким-либо образом файл с метаданными, клиент может начинать скачивание.

Первоначально BitTorrent не имел собственной поисковой системы (англ. search engine), но в мае 2005 года Брэм Коэн устранил этот недостаток.[1]

Трекер

Трекер (англ. tracker; /ˈtrækə®/) — специализированный сервер, работающий по протоколу HTTP. Трекер нужен для того, чтобы клиенты могли найти друг друга. Фактически, на трекере хранятся IP-адреса, входящие порты клиентов и хеш-суммы, уникальным образом идентифицирующие объекты, участвующие в закачках. По стандарту, имена файлов на трекере не хранятся, и узнать их по хеш-суммам нельзя. Однако на практике трекер часто помимо своей основной функции выполняет и функцию небольшого веб-сервера. Такой сервер хранит файлы метаданных и описания распространяемых файлов, предоставляет статистику закачек по разным файлам, показывает текущее количество подключённых пиров и пр.

Работа без трекера

В новых версиях протокола были разработаны бестрекерные (англ. trackerless) системы, которые решают некоторые из предыдущих проблем. Отказ трекера в таких системах не приводит к автоматическому отказу всей сети.

Начиная с версии 4.2.0 официального клиента, в нём реализована функция бестрекерной работы, базирующаяся на DHT Kademlia. В таких системах трекер доступен децентрализовано, на клиентах, в форме распределённой хеш-таблицы.

На данный момент не все клиенты используют совместимый друг с другом протокол. Совместимы между собой BitComet, µTorrent, Deluge, KTorrent и официальный клиент BitTorrent. Azureus также имеет режим бестрекерной работы, но его реализация отличается от официальной, вследствие чего он не может работать через DHT с вышеперечисленными клиентами. Однако, для Azureus существует поддержка стандартного DHT через плагин Mainline DHT.

 
netnsk7072Дата: Среда, 2009-11-04, 4:33 PM | Сообщение # 2
Майор
Группа: Администраторы
Сообщений: 96
Репутация: 0
Статус: Offline
Распределённая хеш-таблица

DHT (англ. Distributed Hash Table — «распределённая хеш-таблица») — это класс децентрализованных распределённых систем, которые обеспечивают поисковый сервис, похожий по принципу работы на таблицу хешей, и имеют структуру: (имя, значение), хранящиеся в DHT, а каждый участвующий узел может рационально искать значение, ассоциированное с данным именем. Ответственность за поддержку связи между именем и значением распределяется между узлами, таким образом изменение набора участников является причиной минимального количества разрывов. Это позволяет DHT изменять масштаб до очень большого количества узлов и постоянно отслеживать добавление/убавление узлов и ошибки в их работе.

DHT — это инфраструктура, которая может быть использована для построения многих комплексных сервисов, таких как распределенные файловые системы, пиринговое распространение файлов и системы распространения контента, кооперативный web-кэш, широковещание (multicast), anycast, сервис доменных имен и система мгновенных сообщений. Основные распределенные сети, которые используют DHT, включают в себя Mainline (с расширениями), сеть eDonkey network, YaCy и Coral Content Distribution Network.

Содержание

1 История
2 Свойства
3 Структура
4 Разбиение пространства ключей
5 DHT и BitTorrent
5.1 Private key
5.2 Пользоваться ли?
5.3 DHT и статистика
5.4 Механизм работы DHT
6 Ссылки

История

Изыскания в области DHT изначально были мотивированы в частности пиринговыми системами, такими, как Napster, Gnutella, Freenet, которые использовали распределенные в интернете ресурсы для создания одного единственного приложения. В частности они использовали расширенную пропускную способность и объем жесткого диска для предоставления сервиса распространения файлов. Эти системы различаются тем, как они находили данные пиров, хотя:

Napster имел центральный индексный сервер: каждый узел, после присоединения, должен отправить список локально хранящихся файлов на сервер, который должен произвести поиск и направить запрос к узлам, содержащий результаты. Этот центральный компонент делал систему уязвимой для атак и исков.
Gnutella и похожие сети двинулись к модели лавинных запросов — в основном, каждый поиск привел бы к сообщению, передаваемому на любую машину в сети. Избегая централизованного отказа, этот метод был значительно менее эффективным чем Napster.
Наконец, Freenet был также полностью распределенным, но маршрутизация работает на базе эвристического ключа, в котором каждый файл имеет ассоциированный с ним ключ, а файлы с похожими ключами имели тенденцию к объединению в кластеры на похожем наборе узлов. Запрос, вероятно, направлялся таким кластерам без надобности опрашивать всех пиров. Однако, Freenet не мог гарантировать, что данные будут найдены.
DHT используют маршрутизацию на базе более структурированного ключа, чтобы достигнуть децентрализации Gnutella и Freenet, а также эффективности и гарантируемых результатов Napster. Один из недочетов в том, что, как Freenet, DHT поддерживает только поиск по точному совпадению, а не по ключевым словам, хотя эти возможности могут наслаиваться поверх DHT.

Первые четыре DHT — CAN, Chord, Pastry & Tapestry — были введены приблизительно в 2001 году. С тех пор эта область изысканий была достаточно активна. Вне научных кругов DHT-технологию приняли как компонент BitTorrent и Coral Content Distribution Network

Свойства

DHT характеризуется следующими свойствами:

децентрализация: форма системы коллективных узлов без координации;
расширяемость: система будет одинаково эффективно функционировать при тысячах или миллионах узлов;
отказоустойчивость: система будет одинаково надежна (в некотором смысле) с узлами постоянно подключающимися, отключающимися и выдающими ошибки.
Ключевая методика достижения цели заключается в том, что любой узел должен скоординироваться только с несколькими узлами в системе — как правило, О (logn), где n — количество участников (смотри ниже) — так, чтобы только ограниченный объем работы был сделан для каждого изменения количества участников.

Некоторые DHT-проекты стремятся обеспечить защиту от вредоносных пользователей и позволять участникам оставаться анонимными, хотя это меньше распространено, чем во многих других P2P-системах (особенно при распространении файлов); см. анонимные P2P.

Наконец, DHT приходится иметь дело с более традиционными распределенными системами, такими, как распределение нагрузки, целостность данных и производительность (в частности гарантируя, что операции, такие как маршрутизация и хранение данных или поиск завершаются быстро).

Структура

Структура DHT может быть разбита на несколько основных компонентов. Она основывается на абстрактном пространстве ключей (keyspace), таком как набор 160-битных строк (количество бит может варьироваться). Схема разбиения пространства ключей распределяет принадлежность ключей среди участвующих узлов. Затем оверлейная сеть соединяет узлы помогая найти владельца любого ключа в пространстве ключей.

Когда все компоненты на месте, типичное использование DHT для хранения и выдачи информации происходит следующим образом: Предположим keyspace составляет 160-битные строки. Чтобы сохранить файл с данным именем и информацией в DHT, находится SHA1 хеш от имени файла, из которого формируется 160-битный ключ k, после чего формируется сообщение put(k, data) и посылается любому участвующему узлу в DHT. Послание идёт от одного узла к другому через оверлейную сеть до тех пор, пока она не достигнет единственного узла, ответственного за ключ k, в соответствии со схемой разбиения keyspace, где хранится пара (k, data). Любой другой клиент может получить содержание файла сделав ключ (k), получив хеш имени файла, для того, чтобы найти данные, связанные с ключом, послав сообщение get(k). Сообщение снова пройдёт через оверлей к узлу, ответственному за ключ, который ответит, что нужные данные есть в наличии.

Компоненты разбиения пространства ключей и оверлейной сети описаны ниже с целью представления основных идей обычных для большинства DHT систем. Многие разработки отличаются в деталях.

Разбиение пространства ключей

Многие DHT используют некоторые варианты постоянного хеширования для отображения ключей в узлы. Этот способ включает в себя функция δ(k1,k2) которая определяет абстрактное понятие дистанции от ключа k1 до ключа k2, что не относится к географическому расстоянию и сетевой задержке. Каждый узел представляет собой единичный ключ названный индификатором(ID). Узел с ID j владеет всеми ключами для которых i самый ближайший ID, измеряемый с δ .

Пример.' Chord DHT рассматривает ключи как точки на окружности и δ(k1,k2) есть расстояние, которое проходится по часовой стрелке окружности от ключа k1 к k2. Таким образом круг пространства ключей разделён на смежные сегменты, чьи концы являются идентификаторами узлов. Если i1 и i2 смежные ID, то узел с ID i2 содержит все ключи, которые находятся между i1 и i2.

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

DHT и BitTorrent

И DHT и PEX фактически выполняют основную функцию BitTorrent-трекера — помогают участникам файлообмена узнать друг о друге. Они могут:

Помочь участникам быстрее найти друг друга
Например, на раздаче есть пир X с недоступным портом. К раздаче подключается пир Z, который сам начать соединение с X не может и вынужден ждать, пока Х о нём узнает сам. Х только что обращался к трекеру и в следующий раз собирается это сделать через час.
Но вот пир Y в очередной раз обращается к трекеру и узнаёт про нового пира Z. При этом Y сам давно уже соединён и занимается файлообменом с X, поэтому он через PEX сообщает X адрес этого нового пира. Теперь X может начать соединение к Z.
Снизить нагрузку на трекер
Получая адреса пиров через DHT или PEX, клиенты реже обращаются к трекеру, тем самым снижая нагрузку.
Поддержать раздачу в периоды недоступности трекера
Если трекер является единственным источником информации о пирах, то при его неработоспособности раздача постепенно остановится. Используя PEX, клиенты могут обмениваться друг с другом информацией о пирах, с которыми у них были сеансы связи, тем самым замедляя процесс остановки раздачи. DHT же позволяет полностью заменить трекер.
DHT позволяет раздавать без трекера
Такая раздача называется trackerless. Торрент для неё создаётся без адреса трекера и клиенты находят друг друга через DHT. При участии в trackerless-раздачах BitTorrent-клиенты приобретают определённое сходство с eMule, использующим сеть Kad.

Private key

На публичных (открытых) трекерах, где каждый желающий может скачать торрент и участвовать в раздаче, DHT и PEX служат на благо всех участников.

Частным (закрытым) трекерам в первую очередь важно, чтобы в раздачах могли участвовать только зарегистрированные пользователи, и чтобы они соблюдали определённые правила. При первом обращении клиента частный трекер имеет возможность не допустить его к раздаче, просто не сообщая ему адреса других клиентов-участников. Поэтому для закрытого трекера важно, чтобы клиенты не получали эти адреса через DHT/PEX.

DHT и PEX появились в клиентах Azureus и BitComet примерно летом 2005 года. Администраторы многих частных трекеров были недовольны такой новой функциональностью, и поэтому стали запрещать на трекере эти новые версии клиентов.

Тогда разработчики клиентов предложили новый ключ внутри торрент файла: private. Если он равен 1, то клиент обязан для этого торрента автоматически отключать DHT/PEX независимо от желания пользователя. Такой торрент называют Secure Torrent.

Практически все современные частные трекеры сами принудительно вставляют private:1 во все торренты, выкладываемые на трекере, а также запрещают несколько устаревших версий клиентов, поддерживающих DHT или PEX, но еще не знающих про private key. Пользователи трекера просто не могут на раздачах использовать DHT/PEX, и проблемы нет.

Отметим, что присутствие private key изменяет infohash торрента, поэтому выреза́ть его из торрент-файла бесполезно — другие клиенты изменённый торрент всё равно не признают.

Пользоваться ли?

Все ваши торренты — с закрытых трекеров
Если при этом в клиенте разрешить DHT, то получится, что клиент подключается к DHT сети, тратит на это трафик, помогает другим клиентам найти нужных им пиров, но ни на одной раздаче DHT для себя не использует. Если среди других источников на раздаче нет никого с включённым DHT, DHT лучше отключить. Отключать ли DHT, если последнее на раздаче доступно — ваш выбор. С одной стороны это риск потери трафика на служебный, с другой возможность докачать данные в случае сбоя трекера.
Вы качаете раздачу с публичного трекера
Если трекер возвращает вам много пиров и их достаточно для достижения хорошей скорости скачивания, то DHT/PEX вам работает на прогресс. Его стоит включить (и в клиенте, и в свойствах раздачи), это может помочь найти больше источников и быстрее подключать к ним в процессе раздачи, генерируя запросы не только на трекер (полезно в клиентах с медленным обновлением статистики (официальный, µTorrent и др.)
Вы качаете раздачу с частного трекера без принудительного private key
Возможность использования на раздачах DHT/PEX на этих трекерах отдана на усмотрение раздающему (создателю торрента).

Данная ситуация полностью зависит от создателя торрента (он же, как правило, и инициативный сидер). Если он сам по каким-то причинам не использует DHT, то включённого DHT на раздаче вы вряд ли найдёте.

Стоит так же отметить, что ранее, когда коммерческие трекеры так же активно отдавали свои торренты для скачивания, но авторизация анонса требовала PassKey, сеть DHT использовалась для воровства PassKey у пользователей. Данное явление нисколько не затрагивает уязвимости в DHT, просто результаты генератора пасскеев (атака перебором — brute force) проверялись трассированием через DHT. Непосредственное воровство пароля не осуществляется через DHT, а сегодня, когда на всех коммерческих трекерах требуются инвайты и прочее, доступа у сторонних лиц к файлу торрента нет, а на трекерах с обыкновенной регистрацией у каждого есть свой пасскей и он может выполнять валидацию запросами на трекер, средствами HTTP, а не DHT.

DHT и статистика

Этот раздел касается только закрытых трекеров, на которых private key в торренты принудительно не вставляется, и на некоторых раздачах (в зависимости от того, вставил ли раздающий сам в торрент private key) можно использовать DHT и PEX.

Часто встречается мнение, что включённый в клиенте DHT влияет на учёт статистики клиента трекером, например «раздавал через DHT, значит статистика шла мимо трекера». Это неверно.

Во-первых, DHT/PEX используется только для получения адресов пиров. Ни файлообмена, ни какого-либо учёта статистики по ним не ведётся. Клиент рапортует статистику скачанного и отданного только на трекер.

То есть «раздавал через DHT» фактически означает «о некоторых (или о всех) пирах получил информацию по DHT, и вероятно некоторые пиры тоже нашли меня через DHT»

Во-вторых, хотя клиенты обычно и знают, откуда ими получены адреса пиров, ни один клиент не разделяет трафик на «полученный/отданный DHT пирам» и «полученный/отданный пирам, полученным от трекера». Даже при желании это было бы клиенту сделать затруднительно — некоторые пиры могут быть получены и от трекера и через DHT или PEX, и часто клиент не знает, как его адрес получил пир, сам начинающий к нему соединение.

Клиент рапортует трекеру суммарные данные об объёмах им скачанного и отданного всем пирам, с которыми он общался, независимо от того, узнал клиент об отдельных пирах через трекер, DHT или PEX, или тот пир вообще начал соединение сам. То есть даже если из-за DHT/PEX на раздаче появятся «левые» пользователи (не обращающиеся к трекеру), клиент всё равно сообщит на трекер всё, что у них скачал и отдал.

Правильный учёт статистики зависит только от состояния трекера: работает трекер — статистика учитывается, не работает — не учитывается. Только в случае длительно неработающего трекера DHT/PEX может играть косвенную роль, не давая постепенно затухнуть файлообмену на такой «раздаче без учёта статистики».

Механизм работы DHT

Реализация распределенной сети в BitTorrent-клиентах основана на варианте DHT, называемом Kademlia. А вообще говоря, DHT (Distributed hash table) означает децентрализованную распределенную систему для объединения большого количества постоянно исчезающих и появляющихся узлов и эффективной передачи сообщений между ними. На основе DHT структур строят разные более сложные системы, такие как P2P файлообмен, кооперативное веб кеширование, DNS сервисы и т. п.

DHT использует UDP протокол. BitTorrent-клиенты слушают тот же UDP номер порта, который они используют для входящих TCP соединений. Если вы активно используете DHT, то открытие этого UDP порта для доступа снаружи желательнo, но не обязательно — DHT будет работать и так.

Каждый подключённый клиент является в DHT сети отдельным узлом. У него есть свой уникальный ID (идентификатор), случайно выбираемый из того же 160-битного пространства, что и infohash’и торрентов.

Каждый узел хранит таблицу маршрутизации, содержащую контактную информацию о многих «ближайших» к нему узлах, и о нескольких более далёких. «Близость» двух узлов вычисляется из «сходства» их ID, и не имеет никакого отношения к их географической близости.

Когда узел хочет найти пиров для какой-то раздачи, он сравнивает infohash этой раздачи с ID известных ему узлов, и затем посылает запрос тому узлу, чей ID наиболее похож на этот infohash. Тот узел возвращает ему адрес узла, чей ID ещё ближе к infohash торрента.

Тогда наш узел посылает запрос тому новому узлу, и получает от него адрес следующего узла, чей ID ещё более похож на infohash торрента.

Таким образом, запросы от клиентов, участвующих в раздаче торрента с определённым infohash, постепенно стекаются к узлам, чьи ID наиболее похожи на этот infohash. Эти узлы помнят предыдущие запросы, и всем следующим запрашивающим узлам вернут адреса предыдущих пиров с той же раздачи.

Ссылки

Описание DHT протокола на сайте Bittorrent.org(англ.)
в Azureus Wiki(англ.)
на сайте BitComet(англ.)

 
  • Страница 1 из 1
  • 1
Поиск:

/forum/4-5-1


Copyright www.netnsk.ru © 2024
Сделать бесплатный сайт с uCoz