Peer-to-peer, P2P (з ) — варіант архітектури системи, в основі якої стоїть мережа рівноправних вузлів.
Комп'ютерні мережі типу peer-to-peer (або P2P) засновані на принципі рівноправності учасників і характеризуються тим, що їх елементи можуть зв'язуватися між собою, на відміну від традиційної архітектури, коли лише окрема категорія учасників, яка називається серверами, може надавати певні сервіси іншим.
Фраза «peer-to-peer» була вперше використана у 1984 році Парбауелом Йонугуйтсманом (Parbawell Yohnuhuitsman) при розробці архітектури Advanced Peer to Peer Networking фірми IBM.
В чистій мережі «peer-to-peer» не існує поняття клієнтів або серверів, лише рівні вузли, які одночасно функціонують як клієнти та сервери по відношенню до інших вузлів мережі. Ця модель мережевої взаємодії відрізняється від клієнт-серверної архітектури, в якій зв'язок відбувається лише між клієнтами та центральним сервером. Така організація дозволяє зберігати працездатність мережі при будь-якій конфігурації доступних її учасників. Проте практикується використання P2P-мереж, які все ж таки мають сервери, але їх роль полягає вже не у наданні сервісів, а у підтримці інформації з приводу сервісів, що надаються клієнтами мережі.
В системі P2P автономні вузли взаємодіють з іншими автономними вузлами. Вузли є автономними в тому сенсі, що не існує загальної влади, яка може контролювати їх. В результаті автономії вузлів вони не можуть довіряти один одному та покладатися на поведінку інших вузлів, тому проблеми масштабування та надмірності стають важливішими ніж у випадку традиційної архітектури.
Сучасні P2P-мережі набули розвитку завдяки ідеям, пов'язаними з обміном інформацією, які формувалися у руслі того, що кожен вузол може надавати й отримувати ресурси, які надаються будь-якими іншими учасниками. У випадку мережі Napster це був обмін музикою, в інших випадках це може бути надання процесорного часу для пошуку інопланетних цивілізацій (SETI@home) або ліків проти раку (Folding@home).
Історія P2P не є новим. Цей термін, звичайно, новий винахід, але сама технологія існує з часів появи Usenet та FidoNet — двох дуже успішних, цілком децентралізованих мереж. Розподілені обчислення з'явилися навіть раніше, але цих двох прикладів достатньо, щоб продемонструвати вік P2P.
Usenet, який народився в 1979 році, — це розподілена мережа, яка забезпечує спілкування у групах новин. На початку це була праця двох студентів, Тома Траскота та Джіма Еллиса. В той час Інтернету, який ми знаємо зараз, ще не існувало. Обмін файлами відбувався за допомогою телефонних ліній, зазвичай протягом ночі, тому що це було дешевше. Таким чином не було ефективного способу централізувати такий сервіс як Usenet.
Іншим видатним успіхом P2P був FidoNet. FidoNet, як і Usenet, — це децентралізована, розподілена мережа для обміну повідомленнями. FidoNet був створений у 1984 році Томом Дженнінгсом як засіб для обміну повідомленнями між користувачами різних BBS. Він був потрібен, тому він швидко виріс та, як і Usenet, існує по цей день.
Перше покоління мереж P2P Перше покоління пірингових мереж характеризується наявністю виділених центральних серверів, які можуть виступати, наприклад, базами даних та займатися координацією пошуку. Проте архітектура таких мереж дозволяє зв'язок та передачу інформації безпосередньо між будь-якими її учасникам.
Популяризація і поточна ера peer-to-peer почалась із створення мережі Napster. У травні 1999 Napster надав кінцевим користувачам можливість роздавати та обмінюватись їх улюбленою музикою безпосередньо з іншими кінцевими користувачами. Мережа використовувала центральний сервер, зокрема для пошукових цілей. Кількість користувачів Napster в лютому 2001 становила 26.4 мільйона.
Майже негайно Napster почав стикатися із проблемами з законом. Мережа мала виділений центральний сервер і, як стверджувалося, хоча сама система безпосередньо не є порушенням законодавства, проте її існування сприяє цьому. У цей час з'явилося багато клонів Napster. Більшість була результатом аналізу клієнта та протоколу для збереження сумісності, інші мали ту саму ідею, «тільки кращу». Всі мали однакову архітектуру: один центральний сервер з великою кількістю клієнтів. Центральний сервер полегшував зв'язки клієнта та пошук. Як тільки бажана пісня була знайдена, сервер забезпечував прямий зв'язок між двома клієнтами, так вони могли передавати файли.
Невдовзі після появи Napster було створено мережу EDonkey2000. Ключова перевага eDonkey над Napster полягала у тому, що мережа дозволяла проводити зкачування різних частин одного файлу, одночасно із різних учасників мережі, які його надають. Іншою перевагою eDonkey було те, що згодом серверне забезпечення набуло функціональності міжсерверного зв'язку, що дозволило виконувати пошук інформації на учасниках мережі, що були під'єднані до різних серверів. Незважаючи на названі переваги, через використання серверів ця мережа не була чистою мережою peer-to-peer.
Друге покоління мереж P2P Друге покоління пірингових мереж характеризується відсутністю центральних серверів та, при цьому, принциповою можливістю пошуку серед учасників мережі. Проте алгоритми пошуку у мережах другого покоління мали характер «хвильового» розповсюдження запитів та були не дуже ефективними.
Джастін Франкел вирішив створити мережу без центрального індексного сервера, і результатом була Gnutella. Ідея Gnutella про рівність всіх вузлів швидко померла від наявності вузьких місць, оскільки мережа росла від минулих користувачів Napster. FastTrack вирішив цю проблему маючи деякі вузли рівнішими ніж інші. Обираючи деякі потужніші вузли, щоб індексувати вузли із меншою потужністю, FastTrack дозволив створити мережу, яка могла масштабуватись до набагато більшого розміру. Gnutella швидко перейняла цю модель, і більшість поточних мережі мають цей дизайн, оскільки це дозволяє робити великі і ефективні мережі без центральних серверів.
Найкращими прикладами є Gnutella, Kazaa або Emule з Kademlia, серед яких лише Kazaa ще має центральний сервер для реєстрації. eDonkey2000/Overnet, Gnutella, FastTrack і Ares Galaxy мають приблизно 10,3 мільйонів користувачів (на квітень 2006 року, згідно зі slyck.com).
Третє покоління мереж P2P Третє покоління мереж P2P характеризується децентралізованою структурою, та принципово новими алгоритмами пошуку, які базуються на ключовому понятті розподіленої хеш-таблиці (Distributed hash table) яка підтримується учасниками мережі.
Розподілені хеш-таблиці (DHT) допомагають вирішувати проблему масштабування, обираючи різні вузли, щоб індексувати певні значення хеш-функції (які використовуються, щоб ідентифікувати файли), дозволяючи швидкий та ефективний пошук будь-якого файлу у мережі.
Починаючи з версії 4.2.0 офіційного клієнта BitTorrent, в ньому реалізована функція безтрекерної роботи, яка базується на протоколі Kademlia. У таких системах трекер доступний децентрально, на клієнтах-учасниках мережі, у формі розподіленої хеш-таблиці.
Анонімні мережі peer-to-peer
Приклади анонімних мереж — Freenet, I2P, ANts P2P, RShare, GNUnet і Entropy. Також прикладом децентралізованої мережі є система анонімної цифрової грошової одиниці BitcoinBitcoin — це заснована на системі peer-to-peer цифрова валюта. .
Певна ступінь анонімності реалізовується шляхом направлення даних через інші вузли. Це робить важкою ідентифікацію того, хто завантажує або хто пропонує файли. Більшість цих програм також мають вбудоване шифрування.
Поточні реалізації мереж такого типу потребують багато ресурсів для забезпечення анонімності, що робить їх повільними або складними для використання. Проте в країнах, де домашній доступ до Інтернету дуже швидкий, як, наприклад, Японія, ряд анонімних файлообмінних мереж вже досягли високої популярності.
Переваги P2P Розподіл/зменшення вартості. Централізовані системи, які обслуговують багато клієнтів, зазвичай складають більшість вартості системи. Коли ця вартість стає дуже великою, архітектура P2P може допомогти розподілити вартість серед користувачів. Наприклад, серед систем файлообміну Napster дозволив розподілити вартість зберігання файлів і міг підтримувати індекс, потрібний для сумісного використання. Економія коштів здійснюється за допомогою використання та об'єднання ресурсів, які в іншому випадку не використовуються (наприклад SETI@home). Оскільки вузли зазвичай є автономними, важливо розподіляти витрати справедливо. Об'єднання ресурсів. Децентралізований підхід веде до об'єднання ресурсів. Кожен вузол в системі P2P приносить певні ресурси, як наприклад обчислювальна потужність або пам'ять. У програмах, які потребують величезну кількість цих ресурсів, як наприклад intensive-моделювання або розподілені файлові системи, природно використовувати P2P, щоб залучити ці ресурси. Розподілені обчислювальні системи, як наприклад SETI@Home, distributed.net, і Endeavours — очевидні приклади цього підходу. Об'єднуючи ресурси тисяч вузлів, вони можуть виконувати важкі з точки зору кількості обчислень функції. Файлобмінні системи, як наприклад Napster, Gnutella, і так далі, також об'єднують ресурси. У цих випадках це дисковий простір, щоб зберігати дані, та пропускна спроможність, щоб їх передавати. Вдосконалена масштабованість/надійність. З відсутністю сильної центральної влади по відношенню до автономних вузлів важливою метою є покращення масштабованості і надійності. Масштабованість і надійність визначаються в традиційному для розподілених систем сенсі, як наприклад використання пропускної спроможності — скільки вузлів можуть бути досягнуті від одного вузла, скільки вузлів може підтримуватися, скільки користувачів може підтримуватися. Розподілена природа мереж peer-to-peer також збільшує помилкостійкість у разі невдач, шляхом дублювання даних поміж багатьох вузлів, і — в чистих системах P2P — надаючи можливість вузлу знайти дані без залежності від єдиного централізованого індексного сервера. У останньому випадку немає ніякої єдиної критичної точки в системі. Збільшена автономія. У багатьох випадках користувачі розподіленої системи не бажають залежати від будь-якого централізованого постачальника послуг. Натомість вони воліють, щоб всі дані та призначена для них робота виконувалась локально. Системи P2P підтримують цей рівень автономії, тому що вони вимагають, щоб кожен вузол робив необхідну для нього частину праці. Анонімність/конфіденційність. Пов'язаним із автономією є поняття анонімності і конфіденційності. Користувач, можливо, не хоче, щоб кого-небудь або будь-який постачальник послуг знав про нього або про його роль у системі. З центральним сервером гарантувати анонімність важко, тому що сервер зазвичай зможе ідентифікувати клієнта, як мінімум через його адресу в Інтернет. Використовуючи структуру P2P, в якій дії виконуються локально, користувачі можуть уникати необхідності передавати будь-яку інформацію про себе до кого-небудь іншого. FreeNet — яскравий приклад того, як анонімність може вбудуватися в додаток P2P. Він пересилає повідомлення через інші вузли, щоб забезпечити неможливість вистежування початкового автора. Це збільшує анонімність, використовуючи ймовірнісні алгоритми таким чином, щоб походження неможливо було легко відстежити, аналізуючи трафік у мережі. Динамічність. Системи P2P припускають, що оточення надзвичайно динамічне. Тобто, ресурси, як наприклад вузли, з'являються та зникають із системи безперервно. У випадках комунікації, як наприклад мережі для обміну повідомленнями, використовуються так званий «список контактів», щоб інформувати користувачів, коли їхні друзі стають доступними. Без цього потрібно було би, щоб користувачі «опитували» партнерів, посилаючи періодичні повідомлення. У випадку розподілених обчислень, як наприклад distributed.net і SETI@home, система повинна пристосуватись до заміни учасників. Тому вони повинні повторно видавати завдання для обчислення іншим учасникам, щоб гарантувати, що робота не втрачена, якщо попередні учасники відпадають від мережі, поки вони виконували крок обчислення.
Класифікація систем P2P За функціями:
