Сети и протоколы
Маршрутизация и форвардинг
Когда пакет приходит на роутер, у роутера есть микросекунды чтобы решить куда его отправить. Он обращается к таблице с миллионами destination-префиксов, находит наилучшее совпадение и передаёт пакет — всё на line rate. Понимание этого механизма объясняет почему единственный неверный BGP-анонс может перенаправить глобальный трафик и почему ECMP может создавать проблемы с elephant flows.
CIDR и longest-prefix match
IPv4-адреса раньше делились на жёсткие классы (A: /8, B: /16, C: /24). Classless Inter-Domain Routing (CIDR, RFC 4632) заменил классы префиксами переменной длины: любой префикс от /1 до /32 допустим.
CIDR-префикс вроде 10.0.0.0/24 означает «первые 24 бита идентифицируют сеть; последние 8 бит идентифицируют хост». Этот префикс покрывает 256 адресов.
| Префикс | Размер | Используемых хостов |
|---|---|---|
| /24 | 256 адресов | 254 (минус .0 сеть, .255 broadcast) |
| /16 | 65 536 адресов | 65 534 |
| /30 | 4 адреса | 2 (для point-to-point линков) |
| /8 | 16 777 216 адресов | 16 777 214 |
Когда несколько префиксов совпадают с destination, роутер выбирает longest match (наиболее специфичный префикс). Пакет к 10.0.0.5 совпадает с 10.0.0.0/8 и 10.0.0.0/24; побеждает /24 потому что он специфичнее.
CIDR позволяет агрегировать маршруты: единственный анонс 10.0.0.0/8 покрывает 16 миллионов адресов. Без агрегации BGP-таблица превысила бы практические лимиты памяти.
Таблица маршрутизации vs таблица форвардинга (FIB)
Таблица маршрутизации: строится протоколами маршрутизации (BGP, OSPF, IS-IS). Хранит все известные префиксы, их атрибуты и альтернативы. Может иметь миллионы записей.
Forwarding Information Base (FIB): таблица data plane которую роутер использует для каждого пакета. Это урезанный per-destination next-hop view скомпилированный из таблицы маршрутизации. Реализован в TCAM-hardware на современных роутерах для line-rate lookup’ов.
Разделение даёт чистую архитектуру:
- Control plane (software): получает обновления протоколов маршрутизации, вычисляет лучшие пути, пишет таблицу маршрутизации, синхронизирует FIB.
- Data plane (hardware ASIC): использует FIB для каждого пакета на скорости терабит в секунду.
Обновления таблицы маршрутизации поступают от BGP/OSPF → таблица маршрутизации → FIB за миллисекунды. Баги в data plane (редкость) проявляются как тихая потеря пакетов, а не очевидные крэши.
ARP и Neighbor Discovery
Зная next-hop IP, роутер должен узнать MAC-адрес этого next-hop чтобы построить link-layer фрейм. ARP (IPv4) бродкастит «кому принадлежит 10.0.0.5?» в локальной подсети; владелец отвечает своим MAC. Роутер кэширует это.
Neighbor Discovery (ND) — эквивалент IPv6: использует ICMPv6 multicast вместо broadcast, и также обрабатывает router advertisements, автоконфигурацию адресов и обнаружение дублирующихся адресов.
- Размер глобальной BGP-таблицы (2026)
- ~1 000 000 префиксов
- Типичное кол-во путей ECMP
- 4–64 равностоимостных пути
- Таймаут ARP-кэша (Linux)
- 60 с
- Время конвергенции BGP (тюнинг)
- 1–5 с
- Конвергенция OSPF (датацентр)
- ~200 мс
- TCAM lookup (hardware FIB)
- наносекунды
BGP: протокол маршрутизации Интернета
Интернет разделён на Автономные Системы (AS) — сети управляемые одной организацией, каждая с уникальным номером AS. Внутри AS interior gateway протоколы (OSPF, IS-IS) вычисляют маршруты. Между AS — BGP (RFC 4271) согласовывает какие префиксы каждая AS анонсирует и предпочитает.
BGP — path-vector протокол: каждый маршрут несёт список номеров AS которые он прошёл. Роутер предпочитает более короткий AS-path (меньше AS для прохождения), с множеством тай-брейкеров (local preference, MED, community атрибуты). BGP намеренно policy-driven: AS может предпочесть дорогой прямой пиринг дешёвому транзиту или полностью избегать определённых AS.
Route leaks и хайджеки. Неправильно настроенная или злонамеренная AS может анонсировать префикс которым не владеет. Трафик для легитимного владельца перенаправляется к атакующему. RPKI (Resource Public Key Infrastructure) позволяет владельцам префиксов подписывать свои анонсы чтобы получатели могли проверить подлинность (подробнее в уроке по безопасности).
ECMP: распределение трафика по равностоимостным путям
Когда роутер имеет несколько равностоимостных путей к destination, он использует ECMP (Equal-Cost Multi-Path) для распределения нагрузки. Роутер хеширует 5-tuple (source IP, source port, destination IP, destination port, protocol) и выбирает путь по хешу mod число-путей. Все пакеты одного TCP-флоу хешируются к одному пути (сохраняя порядок внутри флоу); разные флоу распределяются по путям.
Датацентровые Clos-фабрики (leaf-spine) полагаются на ECMP для bisection bandwidth. Подводные камни:
- Elephant flows: один большой флоу насыщает один путь пока другие простаивают.
- Hash polarisation: одна и та же хеш-функция применённая на последовательных хопах вызывает систематический дисбаланс.
- Современные дизайны используют weighted ECMP, flowlet switching (разбивка флоу во время тихих моментов) или CONGA для балансировки с учётом нагрузки.
Почему это работает
Почему BGP допускает асимметричную маршрутизацию. Каждая AS самостоятельно выбирает исходящий путь per destination. Путь пакета на выход может отличаться от пути ответа на вход — две стороны разговора могут проходить через совершенно разные AS. Это легально и распространено (называется асимметричной маршрутизацией). Важно для задержки (исходящий: 60 мс, обратный: 150 мс из-за обходного пути), для интерпретации traceroute (трассировка в каждом направлении отдельно) и для stateful firewall’ов (которые могут видеть только одно направление трафика).
Проследите пакет от домашнего PC в Лондоне до сервера в Сан-Франциско.
Что означает CIDR-префикс /24?
Почему роутер ведёт и таблицу маршрутизации, и таблицу форвардинга (FIB)?
Расставьте порядок разрешения маршрута на роутере при получении пакета:
- 1 Декрементировать TTL; дропнуть и отправить ICMP если TTL равен 0
- 2 Найти destination IP в FIB (longest-prefix match)
- 3 Определить next-hop IP и выходной интерфейс
- 4 ARP/ND разрешить MAC next-hop если не закэширован
- 5 Построить новый L2-фрейм с destination MAC
- 6 Передать фрейм через выходной интерфейс
- 01Что такое longest-prefix match и зачем он нужен?
- 02Объясните почему единственный неверный BGP-анонс может выключить домен глобально.
- 03Почему ECMP может вызывать проблемы с elephant flows и что делают современные дизайны?
Маршрутизация строит глобальную карту достижимых префиксов; форвардинг использует её на line rate. CIDR-префиксы переменной длины обеспечивают агрегацию — анонс /8 покрывает 16 миллионов адресов и держит BGP-таблицу управляемой. Роутеры разделяют control plane (таблица маршрутизации, обновления BGP/OSPF) от data plane (FIB в TCAM-hardware, наносекундные lookup’и). BGP распространяет достижимость префиксов между Автономными Системами через path-vector с AS-path; он policy-driven и по дизайну допускает асимметричную маршрутизацию. ECMP распределяет флоу по равностоимостным путям через 5-tuple хеш — отлично для суммарной пропускной способности, проблематично для elephant flows.