Gnutella2
Gnutella2, G2 — файлообменный OpenSource P2P-протокол, используемый программой Shareaza. Разработан её автором как форк протокола Gnutella; не был положительно оценён участниками gnutella‐форума.
Работа сети
- Только что установленный клиент получает список хабов со специального сервера, который производит мониторинг сети и учёт активных хабов (это происходит только при пустом кеше хабов у клиента) и записывает их в кеш.
- Клиент пытается установить постоянное соединение с двумя активными хабами, проходя по адресам в кеше.
- Клиент запрашивает список активных хабов, соединённых с ним, и поочерёдно отправляет поисковый запрос на них.
- Клиент получает ответы напрямую от клиентов, у которых есть файл или информация о нём (призрак).
- Клиент соединяется с другими клиентами и получает от них информацию:
- о других источниках файла
- о файле (разрешение, частота кадров, длительность и т. д.)
- превью файла (маленькое изображение кадра из видео либо миниатюра изображения)
- мнение других о файле и его оценку
- Клиент соединяется с источниками и начинает параллельную загрузку файла по протоколу 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.