2. Cisco Express Forwarding
Общая информация
Для ускорения коммутации и маршрутизации в оборудовании Cisco используется ряд технологий и наработок. Это как и использование особых типов памяти CAM и TCAM, так и технология CEF как логическая надстройка, снимающая лишние задачи с CPU при обработке пакетов и кадров.
Для начала рассмотрим, какие типы трафика обрабатывает коммутатор. Напомним, что кадры обрабатываются как на интерфейсах, так и на CPU, когда речь идет о кадрах, предназначенных самому коммутатору, или же если он сам их и генерирует.
L2 трафик
"Known" multicast - "известный" мультикаст, то есть когда на коммутаторе запущены процессы, умеющие с ним работать, например, IGMP Snooping
Known unicast - известный мультикаст
"BUM" (broadcast, unknown unicast, unknown multicast)
L3 трафик
Unicast/Anycast
Multicast/Broadcast
Принцип работы L2 коммутатора заключается в том, чтобы отправить копию кадра во всех порты, кроме тех, которые попадают под ряд условий. Кадр не отправляется:
в порт источника
в другие порты в той же группе агрегации (речь об Etherchannel)
в порты, где нет заведомо получателей для конкретного кадра (порты, с которых не было IGMP Join, при известном unicast, известном порту)
Структура коммутатора
ASIC - Application-Specific Integrated Circuit
С помощью ASIC анализируются пакеты и кадры
Является основным элементом Forwarding Engine
Forwarding Engine может быть как одиночный (single), так и распределенный (distributed)
CAM
CAM - Content Addressable Memory.
Данный тип памяти предполагает адресацию по содержимому (так называемая ассоциативная память), а не просто по адресу ячейки, как в обычной RAM
Часто состоит из обычной RAM и контроллера, который использует хитрую организацию RAM через таблицы хэшей или сбалансированные деревья.
По заданному ключу память возвращает за конкретное время хранимую запись или сообщает об ее отсутствии с ключом.
CAM удобна для хранения в первую очередь MAC адресов. Пополнение памяти проходит за счет процесса изучения MAC адресов - MAC Learning.
TCAM
TCAM - Ternary Content Addressable Memory.
Данный тип памяти хранит "троичные" значения (отсюда и название типа памяти), с которыми сравнивается ключ.
Троичные символы, используемые в TCAM: "1", "0", "не важно".
Также, как и CAM, по заданному ключу память возвращает за конкретное время хранимую запись или сообщает об ее отсутствии с ключом.
Используется для ACL, FIB, при работе с задачами, где используются маски.
Физически TCAM состоит из двоичных комбинаций VMR:
V - Value. Указатель на эталон для сравнения с ключом, 134 бита.
M - Mask. Указатель на троичную маску эталона, 134 бита.
R - Result. Числовой результат (permit, deny, указатель на полисер или next-hop)
Также используется компонент LOU (Logical Operation Unit), который используется для L4 эталонов. За счет него обеспечивается выполнение таких регулярных выражений, как "eq", "neq", "gt", "lt", "range".
TCAM может быть распределена под конкретные задачи. Для этого можно задать шаблон, который перераспределит память с нужными администратору параметрами. Данные шаблоны называются шаблонами SDM (Switching Database Manager).
После применения нужна перезагрузка.
Посмотреть текущий шаблон и его параметры, а также утилизацию TCAM:
Обработка трафика
САМ разбита фактически на разделы (L2 FIB, QoS, ACL и т. д.). В случае обращения к памяти запрос обрабатывается одновременно по всем разделам, и на основании их всех уже принимается решение по коммутации.
В случае использования L3 коммутаторов фактически мы имеем дело с виртуализацией сетевых функций: одного или нескольких свитчей в случае VLAN, одного или нескольких роутеров в случае с VRF. L3 свитч при выполнении "маршрутизации" коммутирует кадр по специальной таблице и перезаписывает некоторые его поля. При этом правила коммутации и перезаписи полей не зависит от содержимого пакета. L3 свитч меняет DA, SA; TTL, DA, SA в L3 вложении.
Все это удобно обрабатывать в TCAM.
Topology-based Switching
Особенность CEF - интерфейс и next-hop IP просчитывается сразу при добавлении маршрута в RIB, чтобы при необходимости форвардинга трафика уже были просчитаны все данные для этого. В том числе и готов MAC-заголовок для next-hop.
Таблицы CEF
FIB (Forwarding Information Base) - таблица правил коммутации (что и куда коммутировать) (IP Routing Table)
Buckets - таблица "балансировки"
Adjacencies - таблица правил перезаписи (как модифицировать кадр). Наполняется L2 таблицами типа ARP или Frame-Relay Mapping Table
Adjacencies состоит из нескольких подструктур:
Cache - нормальная запись, для которой сформирован L2 Header
Receive - виртуальная запись для собственных маршрутов
Null - виртуальная запись для маршрутов в null0
Punt - виртуальная запись, где требуется process switching
Glean - запись для соседства, у которого не сформирован L2 Header
Discard/Drop - виртуальная запись для сбрасываемых пакетов
Buckets:
FIB может иметь несколько вариантов next-hop для одного префикса. Например, когда речь идет о маршрутах равной стоимости в OSPF или неравной в пределах variance в EIGRP. В зависимости от платформы бакетов может быть до 15. Трафик будет балансировать по хэш-алгоритму.
Distributed CEF - когда линейные карты пересылают транзитные пакеты без участия Routing Engine
Варианты хэширующего алгоритма
Original - хэш от L3 Header
Universal - хэш от L3 Header и "соли" (universal id - случайное значение)
Include-ports - хэш от L3 и L4 Header'ов
Tunnel - хэш для туннелей, считается от L3 Header и "соли"
Различные варианты хэш алгоритма используются для избежания такой проблемы, как CEF Polarization, когда используется один алгоритм для всех устройств в сети, в результате балансировка происходит с неполной утилизацией каналов, так как трафик постоянно ходит по одним и тем же линкам.
Управление CEF
По умолчанию CEF включен на всех новых платформах. На некоторых платформах CEF невозможно отключить, об этом сообщит консоль при попытке отключения.
Отключается CEF глобально по команде:
Отключение на интерфейсе:
Non-CEF пакеты
Часть пакетов не может быть обработана CEF:
ARP запросы
Пакеты, адресованные CPU
Траффик протоколов маршрутизации
CDP
Зашифрованные пакеты
Last updated