root.elima.ru
Мертвечина
Статьи и книгиИнтернет-технологии и сетевое программирование

BitTorrent: новое слово в пиринговых сетях

Александр Москалюк
Компьютерное Обозрение #35, 9 – 15 сентября 2003

За весьма короткий отрезок времени пиринговая сеть BitTorrent приобрела армию поклонников и довольно высокую популярность. "Сетевое население" BitTorrent вряд ли можно сравнить с пользовательскими массами Kazaa или eDonkey/eMule, однако и принципы работы этого проекта не требуют максимально возможного числа участников.

Еще один пиринговый клиент? Но зачем?

С самого начала создатель BitTorrent программист Брэм Коэн (Bram Cohen) заложил в него несколько принципиальных отличий от других пиринговых сетей: нацеленность на распространение крупных файлов и не совсем децентрализованная структура сети.

В службе Napster (до ее закрытия) центральный сервер хранил имена пользователей и названия файлов, которыми те желали обменяться. В сетях FastTrack и eDonkey подобных серверов нет, и архитектура сети предполагает максимальную децентрализацию. Архитектура BitTorrent предусматривает наличие у файла, выкладываемого в сеть, единственного владельца, который и заинтересован в его распространении.

Именно первоначальный обладатель файла генерирует серию хэш-кодов, впоследствии используемую клиентами BitTorrent для проверки его целостности. Клиент пиринговой сети, чтобы получить искомый файл, должен загрузить набор данных с расширением .torrent. В нем содержатся информация о имени файла, его размере, хэш-коды сегментов (по умолчанию размером 256 КВ) и адрес распространителя, у которого, в свою очередь, должен быть запущен tracker-сервер для отслеживания количества загрузок файла в сети peer-to-peer. Архитектура BitTorrent предполагает пиринговый обмен с использованием центрального tracker-сервера для учета статистики. По мере того как файл по частям уходит с компьютера первоначального владельца в сеть, пользователи начинают загружать его фрагменты друг у друга. В то же время протокол BitTorrent требует фиксирования каждой такой загрузки на tracker-сервере, даже если сервер распространителя в транзакции не участвует.

Здесь скрыта еще одна особенность протокола BitTorrent, которая одновременно является и его ахиллесовой пятой, -– в случае отсутствия в сети tracker-сервера файл загрузить нельзя. При попытке копирования torrent-файла клиентом BitTorrent пользователю выдается стандартная ошибка "Tracker is down".

Безусловно, через некоторое время каждый, у кого есть полная копия файла, сможет сгенерировать собственный torrent-файл и запустить новый tracker-сервер, однако обычно Internet-общественность старается не привлекать крупные объемы трафика к своему IP-адресу, опасаясь крупных счетов от провайдеров. Сгенерированный torrent-файл также будет отличаться от первоначального (адрес tracker-сервера является составной частью torrent-файла), и подключившимся клиентам придется начать загрузку с нуля.

Централизация как способ уменьшить загрузку сети

Зачем это нужно? Не наносит ли такой шаг удар по стабильности сети?

Во-первых, Коэн стремился, чтобы продукт можно было максимально удобно использовать для легальной передачи файлов. Во-вторых, внедрение tracker-сервера позволяет проследить за статистикой загрузок (что немаловажно для софтверных компаний). В-третьих, если по каким-то причинам распространение файла необходимо прекратить, то для этого достаточно приостановить работу трэкера (хотя возможности обхода такого ограничения мы уже обсудили).

Услугами BitTorrent уже воспользовались такие компании, как Red Hat и Mandrake, выложив в сеть новые версии своих операционных систем с одновременной публикацией на сайте torrent-файлов. Дистрибутивы представляли собой три ISO-файла объемом около 700 МВ каждый, т. е. в итоге любители Linux были вынуждены загружать около 2 GB, что в былые времена традиционно "убивало" FTP-серверы. По словам представителей Red Hat, после запуска дистрибутивов в сеть BitTorrent нагрузка на центральный FTP-сервер компании упала на 99%. Более того, присутствие tracker-сервера позволило Red Hat отследить статистику загрузок в режиме реального времени. Подробная информация редко доступна или принципиально невозможна в других пиринговых сетях.

Клиент BitTorrent, который можно загрузить с официального сайта, представляет собой лишь серое окно с кнопкой Cancel и ссылкой About. Весьма неприхотливый в работе пакет запускается при щелчке по torrent-файлу. В свою версию BitTorrent Коэн внедрил только самую необходимую функциональность -– возможность соединения с tracker-сервером и собственно загрузку. Все другие функции, присущие сегодняшним пиринговым сетям, выполняются на более высоком уровне -– torrent-файлы стоит поискать на специальных сайтах, там же их можно оценить или расспросить других пользователей об их качестве. Это сделано преднамеренно -– BitTorrent не перегружает собственную сеть запросами и ответами о наличии файлов -– вся статистика ведется tracker-сервером, а вся необходимая информация содержится в torrent-отпечатке.

Экономика пиринговых сетей: проблемы

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

Файлы-"пустышки". Поскольку львиную долю контента в большинстве популярных сегодня пиринговых сетей составляют файлы, права на распространение которых принадлежат звукозаписывающим концернам и кинокомпаниям, последние прилагают немало усилий для саботажа работы этих самых сетей. О победах и поражениях на легальных фронтах мы слышим относительно часто, технологический саботаж обычно является менее очевидным. Так, ассоциация RIAA не раз признавала факт сотрудничества с малоизвестной компанией OverPeer, зарабатывающей на жизнь умышленным искажением и снижением качества цифровой музыки и видео. OverPeer принадлежит американский патент, а описание технологии можно найти на сайте патентного ведомства США. OverPeer генерирует аудио– и видеофайлы неприемлемого качества (здесь можно говорить как о заниженном битрейте, так и об изменении их содержания, -– скажем, прерывание музыкальной композиции рекламным роликом), после чего выкладывает их в пиринговые сети. Разместив свои файлы на высокоскоростных каналах, OverPeer практически гарантирует их попадание в списки результатов поиска, так как в сетях FastTrack и других на вершине рейтинга оказываются продукты, доступные на высокоскоростных каналах.

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

Неполные файлы. Предположим, у вас на диске находится редкая копия весьма ценного файла, который вы решили выложить в пиринговую сеть. Спустя какое-то время вы можете отследить процесс загрузки частей файла клиентами системы, и, скажем, понаблюдав за процессом 24 ч, посчитать свою миссию выполненной и выключить компьютер. Здесь кроется весьма очевидная проблема: несмотря на то что многочисленные клиенты теперь могут похвастаться наличием некоторых сегментов ценного файла, полной версии не имеет никто. Более того, даже если пройтись по всем подключенным к сети клиентам, становится очевидным, что полную версию файла не собрать при всем желании -– у всех имеется, скажем, первая половина файла, но никто не загрузил несколько сегментов из его второй половины.

Экономика пиринговых сетей: варианты решения

Некоторые описанные выше проблемы детально рассмотрены Коэном в работе "Устойчивость за счет системы поощрений в сети BitTorrent" ("Incentives Build Robustness in BitTorrent", http://bitconjurer.org/BitTorrent/bittorrentecon.pdf). Архитектура BitTorrent предлагает интересные пути их решения. Следует заметить, что вряд ли какую-то из стратегий можно назвать идеальной, и, скорее всего, в дальнейшем мы станем свидетелями эволюционного процесса, где будут развиваться варианты как решения, так и собственно проблемы.

Файлы-"пустышки". Если на ранней стадии развития Internet основным источником информации о файле было его имя (скажем, взглянув на Alanis Morisette -– Ironic.mp3, можно догадаться о его содержании), то сегодня ввиду причин, описанных выше, на подобную стратегию полагаться не следует. Системы рейтинга файлов (применяемые в сети FastTrack) также нельзя назвать эффективными, в основном, из-за нежелания большинства пользователей лишний раз после загрузки предоставлять свои файлы. В BitTorrent эта проблема решается на более высоком уровне -– за содержание файла отвечает его распространитель. Информацию о его подлинности, таким образом, надежней всего получать на форумах, где публикуются как ссылки на новые torrent-файлы, так и мнения пользователей об их качестве. За подобную структуру оценки в свое время высказались и создатели сети eDonkey/eMule.

Пользователи-"эгоисты". Пиринговые сети зачастую ведут учет "щедрости" пользователя и начисляют баллы за предоставленные широкие каналы. Проблема здесь тоже весьма банальна: информация о баллах хранится у клиента, и ничто не мешает ему преднамеренно увеличить их количество. Подобный трюк реализован в Kazaa Lite, где при подключении к сети FastTrack все клиенты имеют неизменный рейтинг в 1000 баллов. В BitTorrent эта проблема решена своеобразно -– оценки за более широкие каналы растут, однако информация об этом хранится у клиента, который загружает файл. Вносит ли это справедливость в систему обмена? В общем-то, не очень, так как баллы начисляются за качество пирингового соединения между двумя клиентами. Если компьютер А предложил компьютеру Б весьма широкий канал, то по правилам BitTorrent единственным вознаграждением для А станет возможность приоритетных загрузок с компьютера Б. При условии, что и А, и Б содержат интересную друг для друга информацию, система работает идеально, так как два "щедрых" компьютера по максимуму используют канал связи между собой. Однако если на жестком диске Б ничего ценного нет, то щедрость А остается невознагражденной.

Неполные файлы. Участие в системе обмена tracker-сервера дало программистам BitTorrent возможность внедрить алгоритм, предотвращающий появление неполных файлов. Поскольку tracker хранит информацию о сегментах, успешно загруженных на каждую машину, то загрузка файла новыми клиентами принудительно начнется с наиболее редкого сегмента. Если клиент BitTorrent загружает крупный файл, разбитый на 200 частей, то это совсем не означает, что процесс начнется с сегмента # 1 и закончится сегментом # 200. О недостатках подобной модели мы писали выше. Клиент всегда получает сегмент, занимающий последнее место по распространенности, что в идеале после 200 подключений к центральному серверу даст возможность выложить в пиринговую сеть файл целиком.

Практическое применение новой архитектуры

Единственным крупным работающим сайтом со ссылками на файлы BitTorrent сегодня является SuprNova. Рейд RIAA вынудил большинство серверов отказаться от хостинга хэш-ссылок на файлы, присутствующие в системе. Краткий визит на сайт позволяет убедиться, что размещение целых аудиоальбомов и даже коллекций компакт-дисков -– не редкость.

Архитектура BitTorrent не дает возможности определить число клиентов, участвующих в пиринговой сети, так как о количестве загрузок определенного файла может знать только владелец tracker-сервера.

Вместе с тем поддержка протокола сегодня внедрена в приложение Shareaza, которое ввиду удобства интерфейса, поддержки нескольких пиринговых сетей и отсутствия spyware-модулей постепенно приобретает популярность.

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

Те, кто заинтересован в кросс-платформенном приложении, могут воспользоваться Java-клиентом для сетей BitTorrent -– Azureus, которое на данный момент имеет вид бета-версии.

Приложение пишется на языке Python, и все исходники доступны на сайте проекта.