- •Введение
- •Условные обозначения, используемые в пособии
- •Графические символы
- •Соглашения по синтаксису командного языка
- •1 Проектирование масштабируемых сетей передачи данных
- •1.1 Масштабируемые сети передачи данных
- •1.2 Архитектура корпоративной сети передачи данных
- •1.3 Введение в технологию подсетей и ее обоснование
- •1.4 Применение технологии VLSM
- •1.5 Суммирование маршрутов
- •1.6 Проектирование масштабируемого адресного пространства
- •2 Принципы маршрутизации
- •2.1 Определение маршрутизации
- •2.1.1 Маршрутизируемые и маршрутизирующие протоколы
- •2.1.2 Основные функции маршрутизаторов
- •2.2 Концептуальные основы маршрутизации
- •2.2.1 Таблицы маршрутизации
- •2.2.2 Административное расстояние
- •2.2.3 Метрики маршрутов
- •2.2.4 Построение таблицы маршрутизации
- •2.3 Механизмы маршрутизации
- •2.3.1 Прямое соединение
- •2.3.2 Статическая маршрутизация
- •2.3.3 Настройка статических маршрутов
- •2.3.4 Использование «плавающих» статических маршрутов
- •2.3.5 Маршрутизация по умолчанию
- •2.4 Проверка и устранение ошибок в статических маршрутах
- •3 Принципы динамической маршрутизации
- •3.1 Операции динамической маршрутизации
- •3.1.1 Стоимость маршрута
- •3.2 Внутренние и внешние протоколы маршрутизации
- •3.2.1 Понятие автономной системы и домена маршрутизации
- •3.2.2 IGP – протоколы внутреннего шлюза
- •3.2.3 EGP – протоколы внешнего шлюза
- •3.3 Обзор классовых протоколов маршрутизации
- •3.3.1 Суммирование маршрутов при классовой маршрутизации
- •3.3.2 Суммирование маршрутов в разобщенных классовых сетях
- •3.4 Обзор бесклассовых протоколов маршрутизации
- •3.4.1 Суммирование маршрутов при бесклассовой маршрутизации
- •3.4.2 Суммирование маршрутов в разобщенных классовых сетях
- •3.5 Категории алгоритмов маршрутизации
- •3.5.1 Особенности дистанционно-векторных протоколов
- •3.5.2 Маршрутизация по состоянию канала
- •3.5.3 Гибридные протоколы маршрутизации
- •3.6 Конфигурирование протокола маршрутизации
- •4 Дистанционно-векторная маршрутизация
- •4.1 Дистанционно-векторный алгоритм
- •4.1.1 Дистанционно-векторный алгоритм для протокола IP
- •4.2 Маршрутизация по замкнутому кругу
- •4.3 Максимальное количество транзитных переходов
- •4.4 Применения принципа расщепления горизонта
- •4.5 Обратное обновление
- •4.6 Таймеры удержания информации
- •4.7 Механизм мгновенных обновлений
- •5 Протокол RIP
- •5.1 Настройка протокола RIP
- •5.2 Протокол RIP v1
- •5.2.1 Заголовок и поля протокола RIP v1
- •5.2.2 Команда – 1 байт
- •5.2.3 Версия – 1 байт
- •5.2.4 Неиспользуемые поля – 2 байта
- •5.2.5 Идентификатор семейства адресов – 2 байта
- •5.2.6 IP адрес – 4 байта
- •5.2.6 Метрика – 4 байта
- •5.3 Использование команды ip classless
- •5.4 Недостатки протокола RIP v1
- •5.5 Протокол RIP v2
- •5.5.1 Заголовок и поля протокола RIP v2
- •5.5.2 Тег маршрута – 2 байта
- •5.5.3 Маска подсети – 4 байта
- •5.5.4 Следующая пересылка – 4 байта
- •5.6 Аутентификация в протоколе RIP v2
- •5.6.1 Настройка аутентификации для протокола RIP
- •5.7 Суммирование маршрутов в протоколе RIP
- •5.7.1 Распространение маршрута по умолчанию
- •5.8 Расширенная настройка протокола RIP
- •5.8.1 Таймеры протокола RIP
- •5.8.2 Совместное использование в сети протокола RIP v1 и v2
- •5.8.3 Распределение нагрузки в протоколе RIP
- •5.8.4 Настройка протокола RIP для работы в сетях NBMA
- •5.8.5 Механизм инициированных обновлений в протоколе RIP
- •5.9 Тестирование и устранение ошибок в работе протокола RIP
- •6 Протокол EIGRP
- •6.1 Алгоритм диффузионного обновления
- •6.2 Преимущества протокола EIGRP
- •6.3 Автономная система протокола EIGRP
- •6.4 База данных протокола EIGRP
- •6.4.1 Таблица соседства
- •6.4.2 Таблица топологии
- •6.5 Метрика протокола EIGRP
- •6.6 Функционирование протокола EIGRP
- •6.6.1 Надежность передачи пакетов протокола EIGRP
- •6.6.2 Разрыв соседских отношений
- •6.6.3 Запланированное отключение
- •6.6.5 Меры обеспечения стабильности протокола EIGRP
- •6.7 Алгоритм DUAL
- •6.7.1 Работа алгоритма DUAL
- •6.8 Механизм ответов на запросы
- •7 Конфигурирование и тестирование протокола EIGRP
- •7.1 Запуск протокола EIGRP
- •7.2 Настройка аутентификации в протоколе EIGRP
- •7.3 Суммирование маршрутов в протоколе EIGRP
- •7.4 Настройка маршрута по умолчанию в протоколе EIGRP
- •7.5 Распределение нагрузки в протоколе EIGRP
- •7.6 Расширенная настройка протокола EIGRP
- •7.6.1 Таймеры протокола EIGRP
- •7.6.2 Изменение административного расстояния протокола EIGRP
- •7.6.3 Изменение весовых коэффициентов протокола EIGRP
- •7.6.4 Настройка протокола EIGRP для сетей NBMA
- •7.6.5 Использование EIGRP пропускной способности каналов связи
- •7.6.6 Идентификация маршрутизаторов в протоколе EIGRP
- •7.7 Тестирование и устранение ошибок в работе протокола EIGRP
- •8 Использование протокола EIGRP в масштабируемых сетях
- •8.1 Масштабируемость. Проблемы и решения
- •8.2 Использование суммарных маршрутов
- •8.3 Использование тупиковых маршрутизаторов
- •8.4 Использование протокола EIGRP в современных условиях
- •9 Протоколы маршрутизации по состоянию канала
- •9.1 Алгоритм «кратчайшего пути» Дейкстры
- •10 Протокол OSPF
- •10.1 Характеристики протокола OSPF
- •10.1.1 Групповая рассылка обновлений состояния каналов
- •10.1.2 Аутентификация
- •10.1.3 Быстрота распространения изменения в топологии
- •10.1.4 Иерархическое разделение сети передачи данных
- •10.2 База данных протокола OSPF
- •10.2.1 Таблица соседства
- •10.2.2 Таблица топологии
- •10.3 Метрика протокола OSPF
- •10.4 Служебные пакеты протокола OSPF
- •10.4.1 Пакет приветствия
- •10.4.2 Суммарная информация о таблице топологии
- •10.4.3 Запрос на получение информации о топологическом элементе
- •10.4.4 Обновление информации о топологических элементах
- •10.4.5 Подтверждение о получении
- •10.5 Процесс установки соседских отношений
- •10.5.1 Поиск соседей
- •10.5.2 Обмен топологической информацией
- •11 Настройка протокола OSPF в одной зоне
- •11.1 Запуск протокола OSPF
- •11.2 Управление значением идентификатора маршрутизатора OSPF
- •11.3 Настройка аутентификации в протоколе OSPF
- •11.3.1 Проверка функционирования аутентификации
- •11.4 Настройка маршрута по умолчанию в протоколе OSPF
- •11.5 Распределение нагрузки в протоколе OSPF
- •11.6 Расширенная настройка протокола OSPF
- •11.6.1 Таймеры протокола OSPF
- •11.6.2 Изменение административного расстояния протокола OSPF
- •11.7 Тестирование и устранение ошибок в работе протокола OSPF
- •12 Работа протокола OSPF в сетях различных типов
- •12.1 Работа протокола OSPF в сетях «Точка-Точка»
- •12.2 Работа протокола OSPF в широковещательных сетях
- •12.2.1 Правила выбора DR и BDR маршрутизаторов
- •12.3 Работа протокола OSPF в сетях NBMA
- •12.4 Режимы работы протокола OSPF в сетях NBMA
- •12.5 Режимы работы протокола OSPF в сетях Frame Relay
- •12.5.1 Нешироковешательный режим
- •12.5.2 Многоточечный режим
- •12.5.3 Использование подинтерфейсов
- •12.6 Проверка работы протокола OSPF в сетях различных типов
- •13 Работа протокола OSPF в нескольких зонах
- •13.1 Типы маршрутизаторов OSPF
- •13.1.1 Внутренние маршрутизаторы
- •13.1.2 Магистральные маршрутизаторы
- •13.1.3 Пограничные маршрутизаторы
- •13.1.4 Пограничные маршрутизаторы автономной системы
- •13.2 Типы объявлений о состоянии каналов
- •13.2.1 Структура заголовка сообщения LSA
- •13.2.2 Объявление состояния маршрутизатора (Тип 1)
- •13.2.3 Объявление состояния сети (Тип 2)
- •13.2.4 Суммарные объявления о состоянии каналов (Тип 3 и 4)
- •13.2.5 Объявления внешних связей (Тип 5 и 7)
- •13.3 Построение таблицы маршрутизации протоколом OSPF
- •13.3.1 Типы маршрутов протокола OSPF
- •13.3.2 Расчет метрики внешних маршрутов
- •13.4 Суммирование маршрутов протоколом OSPF
- •13.4.1 Суммирование межзональных маршрутов
- •13.4.2 Суммирование внешних маршрутов
- •13.4.3 Отображение внешних суммарных маршрутов
- •14 Специальные типы зон протокола OSPF
- •14.1 Типы зон протокола OSPF
- •14.1.1 Правила тупиковых зон
- •14.2 Тупиковые зоны протокола OSPF
- •14.2.1 Настройка тупиковой зоны
- •14.3 Полностью тупиковые зоны протокола OSPF
- •14.3.1 Настройка полностью тупиковой зоны
- •14.4 Таблицы маршрутизации в тупиковых зонах
- •14.5 Не совсем тупиковые зоны протокола OSPF
- •14.5.1 Настройка не совсем тупиковой зоны
- •14.5.2 Настройка полностью тупиковой зоны NSSA
- •14.6 Проверка функционирования специальных зон протокола OSPF
- •15 Виртуальные каналы в протоколе OSPF
- •15.1 Настройка виртуальных каналов
- •15.1.2 Примеры использования виртуальных каналов
- •15.2 Проверка функционирования виртуальных каналов
- •16 Перераспределение маршрутной информации
- •16.1 Понятие перераспределения маршрутной информации
- •16.2 Понятие метрического домена
- •16.3 Маршрутные петли
- •16.3.1 Односторонние перераспределение маршрутной информации
- •16.3.2 Двухсторонние перераспределение маршрутной информации
- •16.3.3 Протоколы маршрутизации подверженные образованию маршрутных петель
- •17 Совместная работа нескольких протоколов маршрутизации
- •17.2 Настройка базового перераспределения маршрутной информации
- •17.2.1 Метрика, присваиваемая перераспределяемым маршрутам
- •17.3 Настройка перераспределения маршрутной информации из присоединенных и статических маршрутов
- •17.4 Настройка перераспределения маршрутной информации в протокол RIP
- •17.5 Настройка перераспределения маршрутной информации в протокол EIGRP
- •17.6 Настройка перераспределения маршрутной информации в протокол OSPF
- •18 Управление трафиком маршрутных обновлений
- •18.1 Использование пассивных интерфейсов
- •18.1.1 Настройка пассивных интерфейсов
- •18.2 Фильтрация маршрутной информации, передаваемой между маршрутизаторами
- •18.2.1 Фильтрация сетей получателей по IP адресу сети
- •18.2.2 Фильтрация сетей получателей по длине префикса
- •18.2.3 Использование списков доступа и списков префиксов при фильтрации маршрутной информации
- •18.3 Фильтрация маршрутной информации в процессе перераспределения маршрутной информации
- •19 Маршрутные карты
- •19.1 Понятие маршрутных карт
- •19.2 Настройка маршрутной карты
- •19.3 Использование маршрутных карт при перераспределении маршрутной информации
- •19.4 Проверка конфигурации маршрутных карт
- •20 Маршрутизация по политикам
- •20.1 Понятие маршрутных политик
- •20.2 Настройка маршрутизации по политикам
- •20.3 Пример маршрутизации по политикам
- •20.4 Проверка маршрутизации по политикам
- •21 Обзор протокола BGP
- •21.1 Автономные системы
- •21.2 Использование протокола BGP
- •21.2.1 Когда используется протокол BGP
- •21.2.2 Когда не следует использовать протокол BGP
- •22 Терминология и концепции протокола BGP
- •22.1 Характеристики протокола BGP
- •22.2 Таблицы протокола BGP
- •22.3 Одноранговые устройства или соседи BGP
- •22.4 Маршрутизация по политикам
- •22.5 Атрибуты протокола BGP
- •22.5.1 Содержимое сообщения обновления протокола BGP
- •22.5.2 Стандартные и опциональные атрибуты
- •22.5.3 Атрибут «Путь к AS»
- •22.5.4 Атрибут «Узел следующего перехода»
- •22.5.5 Атрибут «Локальный приоритет»
- •22.5.6 Атрибут MED
- •22.5.7 Атрибут «Отправитель»
- •22.5.7 Атрибут «Сообщество»
- •22.5.8 Атрибут «Вес»
- •23 Работа протокола BGP
- •23.1 Типы сообщений протокола BGP
- •23.1.1 Состояния BGP соседей
- •23.2 Процесс принятия решения при выборе пути
- •23.2.1 Выбор нескольких путей
- •23.3 CIDR маршрутизация и суммирование маршрутов
- •24 Настройка протокола BGP
- •24.1 Одноранговые группы
- •24.2 Основные команды протокола BGP
- •24.2.1 Модификация атрибута NEXT-HOP
- •24.2.2 Описание объединенного адреса в BGP таблице
- •24.2.3 Перезапуск протокола BGP
- •24.3 Проверка работоспособности протокола BGP
- •25 Множественная адресация
- •25.1 Типы множественной адресации
- •Заключение
- •Словарь терминов
- •Список использованных источников
9 Протоколы маршрутизации по состоянию канала
В отличие от протоколов дистанционно-векторной маршрутизации, в которых маршрутная информация представляется в форме векторов до сетей получателей. Протоколы маршрутизации по состоянию канала обладают точным знанием топологии сети передачи данных, исходя из которой, они строят таблицу маршрутизации.
Чтобы лучше понять различие между дистанционно-векторными алгоритмами Беллмана-Форда, алгоритмом DUAL, и алгоритмами маршрутизации по состоянию канала, взглянем на рисунки 9.1 – 9.3.
|
|
22 |
25 |
|
|
|
СП2 |
СП3 |
СП7 |
СП6 |
СП5 |
10 |
18 |
|
|
|
|
R1 |
|
|
|
14 |
10 |
|
|
|
|
|
|
|
|
22 |
СП1 |
|
СП4
Рисунок 9.1 – Представление топологии сети алгоритмом Беллмана-Форда
На рисунке. 9.1 изображено представление топологии сети передачи данных маршрутизатором R1, который использует один из вариантов дистан- ционно-векторного алгоритма Беллмана-Форда. Маршрутизатор имеет информацию только о сетях получателях, показанных в виде сегментов Ethernet, о том, как далеко и в каком направлении они находятся.
На рисунке. 9.2 изображено представление той же сети передачи данных маршрутизатором R1, но на этот раз маршрутизатор использует протокол маршрутизации на основе алгоритма DUAL. Маршрутизатор знает о своих непосредственных соседях, о том, насколько далеко и в каком направлении они расположены, а также дистанции от соседей до всех известных сетей получателей.
160
|
|
|
СП2 |
|
12 |
|
|
СП6 |
СП5 |
|
10 |
|
4 |
R4 |
R1 |
|
|
16 |
|
|
|
|
12 |
|
|
|
R2 |
|
|
|
СП4 |
СП3 |
СП7 |
18 |
7 |
|
R6 |
10
СП1
Рисунок 9.2 – Представление топологии сети алгоритмом DUAL алгоритмом маршрутизации по состоянию канала связи
Как видно, кроме кратчайшего пути к сети получателю СП4, лежащего через маршрутизатор R2, маршрутизатор R1 смог также обнаружить альтернативный маршрут, лежащий через маршрутизатор R4. Метрика кратчайшего маршрута равна 22 (10 + 12), тогда как метрика альтернативного – 26 (10 + 16). Несмотря на более высокую метрику, маршрутизатор R1 все же рассматривает маршрут через маршрутизатор R4 как альтернативу, поскольку метрика собственного маршрута маршрутизатора R4 к СП4 равна всего 16, т.е. меньшему значению, чем метрика кратчайшего маршрута маршрутизатора R1. Следовательно, маршрутизатор R4 находится ближе к сети получателю, чем маршрутизатор R1, а значит, маршрутизатор R1 может мгновенно переключиться на маршрут через R4, если характеристики маршрута через R2 ухудшатся или он станет недоступен.
СП2 |
СП3 |
СП7 |
СП6
8
СП5 |
10 |
18 |
7 |
|
R4 |
R1 |
R6 |
4 |
|
10 |
|
R5 |
|
|
|
|
12 |
СП1 |
|
|
R3 |
R2 |
|
СП4
Рисунок 9.3 – Представление топологии сети алгоритмом маршрутизации по состоянию канала связи
161
На рисунке 9.3 показано представление топологии сети передачи данных маршрутизатором R1 с использованием протокола маршрутизации по состоянию канала. Здесь маршрутизатор R1 знает полную топологию сети передачи данных. Следовательно, он знает не только об альтернативном маршруте к сети получателю СП4 через маршрутизатор R4, но также и об альтернативных маршрутах к СП6 и СП5 через маршрутизатор R2.
Протоколы маршрутизации по состоянию канала имеют два главных преимущества над дистанционно-векторными протоколами маршрутизации. Первое преимущество заключается в том, что каждый маршрутизатор в домене маршрутизации имеет точную информацию о топологии сети передачи данных, следовательно, он может гарантировать, что в таблицу маршрутизации будут внесены истинные и оптимальные маршруты до сетей получателей.
Второе преимущество следует из первого. Оно заключается в том, что если маршрутизатор имеет точную информацию о топологии сети передачи данных в домене маршрутизации, он может самостоятельно, не прибегая к механизму рассылки запросов соседним маршрутизаторам, о возможных альтернативных маршрутах, вносить изменения в таблицу маршрутизации, после того как, он обнаружил недоступность того или иного маршрута. Следовательно, время сходимости протоколов маршрутизации по состоянию канала, значительно меньше, чем у дистанционно-векторных протоколов маршрутизации использующих алгоритм Беллмана-Форда.
Однако превосходство протоколов маршрутизации по состоянию канала имеет свою цену. Такие протоколы обычно значительно сложнее реализовать, чем дистанционно-векторные протоколы Беллмана-Форда и протоколы на основе алгоритма DUAL. Вычисление маршрутов, исходя из топологической информации, обычно требует больше усилий по обработке, чем необходимо для выполнения дистанционно-векторных вычислений. Кроме того, чтобы обеспечить идентичность топологических сведений на всех маршрутизаторах, требуется более интенсивный обмен данными между маршрутизаторами.
Если протоколы маршрутизации по состоянию канала сходятся быстрее, чем протоколы Беллмана-Форда, этого нельзя сказать при сравнении этих протоколов с протоколами на основе алгоритма DUAL. Экспериментальные данные указывают на то, что в большинстве случаев протоколы маршрутизации на основе DUAL сходятся, по меньшей мере настолько же быстро, как и протоколы маршрутизации по состоянию канала.
И все же алгоритм маршрутизации по состоянию канала популярен благодаря широко распространенному протоколу маршрутизации OSPF, а сам протокол обязан своей популярностью открытости своей спецификации.
Эта открытость позволила множеству различных производителей, включая Cisco, успешно реализовать протокол OSPF в своем оборудовании и программном обеспечении. Хотя протоколы маршрутизации, основанные на
162
конкурирующем алгоритме DUAL, работают быстро, практически единственный популярный экземпляр таких протоколов – это протокол EIGRP, являющийся фирменным протоколом корпорации Cisco.
Протокол OSPF оказался способен поддерживать очень крупные сети передачи данных, состоящие зачастую из тысяч маршрутизаторов. Даже в таких крупных сетях протокол OSPF быстро обрабатывает происходящие изменения, и время его сходимости редко превышает доли минуты.
В основе протокола OSPF, как и любого другого протокола маршрутизации по состоянию канала, лежит алгоритм кратчайшего пути Дейкстры (Dijkstra), используемый для создания маршрутов на основе топологической информации. Учитывая центральное место алгоритма Дейкстры в работе протоколов маршрутизации по состоянию канала, необходимо сначала рассмотреть сам алгоритм и получить понятие о работе ядра протокола маршрутизации по состоянию канала. И только после этого обратиться к подробному рассмотрению протокола OSPF.
9.1 Алгоритм «кратчайшего пути» Дейкстры
Алгоритм кратчайшего пути – shortest path algorithm (SPF) Дейкстры работает с графами, состоящими из вершин, соединенных ребрами. Каждое ребро соединяет ровно две вершины в одном направлении. Каждое ребро имеет стоимость, связанную с ним. Каждая вершина может быть связана с любым числом ребер.
Вершины можно представлять как точки, а ребра – как перемещение между этими точками. Перемещение обеспечивается лишь в одном направлении и за определенную стоимость – в направлении ребра и за стоимость ребра. Например, если ребро соединяет вершину A с вершиной B, это означает, в сущности, что имеется возможность за стоимость этого ребра переместиться из вершины A в вершину B. Это ребро, однако, не позволяет переместиться обратно из вершины B в вершину A. Такое перемещение требует наличия другого ребра – из вершины B в вершину A.
|
1 |
B |
|
|
|
A |
|
|
|
||
|
3 |
3 |
|
||
|
8 |
5 |
|
D |
|
|
4 |
|
|
||
4 |
C |
|
|
|
|
2 |
7 |
2 |
8 |
||
6 |
|||||
|
|
|
|
||
E |
4 |
|
F |
|
Рисунок 9.4 – Пример графа
163
На рисунке 9.4 приводится пример графа. Этот граф содержит шесть вершин, помеченных буквами от A до F. Ребра обозначаются линиями со стрелками, которые соединяют вершины, а стоимость ребер указана в виде чисел, изображенных поверх ребер.
Говорится, что вершина X является смежной с вершиной Y, если имеется ребро, ведущее от вершины X к вершине Y. Например, на рисунке 9.4 вершина B является смежной с вершиной A. Необходимо обратить внимание, что обратное может быть неверно, например, вершина A не является смежной с вершиной B, поскольку ребра, ведущего от вершины A к вершине B, не существует.
Граф с большим количеством вершин может иметь множество путей между двумя вершинами. Среди этих путей лучший путь определяется как путь, совокупная стоимость которого, рассчитана как минимальная сумма стоимостей составляющих путь ребер. Например, кратчайший путь от вершины D к вершине A лежит через вершину B, его стоимость равна 4. Обратный путь, от вершины A к вершине D, имеет большую длину, он лежит через вершины C и B и имеет стоимость 15.
В приведенном примере задача нахождения кратчайшего пути относительно проста, но если граф становится больше, количество вычислений растет экспоненциально. И даже самый быстрый компьютер будет затрачивать слишком много времени на перебор всех возможных путей и расчет их стоимости.
Алгоритм SFP решает задачу быстрого нахождения кратчайшего пути между любыми двумя вершинами в графе с произвольными связями.
Для работы алгоритм использует две вспомогательные структуры данных: базу данных вершин, для которых ищется кратчайший путь, и базу данных вариантов вершин, для которых кратчайший путь может быть найден. Обозначим эти базы как «Найденные» и «Кандидаты». Обе базы данных имеют идентичную структуру: они содержат два поля, содержащие ссылку на вершину и совокупную стоимость пути от начальной вершины к указанной.
Чтобы продемонстрировать работу алгоритма по шагам воспользуемся графом, изображенным на рисунке 9.4.
Работа алгоритма начинается с помещения начальной вершины в базу «Найденные» с совокупной стоимостью 0, а всех ее смежных вершин - в базу «Кандидаты» с совокупной стоимостью, равной стоимости соответствующих ребер. После этого алгоритм циклически проходит через следующие рекурсивные шаги:
Шаг 1. Найти в базе «Кандидаты» вершину с наименьшей совокупной стоимостью. Переместить вершину в базу «Найденные».
Шаг 2. Определить вершины, с которыми перемещенная вершина является смежной.
Шаг 3. Отбросить смежные вершины данной вершины, которые уже были перемещены в базу «Найденные».
164
Шаг 4. Для каждой из смежных вершин перемещенной вершины, которая уже была помещена в базу «Кандидаты», установить записанную совокупную стоимость равной меньшей из величин предыдущей записанной совокупной стоимости и суммы совокупной стоимости перемещенной вершины плюс стоимость ребра, ведущего от перемещенной вершины к смежной, формула (9.1).
Cсмеж. нов. = min(Cсмеж. стар., C перемещ. + Cребра) |
(9.1) |
где Cсмеж. нов. и Cсмеж. стар. – соответственно новая и старая записанные совокупные стоимости смежной вершины,
C перемещ. – записанная совокупная стоимость перемещенной вершины, Cребра – стоимость ребра от перемещенной вершины к смежной.
Шаг 5. Поместить каждую смежную вершину, не содержащуюся ни в базе «Найденные», ни в базе «Кандидаты», в базу «Кандидаты». Установить ее совокупную стоимость равной сумме совокупной стоимости перемещенной вершины и стоимости ребра, ведущего от перемещенной вершины к смежной, формула (9.2).
Cсмеж. = C перемещ. + Cребра |
(9.2) |
где Cсмеж. – совокупная стоимость смежной вершины.
Шаг 6. Если база «Кандидаты» пуста, завершить работу. В противном случае вернуться к Шагу 1 и повторить действия.
На рисунке 9.5 каждый из шести шагов помещен отдельно и помечен своим номером. Вершины, которые были помещены в базу «Найденные», отмечены жирной границей, а вершины с тонкой границей попали только в базу «Кандидаты». Числа на ребрах указывают совокупную стоимость пути от начальной вершины к вершине, к которой ребро ведет, тогда как на рисунке 9.4, числа обозначали стоимость ребер. Если на ребре находится вопросительный знак, это означает, что вершина, к которой ведет ребро, уже находится в базе «Найденные», и, поэтому совокупная стоимость для нее не рассчитывается.
Кроме того, для каждой итерации приведено содержимое баз «Найденные» и «Кандидаты». Вершина, которая только что была помещена в базу «Найденные», помечена звездочкой. Вершины, которые либо были помещены в базу «Кандидаты» либо имеют обновленные существующие записи в этой базе, помечены знаком «>». Если совокупная стоимость заменена меньшей величиной, в соответствующей записи базы «Кандидаты» показано старое значение, «>», а затем новое значение.
Как видно из схемы, алгоритм определил длины кратчайших путей к каждой вершине методично и достаточно простым способом.
165
Простота и скорость алгоритма определили для него центральное место в алгоритмах маршрутизации по состоянию канала, строящих маршруты исходя из информации о топологии сети.
Шаг 1 |
|
|
A |
|
|
|
|
|
Шаг 2 |
|
A |
|
|
|
|
|
|
4 |
4 |
|
|
Найденные |
|
4 |
4 |
|
Найденные |
||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
С |
|
E |
|
* |
А |
0 |
|
С |
|
E |
|
А |
0 |
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
Кандидаты |
12 |
|
* |
C |
4 |
|||||
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
> |
C |
4 |
B |
|
|
|
|
Кандидаты |
|
|
|
|
|
|
|
> |
E |
4 |
|
|
|
|
|
E |
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
B |
12 |
Шаг 3 |
|
|
A |
|
|
|
|
|
Шаг 4 |
|
A |
|
|
|
|
|
|
4 |
4 |
|
|
Найденные |
|
4 |
4 |
|
Найденные |
||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
С |
|
E |
|
|
А |
0 |
|
С |
|
E |
|
А |
0 |
|
|
|
|
|
C |
4 |
|
|
|
C |
4 |
||||
|
|
12 |
? |
? |
8 |
|
12 |
|
|
8 |
|
||||
|
B |
|
A |
|
* |
|
|
B |
|
|
|
F |
|
|
|
|
|
C F |
E |
4 |
|
|
|
E |
4 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
Кандидаты |
|
|
|
16 |
|
F |
8 |
|
|
|
|
|
|
|
|
|
|
|
D |
* |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
B |
12 |
|
|
|
|
Кандидаты |
||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
> |
F |
8 |
|
|
|
|
|
B |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
D |
16 |
Шаг 5 |
|
|
A |
|
|
|
|
|
Шаг 6 |
|
A |
|
|
|
|
|
|
4 |
4 |
|
|
Найденные |
|
4 |
4 |
|
Найденные |
||||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
12 С |
|
E 8 |
|
А |
0 |
12 С |
|
E 8 |
|
А |
0 |
||
|
|
|
|
C |
4 |
|
|
C |
4 |
||||||
? |
B |
|
|
|
F |
|
E |
4 |
B |
|
|
|
F |
E |
4 |
? |
15 |
|
|
16 |
|
B |
12 |
|
15 |
|
|
|
B |
12 |
|
|
|
|
|
|
* |
|
|
|
|
* |
|||||
A |
C D |
|
D |
|
|
D |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
Кандидаты |
? |
? |
|
|
Кандидаты |
|||||||
|
|
|
|
|
|
|
? |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> |
D |
16→15 |
B E |
F |
|
|
<Пусто > |
Рисунок 9.5 – Итерации алгоритма SPF
166