Gnutella2 - Gnutella2

Gnutella2, часто называемый G2, это пиринговый протокол разработан в основном Майкл Стоукс и выпущен в 2002 году.

Хотя вдохновленный гнутелла протокол, G2 мало что разделяет его дизайн, за исключением рукопожатие соединения и скачать механика.[1]

G2 использует расширяемый двоичный файл пакет формат и совершенно новый алгоритм поиска.

Кроме того, у G2 есть родственные (но существенно отличающиеся) топология сети и улучшенный метаданные система, которая помогает эффективно уменьшить количество поддельных файлов, таких как вирусы, в сети.

История

В ноябре 2002 года Майкл Стоукс объявил о протоколе Gnutella2 на Форум разработчиков Gnutella. Хотя некоторые думали, что цели, заявленные для Gnutella2, заключаются в первую очередь в том, чтобы полностью отказаться от протокола gnutella 0.6 и начать все сначала, чтобы некоторые менее чистые части gnutella были выполнены более элегантно и, в целом, были впечатляющими и желанными; Другой Разработчики, прежде всего LimeWire и BearShare, думал, что это "дешевый рекламный трюк "и сниженные технические достоинства. Некоторые по-прежнему отказываются называть сеть" Gnutella2 ", а вместо этого называют ее" Протокол Майка "(" MP ").[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 делит узлы на две группы: Листья и концентраторы. Большинство листьев поддерживают два связи в концентраторы,[8] в то время как концентраторы принимают сотни подключений Leaf и в среднем 7 подключений к другим концентраторам. Когда поиск инициируется, узел получает список концентраторов, если необходимо, и связывается с концентраторами в списке, отмечая, какие из них были найдены, пока список не будет исчерпан или не будет достигнут предопределенный предел поиска. Это позволяет пользователю легко найти популярный файл, не загружая сеть, в то же время теоретически сохраняя возможность для пользователя находить один файл, расположенный в любом месте сети.

Хабы индексируют что файлы Лист с помощью Таблица маршрутизации запросов, который заполнен одиночными кусочек записи хеши из ключевые слова, который Лист загружает к концентратору, и который затем объединяет со всеми хеш-таблицы его листья отправили, это для того, чтобы создать версию для отправки в соседние концентраторы. Это позволяет концентраторам сократить пропускная способность сильно, просто не пересылая запросы в листья и соседние хабы, если записи, соответствующие поиску, не найдены в таблицы маршрутизации.

Gnutella2 широко использует UDP, скорее, чем TCP, для поиска. В накладные расходы установки TCP-соединения сделало бы случайная прогулка поисковая система, требующая контакта большого количества узлов с небольшими объемами данных, неработоспособна. Однако UDP не лишен недостатков. Поскольку UDP не требует установления соединения, не существует стандартного метода информирования отправляющего клиента о том, что сообщение был получен, поэтому, если пакет потерян, нет никакого способа узнать. Из-за этого UDP-пакеты в Gnutella2 имеют флаг для включения настройки надежности. Когда получен UDP-пакет с включенным флагом надежности, клиент ответит подтвердить пакет чтобы сообщить отправляющему клиенту, что его пакет прибыл в пункт назначения. Если пакет подтверждения не отправлен, надежный пакет будет повторно передан в попытке гарантировать доставку. Пакеты с низкой важностью, для которых не установлен флаг, не требуют пакета подтверждения, что снижает надежность, но также снижает накладные расходы, поскольку нет необходимости отправлять и ожидать пакет подтверждения.

Особенности протокола

Gnutella2 имеет расширяемый формат двоичных пакетов, сравнимый с XML дерево документов, которое было задумано как ответ на некоторые менее элегантные части gnutella. Формат пакета был разработан таким образом, чтобы можно было добавлять будущие улучшения сети и функции отдельных поставщиков, не беспокоясь о том, что ошибки в других клиентах сети.[9]

Для идентификации файла и безопасного честность проверка файлов, которые он использует SHA-1 хеши. Чтобы файл был надежно скачано параллельно из нескольких источников, а также для обеспечения надежной загрузки частей, пока файл еще загружается (роение ), Хеши тигрового дерева используются.[10]

Чтобы создать больше крепкий и полноценная система поиска, Gnutella2 также имеет метаданные система для более полной маркировки, рейтинга и информации о качестве, которая будет представлена ​​в результатах поиска, чем просто собираемая по именам файлов.[11] Узлы могут делиться этой информацией даже после удаления файла, что позволяет пользователям отмечать вирусы и черви в сети, не требуя от них хранить копию.

Gnutella2 также использует сжатие в своих сетевых подключениях, чтобы уменьшить полосу пропускания, используемую сетью.[10]

Shareaza есть дополнительная функция для запроса превью изображений и ролики хотя только FilesScope пользуется этим ограниченным преимуществом.

gtk-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" кластеры ", где каждый концентратор отражает информацию, хранящуюся его соседями, Leaf возвращает информацию всего кластера концентратора (обычно 7 концентраторов). Это имеет несколько преимуществ по сравнению с системой лавинной рассылки запросов gnutella. Это более эффективно, так как продолжение поиска не увеличивает сетевой трафик экспоненциально, запросы не маршрутизируются через такое количество узлов, и это увеличивает детализация поиска, позволяя клиенту остановиться, как только будет получен заранее определенный порог результатов, более эффективно, чем в gnutella. Однако система ходьбы также увеличивает сложность сети и обслуживание и управление сетью требуется, а также требовать гарантий для предотвращения злоумышленник от использования сети для атаки отказа в обслуживании.

Терминология

Существует также различие в терминологии: в то время как более функциональные узлы, которые используются для уплотнения сети, называются Ultrapeers в гнутелле их называют Концентраторы в Gnutella2, и они также используются немного иначе в топологии. В gnutella Ultrapeers обычно поддерживают столько же листьев, сколько одноранговых соединений, в то время как Gnutella2 Hubs поддерживают гораздо больше листьев и меньше одноранговых соединений (Hub-to-Hub). Причина этого в том, что методы поиска в различных сетях имеют разные оптимальные топологии.

Клиенты

Список

Бесплатно программное обеспечение Среди клиентов Gnutella2:

  • Адажио[16] (Кросс-платформенный), написанный на Ада под лицензией 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]
  • Шарин (Кросс-платформенный), написанный на C ++, веб-интерфейс
  • G2CD (Linux / Unix / BSD) Реализация сети Gnutella2 только в режиме концентратора.[20]
  • Quazaa[21] (Кросс-платформенный), написанный на C ++ / QT4 под GPLv3. Новый клиент, вдохновленный Shareaza.

Проприетарное программное обеспечение реализации включают:

  • Фокси (Windows) китайский ГнукДНК - производная программа, взаимодействие с любыми другими клиентами G2 невозможно, и использует свою собственную сеть "Foxy", которая наполовину плохо отделена от исходного G2 и известна утечкой из сети в G2.[нужна цитата ]. Теоретически клиент совместим с G2. свободный.
  • Морфеус (Windows)

Сравнение

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

КлиентЧатОбрабатывает большие файлы (> 4 ГБ)УХЛ[22]UnicodeСопоставление портов UPnPОбход NATУдаленный предварительный просмотрВозможность поиска по хешамРежим концентратораШпионское ПО / Рекламное ПО / Вредоносное ПО -свободныйДругие сетиНа основеОперационные системыДругой
АдажиоНетНетНетНетНетНетНетдаНетдаНет данных-Кроссплатформенность-
ФоксидаНетНетдадаНетНетдаТолько ФоксиНетНет данныхГнукДНККроссплатформенность-
FileScopeдаНетНетНетНетНетдадададагнутелла,

eD2k,OpenNap

-Кроссплатформенность-
GnucleusНетНетНетНетНетНетНетдаНетдагнутеллаГнукДНКWindows-
gtk-gnutellaНетдаНетдададаНетдаНетдагнутелла-Кроссплатформенность-
МорфеусдаНетНетНетдаНетНетдаНетНетгнутелла,

NEOnet

ГнукДНКWindowsРазработка и хостинг клиента остановлены
QuazaaНетНетНетдаНетТолько IPv4to6Нетдададапока нет-КроссплатформенностьВключает чат IRC, поддержку IPv6. Все еще находится на ранней стадии разработки.
ShareazaдададададаНетдадададагнутелла,

eD2k, BitTorrent

-WindowsВключает IRC поддерживать
ШаринНетдадаНетНетНетНетдаНетдаНет данных-Unix /LinuxКонсольное приложение с WEB-GUI

Смотрите также

Рекомендации

  1. ^ а б «Обсуждение разработчиками сходства между Gnutella и Gnutella2». Форум разработчиков Gnutella. Получено 2006-05-10.
  2. ^ "Обсуждение GDF названия Gnutella2". Форум разработчиков Gnutella. Получено 2006-05-10.
  3. ^ "Часть Gnutella / Gnutella2 Flame War (1)". Форум разработчиков Gnutella. Получено 2006-08-06.
  4. ^ "Часть Gnutella / Gnutella2 Flame War (2)". Форум разработчиков Gnutella. Получено 2006-08-06.
  5. ^ "Часть Gnutella / Gnutella2 Flame War (3)". Форум разработчиков Gnutella. Получено 2006-08-06.
  6. ^ "Часть Gnutella / Gnutella2 Flame War (4)". Форум разработчиков Gnutella. Получено 2006-08-06.
  7. ^ «Обсуждение разработчиками перехода на Gnutella2». Форум разработчиков Gnutella. Получено 2006-05-10.
  8. ^ "История сети Gnutella2". Гусеничный робот Trillinux (G2paranha). Получено 2009-04-12.
  9. ^ «Структура пакета». Gnutella2 вики. Получено 2007-11-07.
  10. ^ а б "Gnutella2 Standard". Gnutella2 вики. Получено 2007-11-07.
  11. ^ «Простой язык запросов и метаданные». Gnutella2 вики. Получено 2007-11-07.
  12. ^ "UDP-трансивер - Gnutella2". G2.doxu.org. Получено 2014-08-06.
  13. ^ «Q2 - Gnutella2». G2.doxu.org. 2014-02-25. Получено 2014-08-06.
  14. ^ "QH2 - Gnutella2". G2.doxu.org. 2014-03-12. Получено 2014-08-06.
  15. ^ "Обсуждение разработчиками форматов пакетов Gnutella и Gnutella2". Форум разработчиков Gnutella. Получено 2006-05-15.
  16. ^ "Скачать Adagio | SourceForge.net".
  17. ^ "gtk-gnutella - Графический клиент Gnutella для Unix". Gtk-gnutella.sourceforge.net. Получено 2014-08-06.
  18. ^ "OtherNetworksSupported - MLDonkey". mldonkey.sourceforge.net.
  19. ^ «Сетевой ресурс Shareaza в сети G2». Гусеничный робот Trillinux (G2paranha). Получено 2008-09-18.
  20. ^ "GitHub - kaffeemonster / g2cd: реализация только для концентратора G2". 27 сентября 2016 г. - через GitHub.
  21. ^ «Квазаа - Дом». Quazaa.sourceforge.net. Получено 2014-08-06.
  22. ^ UKHL = Список известных концентраторов UDP

внешняя ссылка