Gnutella

редактировать
Большая одноранговая сеть от Nullsoft

Gnutella - это большая одноранговая сеть. Это была первая децентрализованная одноранговая сеть в своем роде, которая привела к тому, что другие, более поздние сети приняли эту модель. 14 марта 2020 года ему исполнилось два десятилетия, и у него есть миллионы пользователей для однорангового обмена файлами.

В июне 2005 года население Gnutella составляло 1,81 миллиона компьютеров. количество узлов увеличилось до более чем трех миллионов к январю 2006 года. В конце 2007 года это была самая популярная сеть для обмена файлами в Интернете с оценочной долей рынка более 40%.

Содержание

  • 1 История
  • 2 Дизайн
  • 3 Функции и расширения протокола
  • 4 Программное обеспечение
    • 4.1 Общие характеристики
    • 4.2 Характеристики Gnutella
      • 4.2.1 Примечания
  • 5 Gnutella2
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки

История

Первый клиент (также называемый Gnutella), от которого сеть получила свое название, был разработан Джастином Франкелем и Томом Пеппером из Nullsoft в начале 2000 года, вскоре после приобретения компании AOL. 14 марта программа стала доступна для скачивания на серверах Nullsoft. О мероприятии было заранее объявлено на Slashdot, и в тот день тысячи пользователей скачали программу. Исходный код должен был быть выпущен позже под Стандартной общественной лицензией GNU (GPL); однако первоначальным разработчикам так и не представилась возможность достичь этой цели.

На следующий день AOL прекратила доступность программы из-за юридических проблем и запретила Nullsoft продолжать работу над проектом. Это не остановило Gnutella; через несколько дней протокол был реконструирован, и начали появляться совместимые бесплатные клоны с открытым исходным кодом. Эта параллельная разработка разных клиентов разными группами остается modus operandi в разработке Gnutella сегодня.

Среди первых независимых пионеров Gnutella были Джин Кан и Спенсер Кимбалл, они запустили первый портал, призванный собрать сообщество разработчиков ПО с открытым исходным кодом для работы над Gnutella, и также разработал "GNUbile", одну из первых программ с открытым исходным кодом (GNU-GPL) для реализации протокола Gnutella.

Сеть Gnutella является полностью распределенной альтернативой таким полуцентрализованным системам, как FastTrack (KaZaA ) и исходный Napster. Первоначальная популярность сети была вызвана угрозой юридической кончины Napster в начале 2001 года. Этот растущий всплеск популярности выявил пределы масштабируемости исходного протокола. В начале 2001 года вариации протокола (впервые реализованные в частных и закрытых клиентах ) позволили улучшить масштабируемость. Вместо того, чтобы рассматривать каждого пользователя как клиента и сервера, некоторые пользователи теперь рассматривались как ультраперы, маршрутизирующие поисковые запросы и ответы для пользователей, подключенных к ним.

Это позволило сети стать популярнее. В конце 2001 года клиент Gnutella LimeWire Basic стал бесплатным и с открытым исходным кодом. В феврале 2002 года коммерческая группа по обмену файлами Morpheus отказалась от своего однорангового программного обеспечения на основе FastTrack и выпустила новый клиент на основе бесплатного клиента Gnutella с открытым исходным кодом Gnucleus.

Слово Gnutella сегодня относится не к какому-то одному проекту или программе, а к открытому протоколу, используемому различными клиентами.

Название - портманто из GNU и Nutella, торговая марка итальянского спреда со вкусом лесного ореха: предположительно, Франкель и Пеппер съели многие Nutella работали над исходным проектом и намеревались лицензировать свою готовую программу под Стандартной общественной лицензией GNU. Gnutella не связана с проектом GNU или собственной одноранговой сетью GNU, GNUnet.

26 октября 2010 г. популярный клиент Gnutella Судья Кимба Вуд из Окружного суда Соединенных Штатов Южного округа Нью-Йорка приказала закрыть LimeWire, когда она подписала Указ о согласии на с чем согласились истцы звукозаписывающей индустрии и LimeWire. Это событие было вероятной причиной заметного уменьшения размера сети, поскольку при согласовании запрета сотрудники LimeWire вставили код удаленного отключения в программное обеспечение. Когда судебный запрет вступил в силу, пользователи, установившие уязвимые версии (новее 5.5.10), были отключены от P2P-сети. Поскольку LimeWire был бесплатным программным обеспечением, ничто не препятствовало созданию вилок, в которых пропущен код отключения, пока не использовались товарные знаки LimeWire. Выключение не повлияло, например, на FrostWire, ветвь LimeWire, созданную в 2004 году, не содержащую ни кода удаленного отключения, ни рекламного ПО.

9 ноября 2010 года LimeWire был воскрешен секретная команда разработчиков под названием LimeWire Pirate Edition. Он был основан на LimeWire 5.6 BETA. В этой версии были удалены зависимости от сервера, и все функции PRO были включены бесплатно.

Дизайн

Схема узлов Gnutella и их соединений. Протокол поиска и извлечения gnutella

Чтобы представить себе, как изначально работает Gnutella, представьте себе большой круг пользователей (называемых узлами), у каждого из которых есть клиентское программное обеспечение Gnutella. При первоначальном запуске клиентское программное обеспечение должно выполнить загрузку и найти хотя бы один другой узел. Для этого использовались различные методы, включая уже существующий список адресов возможных рабочих узлов, поставляемый с программным обеспечением, с использованием обновленных веб-кешей известных узлов (называемых веб-кешами Gnutella), кешей хостов UDP и, редко, даже IRC.. После подключения клиент запрашивает список рабочих адресов. Клиент пытается подключиться к узлам, с которыми он был поставлен, а также к узлам, которые он получает от других клиентов, до тех пор, пока не достигнет определенной квоты. Он подключается только к этому количеству узлов, локально кэшируя адреса, которые он еще не пробовал, и отбрасывает адреса, которые он пробовал, которые были недействительными.

Когда пользователь хочет выполнить поиск, клиент отправляет запрос каждому активно подключенный узел. В версии 0.4 протокола количество активно подключенных узлов для клиента было довольно небольшим (около 5), поэтому каждый узел затем пересылал запрос всем своим активно подключенным узлам, а они, в свою очередь, пересылали запрос, и так до тех пор, пока пакет не достигнет заранее определенного количества переходов от отправителя (максимум 7).

Начиная с версии 0.6 (2002), Gnutella представляет собой составную сеть, состоящую из листовых узлов и ультраузлов (также называемых ультрапирами). Листовые узлы связаны с небольшим количеством ультрапиров (обычно с 3), в то время как каждый ультрапир связан с более чем 32 другими ультрапирами. С этой более высокой исходящей степенью максимальное количество переходов, которое может пройти запрос, было снижено до 4.

Leaves и ultrapeers используют протокол маршрутизации запросов для обмена таблицей маршрутизации запросов (QRT), таблица из 64 Ki -слотов и до 2 Mi -слотов, состоящих из хешированных ключевых слов. Листовой узел отправляет свой QRT каждому из ультрапира, к которому он подключен, и ультрапир объединяет QRT всех своих листьев (уменьшен до 128 Ki -слотов) плюс свой собственный QRT (если они совместно используют файлы) и обменяться этим со своими соседями. Затем выполняется маршрутизация запроса путем хеширования слов запроса и проверки, все ли они совпадают в QRT. Ultrapeers выполняют эту проверку перед пересылкой запроса на листовой узел, а также перед пересылкой запроса на одноранговый ультраузел при условии, что это последний переход, который может пройти запрос.

Если поисковый запрос обнаруживает результат, узел, у которого есть результат, связывается с искателем. В классическом протоколе Gnutella ответные сообщения отправлялись обратно по маршруту, по которому прошел запрос, поскольку сам запрос не содержал идентифицирующей информации об узле. Позднее эта схема была пересмотрена, и теперь результаты поиска доставляются по протоколу User Datagram Protocol (UDP) непосредственно на узел, который инициировал поиск, обычно это ультрапир узла. Таким образом, в текущем протоколе запросы содержат IP-адрес и номер порта любого узла. Это снижает объем трафика, направляемого через сеть Gnutella, что делает ее значительно более масштабируемой.

Если пользователь решает загрузить файл, он согласовывает передачу файла. Если узел, имеющий запрошенный файл, не имеет брандмауэра, запрашивающий узел может подключиться к нему напрямую. Однако, если узел защищен брандмауэром, что мешает исходному узлу получать входящие соединения, клиент, желающий загрузить файл, отправляет ему так называемый push-запрос на сервер, чтобы удаленный клиент вместо этого инициировал соединение (чтобы отправить файл). Сначала эти push-запросы направлялись по исходной цепочке, которая использовалась для отправки запроса. Это было довольно ненадежно, потому что маршруты часто ломались, а маршрутизируемые пакеты всегда подлежали управлению потоком. Поэтому были введены так называемые push-прокси. Обычно это ультраперы листового узла, и они объявляются в результатах поиска. Клиент подключается к одному из этих push-прокси с помощью HTTP-запроса, и прокси-сервер отправляет push-запрос для выхода от имени клиента. Обычно также можно отправить push-запрос через UDP на push-прокси, что более эффективно, чем использование TCP. У push-прокси есть два преимущества: во-первых, ультрапир-листовые соединения более стабильны, чем маршруты, что делает push-запросы намного более надежными. Во-вторых, это уменьшает объем трафика, маршрутизируемого через сеть Gnutella.

Наконец, когда пользователь отключается, клиентское программное обеспечение сохраняет список узлов, к которым он был активно подключен, и те, которые были собраны из пакетов pong для использования в следующий раз, когда он попытается подключиться, чтобы он стал независимым от каких-либо служб начальной загрузки.

На практике этот метод поиска в сети Gnutella часто был ненадежным. Каждый узел является обычным пользователем компьютера; как таковые, они постоянно подключаются и отключаются, поэтому сеть никогда не бывает полностью стабильной. Кроме того, затраты на полосу пропускания для поиска в Gnutella экспоненциально росли с увеличением количества подключенных пользователей, часто насыщая соединения и делая более медленные узлы бесполезными. Поэтому поисковые запросы часто отбрасывались, и большинство запросов достигало лишь очень небольшой части сети. Это наблюдение идентифицировало сеть Gnutella как немасштабируемую распределенную систему и вдохновило на разработку распределенных хэш-таблиц, которые гораздо более масштабируемы, но поддерживают только поиск по точному совпадению, а не по ключевым словам..

Для решения проблем узких мест разработчики Gnutella внедрили многоуровневую систему ультрапиров и листьев. Вместо того, чтобы все узлы считались равными, узлы, входящие в сеть, оставались на `` краю '' сети как лист, не отвечающий за какую-либо маршрутизацию, а узлы, которые могли маршрутизировать сообщения, были повышены до ультрапиров, которые принимали лист соединения и поиск маршрутов, а также сообщения об обслуживании сети. Это позволило расширить поисковые запросы по сети и позволило внести многочисленные изменения в топологию, которые значительно повысили эффективность и масштабируемость.

Кроме того, gnutella приняла ряд других методов, чтобы уменьшить накладные расходы трафика и сделать поиск более эффективным. эффективный. Наиболее известными являются протокол маршрутизации запросов (QRP) и динамические запросы (DQ). С QRP поиск достигает только тех клиентов, у которых, вероятно, есть файлы, поэтому поиск по редким файлам становится намного более эффективным, а с DQ поиск останавливается, как только программа получает достаточно результатов поиска, что значительно снижает объем вызываемого трафика. по популярным поисковым запросам. Gnutella для пользователей содержит огромное количество информации об этих и других улучшениях Gnutella в удобном для пользователя стиле.

Одним из преимуществ такой децентрализации Gnutella является то, что очень сложно отключите сеть и сделайте ее такой, в которой пользователи будут единственными, кто может решать, какой контент будет доступен. В отличие от Napster, где вся сеть полагалась на центральный сервер, Gnutella не может быть выключена путем выключения какого-либо одного узла. Децентрализованная сеть не позволяет злоумышленникам взять под свой контроль содержимое сети и / или манипулировать данными, управляя центральным сервером.

Функции и расширения протокола

Gnutella когда-то действовала исключительно на протокол лавинной рассылки запросов. Устаревшая версия Gnutella 0.4 сетевой протокол использует пять различных типов пакетов, а именно

  • ping: обнаружение хостов в сети
  • pong: ответ на ping
  • query: search for файл
  • попадание запроса: ответ на запрос
  • push: запрос загрузки для сервантов с брандмауэром

Они в основном связаны с поиском в сети Gnutella. Передача файлов осуществляется с использованием HTTP.

Разработкой протокола Gnutella в настоящее время руководит Форум разработчиков Gnutella (GDF). Многие расширения протоколов были и разрабатываются поставщиками программного обеспечения и разработчиками бесплатных Gnutella для GDF. Эти расширения включают интеллектуальную маршрутизацию запросов, контрольные суммы SHA-1, передачу попаданий запроса через UDP, запросы через UDP, динамические запросы через TCP, передачу файлов через UDP, XML метаданные, обмен источниками (также называемый сеткой загрузки) и параллельная загрузка по частям (роение).

Предпринимаются попытки завершить эти расширения протокола в спецификации Gnutella 0.6 в протоколе Gnutella веб-сайт разработки. Стандарт Gnutella 0.4, хотя и является последней спецификацией протокола, поскольку все расширения существуют пока только в виде предложений, устарел. Фактически, сегодня сложно или невозможно подключиться к рукопожатию 0.4, и, по мнению разработчиков из GDF, новым разработчикам следует использовать версию 0.6, используя незавершенные спецификации.

Протокол Gnutella остается в рамках Несмотря на попытки полностью отказаться от сложности, унаследованной от старой Gnutella 0.4, и разработать чистую новую архитектуру сообщений, он по-прежнему остается одним из самых успешных протоколов обмена файлами на сегодняшний день.

Программное обеспечение

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

Общие характеристики

ИмяПлатформаЛицензияПроект активен?. (в противном случае прекращено)Последний выпускHeritage
ПриобретениеmacOS Собственная Нет2.2 (v223) (19 ноября 2010 г.; 9 лет назад (2010-11-19))LimeWire
BearFlix Windows Собственный Нет5.2.6.0BearShare
BearShare WindowsСобственный Нет10.0.0.131462 (29 января 2013 г.; 7 лет назад (29.01.2013))Оригинальная работа
Cabos Java GNU GPL Нет0.8.2 (9 февраля 2010 г.; 10 лет назад (2010-02-09))LimeWire
CitrixWireWindowsСобственная Нет2014Addax
CocoGnutRISC OS Собственная Нет1.21 (2005-06 -21)Оригинальная работа
FilesWire (P2P)JavaСобственный НетBeta 1.1 (2007)Оригинальная работа
giFT (плагин Gnutella)Кросс-платформенный GNU GPLНет0.0.11 (2006-08-06)Оригинальная работа
Gnucleus - GnucDNA WindowsGNU GPL, LGPL 2.2.0.0 (17 июня 2005 г.; 15 лет назад (17.06.2005)Оригинальная работа
gtk-gnutella Кросс-платформеннаяGNU GPLДа1.2.0 (9 июля 2020 г.; 3 месяца назад (2020-07-09))Оригинальная работа
KCeasy WindowsGNU GPLНет0.19-rc1 (3 февраля 2008; 12 лет назад (2008-02-03))giFT
Kiwi Alpha WindowsGNU GPLНет2.2.0.0 (17 июня 2005 г.; 15 лет назад (2005-06-17))GnucDNA
LimeWire JavaGNU GPL5.5.16 (30 сентября 2010 г.; 10 лет назад (30.09.2010))Оригинальная работа
Morpheus WindowsСобственная 5.55.1 (15 ноября 2007 г.; 12 лет назад (2007-11-15))GnucDNA
Phex JavaGNU GPLНет3.4.2.116 (1 февраля 2009 г.; 11 лет назад (2009-02-01))Оригинальная работа
Отравленная macOSGNU GPLНет0.5191 (8 августа 2006 г.; 14 лет назад (2006-08- 08))giFT
Shareaz a WindowsGNU GPLДа2.7.10.2 (18 сентября 2017 г.; 3 года назад (2017-09-18))Оригинальная работа
SymellaSymbian GNU GPLНетОригинальная работа
WireShare (также известное как LimeWire Pirate Edition)JavaGNU GPLДа6.0.1 (2020-08-29)LimeWire
Zultrax WindowsСобственная 4.33 (апрель 2009 г.)Оригинальная работа

Прекращенный проект

Возможности Gnutella

КлиентПоиск по хэшуChatСписок друзейОбрабатывает большие файлы (>4 ГиБ )Unicode-совместимая маршрутизация запросовсопоставление портов UPnPобход NAT сопоставление портов NAT RUDpush-прокси TCPpush-прокси UDPUltrapeerGWebCacheКеш хоста UDPTHEXTLS Другое
BearShare ДаДаДаНетНетДаДаДаДаДаНетДаДаНетДаНет-
giFT (co пере плагины)ДаН / ПН / ПНетНетНетНетНетНетДаНетНетДаНетНетНет-
GnucDNA ДаН / ДН / ДНетНетНетНетНетНетДаНетНетДаНетНетНет-
gtk-gnutella ДаНетНетДаДаДаДаДаДаДаДаДаНет (отброшено)ДаДаДаIPv6, DHT, GUESS, G2
LimeWire ДаДаGMail или XMPPДаДаДаДаДаДаДаДаДаДаДаДаДаDHT
WireShare ДаДаGMail или XMPPДаДаДаДаДаДаДаДаДаДаДаДаДаDHT
Phex ДаДаНетДаДаНетДаНетНетДаНетДаДаДаДаДаI2P
Shareaza ДаДаНетДаНетДаДаДаНетДаДаДаДаДаДаНетG2, BT, eD2k, IRC

Примечания

  • Morpheus значительно отличается и может иметь полностью независимый код от движка GnucDNA. Morpheus может функционировать как современный ультрапир, тогда как другие клиенты GnucDNA не могут.
  • Gnucleus и Kiwi Alpha используют механизм GnucDNA.
  • BearFlix, функционально ограниченная версия BearShare серии 5.2, может искать только изображения или видео, а общие видео ограничены относительно короткой длиной.
  • giFTcurs, Apollon, FilePipe, giFToxic, giFTwin32, KCeasy, Poisoned и являются интерфейсами GUI для движка giFT.
  • Этами использует устаревший сетевой код Shareaza.
  • MP3 Rocket, 360Share, LemonWire, MP3Torpedo и DexterWire являются вариантами LimeWire.
  • FrostWire ( до версии 4.21.8) почти идентичен LimeWire 4.18, но версии выше 5.00 больше не используют gnutella.
  • Acquisition и Cabos - это пользовательские интерфейсы, накладывающиеся на LimeWire.
  • LimeWire Pirate Edition (5.6.2) - это возрожденная версия неизданного LimeWire 5.6.1 alpha, таким образом, имеет аналогичные функции за исключением автоматических обновлений (с пометками) и централизованного дистанционного управления для отключения основных функций, таких как поиск и загрузка, были удалены.

Gnutella2

Протокол Gnutella2 ( часто упоминается как G2), несмотря на свое название, не является протоколом-преемником Gnutella и не связан с исходным проектом Gnutella, а скорее представляет собой совершенно другой протокол, который разветвляет из исходного проекта и совмещает его с Gnutella название. Болезненным моментом для многих разработчиков Gnutella является то, что название Gnutella2 передает улучшение или превосходство, которое привело к огненной войне. Другая критика включала использование сети Gnutella для начальной загрузки пиров G2 и плохую документацию протокола G2. Кроме того, более частые попытки поиска клиента Shareaza, одного из первых клиентов G2, могут излишне обременить сеть Gnutella.

Оба протокола претерпели значительные изменения с момента форка в 2002 году. G2 имеет преимущества и недостатки по сравнению с Gnutella. Часто упоминаемым преимуществом является то, что гибридный поиск Gnutella2 более эффективен, чем исходный Gnutella запрос-лавин, который позже был заменен более эффективными методами поиска, начиная с Query Routing в 2002 году, который был предложен в 2001 году разработчиками Limewire. Преимущество Gnutella в том, что количество ее пользователей исчисляется миллионами, тогда как сеть G2 примерно на порядок меньше. Сложно сравнивать протоколы в их нынешнем виде; выбор отдельного клиента, вероятно, окажет такое же влияние на конечного пользователя в любой из сетей.

См. Также

Ссылки

  • Dye, Mark. Макдональд, Рик. Руфи, Антун В., «Основы сети», Сетевая академия Cisco, Cisco Press, глава 3. p91
  • Dye, Mark. Макдональд, Рик. Руфи, Энтун В., «Основы сети», Сетевая академия Cisco, Cisco Press, глава 3. p90

Внешние ссылки

В Викиучебнике есть книга по теме: Мир равноправных узлов. to-Peer (P2P) / Сети и протоколы / Gnutella
Последняя правка сделана 2021-05-21 11:48:29
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте