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.

См. также[править | править исходный текст]

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]