Gnutella2 (Gnutella2)

Перейти к навигации Перейти к поиску

Gnutella2, G2 — файлообменный OpenSource P2P-протокол, используемый программой Shareaza. Разработан её автором как форк протокола Gnutella; не был положительно оценён участниками gnutella‐форума.

Работа сети

[править | править код]
  1. Только что установленный клиент получает список хабов со специального сервера, который производит мониторинг сети и учёт активных хабов (это происходит только при пустом кеше хабов у клиента) и записывает их в кеш.
  2. Клиент пытается установить постоянное соединение с двумя активными хабами, проходя по адресам в кеше.
  3. Клиент запрашивает список активных хабов, соединённых с ним, и поочерёдно отправляет поисковый запрос на них.
  4. Клиент получает ответы напрямую от клиентов, у которых есть файл или информация о нём (призрак).
  5. Клиент соединяется с другими клиентами и получает от них информацию:
    1. о других источниках файла
    2. о файле (разрешение, частота кадров, длительность и т. д.)
    3. превью файла (маленькое изображение кадра из видео либо миниатюра изображения)
    4. мнение других о файле и его оценку
  6. Клиент соединяется с источниками и начинает параллельную загрузку файла по протоколу HTTP с несколькими новыми хедерами.

Источниками файла могу служить и обычные HTTP-серверы, но обмен адресами этих серверов отключён в клиентах.

Через некоторое время клиент оценивает возможности системы и при достаточном их уровне переключается в режим хаба, подключается к множеству хабов и обслуживает сотни клиентов.

Отличие Gnutella2 от Gnutella

[править | править код]

Протокол Gnutella2 не является более новой версией Gnutella, а является его форком (ответвлением). Приведённые преимущества, в основном, относятся ко времени создания Gnutella2.

В общем, две сети похожи между собой, отличаясь форматами пакетов и методом поиска. Формат пакета сети Gnutella в течение долгого времени подвергался критике из‑за того, что в нём изначально не планировалось расширение возможностей. Со временем различные разработчики добавляли новые возможности в формат пакета и его структура стала неэффективной и сложной для использования. Сеть Gnutella2 создавалась с учётом ошибок тогдашней сети Gnutella и изначально разрабатывалась с возможностью расширения. Кроме того, сеть изначально включила в себя расширения, добавленные различными разработчиками к сети Gnutella.

Другое серьёзное отличие одной сети от другой было в алгоритме поиска. Сеть Gnutella 0.4 использовала метод поиска query flooding, а сеть Gnutella2 использует метод обхода сети. При этом методе узел, с которого осуществляется поиск, собирает список узлов (hub) и связывается с ними напрямую, по одному за раз. Такой способ поиска имеет несколько преимуществ. Он более эффективен, так как продолжение поиска в сети не увеличивает сетевой трафик экспоненциально. Современная версия протокола Gnutella, 0.6, не имеет такой проблемы.[1] Запросы не направляются через большое количество посредников, и это позволяет клиенту остановить поиск при получении требуемого количества информации. Одновременно повышается сложность созданной сети, поэтому может потребоваться специализированное обслуживание сети.

Также появилось различие в терминологии. Узлы, поддерживающие работу сети в Gnutella, называются Ultrapeer, а в сети Gnutella2 — Hub. Также изменилась топология сети. В Gnutella Ultrapeer поддерживают небольшое количество связей с листьями (leaf) и большое количество связей с другими узлами сети (c ultrapeer и peer). В Gnutella2, наоборот, Hub поддерживает связь с большим количеством листьев (leaf) и малое количество связей с другими узлами (hub). Такое различие в топологиях вызвано тем, что различные методы поиска имеют различные оптимальные топологии сети.

Список клиентов сети Gnutella2:

  • Shareaza (Windows), открытые исходные тексты на языке C++ под лицензией GPL.
  • Kiwi Alpha (Windows), закрытые исходные тексты.
  • Morpheus (Windows), закрытые исходные тексты.
  • Gnucleus (Windows), открытые исходные тексты ядра на языке C/C++ под лицензией LGPL.
  • Adagio (Cross Platform), открытые исходные тексты на языке Ada под лицензией GPL.
  • Pocket G2 (Windows Pocket PC), закрытые исходные тексты.
  • FileScope (Cross Platform), открытые исходные тексты на языке C# под лицензией GPL.
  • MLDonkey (Cross Platform), открытые исходные тексты на языке Ocaml под лицензией GPL.
  • TrustyFiles (Windows), закрытые исходные тексты.
  • Sharelin (Cross Platform), открытые исходные тексты на языке C++ под лицензией GPL.

Примечания

[править | править код]
  1. Why Gnutella scales quite well. Дата обращения: 24 ноября 2007. Архивировано 20 августа 2008 года.