Process Switching
Process switching — это базовый механизм маршрутизации, при котором каждый входящий IP-пакет передаётся на обработку центральному процессору маршрутизатора (CPU), где он пошагово проходит весь цикл принятия маршрутизирующего решения. Это универсальный (поддерживает все протоколы) метод, но медленный.

В чём отличие от других методов
| Метод | Кто принимает решение | Как часто | Где кэш |
|---|---|---|---|
| Process switching | CPU | Каждый пакет | Нет |
| Fast switching | CPU → Fast cache | Только первый | Временный кэш |
| CEF | FIB (precomputed) | Никогда | FIB/Punt path |
Полный процесс работы process switching
Рассмотрим пошагово.
1. Пакет приходит на интерфейс
Пакет с Ethernet-заголовком приходит, попадает в input queue интерфейса, и драйвер сетевой карты вызывает прерывание.
2. CPU читает пакет и извлекает L3 (IP) заголовок
Переход к IP:
- Проверяется IP header (TTL, checksum, версия),
- Извлекается
Destination IP.
3. CPU выполняет рекурсивный поиск маршрута
Теперь самое важное — как выбирается маршрут:
a. Поиск записи в RIB (Routing Information Base)
Пример:
10.10.10.0/24 → next-hop 192.168.1.1 via GigabitEthernet0/1
Это не означает напрямую, куда отправлять пакет — это логическая информация (как добраться до next-hop).
b. Рекурсивный поиск next-hop
Теперь маршрутизатор должен понять, а как добраться до 192.168.1.1? Он снова лезет в RIB и ищет:
192.168.1.0/24 → directly connected via Gi0/1
Теперь всё ясно: next-hop 192.168.1.1 можно отправить через Gi0/1.
В результате рекурсивного поиска
- определяется выходной интерфейс,
- и MAC-адрес next-hop (через ARP).
4. Проверка ARP / получение MAC-адреса
Если ARP-запись найдена — используется.
Если нет — инициируется ARP-запрос и пакет буферизуется.
5. Изменение заголовка IP
CPU вручную:
- уменьшает TTL,
- пересчитывает IP Checksum,
- меняет Ethernet-заголовок (новый MAC dst),
- направляет пакет в output queue интерфейса.
Что дальше
На этом этапе:
- первый обработанный пакет становится шаблоном для fast switching или CEF (если они включены),
- CPU может сохранить результат поиска в Fast switching cache (если он включён).
Когда каждый пакет идёт через process switching
- Fast switching и CEF отключены,
- Пакет неизвестного формата (IP options, multicast),
- Интерфейс в режиме debug (
debug ip packet), - Пакет первый в потоке (если fast switching),
- Используется policy-based routing (PBR) без оптимизаций.
Как запись появляется в таблице маршрутизации
На самом деле, ip route → это RIB.
В реальных системах RIB наполняется:
- статическими маршрутами,
- маршрутами от протоколов (OSPF, EIGRP, BGP),
- маршрутами напрямую подключённых интерфейсов.
Маршрутизатор строит FIB (Forwarding Information Base) на основе RIB, но при process switching FIB не участвует вообще — весь поиск идёт по RIB в реальном времени.
Пример (на Cisco)
Router(config)# no ip route-cache
Router(config)# no ip cef
→ Всё идёт через process switching
Router# debug ip packet
→ Все пакеты обрабатываются CPU, можно наблюдать каждый шаг маршрутизации
Почему это плохо
- Каждый пакет → прерывание, поиск, обработка вручную.
- CPU загружается до 100% при минимальном трафике.
- Нет кэширования, нет масштабируемости.
- Современные скорости (>100Mbps) невозможны без аппаратного ускорения.
Вывод
Process switching:
- это низкоуровневая, универсальная маршрутизация, где CPU делает всё сам,
- включает рекурсивный поиск маршрутов по RIB,
- применяется только для совместимости, отладки, или если всё остальное выключено,
- основа всех маршрутизирующих механизмов, но в проде почти не используется.
| Шаг | Этап | Описание |
|---|---|---|
| 1 | Приём пакета | Пакет поступает на входной интерфейс, создаётся прерывание для CPU. |
| 2 | Извлечение IP-заголовка | CPU анализирует IP-заголовок, извлекает адрес назначения (Destination). |
| 3 | Поиск маршрута в RIB | В таблице маршрутов (RIB) ищется маршрут к целевому адресу. |
| 4 | Рекурсивный поиск next-hop | Если указанный next-hop — это другой IP, выполняется повторный поиск. |
| 5 | Определение выходного интерфейса | Определяется физический интерфейс, через который пойдёт пакет. |
| 6 | ARP-резолвинг | Если MAC-адрес next-hop не известен, запускается ARP-запрос. |
| 7 | Перепись заголовков | TTL уменьшается, пересчитывается IP-checksum, меняется MAC-адрес. |
| 8 | Передача пакета | Пакет уходит через выходной интерфейс в output-queue. |
| Характеристика | Process Switching | Fast Switching | CEF (Cisco Express Forwarding) |
|---|---|---|---|
| Где принимается решение | CPU (на каждый пакет) | CPU (только первый пакет) | FIB (аппаратная структура) |
| Кэширование | Нет | Да (Fast Cache) | Да (FIB/Punt Path) |
| Производительность | ❌ Низкая | ⚠️ Средняя | ✅ Очень высокая |
| Масштабируемость | ❌ Плохо | ⚠️ Умеренно | ✅ Отлично |
| Поддержка всех протоколов | ✅ Да | ⚠️ Не всегда | ⚠️ Требует поддержки |
| Где используется | Отладка, исключения | Старые Cisco, fallback | Современные маршрутизаторы Cisco |
| Возможность отладки | ✅ Полный контроль | ⚠️ Частичный | ❌ Почти нет |
| CPU-нагрузка | 🟥 Максимальная | 🟡 Первая передача | 🟢 Минимальная |
Рекурсивный поиск маршрута
рекурсивный поиск маршрута всегда выполняется, вне зависимости от того, какой метод форвардинга используется (Process Switching, Fast Switching, CEF и др.). Но рекурсивный поиск нужен только один раз на этапе построения маршрута, не на каждый пакет.
Подробно: когда и где выполняется рекурсивный поиск
| Этап | Процесс | Где происходит рекурсия | Пример |
|---|---|---|---|
| Построение таблицы маршрутов (RIB) | Поступление маршрутов (например, из BGP) | Да, CPU выполняет рекурсивный поиск, чтобы определить путь до next-hop | 10.0.0.0/8 → next-hop 192.168.1.1 → 192.168.1.0/24 → Gi0/1 |
| Построение FIB (CEF) | Преобразование RIB → FIB (предвычисленная структура) | Да, рекурсивно разрешаются next-hop'ы | FIB хранит уже готовый интерфейс + ARP |
| Форвардинг пакета | CEF или Fast switching | ❌ Нет, рекурсия уже выполнена заранее | FIB указывает сразу: 10.0.0.0/8 → Gi0/1, MAC=aa:bb:cc |
Что такое рекурсивный маршрут
Рекурсивный маршрут — это маршрут, в котором next-hop — это не directly connected интерфейс, а другой IP-адрес, требующий дальнейшего разрешения.
Пример
ip route 10.0.0.0/8 192.168.1.1
А 192.168.1.1 сам по себе находится на:
ip route 192.168.1.0/24 via Gi0/1
Нужно «разрешить»
- Где находится
192.168.1.1? - Какой интерфейс? Какой MAC?
- Это и есть рекурсивный обход.
Но важно
-
При process switching: рекурсивный поиск идёт на каждый пакет.
-
При CEF: рекурсивный поиск делается один раз, при формировании FIB.
- CPU строит
prefix → next-hop → outgoing interface + ARP. - Затем этот путь используется во всех пакетах, без участия CPU.
- CPU строит
Вывод
| Вопрос | Ответ |
|---|---|
| Нужен ли рекурсивный обход маршрутов? | ✅ Да |
| Происходит ли он при любом методе маршрутизации? | ✅ Да, но один раз |
| Выполняется ли он при каждом пакете? | ❌ Только при process switching |
| Выполняется ли он при CEF? | ✅ Но только при генерации FIB |