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

[CC] Ethernet

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

О структуре ip-адреса и таблицах маршрутизации в сети rednet (продолжение)

 

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

[ATTACH=full]43[/ATTACH]

На рисунке изображены четыре роутера (я их назвал first, second, third и fourth). К некоторым из них подключены хосты.

Как теперь пакету от хоста 11 добраться до хоста, скажем, 14? Прямой связи роутера first с хостом 14 нет. Значит пакет нужно направить на один из роутеров 8 или 9. Прописываем таблицу маршрутизации

 

v_pupkin 13 – Уже известный нам хост Васи Пупкина

14 9 – Пакеты на 14-й хост шлем через роутер third

 

Но хостов, подключенных к роутерам second, third и fourth может быть очень много да и добавляться они могут слишком часто. Неужели их всех нужно руками прописывать в таблицу маршрутизации? Давайте пересмотрим структуру ip-адреса. Пусть теперь этот адрес состоит из двух составляющих: адреса роутера, к которому подключен хост и адреса самого хоста разделенных точкой. Пример fourth.14

Теперь роутеру first не нужно помнить адреса всех хостов сети. Нужно лишь знать пути к роутерам. Вот так выглядит новая таблица маршрутизации.

 

First.self 10 – Это что бы отличать свои хосты от чужих

First.v_pupkin 13 – Уже известный нам хост Васи Пупкина

second 8 – Пакеты на роутер second

third 9 – Пакеты на роутер third

fourth 9 – Пакеты на роутер fourth шлем через роутер third

 

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

Каковы недостатки такой сети? При добавлении нового роутера (хоть это бывает и не часто) приходится корректировать таблицы маршрутизации всех остальных роутеров. Так же при отключении одного из ранее работавших роутеров будет наблюдаться потеря пакетов, проходящих через него. Как бороться с этими проблеммами? Мне видится динамическое построение таблиц маршрутизации с периодическим обновлением. Возможно со временем нам удастся решить и эту задачу.

 

Продолжение следует...

я уже решил . систему конкретно переделал заходи в RC или Skype обговорим.Обьяснять письмено тяжело

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


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

я уже решил . систему конкретно переделал заходи в RC или Skype обговорим.Обьяснять письмено тяжело

А ты попробуй письменно. Может еще кому интересно будет. Я вон уже сколько букв написал

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


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

О структуре ip-адреса и таблицах маршрутизации в сети rednet (продолжение)

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

post-6-14160783991952_thumb.gif

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

Как теперь должна должна выглядеть таблица маршрутизации роутера first, чтобы пакет, предназначенный для деревни В был направлен в нужном направлении?

Как я говорил выше, роутер должен знать пути ко всем остальным роутерам сети. Значит ли это, что в таблице должны быть прописаны пути к роутерам 15, 16, 17 и 18 для каждого в отдельности? Но ведь они все лежат в одном направлении и есть смысл выделить их в одну группу — группу В. А роутеры first, second, third и fourth соответственно в группу А.

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

 

A.first.self 10 – Это что бы отличать свои хосты от чужих

A.first.v_pupkin 13 – Уже извеcтный нам хост Васи Пупкина

A.second 8 – Пакеты на роутер second

A.third 9 – Пакеты на роутер third

A.fourth 9 – Пакеты на роутер fourth шлем через роутер third

B 8 – Пакеты для роутеров группы В шлем через роутер second

 

Разбор адреса производится в следующем порядке. Анализируется первая составляющая ip-адреса. Если это В — отправляем пакет на id 8. Если нет, анализируем вторую составляющую. Если это second, third или fourth — отправляем пакет на соответствующий id. Если нет, анализируем третью составляющую. Если третья составляющая прописана в таблице — отправляем пакет на соответствующий id. Если нет, интерпритируем третью составляющую как число и отправляем пакет на этот id. Если составляющая адреса не обнаружена в таблице, то такой пакет считается ошибочным и игнорируется.

В принципе, таким же образом можно построить четырех- и более уровневую сеть. Но я думаю, мы пока ограничимся тремя уровнями. Если не двумя.

 

Окончание следует.

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


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

О структуре ip-адреса и таблицах маршрутизации в сети rednet (окончание)

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

Первая из них loadTable(filename) предназначена для загрузки таблицы маршрутизации из файла.

function loadTable(filename)
  local rTable={}
  local file=fs.open(filename,'r')
  if not file then error('Can not open file '..filename) end
  local line=file.readLine()
  while line do
    local path,id=line:match('^%s-([_%w%.]+)%s+(%d+)')
    if path then
      id=tonumber(id)
      local t=rTable
      for k in path:gmatch('([_%w]+)%.') do
        write(k..'.')
        if not t[k] then t[k]={}
        elseif type(t[k])=='number' then
          t[k]={[0]=t[k]}
        end
        t=t[k]
      end
      local k=path:match('([_%w]+)$')
      t[k]=id
      print(k,'=',id)
    end
    line=file.readLine()
  end
  file.close()
  return rTable
end
В качестве параметра функция принимает строку, содержащую путь к файлу. Возвращает таблицу, в которой данные из файла упакованы в виде удобном для использования. Вызывается один раз в начале работы ПО роутера.

 

Вторая функция trace(t,path)

function trace(t,ip)
  ip=ip..'.'
  for k in ip:gmatch('([_%w]+)%.') do
    if not t[k] then return tonumber(k) end
    if type(t[k])=='table' then t=t[k]
    else return t[k] end
  end
  return t[0]
end
принимает два параметра: t — таблица, полученная после вызова функции loadTable; ip – строка, содержащая ip-адрес хоста-приемника. Возвращает функция число — id компьютера (хоста или следующего роутера) на который следует передать пакет.

 

Привожу скриншот работы этих функций для таблицы маршрутизации со следующим содержимым:

A.first               7
A.first.self          7
A.first.v_pupkin      13
A.second              8
A.third               9
A.fourth              9
B                     8
C                     9
post-6-1416078399217_thumb.jpg

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


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

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

Пропал интерес и угас огонь в глазах.:)

А мне интересно почитать, как Зеро подходит к вопросу. Тут есть и топология сети, уровни, шлюзы по умолчанию и прочее. Темы закрывают модераторы, кстати.

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


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

Пропал интерес и угас огонь в глазах.:)

А мне интересно почитать, как Зеро подходит к вопросу. Тут есть и топология сети, уровни, шлюзы по умолчанию и прочее. Темы закрывают модераторы, кстати.

Нет я решил чу-чуть глобальней подойти к теме и создал тему под названием Ethernet (я подумал если создавать сеть то уже полностью , а не только маршрутизатор). Сегодня с Zero мы будем на моём сервере с плоским миром (что бы клиент у зеро не лагал ) тестить и писать ПО для сети , писать документацию и создавать точную модель что бы другой человек мог понять. И извини что нагнал на тебя.

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


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

Нет я решил чу-чуть глобальней подойти к теме и создал тему под названием Ethernet (я подумал если создавать сеть то уже полностью , а не только маршрутизатор). Сегодня с Zero мы будем на моём сервере с плоским миром (что бы клиент у зеро не лагал ) тестить и писать ПО для сети , писать документацию и создавать точную модель что бы другой человек мог понять. И извини что нагнал на тебя.

Neo, можно присоединится в качестве наблюдателя? Хочу посмотреть как работают знающие люди. Могу выполнять рутинную часть работы и тестировать, а при написании документации указывать на непонятные мало знающим моменты.

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


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

Neo, можно присоединится в качестве наблюдателя? Хочу посмотреть как работают знающие люди. Могу выполнять рутинную часть работы и тестировать, а при написании документации указывать на непонятные мало знающим моменты.

Хорошо.

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


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

Могу присоединится в качестве программиста, могу выполнять задачи по шифрованию связи, теоретические вопросы ко мне.

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


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

Могу присоединится в качестве программиста

Для начала нужно поселиться на сервере недалеко друг от друга и создать небольшую сеть из 3-4 роутеров. По мере необходимости наращивать.

К сожалению, я не смогу в ближайшее время появляться на игровом сервере и буду участвовать только из оффлайна. Часто бываю в РК, все вопросы можно туда.

Вот ПО роутера, которое должно запускаться из стартапа

http://pastebin.com/5T0suSif

Таблица маршрутизации - статическая. Ее нужно поместить в файл rtable в корне диска. Пример таблицы

first               self
second              8
third               9
fourth              9
Первая колонка - имя подсети, вторая - id по которому будет переправляться пакет на данную подсеть. Если во второй колонке self - значит это собственное имя роутера.

Набор функций для хоста

http://pastebin.com/FJqsDgZP

У Neo есть задумка динамической маршрутизации, но я пока не видел достаточно эффективной реализации.

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


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

Для начала нужно поселиться на сервере недалеко друг от друга и создать небольшую сеть из 3-4 роутеров. По мере необходимости наращивать.

К сожалению, я не смогу в ближайшее время появляться на игровом сервере и буду участвовать только из оффлайна. Часто бываю в РК, все вопросы можно туда.

Вот ПО роутера, которое должно запускаться из стартапа

http://pastebin.com/5T0suSif

Таблица маршрутизации - статическая. Ее нужно поместить в файл rtable в корне диска. Пример таблицы

first               self
second              8
third               9
fourth              9
Первая колонка - имя подсети, вторая - id по которому будет переправляться пакет на данную подсеть. Если во второй колонке self - значит это собственное имя роутера.

Набор функций для хоста

http://pastebin.com/FJqsDgZP

У Neo есть задумка динамической маршрутизации, но я пока не видел достаточно эффективной реализации.[/qu .

Хорошо , что люди собираются

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


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

Semoro, что тебе известно о русификации СС? Если много, давай тему создадим.

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


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

Zer,ты куда пропал??

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


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

Zer,ты куда пропал??

Никуда не пропадал. В РК регулярно бываю

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


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

реализована статическая маршрутизация(идет тестирование и доработка)

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


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

Реализовал Статическую сеть , которая подобна на описание Zer0 , скоро будет реализована динамическая версия кто хочет потестить пишите

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


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

Портируем OpenWrt на Lua?))))))))))))))))))))))))))))))))))))

зачем??

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


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

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

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

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

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

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

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

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

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


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