Перейти к содержимому
tapelineyt

Очередная попытка создать интернет...

Рекомендуемые сообщения

Посмотрел я на тему "Возрождаем OpenNet (не опять, а снова)" и ради интереса решил накодить свою реализацию. Так вот.
Представляю NetQuartz. Что эта ерундовина может:

  1. Многоуровневые IP адреса. Можно хоть 1.2, хоть 26.89.1.2, хоть 734.84.1.97.73.4, все зависит от вложенности роутеров.
  2. Встроенный DNS.
  3. Простенький веб-сервер и браузер с поддержкой цветов.
  4. Простая регистрация устройства в сети (хочешь подключиться - поставил ПО на клиента, написал одну команду - все готово!)

Что она пока не может:

  • Нема API.
  • Нема всяких <hr> <a href> и прочей фигни.
  • Ну и браузер бы полностью гуишным сделать.
  • Тестил только на проводных подключениях! В теории конечно и вайфай должен работать, но в теории.

Что она не может и добавлять не планирую:

  • Шифровка трафика и прочая ерунда с безопасностью

 

Терминология:

       роутер == маршрутизатор

  • Корневой роутер (сервер), корень [сети] - основой компьютер, связывающий маршрутизаторы и клиентов, выполняющий функции DNS сервера и лежащий в иерархии сети выше всех. Всегда имеет IP 0.0. В одной сети может быть только 1.
  • Маршрутизатор, роутер - компьютер, обеспечивающий перенаправление пакетов (маршрутизацию) от отправителя к получателю.
  • Пакет (в контексте данного проекта) - 4 текстовых поля - Отправитель, Получатель, Тип, Данные
  • Клиент - Любой компьютер / планшет / микроконтроллер / дрон / робот, подключенный к сети, являющийся конечным узлом. (То бишь, не имеющий дочерних узлов.)
  • Узел - любое устройство в сети.

 

Как это все работает:

      В контексте данного раздела "послать" == modem.send(). Все работает на 1110 порту.

      Если пакет типа DATA или DNSANSWER (в последнем случае 3-ий шаг выполнятся не будет, т.к. пакет уже послан с корня сети.):

  1. Клиент-отправитель посылает пакет на роутер, который его зарегистрировал в сети.
  2. Роутер получает пакет. Теперь есть несколько вариантов обработки:
    1. Получатель находится в подсети роутера (включая вложенные подсети): роутер находит MAC узла, находящегося в адресе получатеся сразу после IP данного роутера и посылает на него пакет. Здесь неважно, является ли этот узел роутером или уже клиентом. Если получит роутер - пункт 2 повторится.
    2. Получатель находится вне подсети роутера: Здесь еще проще - роутер просто посылает этот пакет родительскому узлу.
  3. Корневой сервер получает пакет. Данный шаг будет проделан, только если во время 2-ого шага роутеры добросали пакет вверх прямо до корня (например, в случае если отправитель 1.2, а получатель 2.3). Тут происходит все то же самое как и в 2.1.
  4. Клиент-получатель принимает пакет. На этом путь пакета завершен. Как он будет обработан - определяет ПО.

     

      Если пакет типа DNSREG или DNSLOOKUP:

  1. Клиент-отправитель посылает пакет на роутер, который его зарегистрировал в сети.
  2. Роутер получает пакет и перенаправляет его на родительский узел. Так повторяется, пока пакет не достигнет корня.
  3. Корень получает пакет, обрабатывет его и посылает ответ в виде DNSANSWER пакета.

     

      Если пакет типа FINDPARENT: (эти действия происходят при вып. кмд qclient find. При исп. другого ПО алгоритм обработки пакетов на стороне клиента может отличаться.)

  1. Клиент-отправитель посылает пакет методом broadcast. В поле данные указано "find".
  2. Любой роутер, получивший это отзывается сообщением (не пакетом) "FINDROUTER:ME". В т.ч. и корень.
  3. Клиент получает самый первый пакет и отсылает обратно уже методом send пакет FINDPARENT. В поле данные уже указан MAC роутера, на котором клиент желает зарегистрироваться. Собственно на этот же MAC и отсылается пакет.
  4. Роутер, получивший пакет, сравнивает свой MAC с указанным, и если они совпадают, то выдает клиенту IP и отсылает клиенту сообщение (не пакет) с его IP.
  5. Клиент сохраняет все в qclient.conf в формате MACродителя;свойIP.

 

Железо и ось:

    Требования по железу:

  • Обязательная сетевая карта.
  • Минимум 25КБ свободного дискового пространства.
  • Видеокарта 1+ ур. Рекоменд. дисплей.
  • Процессор мин 1+, рекоменд 2+.
  • ОЗУ не тестил. На тестовых компах стояло 2*2уровень

    На всех тестовых компах стояла ОпенОСЬ из коробки без модификаций.

 

Как этим безобразием пользоваться:

  1. Создаем корневой сервер: Качаем на него root.lua и ttf.lua в папку /home/. Создаем папку /home/QuarksRouter/. Запускаем root.lua
  2. Создаем роутеры: Качаем unit.lua и ttf.lua в папку /home/. Создаем папку /home/QuarksRouter/.
  3. Подключаем и запускаем роутеры: Качаем qclient.lua в папку /home/. Пишем qclient find. После запускаем unit.lua
  4. Подключаем клиентов: Качаем qclient.lua в папку /home/. Пишем qclient find.
  5. Настраиваем веб-сервер: Качаем server.lua, желательно в папку /home/QServer/. Там же создаем папку /home/QServer/mctpdocs/, в нее будем пихать странички. ОБРАТИТЕ ВНИМАНИЕ! Страницы без расширений. Домашняя - index.
  6. Делаем странички: Пихаем файлы без расширений в папку /home/QServer/mctpdocs/. В них пишем любой текст. Поддерживается цветовое форматирование как в обычном майне, с помощью &. Также можно менять фон. Для этого пользуемся теми же колоркодами, только с префиксом не &, а ^. Запускаем сервер server.lua
  7. Ставим браузер на клиента: Качаем web.lua. Пишем web <url>/<page> (web test.low/test) для доступа.
  8. Регистрируем домен: На веб-сервере пишем qclient -p -l --r="0.0" --d="DNSREG;тутжелаемыйдомен".
  9. Собственно все.

 

Гайд по qclient:

-p - обязательно писать

-l - слушать входящий пакет

--r="ip.получателя"

--d="типпакета;данные"

 

Гайд по пакетам:

Формат пакета: IPотправителя;IPполучателя;тип;данные

 

Возможные типы:
DNSREG - регистрация домена. В поле ДАННЫЕ пишем желаемый домен

DNSLOOKUP - поиск ip по домену. В поле ДАННЫЕ пишем желаемый домен.

DATA - пакет с данными.


Типы, которые юзать нежелательно:
DNSANSWER - ответ корневого сервера. В поле ДАННЫЕ указано QDNS:ответ.

FINDPARENT - единственный broadcast-пакет. Регистрация в сети.

 

Ссылки:

 

P.s. это мой первый проект на луа.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...