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

Основные принципы работы файлообмена заключаются в следующем:

-    пользователь скачивает программу себе на компьютер;

-    разрешает доступ другим пользователям к некоторой части своих ресурсов (этот процесс называется «расшариванием» англ. sharing);

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

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

Эта технология получила название Р2Р (peer-to-peer).

Интернет-компания "Русское Промо" – это профессиональное и качественное продвижение сайтов на первые позиции во всех поисковиках. "Русское Промо" твой путь к успеху.

Централизованные сети

Несмотря на то что каждый участник файлообменной сети является и клиентом, и сервером, необходима инфраструктура для объединения разрозненных клиентов между собой в определенное сообщество. В централизованных файлообменных сетях служебную информацию хранят индексационные серверы.

Достоинством такой сети является относительная простота программирования такой сети и небольшой объем служебной информации, передаваемой на серверы. Закрытие сетей Napster и WinMX показало ненадежность централизованных файлообменных сетей. Индексационные серверы могут быть отключены по разным причинам (технический сбой, разорение владеющей компании, судебное решение). В таком случае сеть перестает функционировать. К централизованным сетям относится Direct Connect.

Децентрализованные сети

Децентрализованные файлообменные сети функционируют без индексационных серверов. Хотя объем передаваемой служебной информации в них больше, надежность их гораздо выше. Пока не существует способа насильно остановить функционирование такой сети. К децентрализованным сетям относятся Gnutella, Overnet, Kad.

Гибридные сети

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

BitTorrent-сети

BitTorrent (букв. англ. «битовый поток») - пиринговый (Р2Р) сетевой протокол для кооперативного обмена файлами через Интернет.

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

Протокол был создан Брэмом Коэном, написавшим первый torrent-клиент «BitTorrent» на языке Python 4 апреля 2001 года. Запуск первой версии состоялся 2 июля 2001 года.

Существует множество других программ-клиентов для обмена файлами по протоколу BitTorrent.

Раздача может содержать как один файл, так и несколько, например, содержимое директории.

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

•    URL трекера;

•    общую информацию о файлах (имя, длину и пр.) в данной раздаче;

•    контрольные суммы (точнее, хеш-суммы SHA1) сегментов раздаваемых файлов;

•    Passkey пользователя, если он зарегистрирован на данном трекере. Длина ключа устанавливается трекером;

•    хеш-суммы файлов целиком (необязательно);

•    альтернативные источники, работающие не по протоколу BitTorrent. Наиболее распространена поддержка так называемыхweb-сидов (протокол HTTP), недопустимыми также являются ftp, ed2k, magnet URI (необязательно).

Размер сегмента регулируется при создании тор-рента и, как правило, выбирается размер, соответствующий степени двойки. При выборе размера необходимо соблюдать баланс, связанный с механизмом работы протокола. Размер сегмента чаще всего лежит в диапазоне от 128 килобайт до 2-4 мегабайт, хотя на очень больших раздачах (порядка сотни гигабайт) могут использоваться сегменты размером 32-64 мегабайта.

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

Так как хеши в .torrent-файле включают в себя имена и структуру директорий раздачи, то переименование файлов с сохранением возможности их раздавать в общем случае невозможно. Однако некоторые клиенты поддерживают изменение структуры, например, создание или переименование директорий и переименование или перемещение файлов.

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

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

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

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

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

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

Алгоритм обмена данными

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

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

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

Сегменты делятся на блоки размером 16-64 килобайт, и каждый клиент запрашивает именно эти блоки. Одновременно могут запрашиваться блоки из разных сегментов. Более того, некоторые клиенты поддерживают скачивание блоков одного сегмента у раз-

ных пиров. В этом случае описанные выше алгоритмы и механизмы обмена применимы и к уровню блоков.

Режим End game

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

Спецификация протокола не определяет, когда именно клиент должен войти в режим end game, однако существует набор общепринятых практик. Некоторые клиенты входят в этот режим, когда не осталось незапрошенных блоков, другие - пока количество оставшихся блоков меньше количества передающихся и не больше 20. Существует негласное мнение, что лучше поддерживать количество ожидаемых блоков низким (1 или 2) для минимизации избыточности, и что при случайном запрашивании меньший шанс получить дубликаты одного и того же^блока.

Сидирование

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

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

•    Отсутствие очередей на скачивание;

•    файлы закачиваются небольшими фрагментами; чем менее доступен фрагмент, тем чаще он будет передаваться. Таким образом, присутствие в сети «сиде-ра» с полным файлом для загрузки необязательно - система распределяет сегменты между «пирами», чтобы в последующем они могли обмениваться недостающими сегментами;

•    клиенты (peers) обмениваются сегментами непосредственно между собой, по принципу «ты - мне, я - тебе».

•    скачанные фрагменты становятся немедленно доступны другим клиентам;

•    контролируется целостность каждого фрагмента;

•    в качестве объекта раздачи могут выступать несколько файлов (например, содержимое каталога).

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

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

DHT-сеть в BitTorrent-клиентах использует протокол UDP (DHTaHrn. Distributed Hash Table — «распределенная хеш-таблица»).

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

Что такое трекер?

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

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

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

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

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

Работа без трекера также возможна при использовании мультипротокольных клиентов, поддерживающих BitTorrent. Shareaza через сеть Gnutella2 обменивается хешами и адресами пиров других поддерживаемых сетей, в том числе BitTorrent. В GreyLink DC++ планируется поддержка BitTorrent, при этом сеть Direct Connect может использоваться не только для преобразования в ТТН, но и для поиска пиров.

Работа без торрент-клиента

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

Наличие в файлах метаданных дополнительной информации, такой, как дополнительные источники и опциональные хеши, позволяет использовать файл метаданных .torrent аналогично форматам Metalink, MAGMA, Список файлов (Direct Connect). Клиент Shareaza использует опциональные хеши для поиска альтернативных источников в других сетях.

Отсутствие анонимности

Принцип работы BitTorrent-протокола подразумевает, что каждому клиенту известны IP-адреса как минимум других клиентов, полученные от сервера. Использование разнообразных расширений протокола в некоторых случаях позволяет узнать также и адреса других пиров из роя. Поэтому:

•    Пользователи незащищенных систем и клиентов с известными уязвимостями могут быть подвергнуты атаке.

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

Проблема личеров

Некоторые пользователи, особенно на трекерах, не требующих регистрации, не поддерживают раздачу после завершения скачивания, что ведет к уменьшению общей производительности. Эта проблема является одной из причин популярности частных торрент-трекеров, учитывающих количество скачанного/отданного.

Персоиализация

Протокол не предполагает использование ников. Отсутствует чат между пирами. Невозможно просмотреть список файлов пира (в поисках других файлов, которые могли бы заинтересовать). Большинство этих функций реализовано в других протоколах.

Читерские программы

Существуют программы, позволяющие вести махинации с рейтингом на торрент-трекерах (RatioMaster, GiveMeTorrent). Такие программы отсылают трекеру сфальсифицированные данные о количестве скачанного и отданного.

Немного терминологии

•    Анонс (англ. announce) - обращение клиента к трекеру. При каждом анонсе клиент передает на трекер информацию об объемах им скачанного и отданного, а трекер передает клиенту список адресов других клиентов. Обращение клиента к трекеру происходит через определенные интервалы времени, которые определяются настройками клиента и трекера.

•    Веб-сид - HTTP-сервер, который может использоваться как источник данных, выступая в роли сида.

•    Доступность (англ. availability, англ. distributed copies - распространенные копии) - количество полных копий файла, доступных клиенту. Каждый сид добавляет 1,0 к этому числу; личеры увеличивают доступность в зависимости от количества скачанного, которого нет у других личеров. К примеру, если на раздаче есть один сид и два личера, скачавшие по 50 % файла (скачанные части равны между собой), то доступность равна 1,50.

•    Заглохший (англ. choked - заглохший, придушенный) - клиент, обмен данными с которым заглох. Либо его канал на выход забит полностью и он не может ничего передать (достиг max_uploads), либо он является сидом и ему ничего не нужно получать.

•    Заинтересованный (англ. interested) - участник, желающий получить куски файла, имеющиеся у другого участника. Например, если у клиента А нет каких-то частей, которые есть у клиента Б, считается, что клиент А заинтересован в обмене с клиентом Б.

•    Индекс (англ. index) - это список .torrent-файлов (обычно включающий описания и другую информацию), управляемый веб-сайтом (индексатором) и доступный для поиска. Индексирующий сайт также может быть и трекером.

•    Лич, иногда личер (англ. leech - пиявка) - пир, не имеющий пока всех сегментов, то есть продолжающий скачивание. Термин часто употребляется и в негативном смысле, который он имеет в других файло-обменных сетях: пользователь, который отдает гораздо меньше, чем скачивает.

•   Отравленный торрент - ситуация, когда часть пиров раздает поврежденные сегменты.

•    Пир (англ. peer - соучастник) - клиент, участвующий в раздаче.

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

•    Пренебрегающий (англ. snubbed) - клиент, подключенный к получателю, но не посылавший ему данные уже более 60 секунд.

•    Раздача (англ. seeding) - процесс распространения файла по протоколу BitTorrent.

•    Рейтинг (англ. share ratio) - отношение отданного к скачанному.

•    Рой (англ. swarm) - совокупность всех пиров, участвующих в раздаче.

•    Сегмент (англ. part - часть) - вс^файлы для передачи делятся на небольшие куски - сегменты, которые затем передаются по сети в произвольном порядке для оптимизации обмена.

•    Сид, иногда сидер (англ. seeder - сеятель) - пир, имеющий все сегменты распространяемого файла, то есть либо начальный распространитель файла, либо уже скачавший весь файл и оставшийся на раздаче.

•    Суперсидирование - специальный режим раздачи в некоторых BitTorrent-клиентах, пытающийся минимизировать количество данных, которое отдаст раздающий до появления первого скачавшего. Суперсид предлагает каждому пиру скачать только один сегмент файла, которого еще нет у других пиров. Затем сид не дает этому пиру следующих сегментов, пока не получит от других пиров подтверждения, что они тоже получили этот сегмент. Таким образом, суперсид пытается избежать повторной отдачи одних и тех же сегментов и старается отдавать сегменты только тем пирам, которые активно передают их другим.

•    Хеш (англ. hash) - строка буквенно-цифровых символов в .torrent-файле, которую используют клиенты для проверки передаваемых данных. Каждая часть после получения сначала проверяется на совпадение хеша. Если проверка не удалась, данные отбрасываются и запрашиваются еще раз.

•    Passkey - аутентификатор пользователя на неанонимных трекерах. Содержится в скачиваемом torrent-файле. Таким образом, если кто-то получит доступ к torrent-файлу (например, пользователь по неосторожности расшарил его), он сможет работать с трекером от имени этого пользователя. Трекер может изменить passkey по запросу пользователя, но при этом необходимо будет перескачать все прошлые torrent-файлы (или вручную отредактировать их), чтобы иметь возможность и дальше раздавать скачанные файлы.

•    URL анонса (англ. announce URL) - адрес трекера, к которому клиент делает анонс. Во многих клиентах называется «Tracker URL». Может включать «passkey» -уникальный код, назначаемый трекером для аккаунта пользователя, помогающий идентифицировать его на трекере (добавляется к URL анонса в самом • .torrent-файле при скачивании).

Программы-клиенты

•    pTorrent - клиент BitTorrent для Windows и Mac OS X, отличающийся малым размером и высокой скоростью работы;

•    aria2 (англ.) - поддерживает HTTP, FTP, BitTorrent; файлы Metalink 3.0;

•    Vuze (старое название - Azureus) - написан на языке Java, поэтому является кроссплатформенным. Поддерживает Тоги I2P. Нужно учесть, используемая им библиотека Eclipse Standard Widget Toolkit использует системнозависимые модули и должна компилироваться для каждой платформы отдельно;

•    BitTyrant (en) - модифицированный вариант клиента Azureus 2.5;

•    BitTornado - кроссплатформенный клиент, написанный на языке Python;

•    Deluge - кроссплатформенный клиент, написанный на языке Python; использует GTK;

•    FoxTorrent - расширение для браузера Mozilla Firefox, реализующее функции клиента BitTorrent;

•    LeechCraft- кроссплатформенный клиент, существует плагин для поддержки BitTorrent;

•    mIDonkey- кроссплатформенный клиент;

•    Браузер Opera полностью поддерживает закачку торрентов,начиная с версии 9.0;

•    TorrentRux (en) - написан на РНР, работает на удаленном Web-сервере как PHP-скрипт, позволяя не держать свой компьютер включенным постоянно, но при этом качать и раздавать торренты;

•    ABC - еще один Bittorrent Client, основан на BitTornado.

•    BTPD [8] - консольный клиент для Unix/GNU+Linux, написанный на С++; работает в режиме демона;

•    CTorrent- консольный клиент для Unix/GNU+Linux, прекративший развитие в 2004 году;

•    KTorrent - использует библиотеку Qt; работает в среде KDE;

•    Kget;

•    rTorrent- консольный клиент для UNIX/GNU+Linux; использует библиотеки ncurses и libTorrent;

•    Transmission - клиент для Mac OS X, FreeBSD, OpenBSD, NetBSD, GNU/Linux и BeOS, использующий GTK. Также может работать в консольном режиме и в режиме демона;

•    Bitflu - консольный клиент для Unix/GNU+Linux, написанный на Perl; работает в режиме демона, с поддержкой chroot окружения. Имеет веб-интерфейс, управляется через telnet;

•    qBittorrent - bittorrent клиент для Unix/GNU + возможно другие системы, написанный на С++ / Qt4, использующий библиотеку libtorrent. Распространяется под лицензией GNU GPL.

•    FatRat.