Таблица маршрутизации
Таблица маршрутизации (также роутинговая таблица, англ. routing table) — в информатике это структура данных, хранящаяся в оперативной памяти компьютера или маршрутизатора и служащая для маршрутизации данных, проходящих через компьютерную сеть. Таблица маршрутизации содержит упрощённое представление топологии сети, на основании которого система принимает решение о том, как обработать полученный или отправляемый датаграм. Записи в таблице маршрутизации соответствуют используемому сетевому протоколу (например, TCP/IP, IPX/SPX и др.). Для протоколов TCP/IP таблица маршрутизации обычно реализуется как часть ядра операционной системы (так называемый TCP/IP стек)[1].
Характеристика
Таблица маршрутизации формируется при конфигурировании сетевого подсистемы (обычно при запуске компьютера, однако возможны и динамические изменения в процессе работы). Записи в таблице маршрутизации могут быть статическими (т. е. установленными вручную и неизменяемыми) или динамическими (меняются в зависимости от ситуации в компьютерной сети). Статические записи создаются администратором и, как правило, хранятся на жёстком диске. Динамические записи добавляются и удаляются из таблицы маршрутизации доменом какого-либо маршрутизирующего протокола (RIP, OSPF). При обработке датаграммы её целевой адрес сравнивается с записями таблицы маршрутизации. При совпадении используемой записи датаграмма маршрутизируется соответствующим образом.
В централизованной маршрутизации все маршрутизаторы отправляют информацию о состоянии окружающей сети в центр. Этот центр, опираясь на полученные сведения, строит карту сети, вычисляет маршрутизирующие таблицы и рассылает их обратно маршрутизаторам. Достоинство этого способа — простота реализации и возможность определять глобально оптимальные таблицы маршрутизации благодаря полной информации о сети. Однако на практике централизованный способ применяется редко: центр оказывается перегружен, а масштаб сети ограничивается его возможностями. Ещё одна проблема — плохая синхронизация таблиц: узлы, расположенные ближе к центру, получают таблицу раньше, чем удалённые.
Изолированная маршрутизация построена на принципе индивидуальности каждого устройства. Никакое сетевое устройство не отправляет информацию о состоянии сети — каждый маршрутизатор принимает решения самостоятельно. Примером является флудирующий алгоритм: полученный маршрутизатором пакет рассылается во все направления, кроме того, откуда он был получен. Таким образом, перебираются все варианты маршрутов, всегда находя кратчайший. Недостаток этого метода — крайне неэкономное использование ресурсов. Флудирование применимо либо в очень избыточных сетях, либо когда требуется максимально быстро распространить пакет по всей сети.
Маршрутизирующие протоколы
RIP (Routing Information Protocol) относится к числу древнейших применяемых протоколов класса IGP типа дистанционно-векторных. По сей день RIP используется в небольших сетях благодаря простоте реализации. Впервые внедрён в 1968 году. Основное ограничение RIP — поддержка максимум 15 хопов (прыжков, то есть промежуточных маршрутизаторов). Это защищает от образования роутинговых петель, но накладывает лимит на размер сети. 16 хопов считается бесконечно большим расстоянием и используется для обозначения недоступных маршрутов. Маршрутизаторы под RIP передают обновления своих таблиц раз в 30 секунд. В современных реализациях интервалы обновлений можно регулировать для каждого маршрутизатора отдельно, чтобы снизить риск перегрузки сети одновременными рассылками.
Существует три версии RIP. В первой версии (RIPv1) маршрутизация основана на классах IPv4-адресов (A, B, C). Обновления таблиц не содержат информации о маске сети, что не позволяет создавать подсети разного размера (отсутствует поддержка VLSM — Variable-Length Subnet Mask). В RIPv1 также нет удалённой аутентификации маршрутизаторов, что делает протокол уязвимым для атак.
Эти проблемы решены во второй версии, RIPv2, разработанной в 1993 году. Она поддерживает передачу информации о маске сети и обеспечивает аутентификацию маршрутизаторов. Однако аутентификация по-прежнему не очень безопасна, так как используется текстовый (не хешированный) пароль. Протокол совместим по конфигурации с первой версией.
Третья версия — RIPng (RIP next generation): расширение RIPv2 с поддержкой IPv6.
EIGRP — проприетарный протокол компании Cisco, в 2013 году открытый для публики. В отличие от других распространённых маршрутизирующих протоколов (например, RIP), EIGRP передаёт только инкрементальные обновления, что снижает нагрузку на оборудование и уменьшает общий объём пересылаемых данных.
Таблица маршрутизации
IP-датаграммы обрабатываются согласно записям в таблице маршрутизации, которая входит в состав реализации TCP/IP (так называемый TCP/IP стек обычно является частью ядра операционной системы).
Записи в таблице маршрутизации сортируются по длине маски сети, то есть по количеству единиц слева в двоичном представлении маски. В начале таблицы располагаются самые специфичные записи — для отдельных IP-адресов с маской 255.255.255.255 либо небольших подсетей. В конце помещается наиболее общая запись (минимальная маска, то есть 0.0.0.0), указывающая на шлюз в Интернет (так называемый шлюз по умолчанию — default gateway). Такое построение позволяет делать исключения из общих правил маршрутизации (например, для малых подсетей внутри большой), а также уменьшает число записей в таблицах маршрутизации (что особенно важно для центральных маршрутизаторов в Интернете).
Целевой IP-адрес входящей IP-датаграммы последовательно сравнивается с каждым элементом таблицы маршрутизации, пока не будет найдено совпадение. Как уже отмечалось, записи расположены в порядке убывания длины маски — от 255.255.255.255 до 0.0.0.0. Проверка выполняется так: берётся строка таблицы маршрутизации и целевой IP-адрес с помощью логической операции AND объединяется с маской сети из данной строки. Если результат совпадает с сетевым адресом, указанным в той же строке, запись считается подходящей, и она используется для отправки IP-датаграммы. Если совпадения нет, проводится сравнение со следующей строкой. Последняя запись, как правило, указывает на так называемый шлюз по умолчанию (англ. default gateway) — устройство для маршрутизации всех датаграмм, для которых в таблице нет отдельных записей. Поэтому её сеть обозначается как 0.0.0.0 с маской 0.0.0.0: вычисление всегда даст совпадение с любым IP-адресом назначения. Такая запись обычно ведёт на маршрутизатор, соединяющий компьютер с остальным Интернетом.
Каждая таблица маршрутизации должна обязательно содержать ряд основных данных, необходимых для обработки IP-датаграмм:
- Назначение в сети (адресат)
- Под «назначением» понимается адрес подсети, конечного компьютера или дефолтный маршрут (шлюз, за которым обычно находится остальной Интернет). Значения адресата могут быть от 0.0.0.0 (шлюз по умолчанию) до 255.255.255.255 (локальный broadcast). Совместно с маской сети этот адрес используется при сравнении с целевым адресом обрабатываемого датаграмма.
- Маска сети
- Маска сети служит для указания диапазона адресов, на которые распространяется конкретная запись таблицы.
- Шлюз
- Значение шлюза — это IP-адрес ближайшего маршрутизатора, куда должны быть отправлены соответствующие датаграммы.
- Интерфейс
- Зависит от ОС — может быть символическое имя сетевого интерфейса (например, eth0), либо IP-адрес интерфейса на данном компьютере (сетевая карта), который следует использовать для передачи IP-датаграммы.
- Метрика
- Относительная стоимость маршрута для передачи данных к назначению. Обычно метрика — это число переходов (хопов/маршрутизаторов) по маршруту. Если для одного назначения есть несколько маршрутов с различной метрикой, выбирается маршрут с наименьшей стоимостью.
- Протокол
- Показывает, как были получены данные о маршруте. Если в столбце «Протокол» стоит RIP, OSPF или иное (кроме «локальный»), маршрутизатор получил сведения о маршруте через соответствующий протокол маршрутизации.
Примеры таблиц маршрутизации
В операционных системах семейства Windows NT увидеть таблицу маршрутизации можно, введя в терминале команду:
route print
Результат выполнения будет примерно следующим:
=============================================================================== =============================================================================== Активная маршрутизация: Назначение Маска сети Шлюз Интерфейс Метрика 0.0.0.0 0.0.0.0 10.0.0.138 10.0.0.1 25 10.0.0.0 255.255.255.0 10.0.0.1 10.0.0.1 25 10.0.0.1 255.255.255.255 127.0.0.1 127.0.0.1 25 10.255.255.255 255.255.255.255 10.0.0.1 10.0.0.1 25 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.56.0 255.255.255.0 192.168.56.1 192.168.56.1 20 192.168.56.1 255.255.255.255 127.0.0.1 127.0.0.1 20 192.168.56.255 255.255.255.255 192.168.56.1 192.168.56.1 20 224.0.0.0 240.0.0.0 10.0.0.1 10.0.0.1 25 224.0.0.0 240.0.0.0 192.168.56.1 192.168.56.1 20 255.255.255.255 255.255.255.255 10.0.0.1 10.0.0.1 1 255.255.255.255 255.255.255.255 192.168.56.1 192.168.56.1 1 255.255.255.255 255.255.255.255 192.168.56.1 10.0.0.5 1 Шлюз по умолчанию: 10.0.0.138 =============================================================================== Постоянные маршруты: Нет
В UNIX-системах (например, Linux) таблицу маршрутизации можно посмотреть командой route -n (ключ -n отключает преобразование IP-адресов в доменные имена). Записи в выводе этой команды сортируются по длине маски (сначала самые специфичные), так как сетевой стек ядра обрабатывает их в том же порядке (TCP/IP стек). Для конечной рабочей станции типичный вывод будет примерно таким:
$ route -n Таблица маршрутизации ядра для IP Назначение Шлюз Маска сети Флаги Метрика Ссылка Использ. Интерфейс 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
В приведённой таблице в первой строке слева указан адрес сети (10.0.0.0 с маской сети 255.255.255.0), а справа — сетевой интерфейс, за которым находится компьютер (eth0, ethernet-карта). Вторая строка — это дефолтный маршрут (англ. default route, в флагах содержится «G»), то есть сеть 0.0.0.0 с маской 0.0.0.0, которая указывает на маршрутизатор с IP-адресом 10.0.0.1.
Примечания
Литература
- Дуглас И. Комер. TCP/IP. Принципы, протоколы и архитектура. Том 1. — Вильямс, 2017. — ISBN 978-5-8459-2219-3.
- Перламутр, Михаил (2011-01-15). “Маршрутизация в IP-сетях”. Открытые системы. Дата обращения 2024-06-02.