Гнутелла2
Часть серии о |
Обмен файлами |
---|
![]() |
Gnutella2 , часто называемый G2 , — это одноранговый протокол, разработанный в основном Майклом Стоксом и выпущенный в 2002 году.
Несмотря на то, что G2 вдохновлен протоколом gnutella , он мало чем отличается от своего дизайна, за исключением механизма установления связи и загрузки . [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 расширил протокол, чтобы еще больше сократить разрыв между 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. Однако система обхода также увеличивает сложность сети , а также требует обслуживания и управления сетью , а также требует мер безопасности, предотвращающих злоумышленником использование сети для атак типа «отказ в обслуживании». .
Терминология
[ редактировать ]Существует также разница в терминологии: хотя более мощные узлы, которые используются для уплотнения сети, в gnutella называются Ultrapeers , в Gnutella2 они называются концентраторами , а также используются немного по-другому в топологии. В gnutella Ultrapeers обычно поддерживают столько же узлов, сколько одноранговых соединений, в то время как концентраторы Gnutella2 поддерживают гораздо больше листьев и меньше одноранговых соединений (Hub-to-Hub). Причина этого в том, что методы поиска в различных сетях имеют разную оптимальную топологию.
Клиенты
[ редактировать ]Список
[ редактировать ]Клиенты бесплатного программного обеспечения Gnutella2 включают:
- Адажио [16] (Кросс-платформенный), написанный на языке Ada , под лицензией GPL.
- Gnucleus (Windows), написанный на C / C++ , под лицензией LGPL.
- Gtk-gnutella платформенный), написанный на C. (кросс - Поддерживается только соединение листового режима с G2, начиная с версии 1.1. [17]
MLDonkey(кросс-платформенный), написанный на OCaml под лицензией GPL, однако, начиная с версии 2.9.0 (2007 г.), поддержка официально не поддерживается и отключена в двоичных файлах. [18]- Shareaza (Windows), многосетевая версия, написанная на C++, под лицензией GPL, в настоящее время доля сети составляет +/- 93%. [19]
Реализации собственного программного обеспечения включают в себя:
- Foxy (Windows) Китайская программа, производная от GnucDNA , не допускающая взаимодействия с другими клиентами G2 и использующая собственную сеть «Foxy», которая наполовину плохо отделена от исходного G2 и известна утечкой сети в G2. [ нужна ссылка ] . Теоретически клиент совместим с G2. бесплатно.
- Морфеус (Windows)
Сравнение
[ редактировать ]В следующей таблице сравниваются общие и технические сведения для ряда доступных приложений, поддерживающих сеть G2.
Клиент | Чат | Обрабатывает большие файлы (> 4 ГБ) | UKHL [20] | Юникод | Сопоставление портов UPnP | Обход NAT | Удаленный предварительный просмотр | Возможность поиска по хешам | Режим концентратора | Шпионское ПО / рекламное ПО / вредоносное ПО – бесплатно | Другие сети | На основе | ТЫ | Другой |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Фокси | Да | Нет | Нет | Да | Да | Нет | Нет | Да | только Фокси | Нет | — | ГнукДНК | Кросс-платформенный | - |
ФайлСкопе | Да | Нет | Нет | Нет | Нет | Нет | Да | Да | Да | Да | гутелла , эд2к ,День открытых дверей | - | Окна [21] | Разработка завершилась в 2014 году. [22] |
Гнуклеус | Нет | Нет | Нет | Нет | Нет | Нет | Нет | Да | Нет | Да | нутелла | ГнукДНК | Окна | - |
GTK-gnutella | Нет | Да | Нет | Да | Да | Да | Нет | Да | Нет | Да | нутелла | - | Кросс-платформенный | - |
Морфеус | Да | Нет | Нет | Нет | Да | Нет | Нет | Да | Нет | Нет | гутелла , НЕОНет | ГнукДНК | Окна | Разработка и хостинг клиента остановлены |
Поделиться | Да | Да | Да | Да | Да | Нет | Да | Да | Да | Да | гутелла , | - | Окна | Включает IRC поддержку |
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б «Обсуждение разработчиками сходства между Gnutella и Gnutella2» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 10 мая 2006 г.
- ^ «Обсуждение GDF имени Gnutella2» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 10 мая 2006 г.
- ^ «Часть Войны Пламени Гнутеллы/Гнутеллы2 (1)» . Форум разработчиков Gnutella. Архивировано из оригинала 12 февраля 2009 г. Проверено 6 августа 2006 г.
- ^ «Часть Огненной войны Gnutella/Gnutella2 (2)» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 6 августа 2006 г.
- ^ «Часть Войны Пламени Гнутеллы/Гнутеллы2 (3)» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 6 августа 2006 г.
- ^ «Часть Войны Пламени Гнутеллы/Гнутеллы2 (4)» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 6 августа 2006 г.
- ^ «Обсуждение разработчиками перехода на Gnutella2» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 10 мая 2006 г.
- ^ «История сети Gnutella2» . Поисковый робот Trillinux (G2paranha). Архивировано из оригинала 15 мая 2009 г. Проверено 12 апреля 2009 г.
- ^ «Структура пакета» . Gnutella2 Вики. Архивировано из оригинала 19 декабря 2007 г. Проверено 7 ноября 2007 г.
- ^ Перейти обратно: а б «Гнутелла2 Стандарт» . Гнутелла2 вики. Архивировано из оригинала 19 декабря 2007 г. Проверено 7 ноября 2007 г.
- ^ «Простой язык запросов и метаданные» . Gnutella2 Вики. Архивировано из оригинала 19 декабря 2007 г. Проверено 7 ноября 2007 г.
- ^ «UDP-трансивер — Gnutella2» . G2.doxu.org. Архивировано из оригинала 19 июля 2014 г. Проверено 6 августа 2014 г.
- ^ «Q2 — Гнутелла2» . G2.doxu.org. 25 февраля 2014 г. Архивировано из оригинала 14 июля 2014 г. Проверено 6 августа 2014 г.
- ^ «QH2 — Гнутелла2» . G2.doxu.org. 12 марта 2014 г. Архивировано из оригинала 13 декабря 2013 г. Проверено 6 августа 2014 г.
- ^ «Обсуждение разработчиками форматов пакетов Gnutella и Gnutella2» . Форум разработчиков Gnutella. Архивировано из оригинала 17 января 2023 г. Проверено 15 мая 2006 г.
- ^ «Загрузка Adagio | SourceForge.net» . Архивировано из оригинала 12 ноября 2016 г. Проверено 11 ноября 2016 г.
- ^ «gtk-gnutella — графический клиент Gnutella для Unix» . Gtk-gnutella.sourceforge.net. Архивировано из оригинала 8 июля 2005 г. Проверено 6 августа 2014 г.
- ^ «Поддерживаемые другие сети — MLDonkey» . mldonkey.sourceforge.net . Архивировано из оригинала 12 ноября 2016 г. Проверено 11 ноября 2016 г.
- ^ UKHL = Список известных концентраторов UDP
- ^ «Веб-сайт FileScope: Заявление о кроссплатформенной совместимости» . ФайлСкоп . Архивировано из оригинала 28 августа 2008 г. Проверено 22 августа 2008 г.
- ^ «Файлоскоп» . СоурсФордж . Архивировано из оригинала 25 июня 2021 г. Проверено 25 июня 2021 г.