Gnutella2 , часто называемый G2 , представляет собой одноранговый протокол, разработанный в основном Майклом Стоуксом и выпущенный в 2002 году.
Вдохновленный протоколом gnutella , G2 мало что разделяет в своем дизайне, за исключением квитирования соединения и механизма загрузки . [1]
G2 использует расширяемый формат двоичных пакетов и совершенно новый алгоритм поиска .
Кроме того, G2 имеет связанную (но значительно отличающуюся) топологию сети и улучшенную систему метаданных , которая помогает эффективно уменьшить количество поддельных файлов, таких как вирусы , в сети.
История
В ноябре 2002 года Майкл Стоукс объявил о протоколе Gnutella2 на форуме разработчиков Gnutella . В то время как некоторые думали, что цели, заявленные для Gnutella2, заключаются в первую очередь в том, чтобы полностью отказаться от протокола gnutella 0.6 и начать все заново, чтобы некоторые менее чистые части gnutella были выполнены более элегантно и, в целом, были впечатляющими и желанными; другие разработчики , в первую очередь LimeWire и BearShare , сочли это «дешевым рекламным ходом» и невысокими техническими достоинствами. Некоторые по-прежнему отказываются называть сеть «Gnutella2» и вместо этого называют ее «Протокол Майка» («МП»). [2]
Протокол Gnutella2 по-прежнему использует старую строку подтверждения «GNUTELLA CONNECT / 0.6» для своих подключений [1], как определено в спецификациях gnutella 0.6. Форум разработчиков Gnutella раскритиковал этот обратно совместимый метод рукопожатия как попытку использовать сеть gnutella для начальной загрузки новой, несвязанной сети, в то время как сторонники сети утверждали, что ее намерение состояло в том, чтобы сохранить обратную совместимость с gnutella и позволить существующей gnutella клиенты могут добавить Gnutella2 на досуге.
Когда разработчики закрепились на своих позициях, вскоре разгорелась пламенная война , еще больше укрепившая решимость обеих сторон. [3] [4] [5] [6]
В проекте спецификация была выпущена 26 марта 2003 года, и более подробные спецификации вскоре последовала. G2 не поддерживается многими «старыми» сетевыми клиентами gnutella, однако многие клиенты Gnutella2 все еще подключаются к gnutella. Многие сторонники Gnutella2 утверждают, что это вызвано политическими причинами, в то время как сторонники gnutella утверждают, что радикальные изменения не имеют достаточных достоинств, чтобы перевесить стоимость глубоких изменений. [7]
Дизайн
Gnutella2 делит узлы на две группы: листья и узлы . Большинство Leaves поддерживают два соединения с концентраторами [8], в то время как концентраторы принимают сотни соединений Leaf и в среднем 7 подключений к другим концентраторам. Когда поиск инициируется, узел получает список концентраторов, если необходимо, и связывается с концентраторами в списке, отмечая, какие из них были найдены, пока список не будет исчерпан или не будет достигнут предопределенный предел поиска. Это позволяет пользователю легко найти популярный файл, не загружая сеть, в то же время теоретически сохраняя возможность для пользователя найти один файл, расположенный в любом месте сети.
Концентраторы индекса , что файлы в листе имеет с помощью запроса таблицы маршрутизации , которая заполняется с одиночными битными записями хэш из ключевых слов , которые лист добавление к ступице, и которые концентратор затем комбайнам со всем хэшем - таблицей , ее листы Отправили , чтобы создать версию для отправки на соседние концентраторы. Это позволяет концентраторам значительно снизить пропускную способность , просто не перенаправляя запросы к конечным и соседним концентраторам, если записи, соответствующие поиску, не найдены в таблицах маршрутизации .
Gnutella2 при поиске широко использует UDP , а не TCP . Из-за накладных расходов на установку TCP-соединения система поиска со случайным блужданием , требующая установления связи с большим количеством узлов с небольшими объемами данных, станет неработоспособной. Однако UDP не лишен недостатков. Поскольку UDP не имеет установления соединения, не существует стандартного метода информирования отправляющего клиента о том, что сообщение было получено, и поэтому, если пакет потерян, нет никакого способа узнать. Из-за этого UDP-пакеты в Gnutella2 имеют флаг для включения настройки надежности. Когда получен UDP-пакет с включенным флагом надежности, клиент отвечает пакетом подтверждения, чтобы проинформировать отправляющего клиента о том, что его пакет прибыл в пункт назначения. Если пакет подтверждения не отправлен, надежный пакет будет повторно передан в попытке гарантировать доставку. Пакеты с низкой важностью, для которых не установлен флаг, не требуют пакета подтверждения, что снижает надежность, но также снижает накладные расходы, поскольку нет необходимости отправлять и ожидать пакет подтверждения.
Особенности протокола
Gnutella2 имеет расширяемый формат двоичных пакетов, сравнимый с деревом XML- документов, которое было задумано как ответ на некоторые менее элегантные части gnutella. Формат пакета был разработан таким образом, чтобы можно было добавлять будущие улучшения сети и функции отдельных поставщиков, не беспокоясь о том, чтобы вызвать ошибки в других клиентах в сети. [9]
Для идентификации файлов и проверки их целостности используются хэши SHA-1 . Чтобы обеспечить надежную параллельную загрузку файла из нескольких источников, а также для обеспечения надежной загрузки частей, пока файл все еще загружается ( роится ), используются хэши Tiger tree . [10]
Чтобы создать более надежную и полную систему поиска, Gnutella2 также имеет систему метаданных для более полной маркировки, рейтинга и информации о качестве, которая будет представлена в результатах поиска, чем просто собираемая по именам файлов. [11] Узлы могут передавать эту информацию даже после удаления файла, что позволяет пользователям отмечать вирусы и червей в сети, не требуя от них сохранения копии.
Gnutella2 также использует сжатие в своих сетевых подключениях, чтобы уменьшить полосу пропускания, используемую сетью. [10]
Shareaza имеет дополнительную функцию для запроса превью изображений и видео, хотя только FilesScope имеет ограниченное преимущество.
gtk-gnutella расширил протокол, чтобы еще больше сократить разрыв между Gnutella и G2. В частности, полонадежный уровень UDP был улучшен для добавления кумулятивных и расширенных подтверждений способом, который обратно совместим с унаследованными клиентами G2. [12] Дополнительные расширения включают строку «A» в / Q2 / I [13] и введение / QH2 / H / ALT, / QH2 / H / PART / MT, / QH2 / HN, / QH2 / BH и / QH2 / G1 в результатах запроса. [14]
Отличия от гнутеллы
В целом, эти две сети довольно похожи, с основными различиями в формате пакетов и методологии поиска.
Протокол
Формат пакетов Gnutella подвергался критике за то, что он изначально не был разработан с учетом расширяемости , и за эти годы в него было внесено множество дополнений, что сделало структуру пакетов загроможденной и неэффективной. [15] Gnutella2 извлекла уроки из этого, и помимо многих дополнительных функций стандарта gnutella в Gnutella2, изначально спроектированных с учетом возможности расширения в будущем.
Алгоритм поиска
В то время как gnutella использует для поиска метод переполнения запросов , Gnutella2 использует систему случайного блуждания , при которой поисковый узел собирает список концентраторов и связывается с ними напрямую, по одному. Однако по мере того, как Hub организуются в так называемые «Hub- кластеры », где каждый Hub отражает информацию, хранящуюся его соседями, Leaf возвращает информацию всего Hub-кластера (обычно 7 Hub). Это имеет несколько преимуществ по сравнению с системой заполнения запросов gnutella. Это более эффективно, поскольку продолжение поиска не увеличивает сетевой трафик в геометрической прогрессии , запросы не маршрутизируются через такое количество узлов, и это увеличивает степень детализации поиска, позволяя клиенту останавливаться, как только предварительно определенный порог результатов будет достигнут. был получен более эффективно, чем у гнутеллы. Тем не менее, обходная система также увеличивает сложность сети и требует обслуживания и управления сетью , а также требует мер безопасности для предотвращения использования сети злоумышленником для атак типа «отказ в обслуживании» .
Терминология
Существует также различие в терминологии: в то время как более функциональные узлы, которые используются для уплотнения сети, в gnutella называются Ultrapeers , в Gnutella2 они называются концентраторами , и они также используются несколько иначе в топологии. В gnutella Ultrapeers обычно поддерживают столько же листьев, сколько одноранговых соединений, в то время как Gnutella2 Hubs поддерживают гораздо больше листьев и меньше одноранговых соединений (Hub-to-Hub). Причина этого в том, что методы поиска в различных сетях имеют разные оптимальные топологии.
Клиенты
Список
Клиенты бесплатного программного обеспечения Gnutella2 включают:
- Adagio [16] (кроссплатформенный), написанный на Ada под лицензией GPL.
- Gnucleus (Windows), написанный на C / C ++ , под LGPL
- Gtk-Gnutella (Кросплатформенная), написанный в C . Начиная с версии 1.1 поддерживает только подключения к G2 в оконечном режиме. [17]
MLDonkey(кроссплатформенный), написанный на OCaml под лицензией GPL, однако, начиная с версии 2.9.0 (2007), поддержка официально не поддерживается и отключена в двоичных файлах. [18]- Shareaza (Windows), многосетевой, написанный на C ++, под лицензией GPL, в настоящее время +/- 93% сетевой ресурс [19]
- Sharelin (кросс-платформенный), написанный на C ++, веб-интерфейс
- G2CD (Linux / Unix / BSD) Реализация сети Gnutella2 только в режиме концентратора. [20]
- Quazaa [21] (кросс-платформенный), написанный на C ++ / QT4 под GPLv3. Новый клиент, вдохновленный Shareaza.
Реализации проприетарного программного обеспечения включают:
- Foxy (Windows) Китайская программа, производная от GnucDNA, взаимодействие с другими клиентами G2 невозможно, и использует свою собственную сеть "Foxy", которая наполовину плохо отделена от оригинальной G2 и известна утечкой из сети в G2 [ необходима цитата ] . Теоретически клиент совместим с G2. бесплатно.
- Морфеус (Windows)
Сравнение
В следующей таблице сравнивается общая и техническая информация для ряда доступных приложений, поддерживающих сеть G2.
Клиент | Чат | Обрабатывает большие файлы (> 4 ГБ) | УХЛ [22] | Юникод | Сопоставление портов UPnP | Обход NAT | Удаленный предварительный просмотр | Возможность поиска по хешам | Режим концентратора | Spyware / Adware / Malware -бесплатно | Другие сети | На основе | Операционные системы | Другой |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Адажио | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да | Нет | да | N / A | - | Кроссплатформенность | - |
Фокси | да | Нет | Нет | да | да | Нет | Нет | да | Только Фокси | Нет | N / A | ГнукДНК | Кроссплатформенность | - |
FileScope | да | Нет | Нет | Нет | Нет | Нет | да | да | да | да | Gnutella , eD2k , OpenNap | - | Кроссплатформенность | - |
Gnucleus | Нет | Нет | Нет | Нет | Нет | Нет | Нет | да | Нет | да | гнутелла | ГнукДНК | Окна | - |
gtk-gnutella | Нет | да | Нет | да | да | да | Нет | да | Нет | да | гнутелла | - | Кроссплатформенность | - |
Морфеус | да | Нет | Нет | Нет | да | Нет | Нет | да | Нет | Нет | Gnutella , NEOnet | ГнукДНК | Окна | Разработка и хостинг клиента остановлены |
Quazaa | Нет | Нет | Нет | да | Нет | Только IPv4to6 | Нет | да | да | да | пока нет | - | Кроссплатформенность | Включает чат IRC, поддержку IPv6. Все еще находится на ранней стадии разработки. |
Shareaza | да | да | да | да | да | Нет | да | да | да | да | Gnutella , eD2k , BitTorrent | - | Окна | Включает поддержку IRC |
Шарин | Нет | да | да | Нет | Нет | Нет | Нет | да | Нет | да | N / A | - | Unix / Linux | Консольное приложение с WEB-GUI |
Смотрите также
- ГнукДНК
- Shareaza
Рекомендации
- ^ a b «Обсуждение разработчиками сходства между Gnutella и Gnutella2» . Форум разработчиков Gnutella . Проверено 10 мая 2006 .
- ^ "Обсуждение GDF имени Gnutella2" . Форум разработчиков Gnutella . Проверено 10 мая 2006 .
- ^ "Часть Gnutella / Gnutella2 Flame War (1)" . Форум разработчиков Gnutella . Проверено 6 августа 2006 .
- ^ "Часть Gnutella / Gnutella2 Flame War (2)" . Форум разработчиков Gnutella . Проверено 6 августа 2006 .
- ^ "Часть Gnutella / Gnutella2 Flame War (3)" . Форум разработчиков Gnutella . Проверено 6 августа 2006 .
- ^ "Часть Gnutella / Gnutella2 Flame War (4)" . Форум разработчиков Gnutella . Проверено 6 августа 2006 .
- ^ «Обсуждение разработчиков по переходу на Gnutella2» . Форум разработчиков Gnutella . Проверено 10 мая 2006 .
- ^ "История сети Gnutella2" . Гусеничный робот Trillinux (G2paranha) . Проверено 12 апреля 2009 .
- ^ «Структура пакета» . Gnutella2 Wiki . Проверено 7 ноября 2007 .
- ^ а б «Стандарт Gnutella2» . Gnutella2 вики . Проверено 7 ноября 2007 .
- ^ «Простой язык запросов и метаданные» . Gnutella2 Wiki . Проверено 7 ноября 2007 .
- ^ «Приемопередатчик UDP - Gnutella2» . G2.doxu.org . Проверено 6 августа 2014 .
- ^ «Q2 - Gnutella2» . G2.doxu.org. 2014-02-25 . Проверено 6 августа 2014 .
- ^ «QH2 - Gnutella2» . G2.doxu.org. 2014-03-12 . Проверено 6 августа 2014 .
- ^ «Обсуждение разработчиками форматов пакетов Gnutella и Gnutella2» . Форум разработчиков Gnutella . Проверено 15 мая 2006 .
- ^ "Адажио скачать | SourceForge.net" .
- ^ "gtk-gnutella - Графический клиент Gnutella для Unix" . Gtk-gnutella.sourceforge.net . Проверено 6 августа 2014 .
- ^ "OtherNetworksSupported - MLDonkey" . mldonkey.sourceforge.net .
- ^ «GitHub - kaffeemonster / g2cd: реализация только для концентратора G2» . 27 сентября 2016 г. - через GitHub.
- ^ «Квазаа - Дом» . Quazaa.sourceforge.net . Проверено 6 августа 2014 .
- ^ UKHL = Список известных концентраторов UDP
Внешние ссылки
- Gnutella2 вики
- g2paranha - Сетевой сканер G2