Gnutella

Gnutella — полностью децентрализованная файлообменная сеть в рамках Интернета, потомок Napster, отличается принципиальным отсутствием центрального сервера. Сеть формируется, когда один пользователь Gnutella соединяется с другим пользователем, после чего они могут обмениваться доступной информацией. Обмениваться можно файлами любых форматов, есть множество удобных функций. В результате полной децентрализации сеть практически невозможно уничтожить, так как для этого потребуется вывести из строя каждый узел сети.

История появления сети Gnutella 
Первый клиент сети Gnutella был разработан Джастином Франкелем и Томом Пеппером из Nullsoft в начале 2000 года, вскоре после приобретения их компанией AOL. 14 марта программа была доступна для скачивания на серверах в Nullsoft. Первая версия программы давала возможность пользователю искать и обмениваться всеми видами файлов с другими владельцами Gnutella без участия каких-либо серверов. Это событие было заранее анонсировано на Slashdot и в этот день программу скачали тысячи людей. Исходный код должен был быть выпущен позже, в соответствии с GNU General Public License (GPL).

На следующий день AOL остановила распространение программы по правовым вопросам и отстранила Nullsoft от выполнения любой дальнейшей работы над проектом (официально AOL назвала Gnutella как «unauthorized freelance project» и открестились от него), после чего разработчики Gnutella, во главе с Джастином Френкелем, уволились. Но это не помешало распространению Gnutella, через несколько дней протокол был подвергнут реверс-инжинирингу и начали появляться свободные и открытые клоны. Этот изначальный процесс параллельного развития различных клиентов различными группами продолжается и сегодня.

Механизм работы 
При подключении клиент получает от узла, с которым ему удалось соединиться, список из пяти активных узлов; им отсылается запрос на поиск ресурса по ключевому слову. Узлы ищут у себя соответствующие запросу ресурсы и, если не находят их, пересылают запрос активным узлам вверх по «дереву» (топология сети имеет структуру графа типа «дерево»), пока не найдётся ресурс или не будет превышено максимальное число шагов. Такой поиск называется размножением запросов (query flooding).

Понятно, что подобная реализация ведёт к экспоненциальному росту числа запросов и соответственно на верхних уровнях «дерева» может привести к отказу в обслуживании, что и наблюдалось неоднократно на практике. Разработчики усовершенствовали алгоритм, ввели правила, в соответствии с которыми запросы могут пересылать вверх по «дереву» только определённые узлы — так называемые выделенные (ultrapeers), остальные узлы (leaves) могут лишь запрашивать последние. Введена также система кеширующих узлов.

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

Клиенты 
На 2007 год Gnutella являлась одной из наиболее популярных файлообменных сетей. Работа сети Gnutella непрерывно совершенствуется благодаря усилиям разработчиков множества клиентов сети:
 Специализированные
 LimeWire
 Cabos
 FrostWire
 gtk-gnutella
 Phex
 BearShare (только до версии 5!)
 Qtella

 Мультисетевые
 Shareaza
 mlDonkey
 giFT
 KCeasy

Реакция со стороны FSF 
Название Gnutella первоначально было игрой слов GNU, так как разработчики планировали выпустить исходный код под лицензией GNU GPL, и Nutella — марки любимой ореховой пасты этих разработчиков. Однако, ни самая первая программа, ни соответствующие современные проекты не являются официальным проектом GNU, включая использующие протокол Gnutella gtk-gnutella, mutella и gnucleus. В рамках проекта GNU развивается собственная программа для одноранговых сетей - GNUnet. Кроме того, Фонд свободного программного обеспечения сосредоточен на свободе копирования и изменения программного обеспечения, в то время как Gnutella — это, прежде всего, сеть обмена музыкальными файлами. И хотя существует некоторое сходство в вопросах этики копирования программного обеспечения и музыкальных записей, FSF попросила разработчиков Gnutella изменить название программы для избежания путаницы.

См. также 
 Анонимные сети
 Одноранговые сети
 Gnutella2

Примечания

Ссылки 
 Сайт Gnutella Protocol Development — описание спецификаций протокола Gnutella.
 Gnutelliums — Список клиентов Gnutella для Windows, Linux/Unix, и Macintosh
 Большое интервью с Джастином Франкелем — создателем Gnutella (PDF)

Gnutella
Анонимные файлообменные сети