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 камень — это 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».
Примечания
[править | править код]См. также
[править | править код]- Анонимные сети
- Криптоанархизм
- Шифропанк
- Цифровой барьер
- I2P — анононимная сеть
- B.A.T.M.A.N.
- Freenet
- TOR
- Cjdns