Laravel framework russian community

СОДЕРЖАНИЕ

Таблица маршрутизации состоит как минимум из трех информационных полей:

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

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

  1. качество обслуживания, связанного с маршрутом. Например, флаг U указывает, что IP-маршрут установлен.
  2. критерии фильтрации : списки контроля доступа, связанные с маршрутом
  3. интерфейс : например, eth0 для первой карты Ethernet, eth1 для второй карты Ethernet и т. д.

Ниже показан пример того, как может выглядеть приведенная выше таблица на компьютере, подключенном к Интернету через домашний маршрутизатор :

Пример содержимого таблицы маршрутизации
Сетевое назначение Маска сети Шлюз Интерфейс Метрическая
0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.100 10
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.0.0 255.255.255.0 192.168.0.100 192.168.0.100 10
192.168.0.100 255.255.255.255 127.0.0.1 127.0.0.1 10
192.168.0.1 255.255.255.255 192.168.0.100 192.168.0.100 10
  • Столбцы Назначение сети и Маска сети вместе описывают идентификатор сети, как упоминалось ранее. Например, адрес назначения 192.168.0.0 и маска сети 255.255.255.0 могут быть записаны как 192.168.0.0/24 .
  • Столбец « Шлюз» содержит ту же информацию, что и « Следующий переход» , т. Е. Указывает на шлюз, через который можно выйти в сеть.
  • Интерфейс указывает на то , что локально доступный интерфейс отвечает за достижение шлюза. В этом примере к шлюзу 192.168.0.1 (интернет-маршрутизатор) можно получить доступ через локальную сетевую карту с адресом 192.168.0.100 .
  • Наконец, метрика указывает связанные с этим затраты на использование указанного маршрута. Это полезно для определения эффективности определенного маршрута из двух точек в сети. В этом примере более эффективно взаимодействовать с самим компьютером, используя адрес 127.0.0.1 (называемый «localhost»), чем через 192.168.0.100 (IP-адрес локальной сетевой карты).

Варианты действий маршрутизатора

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

Рассмотрим маршрутизатор D, на него пришел пакет, и маршрутизатор должен решить, что ему делать с этим пакетом. Начнем с того, какие вообще возможны варианты действий у маршрутизатора. Первый вариант, сеть которой предназначен пакет подключена непосредственно к маршрутизатору. У маршрутизатора D таких сетей 3, в этом случае маршрутизатор передает пакет непосредственно в эту сеть.

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

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

Что нужно знать маршрутизатору для того чтобы решить куда отправить пакет?

  • Во-первых у маршрутизатора есть несколько интерфейсов, к которым подключены сети. Нужно определить в какой из этих интерфейсов отправлять пакет.
  • Затем нужно определить, что именно делать с этим пакетом. Есть 2 варианта, можно передать пакет в сеть (192.168.1.0/24), либо можно передать его на один из маршрутизаторов подключенные к этой сети. Если передавать пакет на маршрутизатор, то нужно знать, какой именно из маршрутизаторов подключенных к этой сети, выбрать для передачи пакета.

Опорные сети и автономные системы

Одна из базовых идей маршрутизации заключается в том, чтобы сконцентрировать маршрутную информацию в ограниченном числе (в идеале в одном) узловых маршрутизаторов-диспетчеров. Эта замечательная идея ведет к заметному увеличению числа шагов при пересылке пакетов. Оптимизировать решение позволяет backbone (опорная сеть), к которой подключаются узловые маршрутизаторы. Любая AS подключается к backbone через узловой маршрутизатор.

«Прозрачные» backbone не работают с адресами класса С (все объекты такой сети должны иметь один адрес, а для c-класса число объектов слишком ограничено). «Прозрачные» мосты трудно диагностировать, так как они не следуют протоколу ICMP (команда ping не работает, в последнее время такие объекты снабжаются snmp-поддержкой). За то они позволяют перераспределять нагрузку через несколько маршрутизаторов, что невозможно для большинства протоколов.

Широковещательная маршрутизация

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

Маршрутизация вещания может быть выполнена двумя способами (алгоритмом):

  • Маршрутизатор создает пакет данных и затем отправляет его каждому узлу по одному. В этом случае маршрутизатор создает несколько копий одного пакета данных с разными адресами назначения. Все пакеты отправляются как одноадресные, но поскольку они отправляются всем, он имитирует, как если бы роутер вещал.Этот метод потребляет много полосы пропускания, а маршрутизатор должен назначать адрес каждого узла.
  • Во-вторых, когда маршрутизатор получает пакет, который должен транслироваться, он просто наводняет эти пакеты из всех интерфейсов. Все маршрутизаторы настроены одинаково.Этот метод прост в процессоре маршрутизатора, но может вызвать проблему дублирования пакетов, полученных от одноранговых маршрутизаторов. Обратная переадресация — это метод, в котором маршрутизатор заранее знает о своем предшественнике, откуда он должен получать трансляцию. Этот метод используется для обнаружения и удаления дубликатов.

Настройка через оснастку

В контекстном меню вкладки «Общие» (SERVER1 –> IP-маршрутизация –> Общие) нужно выбрать пункт «Новый протокол маршрутизации».

Затем выделяем строку «RIP версии 2 для IP».
В контекстном меню появившейся вкладки «RIP» выберите «Новый интерфейс». Выделите строку «Подключение по локальной сети» и нажмите ОК.
Перед вами появиться окно.

В появившемся окне необходимо задать следующие настройки:

  • Режим работы –> Режим периодического обновления.
  • Протокол для исходящих пакетов –> Для RIP версии 1.
  • Протокол входящих пакетов –> Только для RIP версии 1.

Оставьте оставшиеся настройки по умолчанию и нажмите ОК.

Далее необходимо выполнить эти действия для второго сетевого интерфейса.

После выполните те же действия для Sever2.

Проверьте, с помощью команды ping, работу сети.

Поздравляю! Маршрутизация в Windows изучена.

Маршрутизация источника

Маршрутизация от источника часто используется в локальных сетях . В этом случае передающая станция знает полный путь к станции назначения. Отправляющая станция вводит адрес следующего сетевого узла в заголовок сообщения. Каждый последующий сетевой узел адресует следующий узел по уже определенному маршруту непосредственно в заголовке сообщения. Это метод z. Б. используется в почтовой службе Usenet .

Популярный пример — динамическая маршрутизация от источника ; Здесь отправляющая станция узнает действительный маршрут к станции назначения через обнаружение маршрута. Этот маршрут вводится в заголовок каждого пакета к станции назначения, и каждый промежуточный узел обязан пересылать пакет по этому маршруту. Правильная пересылка в двунаправленных беспроводных сетях также может проверяться (прослушиваться) узлом предыдущего перехода .

Файл конфигурации сети

Созданные нами правило и маршрут по умолчанию для таблицы пропадут при перезагрузке , поэтому надо изменить файл конфигурации сети:

# nano /etc/netplan/01-netcfg.yaml
network
  version 2
  renderer networkd
  ethernets
    enp0s3
      addresses 192.168.50.2/24
      routes
        # маршрут по умолчанию для таблицы main, метрика 100 (основной)
        - to 0.0.0.0/0
          from 192.168.50.2
          via 192.168.50.1
          metric 100
        # маршрут по умолчанию для таблицы primary (идентификатор 10)
        - to 0.0.0.0/0
          via 192.168.50.1
          table 10
      routing-policy
        # если отправитель 192.168.50.2, просматривать таблицу primary
        - from 192.168.50.2
          table 10
          priority 31000
      nameservers
        addresses 8.8.8.8, 8.8.4.4
    enp0s8
      addresses 192.168.150.2/24
      routes
        # маршрут по умолчанию для таблицы main, метрика 200 (резервный)
        - to 0.0.0.0/0
          from 192.168.150.2
          via 192.168.150.1
          metric 200
        # маршрут по умолчанию для таблицы secondary (идентификатор 20)
        - to 0.0.0.0/0
          via 192.168.150.1
          table 20
        # маршрут по умолчанию для таблицы pc2-via-gw2 (идентификатор 30)
        - to 0.0.0.0/0
          via 192.168.150.1
          table 30
      routing-policy
        # если отправитель 192.168.150.2, просматривать таблицу secondary
        - from 192.168.150.2
          table 20
          priority 32000
        # если отправитель 192.168.250.3, просматривать таблицу pc2-via-gw2
        # (отправлять пакеты от компьютера pc-2 через второго провайдера)
        - from 192.168.250.3
          table 30
          priority 30000
      nameservers
        addresses 8.8.8.8, 8.8.4.4
    enp0s9
      addresses 192.168.250.1/24
      nameservers
        addresses 8.8.8.8, 8.8.4.4

Дополнительно

  • Linux маршрутизатор с несколькими внешними интерфейсами
  • Роутинг и policy-routing в Linux при помощи iproute2

Поиск:
Bash • Linux • Локальная сеть • Маршрутизация • Настройка • Сетевой интерфейс • Таблица

Проверка маршрута для pc-2

Проверим, что компьютер выходит в интернет через резервный канал связи:

$ traceroute -n ya.ru
traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets
1  192.168.250.1  0.454 ms  0.384 ms  0.341 ms
2  192.168.150.1  1.177 ms  1.142 ms  1.091 ms
..........
9  87.250.250.242  10.984 ms  10.768 ms  10.716 ms

Удостоверимся, что компьютер выходит в интернет через основной канал связи:

$ traceroute -n ya.ru
traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets
1  192.168.250.1  0.329 ms  0.225 ms  0.172 ms
2  192.168.50.1  0.376 ms  0.326 ms  0.394 ms
..........
9  87.250.250.242  8.377 ms  10.626 ms  11.813 ms

Поиск оптимального маршрута

Смотрите на следующем рисунке участок дорожной сети с узлами и построенного маршрута с порядковыми номерами посещенных домов:

Кроме уже означенной проблемы с направлениями движения, местами можно заметить странный порядок нумерации — например, смотрите номера 245,246,247 и другие. Вы можете захотеть «покрутить» доступные параметры для алгоритма отжига — но, даже если это удастся сделать, найденные подходящие параметры для конкретного маршрута не помогут с любым другим маршрутом. Вместо попыток подбора параметров и увеличения времени вычисления следует заняться улучшением дорожной сети (и матрицы расстояний), например, за счет жесткого указания направлений движения.

Динамическая маршрутизация

При динамической маршрутизации происходит обмен маршрутной информацией между соседними маршрутизаторами, в ходе которого они сообщают друг другу, какие сети в данный момент доступны через них. Информация обрабатывается и помещается в таблицу маршрутизации. К наиболее распространенным внутренним протоколам маршрутизации относятся:
RIP (Routing Information Protocol) — протокол маршрутной информации
OSPF (Open Shortest Path First) — протокол выбора кратчайшего маршрута
EIGRP (Enhanced Interior Gateway Routing Protocol) — усовершенствованный протокол маршрутизации внутреннего шлюза
IGRP (Interior Gateway Routing Protocol) — протокол маршрутизации внутреннего шлюза

Протокол динамической маршрутизации выбирается исходя из множества предпосылок (скорость конвергенции, размер сети, задействование ресурсов, внедрение и сопровождение и др.) поэтому прежде всего, во внимание принимаются такие характеристики, как размер сети, доступная полоса пропускания, аппаратные возможности процессоров маршрутизирующих устройств, модели и типы маршрутизаторов.
Большинство алгоритмов маршрутизации может быть отнесено к одной из двух категорий: дистанционно-векторные протоколы (RIPv1, RIPv2, RIPng, IGRP, EIGRP, EIGRP for IPv6) и протоколы с учетом состояния канала (OSPFv2, OSPFv3, IS-IS, IS-IS for IPv6)

Настройка сети

На компьютере установлена ОС Ubuntu Server, настройка сети выполнена с использованием Netplan:

# nano /etc/netplan/01-netcfg.yaml
network
  version 2
  renderer networkd
  ethernets
    enp0s3
      addresses 192.168.50.2/24
      routes
        # маршрут по умолчанию для таблицы main, метрика 100 (основной)
        - to 0.0.0.0/0
          from 192.168.50.2
          via 192.168.50.1
          metric 100
        # маршрут по умолчанию для таблицы primary (идентификатор 10)
        - to 0.0.0.0/0
          via 192.168.50.1
          table 10
      routing-policy
        # если отправитель 192.168.50.2, просматривать таблицу primary
        - from 192.168.50.2
          table 10
          priority 31000
      nameservers
        addresses 8.8.8.8, 8.8.4.4
    enp0s8
      addresses 192.168.150.2/24
      routes
        # маршрут по умолчанию для таблицы main, метрика 200 (резервный)
        - to 0.0.0.0/0
          from 192.168.150.2
          via 192.168.150.1
          metric 200
        # маршрут по умолчанию для таблицы secondary (идентификатор 20)
        - to 0.0.0.0/0
          via 192.168.150.1
          table 20
      routing-policy
        # если отправитель 192.168.150.2, просматривать таблицу secondary
        - from 192.168.150.2
          table 20
          priority 32000
      nameservers
        addresses 8.8.8.8, 8.8.4.4
    enp0s9
      addresses 192.168.250.1/24
      nameservers
        addresses 8.8.8.8, 8.8.4.4

После загрузки системы смотрим маршруты таблицы :

$ ip route show
default via 192.168.50.1 dev enp0s3 proto static src 192.168.50.2 metric 100
default via 192.168.150.1 dev enp0s8 proto static src 192.168.150.2 metric 200
192.168.50.0/24 dev enp0s3 proto kernel scope link src 192.168.50.2
192.168.150.0/24 dev enp0s8 proto kernel scope link src 192.168.150.2
192.168.250.0/24 dev enp0s9 proto kernel scope link src 192.168.250.1

Здесь два маршрута по умолчанию, но с разными значениями метрики — один маршрут основной (метрика 100), другой резервный (метрика 200).

Обзор

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

Основная функция маршрутизатора — пересылать пакет в сеть назначения, которая является IP-адресом назначения пакета. Для этого маршрутизатору необходимо выполнить поиск информации о маршрутизации, хранящейся в его таблице маршрутизации. Таблица маршрутизации содержит ассоциации сеть / следующий переход. Эти ассоциации сообщают маршрутизатору, что конкретный пункт назначения может быть оптимально достигнут путем отправки пакета определенному маршрутизатору, который представляет собой следующий переход на пути к конечному пункту назначения. Связь следующего перехода также может быть исходящим или выходным интерфейсом для конечного пункта назначения.

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

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

Удаленная сеть — это сеть, в которую можно попасть, только отправив пакет на другой маршрутизатор. Записи таблицы маршрутизации в удаленные сети могут быть динамическими или статическими. Динамические маршруты — это маршруты к удаленным сетям, которые были получены маршрутизатором автоматически с помощью протокола динамической маршрутизации. Статические маршруты — это маршруты, которые администратор сети настроил вручную.

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

Соединение роутеров

Соединяем наши роутеры. Предположим, что между ними есть прямой линк, в жизни конечно это VPN канал . настроим в начале роутер Cisco 2911 в главном офисе.

Создание таблицы маршрутизации

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

  • Административное расстояние Это мера верности происхождения маршрута.
  • Другими словами, это авторитет источника маршрута.
  • В каждом протоколе маршрутизации используется другой показатель.

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

маска тут 32 бита так как нам достаточно всего 2 ip адреса.

enable
conf t
int gi0/1
no shutdown
ip address
192.168.100.1 255.255.255.252
end
wr mem

Теперь настроим роутер Cisco 1841 в филиале. У меня это интерфейс fa0/1

enable
conf t
int fa0/1
ip address
192.168.100.2 255.255.255.252
no shutdown
do wr mem

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

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

У нас загорелись порты обоих коммутаторов.

Проверяем пинги с роутеров друг до друга

do ping 192.168.100.1

Видим, что все успешно.

Только следующий шаг!

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

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

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

Команды таблицы маршрутизации

Я ничего не сказал про предпоследнюю строчку. А она самая интересная, ведь я ее добавил руками.
В чем ее смысл? Адреса диапазона 10.1-32.*.* я отправляю на шлюз 10.22.220.1. Пакеты на эти адреса не пойдут
в интернет, а останутся в локалке провайдера. Да, пакеты на диапазон 10.22.220. и так идут туда,
но этого мало. Так я не получаю полноценного доступа к локальным ресурсам.

В случае Windows такой маршрут в таблицы маршрутизации был бы добавлен командой
route -p add 10.0.0.0 mask 255.224.0.0 10.22.220.1. -p означает, что маршрут постоянный,
он не должен удаляться после перезагрузки компьютера.

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

← Что такое компакт-диски? Как разбить жесткий диск? →

Routing Information Protocol (RIP)

Протокол RIP является дистанционно-векторным протоколом маршрутизации. Протоколы динамической маршрутизации определяют оптимальный путь к необходимой сети на основании значения, которое называется метрикой. В качестве метрики в протоколе RIP используется количество транзитных устройств или переходов (hop count – прыжок пакета) из одной сетевой структуры в другую. Максимальное число таких переходов равно 15. А все сети, число переходов до которых превышает 15, считаются недостижимыми. Маршрутизаторы, на которых настроен протокол RIP, периодически (по умолчанию каждые 30 с) пересылают полные анонсы маршрутов, в которых содержится информация обо всех известных им сетях.

Mappers: Improving the map data

For routing software to work well, the underlying map data must be of good quality. Essentially this means that ways that should be connected are in fact connected, one-way roads are tagged, turn restrictions are mapped, and so on. You should be familiar with the Map Features used, in particular see OSM tags for routing to understand the tags specific to routing.

Fixing bugs with notes

Showing how to determine connected and unconnected nodes in Potlatch

Some issues reported in Notes are specifically about one-way roads or turn restrictions, and are marked as such.

Speed data

In order to better calculate the fastest route, please consider helping by adding speed data using the maxspeed=* tag. This is especially important where the speed limit differs from the assumed maximum permitted speed for the road type per country and vehicle-type.

Note: There are some services to help .

Often maxspeed is meaningless — see .

Checking your fix

After you have fixed an error on the map you will need to wait until the revised version of the map propagates into the routing engine you are using. This delay will depend for each engine on:

  • how often it get updates from the database
  • how long it needs to update its internal database.

In the case of OSRM used on the map front page it usually gets updates twice a day and then spends 10-12 hours processing the updates. This gives a total delay of anything from 10 to 24 hours from your fix being saved to the map, to working in OSRM.

Примеры

Упражнение 1

После ознакомления с концепцией подсетей, примените новые знания на практике. В этом примере предоставлены две комбинации «адрес/маска», представленные с помощью обозначения «префикс/длина», которые были назначены для двух устройств. Ваша задача — определить, находятся эти устройства в одной подсети или в разных. С помощью адреса и маски каждого устройства можно определить, к какой подсети принадлежит каждый адрес.

DeviceA: 172.16.17.30/20
DeviceB: 172.16.28.15/20

Определим подсеть для устройства DeviceA:

172.16.17.30  -   10101100.00010000.00010001.00011110
255.255.240.0 -   11111111.11111111.11110000.00000000
                  -----------------| sub|------------
subnet =          10101100.00010000.00010000.00000000 = 172.16.16.0

Рассмотрение битов адресов, соответствующие биты маски для которых равны единице, и задание всех остальных битов адресов, равными нулю (аналогично выполнению логической операции И между маской и адресом), покажет, к какой подсети принадлежит этот адрес. В рассматриваемом случае устройство DeviceA принадлежит подсети 172.16.16.0.

Определим подсеть для устройства DeviceB:

172.16.28.15  -   10101100.00010000.00011100.00001111
255.255.240.0 -   11111111.11111111.11110000.00000000
                  -----------------| sub|------------
subnet =          10101100.00010000.00010000.00000000 = 172.16.16.0

Следовательно, устройства DeviceA и DeviceB имеют адреса, входящие в одну подсеть.

Пример упражнения 2

Рис. 3

Самая большая подсеть должна содержать 28 адресов узлов. Возможно ли это при использовании сети класса C? И если да, то каким образом следует выполнить разделение на подсети?

Можно начать с оценки требования к подсетям. Чтобы создать пять подсетей, необходимо использовать три бита из битов узла класса C. Два бита позволяют создать только четыре подсети (22).

Так как понадобится три бита подсети, для части адреса, отвечающей за узел, останется только пять битов. Сколько хостов поддерживается в такой топологии? 25 = 32 (30 доступных). Это отвечает требованиям.

Следовательно, можно создать эту сеть, используя сеть класса C. Пример назначения подсетей:

netA: 204.15.5.0/27      host address range 1 to 30
netB: 204.15.5.32/27     host address range 33 to 62
netC: 204.15.5.64/27     host address range 65 to 94
netD: 204.15.5.96/27     host address range 97 to 126
netE: 204.15.5.128/27    host address range 129 to 158

Как посмотреть таблицу маршрутизации

Перед тем как что-либо менять, нужно понять какие правила уже используются. В Linux для этого существует несколько команд. Чтобы посмотреть таблицу маршрутизации можно использовать команду route:

Вот так выглядит таблица маршрутизации linux. Тут выводится достаточно простая информация, которой не всегда достаточно чтобы понять суть дела. Более подробно можно посмотреть с помощью команды routel:

Тут вы уже можете видеть IP адрес цели (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но самый удобный способ посмотреть таблицу маршрутизации linux — это команда ip:

Вывод похож на результат предыдущей команды, но выглядит не совсем привычно, это потому, что вывод команды можно использовать в качестве аргумента для ip route add или ip route del. Это очень удобно. Как вы видите, в качестве шлюза по умолчанию везде используется 192.168.1.1. Рассмотрим подробнее что означает вывод этой команды:

  • default — в данной строке означает вариант по умолчанию. Здесь должен быть ip адрес цели или маска подсети;
  • via 192.168.1.1 — указывает через какой шлюз мы можем добраться до этой цели, у нас это 192.168.1.1;
  • dev enp2s0 — сетевой интерфейс, с помощью которого будет доступен этот шлюз;
  • proto static — означает, что маршрут был установлен администратором, значение kernel значит что он был установлен ядром;
  • metric — это приоритет маршрута, чем меньше значение — тем выше приоритет.

А теперь рассмотрим выполняется настройка маршрутов Linux.

Добавляем поддержку односторонних дорог в PgRouting

Здесь сказано, что решение задачи коммивояжера на асимметричной матрице расстояний усложняется, поэтому лучше превратить асимметричную матрицу в симметричную (ценой удвоения размера матрицы) и решать более простую симметричную задачу на симметричной матрице расстояний. Почти то же самое, что и в документации PgRouting, зато здесь объяснено, зачем же нужна именно симметричная матрица. Далее на этой же викистранице приводится алгоритм конвертации асимметричной матрицы в симметричную и пример конвертации простой матрицы. Идея простая — каждый узел и каждое ребро заменить на два и задать такую матрицу расстояний между ними, чтобы полученный на такой матрице путь соответствовал искомому. Ниже мы рассмотрим этот пример из вики. К сожалению, графическое представление соответствующего графа я рисовал на листочках от руки и показать здесь не могу (почерк у меня как у физика, так что извините).

Пусть у нас задана асимметричная матрица весов:

A B C
A 1 2
B 6 3
C 5 4

Ей соответствует следующая симметричная матрица весов:

A B C A’ B’ C’
A -w 6 5
B 1 -w 4
C 2 3 -w
A’ -w 1 2
B’ 6 -w 3
C’ 5 4 -w

где -w это виртуальные соединения для виртуальных узлов, которые рекомендуется задать некоторым отрицательным числом, потому что

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

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

Заполним все значения матрицы весов с помощью еще одной функции-обертки (можно было бы упростить pgr_dijkstraSymmetrizeCostMatrix() и не добавлять в ней избыточные ребра, но в таком случае при полной исходной матрице мы получим не полную итоговую матрицу, что, на мой взгляд, не есть правильно):

Теперь мы учли все требования PgRouting и можем работать с односторонними дорогами. Отмечу, что полученные обертки можно использовать и для симметричной матрицы, когда априори не известно, будет ли исходная матрица симметричной (хотя для симметричной исходной матрицы это приведет к не нужному ее увеличению и замедлению обработки).

Заключение

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

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