Принципы коммутации пакетов

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

Операция обработки данных сама по себе проста и состоит из следующих этапов;

    • Этап 1. Пакет приходит в интерфейс.

    • Этап 2. Определяется адрес получателя пакета и сравнивается со списком известных получателей.

    • Этап 3. Если найдено совпадение, пакет пересылается в соответствующий интерфейс.

    • Этап 4. Если совпадение с соответствующим списком не найдено, то пакет игнорируется.

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

В связи с постоянным увеличением размеров и количества маршрутизируемых сетей естественным является непрерывная модернизация и улучшение методов коммутации операционной системой. В первой версии операционной системы IOS использовался только один метод коммутации пакетов, который называется программной коммутацией (process switching).

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

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

Ниже перечислены все методы коммутации пакетов, включенные в операционную систему Cisco IOS версии 12.0 (Cisco IOS Release 12.0).

    • Программная коммутация.

    • Быстрая коммутация (Fast switching).

    • Автономная коммутация (Autonomous switching).

    • Процесс коммутации корпорации Silicon (Silicon switching engine switching, SSE switching).

    • Оптимальная коммутация (Optimum switching).

    • Распределенная быстрая коммутация (Distributed fast switching).

    • Экспресс-пересылка корпорации Cisco (Cisco Express Forwarding, CEF).

    • Распределенная экспресс-пересылка корпорации Cisco (Distributed Cisco Express Forwarding).

Ниже будут описаны детали четырех из перечисленных выше методов:

    1. программной коммутации,

    2. быстрой коммутации,

    3. оптимальной коммутации,

    4. экспресс-коммутации корпорации Cisco.

*** Автономная коммутация и процесс коммутации корпорации Silicon являются платформозависимыми методами и в данное время не распространены в сети, поэтому не рассматриваются.

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

Несмотря на то что для иллюстрации методов коммутации используются примеры, основанные на маршрутизации протокола IP (Internet Protocol, протокол Internet), большинство из них можно применить и к другим сетевым протоколам, таким как протокол межсетевого пакетного обмена IPX (Internetwork Packet Exchange protocol) и туннельный протокол (bridging).

Хотя для разных протоколов используются различные структуры данных (например, разделен кэш для протоколов IP и IPX при использовании метода быстрой коммутации), но их содержание однотипно и коммутация происходит идентично для каждого протокола. https://habrahabr.ru/company

Программная коммутация Process switching

Программная коммутация — это первый метод коммутации, который использовался в системе IOS. В своей основе для коммутации пакетов он использует метод последовательного перебора (brute-force method, когда для каждого пакета, методом перебора отыскивается соответствие сначала в таблице маршрутиризации а затем выбирается соответствующий интерфейс). Метод программной коммутации наименее оптимизирован и поэтому требует много процессорного времени. Однако преимуществом этого метода является независимость от аппаратного обеспечения, что позволяет применять его во всех устройствах, работающих под управлением системы Cisco IOS. Кроме того, программная коммутация позволяет использовать некоторые механизмы распределения нагрузки, которые недоступны большинству других методов.

На рис. 2.1 показан путь прохождения IP-пакета при использовании метода программной коммутации.

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


Сетевой интерфейс посылает прерывание основному процессору, сообщая ему о том, что пришел пакет, находящийся в буфере ввода-вывода, который необходимо обработать; этот процесс называется прерывание на получение (прерывание получения и прерывание передачи). Обработчик прерываний IOS считывает информацию из заголовка пакета (тип инкапсуляции, заголовок сетевого уровня и др.), определяет, что данный пакет является пакетом протокола IР, и помещает его в очередь пришедших пакетов для соответствующего процесса коммутации (второй этап). Для пакетов протокола IP рассмотренный процесс называется ip_input.

Процесс ip_input начинает выполняться в том случае, когда хотя бы один пакет по падает во входящую очередь (третий этап). По окончании работы процесса ip_input (четвертый этап) начинается операция пересылки пакета. На этом этапе проводятся все проверки и выбирается направление пересылки входящего пакета. В рассмотренном примере ip_input просматривает таблицу маршрутизации на наличие маршрута к получателю IP-пакета. Если маршрут найден, то по записи в таблице маршрутизации определяется адрес следующей точки перехода (следующего маршрутизатора на пути к получателю пакета). Затем из таблицы протокола ARP (Address Resolution Protocol) определяется информация, необходимая для формирования нового заголовка MAC (Media Access Control), для пересылки пакета к следующей точке перехода. Процесс ip_input формирует новый заголовок MAC и записывает его поверх старого во входящем пакете, после чего он помещается в очередь для отправки через выходной сетевой интерфейс (этап пятый).

Когда аппаратная часть исходящего интерфейса определяет, что в очереди находится пакет для отправки, она считывает его из буфера ввода-вывода и передает в сеть (шестой этап).

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

Балансировка нагрузки каналов с использованием программной коммутации

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

Параметр метрики или удельный вес маршрута в таблице маршрутизации определяется из счетчика балансировки нагрузки (load share counter) для определения пути прохождения каждого пакета. Принципы работы балансировки, иллюстрирует рис. 2.2.

http://marshrutizatciia.ru/balansirovanie-zagruzki-dlya-putej-ravnoj-stoimosti.html

Маршрутизатор A (RouterA) имеет два пути к сети 10.1.4.0/24 (см. рис. 2.2). В примере 2.1 показаны два эквивалентных пути для этого маршрутизатора.

Обратите внимание на звездочку (*) возле одного из сетевых маршрутов в примере 2.1, которая означает, что для коммутации следующего пакета в сеть 10.1.4.0/24 будет использоваться именно этот маршрут. Коэффициент балансировки нагрузки (traffic share count) для обоих маршрутов равен единице. Это означает, что пакеты будут по очереди отправляться то по одному, то по другому маршруту.

В приведенном примере первый полученный пакет будет отправлен через узел 10.1.3.1, а второй — через узел 10.1.2.1, третий снова через 10.1.3.1 и т.д. (на рис. 2.2 показаны номера пакетов, которые пройдут через каждый маршрут).

Некоторые протоколы маршрутизации семейства IР, как, например, протокол маршрутизации внутренних граничных маршрутизаторов (Interior Gateway Routing Protocol — IGRP) и расширенный протокол IGRP (Enhanced IGRP), могут назначать разные метрики в таблице маршрутизации. В этом случае алгоритм балансировки нагрузки будет иметь незначительные отличия. Если изменить конфигурацию сети на рис. 2.2 таким образом, что один из путей будет иметь вдвое большую пропускную способность, то получим сеть, которая показана на рис. 2.3.

Обратите внимание на значение коэффициента балансировки нагрузки в результате выполнения команды show ip route. Меньший удельный вес маршрута через устройство с адресом 10.1.3.1 приводит к тому, что значение данного коэффициента равно 2; больший вес маршрута к устройству 10.1.2.1 дает значение коэффициента балансировки нагрузки, равное 1. Теперь маршрут с большим значением указанного коэффициента будет пропускать через себя два пакета в расчете на каждый пакет, который будет проходить через путь с меньшим значением коэффициента балансировки нагрузки (рис. 2.3).



Внимание!

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

Недостатки программной коммутации

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

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

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

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

Вернемся к примеру прохождения IP-пакета с использованием метода программной коммутации. Процесс ip_input использует три основных параметра для коммутации пакета, которые перечислены ниже.

    • Доступность. Доступен ли получатель? Если доступен, то каков IP-адрес следующей точки перехода на пути к получателю пакета? Необходимая информация хранится в таблице маршрутов (также называемой forwarding table — таблицей пересылки).

    • Интерфейс. В какой интерфейс необходимо отправить пакет? Необходимые данные также хранятся в таблице маршрутизации.

    • МАС-заголовок. Какой заголовок MAC необходимо прописать в пакете для правильной адресации к следующей точке перехода? МАС-заголовок хранится в ARP-таблице протокола IP или другой таблице соответствия МАС-адресов, как, например, в карте маршрутов протокола Frame Relay (Frame Relay map table).

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

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

Итак, каким образом система IOS позволяет организовать меньшие таблицы для поиска и добиться с их помощью увеличения производительности? Ответ — быстрый кэш (Fast Cache).

Быстрая коммутация Fast switching

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

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

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

Разработчики операционной системы IOS использовали описанные выше концепции при создании быстрого кэша. Быстрый кэш — это структура данных, используемая в системе IOS, для хранения копии комбинации доступности адресата, интерфейса и МАС-заголовка, найденных в процессе коммутации пакетов. Для понимания механизма использования быстрого кэша рассмотрим пример программной коммутации, приведенный выше. Добавим еше один этап к коммутации, выполняемой процессом ip_input. После того как ipinput определит адрес следуюшей точки перехода, необходимый интерфейс и МАС-заголовок пакета, добавим операцию сохранения найденной информации в специальной структуре данных, позволяющей получить быстрый доступ к любой записи в кэше, основанной на IP-адресе получателя пакета. Подобная структура называется быстрым кэшем. Через некоторое время процесс ip_input создаст достаточно большое количество записей в кэше часто используемых IP-адресов получателей пакетов. Теперь рассмотрим, как описанный выше кэш используется в процессе коммутации пакетов. На рис. 2.4 показан алгоритм механизма быстрой коммутации.


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

На втором этапе аппаратная часть интерфейса посылает прерывание центральному процессору, информируя его о том, что пришедший пакет находится в буфере ввода-вывода. Обработчик прерываний операционной системы IOS проверяет заголовок пакета и убеждается, что это пакет протокола IP. Затем, вместо помещения пакета, как это делалось раньше, в очередь для процесса ip_input, обработчик прерываний проверяет быстрый кэш на наличие в нем записи адреса устройства-получателя. При наличии записи в кэше обработчик прерываний считывает МАС-заголовок в таблице и помешает его в пакет. Из записи в кэше также определяется указатель для соответствующего выходного интерфейса. Третий этап демонстрирует чтение записи из кэша и переписывание МАС-адреса пакета.

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

При обработке прерывания все процессы в системе останавливаются до завершения работы обработчика прерываний

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

Данный пример только иллюстрирует, как работает механизм быстрой коммутации. Обратите внимание на то, что процесс ip_input не принимает участия в коммутации пакета; фактически ни один отложенный процесс при работе метода быстрой коммутации не влияет на сам процесс коммутации до тех пор, пока существует запись в кэше. При использовании быстрого кэша система IOS выполняет всю последовательность коммутации пакета в течение очень короткого периода одного прерывания - ! Кэширование позволяет разделить ресурсоемкую операцию выбора маршрута с относительно легкой процедурой пересылки пакета. Итак, метод быстрой коммутации вводит понятие “маршрутизировать однажды, пересылать — много раз”.

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

Метод использования механизма программной коммутации для заполнения быстрого кэша работает хорошо при определенных условиях: сеть должна быть стабильной с небольшими изменениями в маршрутизации, поток данных в основном идет между небольшим количеством получателей. Эти условия справедливы в большинстве случаев. В некоторых ситуациях, как, например, для "Backbon Internet"(совокупность быстрых каналов и ибслуживающих их маршрутиризаторов, объединяющих крупные узлы сети), они нарушаются. В случае магистрального канала возрастает количество “промахов” кэша (ситуация, когда для пакета не найдена запись в кэше), и как результат — большее количество пакетов коммутируется методом программной коммутации. Также возможна ситуация, приводящая к очистке кэша, когда старые записи в кэше переписываются новыми из-за отсутствия свободного места в кэше для всех необходимых записей.


Структура быстрого кэша

Как же на самом деле работает быстрый кэш?

Каким образом быстро предоставляется информация, необходимая для коммутации?

Рассмотрим типичную структуру быстрого кэша:

Сначала рассмотрим выводимую командой show ip cache verbose информацию (пример 2.3) для более точного представления о том, что такое быстрый кэш.

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


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

Структуры данных быстрого кэша: хеш-таблицы и базисное дерево

Быстрый кэш для протокола IP изначально реализован как структура данных - хеш-таблица, или просто хеш (кэш <=> хеш) (рис. 2.5).

Каждый IP-префикс указывает на определенное место в хеш-таблице. Отдельные записи в хеше находятся с помощью двух логических операций: “исключающее ИЛИ” отдельно над старшими и младшими 16 битами 32-битового IP-адреса. Результатом поиска является указатель на необходимое место в хеш-таблице, которое называется ячейкой хеша. Каждая ячейка хеша содержит запись кэша, включая заготовку МАС-адреса для следующей точки перехода.

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


Начиная с версии 10.2 операционной системы Cisco IOS хеш-таблица заменена другой структурой данных — бинарным базисным деревом. В такой реализации структуры данных МАС-адрес, как и раньше, хранится в виде части кэш-таблицы.

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

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

    • 10 1010 в бинарном виде.

    • 7 0111 в бинарном виде.

    • 2 0010 в бинарном виде.

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

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

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

Структура базисного дерева приведена на рис. 2.6.

Ограничения быстрого кэша для IР-маршрутизации

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

172.31.46.0/24

172.131.46.128/25

172.31.46.129/32

Когда быстрый кэш ищет информацию для коммутации, он не использует маску подсети или длину префикса и не существует способа определить, что запись 172.31.46.129 использует префикс длиной в 32 бита, а запись 172.131.46.128 — длиной в 25 бит.

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

Что же делает система IOS для решения этой проблемы? Она создает записи в кэше согласно определенному набору правил, которые приведены ниже.

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

    • Если существует несколько путей к получателю, то запись будет также содержать 32-битовый префикс.

    • Если это суперсеть (supernet), кэш использует длину префикса суперсети.

    • Если основная сеть не содержит подсетей, используется префикс основной сети.

    • Если основная сеть содержит подсети, то используется самый длинный префикс в этой основной сети.

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


Ниже приведен список, в котором показано, каким образом будут кэшироваться длины префиксов, указанные в примере 2.4.

    • Каждый получатель в сети 172.31.0.0/16 будет кэшироваться с 32-битовым префиксом. так как существуют два эквивалентных пути к этой сети, записанных в таблице маршрутизации.

    • Каждый получатель в сети 172.16.0.0/16 будет кэшироваться с 32-битовым префиксом, поскольку в данной подсети существует маршрут с таким префиксом.

    • Сеть 10.0.0.0/8 будет иметь одну запись в кэше, потому что это маршрут к основной сети без подсетей и маршрутов к конечным пользователям, эквивалентных маршрутов и т.д.

    • Сеть 192.168.0.0/16 будет иметь одну запись в кэше, потому что это маршрут к суперсети без подсетей.

    • Все получатели в сети 172.25.10.0/24 будут кэшироваться с использованием 32-битового префикса, так как они напрямую подключены к маршрутизатору.


Поддержка кэша

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

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

На рис. 2.7 маршрутизатору А необходимо найти маршрут к получателю с адресом 10.1.3.38 и определить, какой МАС-заголовок необходимо прописать в пакете при его отправке к следующему узлу. Когда маршрутизатор А просматривает свою таблицу маршрутизации, он находит, что получатель доступен через узел с IP-адресом 10.1.2.2.


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

Этот узел не подключен напрямую к маршрутизатору А, следовательно, необходимо снова просматривать таблицу маршрутизации для определения следующей точки перехода. Маршрутизатор А определяет, что 1Р-адрес 10.1.2.2 доступен через устройство с адресом 10.1.1.2, которое, в свою очередь, подключено к маршрутизатору напрямую.

Маршрутизатор А теперь будет посылать все данные, предназначенные для получателя с адресом 10.1.3.38, через устройство 10.1.1.2.

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

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

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

    • Для точки перехода изменилась, была удалена или устарела запись в ARP-таблице.

    • Префикс в таблице маршрутизации изменился или был удален.

    • Изменился адрес следующей точки перехода в таблице маршрутизации.

Удаление старых записей кэша

Операционная система IOS периодически удаляет некоторые записи из кэша. Небольшое количество записей аннулируется каждую минуту во избежание излишнего увеличения размеров кэша и повторной синхронизации кэша с таблицами маршрутизации и МAC-адресов. При наличии свободной памяти более чем 200 Кбайт процесс, отвечающий за очистку кэша (cache ager process), случайным образом аннулирует одну двадцатую всех записей. Если же свободной памяти осталось меньше 200 Кбайт, то указанный процесс начинает более агрессивно удалять записи: одна пятая всех записей кэша аннулируется каждую минуту.

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

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

Для более глубокого понимания причин и возможных недостатков рассмотрим пример на рис. 2.8., где показано несколько рабочих станций, подключенных к сетевому сегменту маршрутизатора А. Каждая рабочая станция обменивается данными с единственным сервером в другом сегменте сети, который подключен к маршрутизатору В. Маршрутизаторы А и В соединены между собой двумя параллельными маршрутами. Пусть в рассматриваемом примере оба параллельных пути имеют одинаковый удельный вес. Можно ожидать, что поток данных между клиентским и серверным сегментами будет равномерно распределяться по указанным двум маршрутам. Проверим, что происходит в таком случае.

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



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

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

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

Отсутствие четкой схемы балансировки нагрузки — это область поиска возможных решений для многих сетевых дизайнеров. В результате такого поиска появились более современные методы коммутации, поддерживающие схемы распределения нагрузки, которые помогают обойти эту проблему. Одним из таких методов является экспресс-пересылка корпорации Cisco (Cisco Express Forwarding — CEF), которая более подробно рассмотрена ниже.

Оптимальная коммутация Optimum switching

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

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

Выше было показано, что доступ к быстрому кэшу осуществлялся с помощью хеш-таблицы в ранних версиях и с помощью бинарного базисного дерева в поздних версиях системы IOS. Доступ к кэшу методом оптимальной коммутации осуществляется через 256-ветвистое дерево со множеством путей (так называемое м-дерево (mtree - дерево или mtrie - древо)). На рис. 2.9 показан пример м-дерева с 256 ветвями.

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

Механизм оптимальной коммутации во многом совпадает с быстрой коммутацией, в частности наиболее важные пункты совпадений алгоритмов перечислены ниже:

    • Запись кэша создается при обработке первого пришедшего пакета механизмом программной коммутации.

    • Записи в кэше устаревают и аннулируются, как только изменяется информация в таблице маршрутизации или другая кэшируемая информация.

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

    • Одинаковые правила используются для определения, какая запись в кэше соответствует каждому конкретному получателю.


Выводимая командой show ip cache optimum информация, которая приведена в примере 2.5, очень похожа на результат команды show ip cache verbose из примера 2.3. Основное отличие состоит в первых строках подробной информации о кэше, отображающих данные об описанном выше м-дереве, в котором хранится вся необходимая информация.

Первые несколько строк вывода под заголовком Optimum Route Cache дают информацию о количестве узлов в м-дереве, конечных узлов дерева, узлов, связанных с любыми другими узлами (что проявляется при наличии рекурсивных маршрутов), о размере выделенной памяти и счетчике обновлений м-дерева.

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


Экспресс-продвижение Cisco Express Forwarding — CEF

http://xgu.ru/wiki/Cisco_Express_Forwarding

Экспресс-пересылка корпорации Cisco (Cisco Express Forwarding — CEF) — это наиболее современный и быстрый метод коммутации, реализованный в операционной системе IOS. Изначально он был разработан для того, чтобы преодолеть основные недостатки метода быстрой коммутации. Возвращаясь к описанию метода быстрой коммутации, обратим внимание на его основные недостатки, которые перечислены ниже:

    • Недостаточная поддержка перекрывающихся записей кэша.

    • Любые изменения в таблице маршрутизации или таблице протокола ARP из-за недостатка или отсутствия взаимосвязи кэша и данных таблиц, приводят к аннулированию большой части кэша.

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

    • Методу присуща неэффективная балансировка нагрузки в некоторых ситуациях (преимущественно в том случае, когда много машин обмениваются информацией с одним сервером).

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

Маршрутизаторы, работающие на Backbon internet, поддерживают огромные таблицы маршрутизации (порядка 56000 маршрутов на начало 1999 года), и количество маршрутов постоянно увеличивается. Некоторые маршрутизаторы на backbon содержат более 100000 записей в таблице маршрутизации. Кроме того, таблица маршрутизации постоянно изменяется, что приводит к частому аннулированию записей кэша. На практике записи аннулируются с такой скоростью, что значительная часть трафика, проходящая через некоторые Internet-маршрутизаторы, использует метод программной коммутации. Протокол CEF разработан специально для повышения производительности маршрутизаторов в таких условиях.

Метод коммутации CEF тестировался в крупномасштабном сетевом окружении Internet. Провайдеры услуг Internet получили серию специальных образов системы IOS (прозванных “дегенеративными” образами системы IOS для провайдеров услуг Internet, или ISP Geeks images) с реализацией метода коммутации CEF для наблюдения за работой метода в экстремальных условиях. Разработанная технология показала свою жизнеспособность в условиях большой нагрузки lnternet-backbon и вскоре была встроена в операционную систему Cisco IOS, и, кроме того, стала методом коммутации, используемым по умолчанию в системе Cisco IOS версии 12.0. На текущий момент это — единственный метод коммутации, доступный на некоторых платформах, в частности в маршрутизаторах серии Cisco 12000 и коммутаторах серии Catalyst 8500.

Как работает CEF

В отличие от метода быстрой коммутации, которая кэширует часть таблицы маршрутизации и таблицы МАС-адресов, алгоритм CEF создает отдельную структуру, полностью воспроизводящую таблицы маршрутизации и МАС-адресов. Коммутация CEF поддерживает две основные структуры, которые обобщенно могут быть названы как “быстрый кэш” CEF и приведены ниже:

    • CEF-таблица.

    • Таблица связей.

CEF-таблица

CEF-таблица — это “урезанная” версия таблицы маршрутизации, представленная в виде

256-ветвистого м-древа для получения оптимальной производительности. Вы можете отобразить размер CEF-таблицы (и другую основную информацию о таблице) на экране с помощью команды show ip cef summary, как показано в примере 2.6.

В структуре 256-ветвистого м-древа каждый узел может иметь до 256 потомков. В CEF-таблице каждый потомок (или связь) используется для представления разных адресов в одном октете IP-адреса (рис. 2.10).

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

Внимание!

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



Таблица связей

Таблица связей содержит данные МАС-заголовка пакета для прямого соединения со следующим узлом и заполняется данными из таблицы протокола ARP, карты протокола Frame Relay и других таблиц с информацией о заголовках, второго (канального) уровня модели OSI. Команда

show adjacency показывает информацию, которую содержит таблица связей (результат ее работы приведен в примере 2.7).


Существует несколько типов записей для поля Address, которые можно увидеть при выполнении команды show adjacency (они перечислены ниже):

    • Кэшированная связь (cached adjacency). Для записи предопределен МАС-заголовок для следующей точки перехода на пути к получателю.

    • Запись отправки (punt). Пакет, адресованный этому адресу, для коммутации должен пройти по указанному пути.

    • Запись хост-маршрут (host-route). Данный получатель напрямую подсоединен к маршрутизатору.

    • Аннулированная запись (drop). Пакет, адресованный указанному получателю, игнорируется.

    • Неполная запись (incomplete). Не определен МАС-заголовок для данного адреса; обычно это означает, что отсутствует запись в кэше для данного адреса или ее невозможно создать (как, например, при неправильной конфигурации сети у получателя).

    • Незаполненная запись (glean). Данный получатель напрямую подключен к маршрутизатору, но для него не создан МАС-заголовок; необходимо послать запрос протокола ARP для создания заголовка.

Метод CEF и его преимущества

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

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

Разделение информации о доступности интерфейса и МАС-заголовке на две структуры дает еше одно дополнительное преимущество — таблицы, используемые при коммутации пакетов, напрямую связаны с теми ресурсами данных, из которых они создаются. Следовательно, не требуется выполнять процедуру удаления устаревших записей (aging ptbcess).

Записи в структурах метода CEF никогда не'устаревают. Все изменения в таблице машрутизации или ARP-таблице легко переносятся в Структуры CEF. Кроме того, при работе CEF отпадает необходимость в аннулировании большого количества записей кэша при изменениях в таблице маршрутизации или ARP-кэше.

Балансировка нагрузки и CEF

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

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

Последовательность операций в алгоритме коммутации пакета

В каком порядке осуществляются операции над пакетом в процессе коммутации?

Приведенный ниже короткий список может не включать все возможности, реализованные в операционной системе IOS, но все же дает начальное представление о последовательности, выполнения операций.

    • Компрессия и декомпрессия.

    • Шифрование.

    • Фильтр входящих пакетов.

    • Однонаправленная обратная проверка пути.

    • Ограничение входящего потока.

    • Обработка широковещательных запросов физического уровня.

    • Уменьшение TTL (Time То Live — параметр времени существования пакетов), если это не было выполнено ранее.

    • Подсистема проверки пакетов (возможность организации брандмауэра или средства межсетевой зашиты).

    • Трансляция сетевых адресов из внешних на внутренние (outside to inside — NAT).

    • Обработка флагов в IP-пакете.

    • Поиск выходного интерфейса в таблице маршрутизации.

    • Применение правил маршрутизации (policy routing) для пакета.

    • Поддержка перенаправления пакетов на Web-кэш (организация transparent proxy).

    • Трансляция сетевых адресов - внутренних во внешние (inside to outside — NAT)

    • Шифрование.

    • Исходящий фильтр пакетов.

    • Конечная обработка пакетов подсистемой фильтров или списков доступа.

    • Обработка перехват управления протоколом TCP.


Резюме

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

    • Программная коммутация не кэширует информацию и коммутирует пакет с помощью отдельного процесса, т.е. программно.

    • Быстрая коммутация кэширует информацию о доступности, об интерфейсе и о МАС-заголовке, необходимую для пересылки пакета. Эта информация хранится в бинарном базисном дереве, и пакеты коммутируются в течение одного прерывания.

    • Метод оптимальной коммутации кэширует информацию о доступности и МАС-заголовок в многоветвистом дереве (м-дереве) и коммутирует пакеты в течение одного прерывания.

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

Таблица 2.1 0бобщенные характеристики различных методов коммутаций.