Когда речь заходит о компьютерной сети, пользователь всегда представляет ее в виде нескольких серверов, выполняющих каждый свою функцию и большого числа клиентских машин. Такая архитектура компьютерной сети получила название клиент-серверной. Минусы такой архитектуры очевидны – практически вся нагрузка ложится именно на ресурсы сервера и в случае выхода его из строя доступ к его ресурсам не получит ни один клиент.
Общая информация о P2P
От минусов клиент-серверной архитектуры попытались избавиться создатели пиринговых сетей P2P.
Уже несколько лет подряд пиринговые сети набирают популярность интернет сообществе. Еще в далеком 1999 году была создана первая сеть Napster. С помощью нее люди всей планеты могли делиться имеющимися у них музыкальными композициями в формате MP3. Несмотря на такую узкую направленность и явные недостатки (отсутствие докачки, излишняя зависимость от единственного центрального сервера), сеть начала набирать популярность и очень быстро привлекла к себе внимание аудиозаписывающих компаний. Они начали давить на Napster по поводу незаконности ее деятельности. Но как известно "запретный плод сладок" и после таких трений интерес к p2p возрос еще больше. Идею Napster подхватили другие программисты и в Интернете начали появляться другие сети, частично лишенные недостатков "родителя". Тем временем аудиозаписывающим компаниям удалось доказать незаконность деятельности Napster, которую в итоге закрыли. Тут-то и сыграл свою плохую роль центральный сервер. Сеть удалось закрыть, остановив всего лишь один главный сервер…
Но волна новых пиринговых сетей со своими усовершенствованными протоколами (был учтен печальный опыт Napster) начала набирать обороты.
Так появилась сеть KaZaA. В ней уже поддерживалась докачка, а так же существенно был увеличен список распространяемых файлов. Была добавлена революционная возможность скачивать файл частями с разных клиентов (т.е. у каждого своя часть). Принцип работы остался почти таким же, как и у Napster, за тем лишь отличием, что теперь база данных хранится не на центральном сервере, а у каждого клиента персонально. Так же как и с Napster, с KaZaA неоднократно судились правообладатели, но это не привело к ее закрытию. На данный момент сеть успешно функционирует и насчитывает большое количество пользователей.
Так же возникла сеть eDonkey 2000. Именно в ней целиком отказались от принципа центрального сервера. Вместо него был придуман и воплощен в жизнь принцип "нескольких серверов" (точнее большого множества). Именно такая архитектура и спасла сеть, когда в 2006 году американская организация звукозаписывающих компаний RIAA через суд закрыла компанию-владелицу основных серверов MetaMachine, а так же заморозила разработку клиента eDonkey. Было также произведено несколько арестов в других странах, результатом чего стало закрытие еще нескольких серверов (например, широко известного Razorback 2.0). Первое время в сети действительно был замечен спад активности пользователей. Скорее всего, интернет-сообщество выжидало исхода битвы. А исход таков – несмотря на все вышеописанные действия, сеть не умерла, а наоборот, в ответ на эти действия в сети начали появляться новые сервера. Их стало заметно больше. Так что eDonkey 2000 – это хороший пример, когда творение переживает своего творца, активно сопротивляясь внешним угрозам.
Следует отметить, что даже заморозка официального клиента eDonkey никак не сказалось на функциональности, так как массовую популярность приобрел другой, более удобный клиент от сторонних разработчиков под названием eMule.
Но истинной революцией в P2P-сетях стала Gnutella. Это была первая децентрализованная (безсерверная) сеть. Программистам удалось реализовать идеальную p2p, такой, какой она должна быть. История ее создания довольно интересна, так что обо всем по порядку. Изначально она создавалась под крылом America-on-Line руками программистов бывшей Nullsoft, известным продуктом которой является плеер Winamp. Чуть позже, после начала разработки, AOL объединилась с одной звукозаписывающей компанией. И только тогда менеджеры AOL поняли, какого "троянского коня" они разрабатывают. Разработки попытались закрыть, но ее непосредственные создатели – программисты – отказались похоронить свое детище и ушли из AOL. Благодаря своей архитектуре сеть получилась бессмертной, так как она основана не на серверах, а на узлах, которыми являются сам пользователи. Единственным ее недостатком является самое первое подключение вашего клиента к сети. Вам необходимо указать IP-адрес любого функционирующего клиента. Именно через него вы получите свой первый список клиентов. Для этого был создан ряд постоянно функционирующих клиентов (теоретически их, конечно же, можно назвать "серверами") с известными всем клиентским программам IP-адресами. Даже если этих клиентов-серверов закрыть, полагаем, в интернете обязательно найдется список с другими клиентами.
Пару лет назад в Интернете появился еще один игрок на поле пиринговых сетей. Имя ему – BitTorrent. Давайте разберемся, что это такое. Существует много определений понятия BitTorrent, но мы будем иметь ввиду файлообменную пиринговую сеть, основанную на собственном одноименном протоколе.
Наверное первое с чем задается пользователь установив клиентскую часть BitTorrent, так это вопросами "А где же здесь поиск?", "Как найти нужные мне файлы?". Вот тут и открывается первое отличие этой системы от других аналогов – информация о необходимых вам файлах распространяется в других файлах с расширением .torrent, которые вы можете скачать с сайтов в Интернете. Так что поисковиками в данном случае служат именно сайты. Конечно, существуют специальные программы, которые ищут заданные вами файлы, но их функциональность оставляет желать лучшего.
Существуют как тематические сайты (посвященные конкретной области, например фильмы, музыка, ПО) так и нетематические (можно найти все что угодно). Минус для русскоязычного пользователя в том, что практически все не тематические сайты имеют 99% англоязычного контента.
Итак, допустим, вы нашли и скачали файл содержащий информацию о необходимой вам загрузке. Теперь достаточно запустить скачанный файл, в результате чего запустится клиент, установленный вами ранее, и начнет автоматическое скачивание файлов, информация о которых хранится в torrent-файле.
Давайте разберемся, что же происходит, когда клиентская часть начинает качать файл. Клиентская часть пытается установить HTTP-соединение с сервером, адрес которого хранится в torrent-файле. После соединения с сервером вы получаете адреса клиентов, подключенных данному серверу, у которых есть необходимая информация. С данного момента вы являетесь "пиром в рое", т.е. полноправным членом сети, участвующим в раздаче данной информации. После получения списка адресов клиентов вы пытаетесь с ними соединиться по протоколу TCP. В случае успешного соединения, хотя бы с одним клиентом начинается скачивание информации. После получения хотя бы одного байта информации вы автоматически становитесь личером (leecher), т.е. пиром с неполным контентом.
Принцип работы BitTorrent
После того как вы скачаете сегмент файла вы можете отдавать его другим участникам раздачи. Специфика самого протокола BitTorrent такова, что, подключившись к клиентам, скачивать вы начнете самые редкие куски файлов. Это было предусмотрено разработчиком для повышения устойчивости сети. В BitTorrent вы можете подключаться к любому количеству клиентов (ограничения только на пропускную способность вашего канала). Здесь нет очередей, характерных для сети eMule. Т.е. вам не придется ждать сутками, когда же начнет скачиваться ваш файл. Следует отметить, что клиент контролирует целостность каждого сегмента. Для этого он использует контрольные суммы (хэш-суммы SHA1). Данная функция препятствует возникновению в сети битых сегментов и как следствие поврежденных файлов. После скачивания всех частей требуемой информации вы автоматически становитесь сидом (seed), т.е. клиентом, имеющие все части распространяемого файла).
Итак, вы скачали файл, что же дальше? А дальше вы можете оставить его на раздаче для других пользователей, тем самым поддержав скорость его распространения. Или можете просто удалить его из списка раздаваемых файлов. Данное действие является не очень благородным с вашей стороны. К сожалению, так поступает большинство пользователей. Их называют эгоистами.
Просмотрев данную схему скачивания, вы, несомненно, найдете слабое звено. Да-да, это именно трекер — сайт отслеживающий за подключенными пользователями. Если по каким-либо причинам он будет недоступен, вы просто не скачаете ни одного байта необходимого файла. При основании BitTorrent его живучесть обуславливалась большим количеством серверов. Если вам попадался torrent-файл с мертвым трекером то вам приходилось искать другой. Теперь эта проблема частично решена за счет небольших изменения на клиентской части. Теперь информация о клиентах хранится на вашем клиенте в форме распределенной хеш-таблицы (Distributed Hash Table).