Перейти к публикации
Форум - ComputerCraft
Zer0Galaxy

[CC] Craftnet

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

На сервере 164 успешно прошла тестирование глобальная сеть Craftnet.

Если вы знаете и используете API rednet, вас должна заинтересовать возможность связать между собой компьютеры, находящиеся на расстоянии гораздо дальше чем 64 блока.

Что для этого нужно? Два или более компьютеров, оборудованных беспроводными модемами и находящихся в зоне покрытия Craftnet. Расстояние между ними значения не имеет.

На данный момент зона покрытия имеет радиус порядка 600 блоков с центром в районе спауна.

Как этим пользоваться?

На каждый компьютер загружаем пакет функций для работы с Craftnet

http://pastebin.com/FJqsDgZP

Функций всего четыре. Вот они:

open() - инициализирует беспроводной модем. В отличии от стандартного rednet.open, не требует указывать сторону, на которой расположен модем. Возвращает true в случае удачной инициализации

getIP() - регистрирует компьютер в сети. Возвращает строку с адресом. Этот адрес понадобится другому компьютеру, если он захочет нам что то передать. Функции open и getIP достаточно вызвать один раз.

send(ip, mess) - передает сообщение mess компьютеру с адресом ip. Аналог функции rednet.send, только адрес не число, а строка, полученная функцией getIP.

receive([timeout]) - переводит компьютер в режим приема сообщений. Аналог функции rednet.receive. Необязательный параметр timeout, как и раньше, задает максимальное время ожидания. Возвращает 1) принятое сообщение 2) ip отправителя 3) ip получателя.

 

Выражаю признательность игроку Neo за идеи, высказанные при обсуждении структуры сети.

 

Rednet: предел - 64 блока;

Craftnet: бесконечность - не предел.

  • Like 5

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


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

Предлагаю потестировать WEB-сервер, созданный на базе Craftnet.

Для доступа к серверу вам понадобится уже упоминавшаяся библиотека функций (pastebin get FJqsDgZP ip) и конечно же браузер (pastebin get Gn6ki1TH browser). Браузер нужно запускать на цветном компьютере, оснащенном беспроводным модемом.

После запуска браузера кликаем на белую строку ввода адреса и вводим адрес пока единственного сайта (white.poem).

[ATTACH]118[/ATTACH]

Если всё сделано правильно, вы сможете ознакомиться с несколькими шедеврами мировой поэзии.

post-6-14160784009766_thumb.jpg

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


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

когда с сетью помочь? раскажи как динам маршрутизация работает??оч интересно

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


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

Сеть работает следующим образом. Имеется ряд роутеров, на данный момент семь штук. Каждый роутер имеет статическую таблицу маршрутизации, которая хранится в файле на диске роутера. Обычно она содержит только собственный ip-адрес роутера, но могут быть и исключения. После запуска роутеры начинают с определенным периодом (сейчас 5 минут) обмениваться своими маршрутами. Маршруты, полученные от другого роутера, сохраняются в ОЗУ. Каждый маршрут в таблице имеет параметр, который я называю "вес". Статические маршруты (загруженные из файла) имеют нулевой вес. Динамические - увеличивают свой вес на 1 при каждой передаче от роутера к роутеру. Т.е. если маршрут получен от соседнего роутера он будет иметь вес равный 1, если через одного то - 2. И т.д. Прежде чем добавить динамический маршрут, роутер сравнивает его вес с уже имеющимся в своей таблице и сохраняет маршрут с наименьшим весом. Это сделано для того, что бы хранить в таблице только самые короткие маршруты.

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

  • Like 3

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


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

Теперь по поводу адресации. Адресация в реализованной сети трехуровневая. Это значит, что ip-адрес, возвращаемый функцией getIP, складывается из трех составляющих. Вот пример адреса, который может вернуть getIP

white.snow.33

где: white - имя сегмента сети, snow - имя роутера, 33 - id компьютера.

Что такое сегмент? Для уменьшения размеров таблиц маршрутизации вся сеть делится на сегменты. Роутер хранит маршруты не ко всем роутерам сети, а к сегментам и к роутерам в своем сегменте.

Пример: предположим в сети сотня роутеров. Без сегментации каждому роутеру пришлось бы хранить сто маршрутов. Если сеть разбить на десять сегментов, в таблице маршрутизации каждого роутера будет девять маршрутов на соседние сегменты и десять маршрутов на роутеры своего сегмента. И того - 19.

На данный момент реализован только один сегмент - белый. Но планируется еще как минимум шесть.

 

А на счет помощи. Основные технические вопросы касающиеся доставки пакетов решены. Необходимо дальнейшее развитие сети. Наполнение web-серверов, создание электронной почты, чатов и т.д. Можешь подумать как перевести всё это дело на OpenComputers. И конечно актуальным является вопрос русификации.

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


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

Сеть работает следующим образом. Имеется ряд роутеров, на данный момент семь штук. Каждый роутер имеет статическую таблицу маршрутизации, которая хранится в файле на диске роутера. Обычно она содержит только собственный ip-адрес роутера, но могут быть и исключения. После запуска роутеры начинают с определенным периодом (сейчас 5 минут) обмениваться своими маршрутами. Маршруты, полученные от другого роутера, сохраняются в ОЗУ. Каждый маршрут в таблице имеет параметр, который я называю "вес". Статические маршруты (загруженные из файла) имеют нулевой вес. Динамические - увеличивают свой вес на 1 при каждой передаче от роутера к роутеру. Т.е. если маршрут получен от соседнего роутера он будет иметь вес равный 1, если через одного то - 2. И т.д. Прежде чем добавить динамический маршрут, роутер сравнивает его вес с уже имеющимся в своей таблице и сохраняет маршрут с наименьшим весом. Это сделано для того, что бы хранить в таблице только самые короткие маршруты.

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

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

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

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


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

Теперь по поводу адресации. Адресация в реализованной сети трехуровневая. Это значит, что ip-адрес, возвращаемый функцией getIP, складывается из трех составляющих. Вот пример адреса, который может вернуть getIP

white.snow.33

где: white - имя сегмента сети, snow - имя роутера, 33 - id компьютера.

Что такое сегмент? Для уменьшения размеров таблиц маршрутизации вся сеть делится на сегменты. Роутер хранит маршруты не ко всем роутерам сети, а к сегментам и к роутерам в своем сегменте.

Пример: предположим в сети сотня роутеров. Без сегментации каждому роутеру пришлось бы хранить сто маршрутов. Если сеть разбить на десять сегментов, в таблице маршрутизации каждого роутера будет девять маршрутов на соседние сегменты и десять маршрутов на роутеры своего сегмента. И того - 19.

На данный момент реализован только один сегмент - белый. Но планируется еще как минимум шесть.

 

А на счет помощи. Основные технические вопросы касающиеся доставки пакетов решены. Необходимо дальнейшее развитие сети. Наполнение web-серверов, создание электронной почты, чатов и т.д. Можешь подумать как перевести всё это дело на OpenComputers. И конечно актуальным является вопрос русификации.

OpenComputers энергия для компьютера нужна,CC по лучше на эту тему

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


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

вес можно не использовать

Предположим, мы имеем вот такую сеть

post-6-14160784010164_thumb.gif

Как видим, возможны два маршрута от роутера 1 к роутеру 3. Вес одного из них равен 2, а другого - 3. Естественно выбран будет наиболее короткий маршрут с наименьшим весом. Но что случится если второй роутер выйдет из строя?

post-6-14160784010333_thumb.gif

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

  • Like 1

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


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

всё просто.

Если роутер С накрылся, до роутера D вообще ничего не дойдет

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


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

Если роутер С накрылся, до роутера D вообще ничего не дойдет

я не так изобразил,забыл добавить еще один роутер

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


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

Быстрей расширяй сеть! а то на 1000 блоков от спавна не берет...

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


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

И еще есть идея сделать проводной инет в смысле написать такойже роутер только с одной стороны локальная сеть а с другой CraftNet

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


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

Быстрей расширяй сеть! а то на 1000 блоков от спавна не берет...

В какую сторону расширять? Не хотелось бы строить сеть там, где она никому ненужна.

И еще есть идея сделать проводной инет в смысле написать такойже роутер только с одной стороны локальная сеть а с другой CraftNet

Без проблем. Только это будет скорее не роутер, а мост между проводной и беспроводной сетью

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


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

тогда все ЗБС :)

В какую сторону расширять? Не хотелось бы строить сеть там, где она никому ненужна.

зайди на севрер и телепортируйся ко мне домой... я просто не знаю в какой стороне, я рядом с Rush'эм живу

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


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

Не знаю когда смогу зайти на сервер. Укажи координаты. Можно в личку

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


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

Не знаю когда смогу зайти на сервер. Укажи координаты. Можно в личку

Извини уже вышл...

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


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

Craftnet расширено на северо-запад

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


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

Дмитрий, можешь указать карту покрытия приблизительно (концентрическими кольцами) или еще как-то?

П.С. За работу над программой выдаю стак иридия и иридиевую дрил 3 уровня, а также 3 ультимативно-гибридные солнечные панельки и "гравик".

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


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

Дмитрий, можешь указать карту покрытия приблизительно (концентрическими кольцами) или еще как-то?

Выкладываю карту покрытия на сегодняшний день

[ATTACH]122[/ATTACH]

Большая тонкая окружность - планируемое покрытие

post-6-14160784011211_thumb.gif

  • Like 1

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


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

Круто,я соавтор,а мне ничего не дали.Zer0Galaxy,а так не красиво

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


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

Круто,я соавтор,а мне ничего не дали.Zer0Galaxy,а так не красиво

Пол стака иридия и одна солнечная панелька и гравик твои. Идет?

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


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

Пол стака иридия и одна солнечная панелька и гравик твои. Идет?

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

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


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

кстати для меж пространства можно использовать ликующиеся карты из openComputers

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


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

кстати для меж пространства можно использовать ликующиеся карты из openComputers

А кто нибудь пробовал ОС с СС связывать?

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


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

А кто нибудь пробовал ОС с СС связывать?

в opencomputers есть блок (коммутатор aka "switch") он позволяет соединить сети CC с сетью OC

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


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

Щас попробовал OC отправляет сообщение, а CC не хочет принимать ну не ловит он событие и все

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


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

Все ловит и туда и обратно. Только что проверял =)

Даже взаимная сериализация/десериализация без проблем пашет.

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


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

Zer0Galaxy нужна твоя помощь в организации моста связи для Clor Tower, ибо не могу разобраться с кодом роутера

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×