Netsukuku (Netsukuku)

Перейти к навигации Перейти к поиску
Netsukuku
Написана на Vala, Си[1] и Python[1]
Операционная система Linux
Первый выпуск 2006
Последняя версия
Лицензия GNU GPL 3[4]
Сайт netsukuku.freaknet.org

Netsukuku — проект создания распределённой самоорганизующейся одноранговой сети, способной обеспечить взаимодействие огромного количества узлов при минимальной нагрузке на центральный процессор и память. В такой сети возможно обеспечение повышенной отказоустойчивости, анонимности, невозможности цензуры и полной независимости от Интернета.

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

На данный момент завершено портирование Vala и доступна beta-версия. Релиз второй версии запланирован на июль-август 2017 года.

Реализация

[править | править код]

Netsukuku — это ячеистая сеть передачи данных, или p2p сеть, которая автоматически генерируется и самостоятельно поддерживается. Она создана для управления неограниченным числом узлов с минимальными затратами процессорного ресурса и памяти. Благодаря этому в будущем возможно построение всемирной распределённой, анонимной и не контролируемой сети, отдельно от Интернет, без поддержки каких-либо служб, провайдеров и тому подобного. Такая сеть состоит из компьютеров, физически соединённых друг с другом, поэтому нет необходимости надстройки над уже существующей сетью. Netsukuku создаёт только пути, которые соединяют компьютеры в единую сеть. Иначе говоря, Netsukuku заменяет 3-й уровень современной модели OSI другим протоколом маршрутизации.

В качестве замены DNS (Domain Name System, системы доменных имён) авторы Netsukuku, предлагают использовать A Netsukuku Domain Name Architecture (ANDNA).

Netsukuku автоматически управляема. Она создаёт сама себя и может функционировать автономно. При подсоединении нового узла к Netsukuku сеть автоматически переписывает себя, и все остальные узлы знают наиболее быстрый и эффективный путь к новоприбывшему узлу. Узлы не имеют привилегий или ограничений по сравнению с остальными узлами: они представляют собой части одной сети.

С увеличением числа узлов сеть растёт, становясь более эффективной. В Netsukuku нет различий между локальной и глобальной сетью, поэтому говорить о локальной сети бессмысленно.

Такая сеть не может быть контролируема или разрушена, потому что она полностью децентрализованная и распределённая. Единственный способ разрушить такую сеть — это физически вывести из строя каждый сигнальный узел, входящий в неё, или разбить на несвязанные островки.

Внутри Netsukuku кто угодно, когда угодно и откуда угодно может подсоединиться к сети без каких-либо бюрократических проволочек или правового согласия. Более того, каждый узел динамичен и не постоянен. IP-адрес, идентифицирующий компьютер, выбирается случайно, поэтому его невозможно сопоставить с реальным физическим местом источника сигнала. К тому же, нет никакого контакта с какими-либо организациями.

Пропускная способность ограничивается возможностями нынешних сетевых карт.

Netsukuku — это ячеистая сеть, или p2p сеть, построенная на протоколе динамической маршрутизации Npv7_HT. В настоящее время существует достаточно много протоколов и алгоритмов для динамического управления, но они все отличаются от Npv7_HT, поскольку используются строго для создания маленьких сетей. Управление Интернетом также осуществляется различными протоколами, такими как OSPF, RIP или BGP, в основе которых лежат классические алгоритмы, способные находить наилучший путь для достижения узла в сети. Данные протоколы требуют больших ресурсов процессора и памяти. По этой причине для подобных целей предназначены специальные компьютеры. Ни один из этих протоколов не сможет создать и поддерживать такую сеть, как Netsukuku, в которой каждый узел управляется самостоятельно, потому что маршрутная карта всех путей, хранящаяся на каждом компьютере в сети, требовала бы около 10 Гбайт пространства.

Структура Npv7 — сеть как фрактал. Для расчёта всех необходимых путей связи узла со всеми остальными узлами протокол использует особый алгоритм, называемый Quantum Shortest Path Netsukuku (QSPN). Фрактал — это математическая структура с дробной размерностью, которая обладает свойством рекурсивности: каждая её часть является уменьшенной копией целого. Поэтому возможно большое сжатие структуры, которая может безгранично расширяться. А это значит, что нужно всего лишь несколько килобайт для хранения всей карты маршрутов Netsukuku. Структура маршрутной карты Netsukuku может быть также определена как высококластеризованный граф узлов.

С другой стороны, QSPN представляет собой метаалгоритм в том смысле, что не следует никаким математическим правилам, а использует случайность и хаос, которые не требуют сложных вычислений. QSPN выполняется в реальных сетях, узлы посылают QSPN-пакеты для создания сети. По этой причине не всегда верно утверждение, что определённый пакет будет отослан раньше какого-либо другого.

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

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

Netsukuku может быть внедрена в любые коммуникационные системы, которые сейчас используются.

Протокол Npv7

[править | править код]

Протокол Netsukuku, первая версия.

Netsukuku использует свой собственный протокол Npv7, который родился из трёх предыдущих версий. Первый был очень похож на нынешние протоколы динамического управления: сеть была фактически разделена на несколько групп, и каждый сигнальный узел имел чёткую карту полной сети. Такая система не могла работать с Netsukuku, так как требовалось постоянно обновлять карту сети и каждое обновление приводило к перегрузке сети. Кроме того, после каждого обновления сети требовалось пересчитать все пути.

Разграничения Netsukuku.

Базовые определения:

src_node
Исходный узел. Узел, который отправляет пакет узлу назначения dst_node.
dst_node
Узел назначения. Узел, который получает пакет от исходного узла src_node.
r_node
Удалённый узел от узла X — это любой узел, связанный с узлом X.
g_node
Группа узлов или группа групп узлов.
b_node
Пограничный узел — узел, соединённый с двумя (r_node) узлами из разных (g_node) групп узлов.
h_node
Цепляющийся узел — узел, подсоединяющийся к Netsukuku.
int_map
Внутренняя карта. Внутренняя карта узла X содержит информацию о группе узлов (g_node), к которой он принадлежит.
ext_map
Внешняя карта. Карта содержит информацию о группах узлов.
bmap/bnode_map
Карта пограничных узлов. Карта содержит информацию о (b_node) пограничных узлах.

Npv7 II Лазерная передача, направленная сразу нескольким неспецифицированным приёмникам.

Npv7 II вторая версия прокола Npv7.

Netsukuku разделена на много маленьких групп узлов, до ста узлов в каждой группе, и каждый узел имеет внешнюю карту маршрутов. Все группы организованны в мультигруппы, называемые quadro group_node. Для того, чтобы создать новый маршрут и соединиться с заданным узлом, исходный узел, используя свою внешнюю карту, сначала ищет наилучший путь до пограничного узла группы, к которой принадлежит узел назначения.

Тому, кто знаком с физикой волны, будет просто понять, как работает qspn. Если бросить камень в бассейн с водой, то можно наблюдать следующее: волны начинают распространяться из начальной точки, причём каждая волна рождает новую волну, которая продолжает распространяться и рождать все новые и новые волны. Когда волна ударяется о края бассейна или о какую-то преграду, она отражается и начинает распространяться в обратную сторону. В применении к qspn камень — это qspn_starter, бассейн — gnode, а каждая волна — tracer_pkt. Каждая новая волна несёт с собой информацию о родившей её волне. Когда tracer_pkt (волна) достигает extreme_node (препятствия или границы бассейна), рождается qspn_open (отражённая волна).

QSPN базируется на описанном принципе. Начиная трассировку узлов, каждый узел посылает qspn_pkt, называемый qspn_close, становясь тем самым qspn_starter. Qspn_pkt — это обычный tracer_pkt, но его метод вещания немного отличается от остальных. Каждый пакет, который получает qspn_close, «закрывает» линк узла, от которого получил этот пакет и отсылает пакеты по всем своим остальным линкам. Все последующие полученные qspn_close-пакеты будут переправляется по всем оставшимся незакрытым линкам. Через некоторый промежуток времени появляются узлы, у которых все линки будут закрыты. Такие узлы становятся extreme_node и посылают в качестве ответа другой qspn_pkt-пакет (qspn_open). Другими словами, qspn_open-пакет отправляется после того, как получены qspn_close-пакеты от всех узлов. Пакет qspn_open содержит всю информацию, собранную в последнем полученном пакете qspn_close. Extreme_node посылает пакет qspn_open по всем своим линкам, кроме того узла, от которого он получил последний qspn_close; этому узлу отсылается пустой пакет. Другими словами, пакет qspn_open отправляется после того, как узел получил пакет qspn_close от всех узлов. Узел, получивший пакет qspn_open, открывает все линки. Узлы со всеми открытыми связями абсолютно ничего не делают. Таким образом гарантируется законченность обмена пакетами qspn_close. У qspn_open-пакетов также есть идентификационный номер(sub_id) — число, которое идентифицирует во внешних картах узлы «extreme_node», сгенерировавшие эти qspn_open-пакеты. Sub_id, сгенерированный в самом первом пакете и не меняющийся во всех порождённых (qspn_open) пакетах, используется для управления большим числом qspn_pkt-пакетов, так как рано или поздно каждый узел сгенерирует пакет qspn_open, и все они должны быть независимы и отличны друг от друга. Действительно, все узлы, которые имеют только одну связь, — это узлы extreme_node, ведь когда они получают qspn_close, они уже закрыты. После отправки пакета qspn_open узел не может отвечать больше никому и ни на какие полученные qspn_pkt-пакеты, поэтому он больше ничего не отправляет.

Узел qspn_starter, который запустил qspn, становится обычным узлом, но не отправляет пакет qspn_open, поскольку отправил первый qspn_close. Кроме того, чтобы обновить свою собственную карту, узел будет использовать все полученные qspn_close-пакеты, кроме тех, которые были отправлены такими же qspn_start-узлами. Таким образом поддерживается стабильность в случае наличия более одного узла «qspn_starter».

Примечания

[править | править код]