За весьма короткий отрезок времени пиринговая сеть 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 сегодня является SuperNova.
Рейд RIAA вынудил большинство серверов отказаться от хостинга хэш-ссылок на файлы, присутствующие
в системе. Краткий визит на сайт позволяет убедиться, что размещение целых аудиоальбомов и даже
коллекций компакт-дисков -- не редкость.
Архитектура BitTorrent не дает возможности определить число клиентов, участвующих в пиринговой
сети, так как о количестве загрузок определенного файла может знать только владелец tracker-сервера.
Вместе с тем поддержка протокола сегодня внедрена в приложение Shareaza, которое ввиду удобства
интерфейса, поддержки нескольких пиринговых сетей и отсутствия spyware-модулей постепенно
приобретает популярность.
Получает распространение и клиент PTC, поддерживающий протоколы BitTorrent и наделенный более
приемлемым для новых пользователей интерфейсом.
Те, кто заинтересован в кросс-платформенном приложении, могут воспользоваться Java-клиентом
для сетей BitTorrent -- Azureus.
Приложение пишется на языке Python, и все исходники доступны на сайте проекта