Топ питань
Часова шкала
Чат
Перспективи

Gnutella

З Вікіпедії, вільної енциклопедії

Remove ads

Gnutella (вимовляється [nʊˈtɛlə] з глухим g) — це децентралізований піринговий мережевий протокол(інші мови) для обміну файлами. Попри назву, Gnutella не є частиною проєкту GNU[1].

Мережа Gnutella повністю децентралізована, що означає відсутність центральних серверів для обробки пошукових запитів[2].

Історія

Узагальнити
Перспектива

Протокол Gnutella був розроблений Джастіном Френкелем(інші мови) (винахідником і колишнім розробником аудіоплеєра Winamp), який випустив бета-версію програми, яка також називається «Gnutella», для безкоштовного завантаження в Інтернеті 14 березня 2000 року як перше програмне забезпечення для мережі Gnutella. Однак роботодавець Френкеля, компанія AOL, змусила його відмовитися від проєкту, і програма перестала бути доступною на веб-сайті проекту вже через день після її випуску[2]. Однак він уже був широко розповсюджений і досі доступний у чатах IRC та на сторонніх вебсайтах. Через деякий час групі незалежних розробників вдалося розшифрувати протокол Gnutella і опублікувати свої результати. В результаті для мережі Gnutella було розроблено безліч інших програм, які також значно розширили сферу застосування мережі[3].

Мережа Gnutella є нащадком централізованої мережі Napster (який значною мірою вплинув на створення мережі Gnutella), відрізняється принциповою відсутністю центрального сервера. Мотивація Френкеля полягала в тому, щоб створити мережу, яка, на відміну від Napster, обходилася б без центрального сервера, а отже, і без центрального оператора, проти якого можна було б висунути юридичні звинувачення[4].

Створення мережі ініціювала компанія America Online, використавши для цієї мети програмістів з підрозділу Nullsoft. 14 березня 2000 р. з'явилася перша версія програми, яка давала можливість користувачу шукати і обмінюватися всіма видами файлів з іншими власниками Gnutella без участі будь-яких серверів. Після того, як AOL купила медіа-конгломерат Time Warner, мережу намагалися закрити, але ці спроби провалилися. Це також спонукало творців (Джастін Френкель і Том Пеппер) мережі звільнитися з AOL, після чого вони стали самостійно розвивати цю мережу.

Проєкт gPulp під керівництвом Себастьяна був ініціативою з розробки більш ефективного і масштабованого універсального комунікаційного протоколу наступного покоління для файлообмінної мережі Gnutella, щоб вирішити деякі обмеження оригінальної мережі Gnutella, такі як низька продуктивність пошуку і неефективна маршрутизація. Крім того, проєкт мав на меті покращити можливості розподіленого пошуку. Однак проєкт зіткнувся з труднощами, в тому числі з конкуренцією з боку Intel's P2P Working Group, яка працювала над стандартизацією протоколів P2P. Проєкт gPulp не став домінуючим протоколом Gnutella, і його розвиток сповільнився[5].

Remove ads

Функціонування

Узагальнити
Перспектива

Щоб функціонувати, клієнтська програма повинна знайти принаймні одного іншого користувача (так званий вузол). Для цього існують різні методи, такі як заздалегідь визначені списки серверів, сторінки GWebCache в Інтернеті або обмін списками хостів через IRC. Коли з'єднання встановлено, програми обмінюються списками доступних вузлів, з якими потім зв'язуються по черзі, поки не буде досягнуто заданої кількості з'єднань. Якщо користувач мережі запускає пошуковий запит, він спочатку пересилається лише сусіднім клієнтам. Потім вони пересилають запит своїм сусідам, доки не знайдуть потрібний файл. Після цього може бути встановлено пряме з'єднання між користувачем, який шукає, і користувачем, який пропонує, для передачі даних.

Особливою перевагою такої структури мережі є її надійність, оскільки пошукові запити можуть бути переадресовані, навіть якщо окремі частини мережі тимчасово недоступні. Недоліком, однак, є велика тривалість виконання пошукового запиту, оскільки немає центрального індексного сервера, і високе навантаження на мережу, оскільки кількість запитів зростає в геометричній прогресії з відстанню до клієнта, який шукає інформацію.

В останні роки, мережа Gnutella була значно вдосконалена, завдяки чому її ефективність значно зросла. Прикладами цього є QRP, за допомогою якого джерела обмінюються файлами, які вони мають, так що на останніх двох етапах запити пересилаються лише тим, хто може відповісти, і динамічні пошукові запити, за допомогою яких запити надсилаються не до всіх сусідніх систем одразу, а лише до тих пір, поки не буде отримано достатню кількість результатів пошуку.

Також було запроваджено систему кешуючих вузлів. Були введені правила, згідно з якими тільки виділені (ultrapeers) можуть пересилати запити вгору по «дереву», в той час як решта (leaves) можуть лише робити запити. Запити в мережі Gnutella пересилаються по TCP або UDP, а копіювання файлів здійснюється через протокол HTTP. Нещодавно були розроблені розширення для клієнтських програм, що дозволяють копіювати файли по UDP та виконувати XML-запити для отримання метаінформації про файли.

У результаті повної децентралізації мережу практично неможливо знищити, тому що для цього буде потрібно вивести з ладу кожен вузол мережі.

Remove ads

Механізм роботи

Узагальнити
Перспектива
  1. Користувач завантажує програму.
  2. При першому запуску програми (назвемо наш вузол — A), користувач повідомляє клієнту IP-адресу одного з функціонуючих вузлів (умовно вузол B). Дана процедура може і не повторюватися в майбутньому, але при першому запуску вона обов'язкова. Це один з найбільш «слизьких» моментів в реалізації даної мережі: без адреси хоча б одного з працюючих в цей час вузла користувач не зможе підключитися. У принципі, існує цілий ряд централізованих серверів, які надають таку інформацію (connect1.gnutellanet.com: 6346, gnutella.hostscache.com та ін), але така схема вже призводить до певної централізованості.
  3. Програма надсилає запит вузлу B на предмет підтвердження активності.
  4. Вузол B підтверджує свою активність, якщо немає — див крок 2.
  5. Вузол А посилає вузлу B так званий Ping-запит. У цьому запиті вказується, крім іншої інформації, TTL (Time To Live) — число, що означає, скільки переходів від вузла до вузла даний запит може зробити. Зазвичай TTL дорівнює 7.
  6. Інші вузли, отримавши Ping-запит, посилають Pong-відповідь, в якій міститься IP-адреса відправника, номер порту і мінімальна інформація про файли у фонді обміну.
  7. Крім того, вузли, які отримали Ping-запит, зменшують TTL даного запиту на одиницю, і якщо TTL більше 0, а також якщо даний запит вони не отримували раніше (захист від зациклення), розсилають його своїм сусідам.
  8. Кожен вузол, який отримав Ping-запит, відсилає Pong-відповідь, тим же шляхом, яким цей запит отримав.
  9. Коли Pong-відповіді доходять до свого джерела (тобто нашого вузла А), програма складає список доступних вузлів. Як правило, цей список налічує від 2 до 10 тисяч вузлів і від 500 тисяч до мільйона файлів в обмінному фонді.
  10. Користувач вводить запит (наприклад, назву mp3-файлу). Програма розсилає запит на пошук файлу усіх вузлів у списку, а далі просто чекає вхідних повідомлень.
  11. Кожен вузол, який отримав запит на пошук, шукає в своєму фонді вказаний файл. Якщо файл не знайдений, то вузол просто не відповідає.
  12. Якщо файл знайдений, вузол відсилає ініціатору запиту відповідь з інформацією про файл і про себе (IP-адресу).
  13. Отримавши ряд відповідей, програма вибирає один з вузлів, встановлює з ним стандартне HTTP-з'єднання і завантажує файл. При цьому всі повідомлення (від Ping-запиту до скачування файлу) посилаються по HTTP, що ускладнює їх відстеження і блокування.

Деякі клієнти Gnutella працюють згідно з наведеним алгоритмом, а деякі ні. Пов'язано це з тим, що Gnutella — це, перш за все, протокол взаємодії вузлів (такий же, як HTTP), і в ньому не визначено деякі з аспектів цієї взаємодії.

Remove ads

Реакція з боку FSF

Назва Gnutella спочатку було грою слів GNU, так як розробники планували випустити вихідний код під ліцензією GNU GPL, і Nutella — марки улюбленої горіхової пасти цих розробників. Однак, ні найперша програма, ні відповідні сучасні проекти не є вільним ПЗ, включаючи використовують протокол Gnutella gtk-gnutella, mutella і gnucleus. Крім того, Фонд вільного програмного забезпечення зосереджений на волі копіювання і зміни програмного забезпечення, у той час як Gnutella — це, перш за все, мережа обміну музичними файлами. І хоча існує деякий подібність у питаннях етики копіювання програмного забезпечення і музичних записів, FSF попросила розробників Gnutella змінити назву програми для уникнення плутанини[6].

Remove ads

Gnutella2

Gnutella2 (G2) відкритий децентралізований одноранговий мережевий протокол, опублікований у 2002 році Майклом Стоуксом, який є наступником Gnutella[7].

Клієнти

У цей час Gnutella є однією з найпопулярніших файлообмінних мереж[8]. Робота мережі Gnutella безперервно удосконалюється завдяки зусиллям розробників безлічі клієнтів мережі:

Спеціалізовані

  • Gtk-gnutella

Мультимережеві

  • GiFT
  • KCeasy
  • MlDonkey
  • Shareaza

Див. також

Примітки

Посилання

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads