Таблица маршрутов

Оглавление

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

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

Входящий IP-пакет никогда не ретранслируется через тот же сетевой интерфейс, через который он был принят.

Решение о маршрутизации принимается до того, как IP-пакет передается сетевому драйверу, и до того, как происходит обращение к ARP-таблице.

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

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

В большинстве систем таблица маршрутов может быть изменена с помощью команды "route". Содержание таблицы маршрутов определяется менеджером сети, поскольку менеджер сети присваивает машинам IP-адреса.

Таблица маршрутов при прямой маршрутизации

Рассмотрим более подробно, как происходит маршрутизация в одной физической сети.


Одна физическая сеть


Таблица маршрутов в узле alpha выглядит так:

CетьФлаг вида маршрутизацииШлюзНомер интерфейса
developmentпрямая<пусто>1

Пример таблицы маршрутов


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

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

CетьФлаг вида маршрутизацииШлюзНомер интерфейса
223.1.2прямая<пусто>1

Пример таблицы маршрутов с номерами сетей


Подробности прямой маршрутизации

Узел alpha посылает IP-пакет узлу beta. Этот пакет находится в модуле IP узла alpha, и IP-адрес места назначения равен IP-адресу beta (223.1.2.2). Модуль IP с помощью маски подсети выделяет номер сети из IP-адреса и ищет соответствующую ему строку в таблице маршрутов. В данном случае подходит первая строка.

Остальная информация в найденной строке указывает на то, что машины этой сети доступны напрямую через интерфейс номер 1. С помощью ARP- таблицы выполняется преобразование IP-адреса в соответствующий Ethernet-адрес, и через интерфейс 1 Ethernet-кадр посылается узлу beta.

Если прикладная программа пытается послать данные по IP-адресу, который не принадлежит сети development, то модуль IP не сможет найти соответствующую запись в таблице маршрутов. В этом случае модуль IP отбрасывает IP-пакет. Некоторые реализации протокола возвращают сообщение об ошибке "Сеть не доступна".

Таблица маршрутов при косвенной маршрутизации

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

Таблица маршрутов в узле alpha выглядит так:

CетьФлаг вида маршрутизацииШлюзНомер интерфейса
developmentпрямая<пусто>1
accountingкосвеннаяdevnetrouter1
factoryкосвеннаяdevnetrouter1

Таблица маршрутов в узле alpha



Подробная схема трех сетей


Та же таблица с IP-адресами вместо названий.

CетьФлаг вида маршрутизацииШлюзНомер интерфейса
223.1.2прямая<пусто>1
223.1.3косвенная223.1.2.41
223.1.4косвенная223.1.2.41

Таблица маршрутов в узле alpha (с номерами)


В столбце "шлюз" таблицы маршрутов узла alpha указывается IP-адрес точки соединения узла delta с сетью development.

Порядок косвенной маршрутизации

Узел alpha посылает IP-пакет узлу epsilon. Этот пакет находится в модуле IP узла alpha, и IP-адрес места назначения равен IP-адресу узла epsilon (223.1.3.2). Модуль IP выделяет сетевой номер из IP-адреса (223.1.3) и ищет соответствующую ему строку в таблице маршрутов. Соответствие находится во второй строке.

Запись в этой строке указывает на то, что машины требуемой сети доступны через шлюз devnetrouter. Модуль IP в узле alpha осуществляет поиск в ARP-таблице, с помощью которого определяет Ethernet-адрес, соответствующий IP-адресу devnetrouter. Затем IP-пакет, содержащий IP-адрес места назначения epsilon, посылается через интерфейс 1 шлюзу devnetrouter.

IP-пакет принимается сетевым интерфейсом в узле delta и передается модулю IP. Проверяется IP-адрес места назначения, и, поскольку он не соответствует ни одному из собственных IP-адресов delta, шлюз решает ретранслировать IP-пакет.

Модуль IP в узле delta выделяет сетевой номер из IP-адреса места назначения IP-пакета (223.1.3) и ищет соответствующую запись в таблице маршрутов. Таблица маршрутов в узле delta выглядит так:

CетьФлаг вида маршрутизацииШлюзНомер интерфейса
developmentпрямая<пусто>1
accountingпрямая<пусто>3
factoryпрямая<пусто>2

Таблица маршрутов в узле delta


Та же таблица с IP-адресами вместо названий.

2
CетьФлаг вида маршрутизацииШлюзНомер интерфейса
223.1.2прямая<пусто>1
223.1.3прямая<пусто>3
223.1.4прямая<пусто>

Таблица маршрутов в узле delta (с номерами)


Соответствие находится во второй строке. Теперь модуль IP напрямую посылает IP-пакет узлу epsilon через интерфейс номер 3. Пакет содержит IP- и Ethernet-адреса места назначения равные epsilon.

Узел epsilon принимает IP-пакет, и его модуль IP проверяет IP-адрес места назначения. Он соответствует IP-адресу epsilon, поэтому содержащееся в IP-пакете сообщение передается протокольному модулю верхнего уровня.

Установка маршрутов

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

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

ifconfig ie0 128.6.4.4 netmask 255.255.255.0
ifconfig ie1 128.6.5.35 netmask 255.255.255.0

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

CетьФлаг вида маршрутизацииШлюзИнтерфейс
128.6.4прямая<пусто>ie0
128.6.5прямая<пусто>ie1

Автоматически создаваемые записи


Эти записи определяют, что IP-пакеты для локальных подсетей 128.6.4 и 128.6.5 должны посылаться через указанные интерфейсы.

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

route add 128.6.2.0 128.6.4.1 1
route add 128.6.6.0 128.6.5.35 0

Эти команды показывают, что в таблицу маршрутов должны быть добавлены две записи. Первый адрес в командах является IP-адресом сети, второй адрес указывает шлюз, который должен использоваться для доступа к данной IP- сети, а третий параметр является метрикой. Метрика показывает, на каком "расстоянии" находится описываемая IP-сеть. В данном случае метрика - это количество шлюзов на пути между двумя IP-сетями. Маршруты с метрикой 1 и более определяют первый шлюз на пути к IP-сети. Маршруты с метрикой 0 показывают, что никакой шлюз не нужен - данный маршрут задает дополнительный сетевой номер локальной IP-сети.

Таким образом, команды, приведенные в примере, говорят о том, что для доступа к IP-сети 128.6.2 должен использоваться шлюз 128.6.4.1, а IP-сеть 128.6.6 - это просто дополнительный номер для физической сети, подключенной к интерфейсу 128.6.5.35.

CетьФлаг вида маршрутизацииШлюзИнтерфейс
128.6.2косвенная128.6.4.1ie0
128.6.6прямая<пусто>ie1

Записи, добавляемые в таблицу маршрутов


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

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

 
 
Prev
Предыдущий
Next
Следующий
Hosted by uCoz