|
Автор: Андрей Драница Опубликовано 20 мая 2002 года
Первые мои попытки получить информацию о P2P наткнулись даже не на стену, а, скорее, на вязкое болото — тот же Yandex вываливал столько ссылок, что перелопатить их в обозримом будущем было нереально. Впрочем, после более детального осмотра стало ясно — русскоязычный сегмент сети почти ничего о принципах работы или архитектуре P2P не содержит, максимум, что из него можно выжать, так это куцые перепечатки западных новостных лент. Беседы с коллегами и разными гуру ограничивались либо пространными объяснениями, либо вежливыми извинениями — мол, самим интересно, но не знаем. Среди ангоязычных ресурсов тоже, конечно, с избытком было пресс-релизов, красочных презентаций и многомегабайтных pdf. Но обнаружилось и несколько профессиональных узлов со сложившимся, как сейчас модно говорить, community, из общения с которым мне и удалось почерпнуть большую часть сведений.
Что такое P2P
Популярность P2P набирала обороты вместе с ростом популярности наиболее известного клиента, использовавшего данную технологию — Napster — и достигла своего пика в момент коллапса этой сети. Но уже за несколько месяцев до смерти Napster стали появляться альтернативные сети, многие IT-лидеры объявили о поддержке P2P в своих новых продуктах — в общем, явление стало по-настоящему «модным».
Четкого определения, что же такое P2P, нет. Поэтому приведу два наиболее распространенных. P2P (peer-to-peer) — это технология построения распределенной сети, где каждый узел может одновременно выступать как в роли клиента (получателя информации), так и в роли сервера (поставщика информации). Как правило, сеть состоит из равноправных узлов, причем каждый из них взаимодействует лишь с некоторым подмножеством узлов сети, так как установление связи «каждый с каждым» невозможно из-за ограниченности ресурсов (как вычислительных, так и пропускных). При этом передача информации между узлами, не связанными в данный момент непосредственно, может осуществляется как по своеобразной эстафете — от узла к узлу, так и путем установления временной прямой связи. Все вопросы маршрутизации и авторизации сообщений, передаваемых по эстафете, лежат не на едином сервере, а на всех этих отдельных узлах. Такое определение также известно под названием Pure P2P.
Второе определение носит более общий характер: P2P — это класс приложений, совместно использующих распределенные ресурсы (дисковое пространство и файлы, вычислительные ресурсы, пропускную способность и т.д.). Именно в эту категорию попадают системы распределенных вычислительных сетей (SETI@HOME), некоторые файловые обменные сети (Napster) и службы сообщений.
Плюсы и минусы
Первый вопрос, который я задаю себе, узнав о какой-либо новинке, будь то технология, «железка» или софт — зачем это нужно и чем новинка лучше существующих аналогов. Несмотря на многообразие возможных ответов, применительно к рассматриваемому вопросу ключевыми характеристиками, на мой взгляд, являются:
- управляемость — простота поддержания работоспособности системы, а также решения вопросов, связанных с обновлением, восстановлением после сбоев и регистрацией активности (logging);
- информационная согласованность — достоверность, проверяемость и последовательность информации;
- расширяемость — возможность расширения информационных ресурсов системы;
- устойчивость к сбоям — надежность системы;
- безопасность — степень защиты информации от несанкционированного доступа;
- устойчивость к внетехнологическому вмешательству — возможность (или невозможность) вмешательства государственных и иных органов в работу сети ввиду какаих-либо причин (например, обвинение в нарушении авторских прав);
- масштабируемость — наличие пределов (как правило, технологических) увеличения мощностей и предельная стоимость расширения.
А теперь сравним P2P и другие существующие топологии, дабы выяснить их преимущества и недостатки.
Централизованная топология
Как видно из рисунка, в централизованной топологии существует некий центральный сервер, предоставляющий клиентам определенные услуги.

| Управляемость |
да |
| Инфор-ая соглас-ть |
да |
| Расширяемость |
нет |
| Устойчивость к сбоям |
нет |
| Безопасность |
да |
| Устойчивость к ВТВ |
нет |
| Масштабируемость |
? |
Главным преимуществом такой системы является ее простота. Вся информация хранится в одном месте, поэтому легко ею управлять и поддерживать ее достоверность. Не составляет проблемы и защита информации — ведь непосредственно защите подлежит лишь центральный сервер. С другой стороны, ни о какой устойчивости такой системы говорить не приходится — остановка работы централизованного сервера приводит к выходу из строя всей сети. Также существуют проблемы с расширением информационного наполнения сервера, так как для этого необходима прямая доставка и размещение всех данных именно на центральном сервере.
Иерархическая топология
Это, пожалуй, самая старая и хорошо зарекомендовавшая себя топология. На сегодняшний день самыми убедительными примерами, подтверждающими ее состоятельность, являются DNS, Network Time Protocol и отчасти Usenet. По сути, данная схема создавалась с целью хотя бы частично избавится от самых неприятных недостатков централизованной топологии, что, в принципе, и было достигнуто.

| Управляемость |
частично |
| Инфор-ая соглас-ть |
частично |
| Расширяемость |
частично |
| Устойчивость к сбоям |
частично |
| Безопасность |
нет |
| Устойчивость к ВТВ |
нет |
| Масштабируемость |
да |
Наиболее значимым преимуществом иерархической топологии является масштабируемость, которую прекрасно продемонстрировал DNS: за последние пятнадцать лет число обслуживаемых этим сервисом узлов возросло с нескольких тысяч до сотен миллионов, и хотя сбои время от времени случаются, носят они локальный и, как правило, временный характер. Так что система демонстрирует завидную надежность, особенно по сравнению с классической централизованной топологией.
Децентрализованная топология
Децентрализованные системы, такие как Gnutella, являются прямой противоположностью централизованных, поэтому неудивительно, что плюсы и минусы здесь меняются местами. Высокая надежность таких систем приводит к серьезным проблемам с управляемостью и поддержанием достоверности размещаемой информации. Впрочем, как заявляют основатели подобных сетей, надежность и устойчивость являются теми факторами, ради которых можно пожертвовать всеми другими благами. Принцип, можно сказать, партизанский — обороняться любыми средствами! Действительно, вывести такую сеть из строя весьма и весьма непросто. Но есть у этой монеты и оборотная сторона. Децентрализованные сети требуют гораздо больших издержек, их клиенты на порядок сложней (а значит, и ошибки в них случаются чаще). В конечном итоге, они гораздо менее защищены — уже существуют специально для них написанные вирусы, а также программы, которые, маскируясь под клиентов подобных сетей, сканируют узлы в поисках определенного контента или наводняют их ложными пакетами с целью обрушить сеть.

| Управляемость |
нет |
| Инфор-ая соглас-ть |
нет |
| Расширяемость |
да |
| Устойчивость к сбоям |
да |
| Безопасность |
нет |
| Устойчивость к ВТВ |
да |
| Масштабируемость |
возможно |
Гибридная топология: децентрализованная + централизованная
Примеры реализации сети "fast-track" — всем известные KaZaA and Morpheus. Увы, это именно тот случай, когда смешение двух технологий привело не к взаимному дополнению преимуществами друг друга, а совсем наоборот. Не продемонстрировав существенных достоинств централизации, эта схема ударила своих пользователей другим боком — возможностью блокирования серверов. И, как следствие, сети, построенные на базе fast-track, в любой момент могут быть выключены, а это во многом лишает их главного преимущества децентрализованных систем — надежности и устойчивости, в том числе и к внетехнологическим вмешательствам.

| Управляемость |
нет |
| Инфор-ая соглас-ть |
частично |
| Расширяемость |
да |
| Устойчивость к сбоям |
да |
| Безопасность |
нет |
| Устойчивость к ВТВ |
частично |
| Масштабируемость |
частично |
|
|
| Napster |
|
На примере Napster довольно просто понять, как работает типичная клиент-серверная архитектура с небольшими вставками P2P на одном этапе.
- Пользователь загружает программу-клиент.
- Пользователь входит в сеть и регистрируется на сервере Napster, предоставляя информацию о себе (файлы в обменном фонде, ширина канала). Сервер регистрирует активного пользователя, внося список файлов в свою базу данных.
- Пользователь делает запрос на предмет интересующего его файла. Сервер производит поиск в своей базе, генерирует ответ (список IP-адресов узлов, имена и размеры файлов) и отправляет его пользователю.
- Пользователь выбирает, с какого узла загружать файл, соединяется напрямую с нужным узлом и загружает файл, используя протокол Napster.
- После загрузки он информирует сервер о результатах.
Как видно, в данной схеме сервер присутствует на трех этапах, тогда как принцип P2P работает лишь на этапе загрузки. По сути, именно такая завязка на сервер и сгубила эту популярную сеть. | |
|
|
| Gnutella |
|
Gnutella — отличный пример того, как работает чистая P2P-сеть.
- Пользователь загружает программу.
- При первом запуске программы (назовем наш узел — A), пользователь сообщает клиенту IP-адрес одного из функционирующих узлов (условно узел B). Данная процедура может и не повторяться в будущем, но при первом запуске она обязательна. Это один из самых «скользких» моментов в реализации данной сети: без адреса хотя бы одного из работающих в данный момент узла пользователь не сможет подключиться. В принципе, существует целый ряд централизованных серверов, предоставляющих подобную информацию (connect1.gnutellanet.com:6346, gnutella.hostscache.com и др.), но такая схема уже приводит к некой централизованности, а значит и уязвимости [1].
- Программа посылает запрос узлу B на предмет подтверждения активности.
- Узел В подтверждает свою активность, если нет — см. шаг 2.
- Узел А посылает узлу В так называемый Ping-запрос. В этом запросе указывается, помимо прочей информации, TTL (Time To Live) — число, означающее, сколько переходов от узла к узлу данный запрос может совершить. Обычно TTL равняется 7.
- Другие узлы, получив Ping-запрос, посылают Pong-ответ, в котором содержится IP-адрес отправителя, номер порта и минимальная информация о файлах в фонде обмена.
- Кроме того, узлы, получившие Ping-запрос, уменьшают TTL данного запроса на единицу, и если TTL больше 0, а также если данный запрос они не получали ранее (защита от зацикливания), рассылают его своим соседям.
- Каждый узел, получивший Ping-запрос, отсылает Pong-ответ, тем же путем, которым этот запрос получил.
- Когда Pong-ответы доходят до своего источника (т.е. нашего узла А), программа составляет список доступных узлов. Как правило, этот список насчитывает от 2 до 10 тысяч узлов и от 500 тысяч до миллиона файлов в обменном фонде.
- Пользователь вводит запрос (например, название mp3-файла). Программа рассылает запрос на поиск файла всем узлам в списке, а далее просто ждет входящих сообщений.
- Каждый узел, получивший запрос на поиск, ищет в своем фонде указанный файл. Если файл не найден, то узел просто не отвечает.
- Если файл найден, узел отсылает инициатору запроса ответ с информацией о файле и о себе (IP-адрес).
- Получив ряд ответов, программа выбирает один из узлов, устанавливает с ним стандартное HTTP-соединение и загружает файл. При этом все сообщения (от Ping-запроса до скачивания файла) посылаются по HTTP, что затрудняет их отслеживание и блокировку.
Некоторые клиенты Gnutella работают в соответствии с приведенным алгоритмом, а некоторые нет. Связано это с тем, что Gnutella — это прежде всего протокол взаимодействия узлов (такой же, как HTTP, например), и в нем не определены некоторые из аспектов этого взаимодействия. К тому же, первые версии Gnutella-совместимых программ создавались при отсутствии спецификаций — на основании обратного инжиниринга первой версии. Именно по этой причине некоторые программы несовместимы между собой, хотя их базовые возможности совпадают практически всегда. | |
Области применения
Хотя возможных направлений применения P2P довольно много, наиболее успешны пока только четыре:
- Файловые обменные сети (file-sharing). В данном случае сети P2P выступают хорошей альтернативой FTP-архивам, которые уже давно перестали справляться с ростом информационного наполнения и числа потребителей. Несмотря на постоянный рост количественных характеристик файл-серверной архитектуры, P2P потенциально обладает целым рядом преимуществ: балансировкой нагрузки, более широкой полосой пропускания, высокой «живучестью» и широкими возможностями по публикации контента. Примеры — Napster, Gnutella и ее производные.
- Распределенные вычислительные сети. Например, такие как SETI@HOME. Этот проект продемонстрировал громадный вычислительный потенциал для хорошо распараллеливаемых задач. В настоящий момент в нем принимают участие свыше трех миллионов пользователей, а общее число «процессоро-лет» перевалило за семьсот тысяч, и все это на абсолютно бесплатной основе, когда добровольцы не получают ничего кроме красочного скринсейвера и возможности общественного признания.
- Службы сообщений (Instant-messaging). Думаю, что одни лишь имена наиболее популярных приложений данного класса — ICQ и AIM — говорят сами за себя.
- Сети групповой работы (P2P Groupware). Подобные приложения пока мало распространены, но в их будущем сомневаться не приходится. Одними из самых перспективных считаются Groove Network — сеть, предоставляющая защищенное пространство для коммуникаций, и OpenCola — технология поиска информации и обмена ссылками на наиболее интересные источники, где в роли поискового сервера выступает не бездушная железка, а каждый из пользователей сети, что обещает гораздо более высокую релевантность (при ответственном подходе пользователей к процессу, конечно).
Проблемы P2P
Как и у любой молодой технологии, у P2P есть, помимо технических, и свои социальные проблемы. Многие исследователи отмечают весьма неприятную ситуацию, сложившуюся в Gnutella: около 70% пользователей не добавляют вообще никаких файлов в обменный фонд, а около 50% всех найденных ресурсов предоставлены 1% (одним процентом!) пользователей [2]. Психология «общества массового потребления» постепенно превращает сеть равноправных узлов в клиент-серверную, со всеми вытекающими последствиями (падение производительности и надежности).
Существует и проблема так называемого паразитического подключения: в сети появляются сервера, предоставляющие свои пользователям возможности по поиску контента без установки программы-клиента. Таким образом, получая информацию и генерируя громадный трафик, такие сервера не предоставляют сообществу ничего взамен. Впрочем, последние версии ряда программ уже способны с этим справляться — они распознают запросы «паразитов» и либо их игнорируют, либо предлагают установить таки клиентскую часть.
Другая проблема P2P сетей связана с тем, что обмен информацией осуществляется между «незнакомыми» узлами (отсутствует опыт по обмену в прошлом), что порождает вполне объяснимые сомнения в качестве и достоверности предоставляемого контента [3]. Стоит вопрос и о самой легитимности существующих сетей. В первую очередь он связан со сложившимся в условиях всеобщей «антитеррористической» истерии стереотипом — якобы, единственным применением P2P является либо незаконный обмен ворованным контентом, либо, в более общем случае, сокрытие информации.
Но, тем не менее, технология P2P лишний раз доказывает, что история имеет тенденцию повторяться. Подзабытые во времена эйфории по поводу клиент-серверных технологий, одно-ранговые модели возвращаются, реинкарнируясь в популярные и, самое главное, востребованные решения.
|
САМОЕ ПОПУЛЯРНОЕ
Нетбуки против Windows
Нетбукам нужна лёгкая операционная система. Windows Vista, определённо, такой не является. Windows XP давно морально устарела. Linux? Или всё-таки подождать выхода легковесной версии Windows 7?
Неделя после Fallout
Продажи новой игры из серии Fallout, разработанной студией Bethesda, идут очень неплохо - и это при том, что первый патч принёс игрокам кучу проблем, а японцы, оказалось, лишились части одного из квестов.
О Смысле Всего Сущего
Евгений Козловский так обстоятельно подошел к вопросам читателей "КТ-Онлайн", что интервью пришлось разделить на две части. Но историю происхождения "Огородов" можно узнать уже сегодня!
|