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).

SWITCH(config)# sdm prefer ?

После применения нужна перезагрузка.

Посмотреть текущий шаблон и его параметры, а также утилизацию TCAM:

SWITCH#show sdm prefer
SWITCH#show platform tcam utilization

Обработка трафика

САМ разбита фактически на разделы (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.

ROUTER>sh ip cef 84.52.75.154
84.52.75.154/31
  nexthop 84.52.75.68 TenGigabitEthernet1/0/0.2006 label 5064
ROUTER>show adjacency 84.52.75.157 encapsulation 
Protocol Interface                 Address
IP       Vlan2025                  84.52.75.157(15)
  Encap length 14
  E48D8C0EABEB001E13E554C00800
                                   L2 destination address byte offset 0
                                   L2 destination address byte length 6
                                   Link-type after encap: ip
  Provider: ARPA
TAG      Vlan2025                  84.52.75.157(5)
  Encap length 14
  E48D8C0EABEB001E13E554C08847
                                   L2 destination address byte offset 0
                                   L2 destination address byte length 6
                                   Link-type after encap: tagswitch
  Provider: ARPA

Таблицы CEF

  • FIB (Forwarding Information Base) - таблица правил коммутации (что и куда коммутировать) (IP Routing Table)

  • Buckets - таблица "балансировки"

  • Adjacencies - таблица правил перезаписи (как модифицировать кадр). Наполняется L2 таблицами типа ARP или Frame-Relay Mapping Table

Switch# show ip cef [detail]
Switch# show ip cef <ip addr> <mask> detail 
Switch# show adjacency <intf type/number > [summary | detail]
Switch# show adjacency vlan <vlan-id> detail 
  • Adjacencies состоит из нескольких подструктур:

    • Cache - нормальная запись, для которой сформирован L2 Header

    • Receive - виртуальная запись для собственных маршрутов

    • Null - виртуальная запись для маршрутов в null0

    • Punt - виртуальная запись, где требуется process switching

    • Glean - запись для соседства, у которого не сформирован L2 Header

    • Discard/Drop - виртуальная запись для сбрасываемых пакетов

  • Buckets:

FIB может иметь несколько вариантов next-hop для одного префикса. Например, когда речь идет о маршрутах равной стоимости в OSPF или неравной в пределах variance в EIGRP. В зависимости от платформы бакетов может быть до 15. Трафик будет балансировать по хэш-алгоритму.

SWITCH#show ip cef 192.168.0.0 internal
  • Distributed CEF - когда линейные карты пересылают транзитные пакеты без участия Routing Engine

Варианты хэширующего алгоритма

ROUTER#ip cef load-sharing algorithm
  • Original - хэш от L3 Header

  • Universal - хэш от L3 Header и "соли" (universal id - случайное значение)

  • Include-ports - хэш от L3 и L4 Header'ов

  • Tunnel - хэш для туннелей, считается от L3 Header и "соли"

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

Управление CEF

По умолчанию CEF включен на всех новых платформах. На некоторых платформах CEF невозможно отключить, об этом сообщит консоль при попытке отключения.

Отключается CEF глобально по команде:

SWITCH(config)#no ip cef
SWITCH(config)#no ipv6 cef

Отключение на интерфейсе:

SWITCH(config)#interface vlan 1
SWITCH(config-if)#no ip route-cache cef
SWITCH(config-if)#no ipv6 cef

Non-CEF пакеты

Часть пакетов не может быть обработана CEF:

  • ARP запросы

  • Пакеты, адресованные CPU

  • Траффик протоколов маршрутизации

  • CDP

  • Зашифрованные пакеты

Switch# show cef drop

Last updated