Редактирование: UNИX, осень 2008, 11 лекция (от 10 декабря)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 42 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 153: | Строка 153: | ||
* Централизованная сеть. Сеть, имеющая центр. Сеть, рассчитанная на то, что есть сервер, знает обо всех клиентах и у какого что есть. И когда приходит новый клиент, он спрашивает, где есть такой-то файл; | * Централизованная сеть. Сеть, имеющая центр. Сеть, рассчитанная на то, что есть сервер, знает обо всех клиентах и у какого что есть. И когда приходит новый клиент, он спрашивает, где есть такой-то файл; | ||
* Промежуточная стадия; | * Промежуточная стадия; | ||
- | * Полностью децентрализованная. Клиент как-то приходит в сеть, поиском по сети пытается найти, что ему нужно. Такие сети бывают построены на разных алгоритмах, но | + | * Полностью децентрализованная. Клиент как-то приходит в сеть, поиском по сети пытается найти, что ему нужно. Такие сети бывают построены на разных алгоритмах, но ... |
== EDonkey == | == EDonkey == | ||
Строка 160: | Строка 160: | ||
Как она устроена: по большей части это неизвестно, протокол закрытый, все реализации протокола ..., есть смутное понятие сервера и клиента. | Как она устроена: по большей части это неизвестно, протокол закрытый, все реализации протокола ..., есть смутное понятие сервера и клиента. | ||
Что творится между серверами, неизвестно. | Что творится между серверами, неизвестно. | ||
- | Клиенты есть двух типов: те клиенты, которые имеют возможность открывать соединения и слушать порт (High ID) и те, которые такой | + | Клиенты есть двух типов: те клиенты, которые имеют возможность открывать соединения и слушать порт (High ID) и те, которые такой возм. не имеют (Low ID). |
- | + | Как происходит добыча данных из edonkey: во-первых, всякий файл ищется по его хэшу. | |
- | Как происходит добыча данных из edonkey: | + | Хэш используется md4. |
- | + | Во вторых: чтобы получить файл, сервер занимается поиском, как --- неизвестно, в результате ответ ---- качай с сервера или с high id. | |
- | + | ||
Опять же неизвестно, могут ли серверы ретранслировать данные. | Опять же неизвестно, могут ли серверы ретранслировать данные. | ||
Данные можно нарезать на куски стандартного размера --- примерно 10к, ходят с хешом, можно получать распределённо. | Данные можно нарезать на куски стандартного размера --- примерно 10к, ходят с хешом, можно получать распределённо. | ||
Строка 171: | Строка 170: | ||
Например, держать у себя список клиентов и обмениваться с соседями. | Например, держать у себя список клиентов и обмениваться с соседями. | ||
В конце концов, некоторые программы могут существовать в таком режиме: получить списки клиентов и общаться только с клиентами, не трогая сервера. | В конце концов, некоторые программы могут существовать в таком режиме: получить списки клиентов и общаться только с клиентами, не трогая сервера. | ||
- | |||
Но это опять-таки чревато и неприятно, поскольку это нестандартное расширение, по которому могут договориваться разве что два экземпляра одной программы. | Но это опять-таки чревато и неприятно, поскольку это нестандартное расширение, по которому могут договориваться разве что два экземпляра одной программы. | ||
Ещё одна важная фишка: в нём каким-то образом реализован поиск на серверах, причём, судя по всему, поиска не было до первого неофициального сервера. | Ещё одна важная фишка: в нём каким-то образом реализован поиск на серверах, причём, судя по всему, поиска не было до первого неофициального сервера. | ||
Строка 180: | Строка 178: | ||
Один из них --- Kademlia. | Один из них --- Kademlia. | ||
В основе лежит DHT --- Distributed Hash Table. | В основе лежит DHT --- Distributed Hash Table. | ||
- | |||
В чём её суть: сначала надо договориться о таких понятиях, как ID --- имя машины, Key и Value. | В чём её суть: сначала надо договориться о таких понятиях, как ID --- имя машины, Key и Value. | ||
Договорённость первая --- это строки какой-то длины, и важно, что Id и ключи имеют равную длину. | Договорённость первая --- это строки какой-то длины, и важно, что Id и ключи имеют равную длину. | ||
Мы определяем функцию, которая по двум id или по паре id-ключ умеет находить расстояние. | Мы определяем функцию, которая по двум id или по паре id-ключ умеет находить расстояние. | ||
- | + | На этих двух предположениях строится довольно простой способ, как искать данные в сети, про которую изначально почти ничего неизвестно, есть машины, с id, каждая машина хранит списки машин для каждого бита, у которых отличие в id начинается с данного бита. Поиск строится на 4 операциях: ping (проверить, что машина жива), store и find. | |
- | На этих двух предположениях строится довольно простой способ, как искать данные в сети, про которую изначально почти ничего неизвестно, есть машины, с id, каждая машина хранит списки машин для каждого бита, у которых отличие в id начинается с данного бита. | + | |
- | + | ||
- | Поиск строится на 4 операциях: | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
Можно попросить машину сохранить кусочек данных (если мы уже знаём её ip, порт). | Можно попросить машину сохранить кусочек данных (если мы уже знаём её ip, порт). | ||
- | Поиск ведётся следующим образом: для поиска сначала надо получить ключ, потом ищем по списку в каждом из концевых кругов, и в каждом круге примерно одинаковое количество соседей и подд. дост. надёжные. | + | Поиск ведётся следующим образом: для поиска сначала надо получить ключ, потом ищем по списку в каждом из концевых кругов, и в каждом круге примерно одинаковое количество соседей и подд. дост.ю надёжные. |
- | + | ||
Сначала ищется во внутреннем круге, находим соседа и просим найти его соседа, самых близких к данному ключу, дальше для следующего и так далее. | Сначала ищется во внутреннем круге, находим соседа и просим найти его соседа, самых близких к данному ключу, дальше для следующего и так далее. | ||
Понятно, как теперь найти машину, на которой хранится заданная битовая строчка. | Понятно, как теперь найти машину, на которой хранится заданная битовая строчка. | ||
Строка 202: | Строка 190: | ||
== bit torrent == | == bit torrent == | ||
Возник протокол где-то в 2001 году, строился он именно вокруг этой самой идеи. | Возник протокол где-то в 2001 году, строился он именно вокруг этой самой идеи. | ||
- | + | Он состоит из двух частей: чисто клиент-серверный протокол, у которого есть трекер, и есть клиенты, которые к нему подключены. | |
- | Он состоит из двух частей: | + | |
- | + | ||
- | + | ||
Общение с торрентом начинается с .torrent, который содержит два поля: всякая метаинформация, например, на какие фрагменты нарезан файл, адрес трекера, поле, которое содержит метаинформацию о файлах --- список файлов и их размер, и в торренте хранится хэш каждого кусочка (чанка). | Общение с торрентом начинается с .torrent, который содержит два поля: всякая метаинформация, например, на какие фрагменты нарезан файл, адрес трекера, поле, которое содержит метаинформацию о файлах --- список файлов и их размер, и в торренте хранится хэш каждого кусочка (чанка). | ||