Kademlia
Kademlia - это протокол виртуальной сети, созданный для функционирования полностью децентрализованных файлообменных сетей. Его основное отличие от других протоколов в том, что он независим от центральных серверов. В бессерверной сети каждый пользователь является узлом, через него проходят поисковые запросы и служебная информация. Kad по сути является заменой серверной сети eDonkey2000 (ed2k), но, в отличии от ed2k, Каду не требуется центральный сервер для связи. Все пользователи сети являются серверами и равны между собой по рангу (она и называется "одноранговая сеть").
Зачем нужен Kad?Править
Чтобы ответить на этот вопрос, условно разделим файлообменные р2р-сети на поколения:
1-ое поколение (Napster)
Файлообменная сеть, имеющая один центральный сервер, через который пользователи ищут нужные им файлы, и далее напрямую соединяются между собой. Минус такого подхода очевиден - при закрытии центрального сервера ликвидируется вся сеть.
2-ое поколение (eDonkey2000, BitTorrent, Direct Connect)
Чтобы сеть не была уязвима, необходимо иметь несколько центральных серверов. В сетях второго поколения реализована частичная децентрализация, когда серверов много и подключиться можно к любому из них. Если закроют большинство центральных узлов, то сеть продолжит подпольное функционирование, юзеры будут пользоваться альтернативными серверами. Но чем больше будет закрыто центральных (координирующих) серверов, тем меньше становится сеть.
3-е поколение (Kademlia, freenet)
Сеть не имеет центрального сервера, все пользователи являются серверами этой сети. Закрыть сеть практически невозможно, для этого надо отключить всех её пользователей. После запуска Советским Союзом искусственного спутника Земли в 1957 году, Министерство обороны США посчитало, что на случай войны Америке нужна надёжная система передачи информации. Агентство передовых исследовательских проектов США (ARPA) предложило разработать для этого компьютерную сеть. Основная задача заключалась в создании не просто системы передачи данных, а сети с отсутствием строгой иерархичности. Система не должна иметь центрального узла и главным условием была выживаемость сети при как можно более сильном нарушении связности, на случай ядерного удара Советского Союза по центрам связи США... Так появился Интернет.
Времена меняются, и теперь в роли "Империи зла" выступают звукозаписывающие компании США и киноиздатели Голливуда. Сеть Kad является той самой системой, против которой ещё не придумано оружие, ведь её главная задача - это работоспособность сети при любых атаках.
Сеть Kad могла работать и раньше, но несколько лет назад популярность бессерверных сетей сдерживали две причины. Во-первых, Kad генерирует служебную информацию, поэтому для нормальной работы в сети вам желательно иметь соединение с Интернетом на скорости от 128 кбит/с. Во-вторых, работающая сеть нагружает центральный процессор, но на современных компьютерах это практически незаметно.
Как работает Kad?Править
Kad по сути является заменой серверной сети ed2k и выполняет те же самые функции, что и серверная сеть, ссылки на файлы имеют тот же вид ed2k:// как в сети eDonkey2000. Но в отличии от eDonkey ей не требуется сервер для связи. У каждого клиента Kad Network на компьютере сохраняется файл с данными о источниках и информация о файлах этого источника, которые вы скачиваете. Когда через ваш компьютер идёт поисковый запрос от другого человека, то программа проверяет файл с данными и ищет подходящие источники, если находит, то передаёт информацию тому, кто ищет. Если не находит, то отсылает запрос дальше. Т.е проще говоря, поисковая машина работает как вирус: проверяет наличие файла у вас, если его нет, то идёт по всем вашим контактам дальше и проверяет его у всех ваших знакомых, потом идёт по контактам знакомых и так далее в геометрической прогрессии. Чисто математически процедура поиска происходит довольно быстро.
Сеть Kad поддерживается в программе eMule начиная с версии 0.40 и выше. В последней версии программы eMule 0.48a функционирует усовершенственная версия протокола Kad 2.0. Отдельного клиента для сети Kad Network пока не существует (программисты, ау! вы можете быть первыми) :)
Вы наверное хотите спросить "А как же можно войти в сеть, не зная ни одного сервера, к чему подключаться?". Разумеется, вы не Гарри Поттер с волшебной палочкой, и не сможете войти в сеть, не зная ни одного стартового IP адреса. Для подключения к сети Kad вам нужен адрес хотя бы одного человека из этой сети. Т.е сперва вы подключаетесь к нему, а дальше уже собираете информацию о других людях через него. Но как найти этого первого человека? Для этого вам необходимо скачать файл nodes.dat (см. kad ноды) и положить его в папку eMule/config. В этом файле находятся адреса людей, через которые вы можете выйти в сеть. Файл nodes.dat необходим при первом запуске программы eMule, при последующих запусках вы будете иметь свой собственный nodes.dat.
После входа в сеть вам генерируется сетевой адрес идентификатор (ID). Cеть Kad, в отличии от ed2k, работает только через сетевой протокол UDP.
Ну и напоследок, хотелось бы сказать о значении слова Kademlia. Оно имеет турецкое происхождение (разработчик Када по национальности болгарин) и означает счастливого человека, приносящего счастье. И как мы теперь понимаем, Kademlia приносит счастье нам, простым файлообменщикам, и разорение всем организациям-правообладателям типа RIAA.