L2 VLAN, 802.1Q, STP
Один коммутатор — это одна общая L2-сеть, где все слышат друг друга. Это плохо для безопасности (бухгалтерия видит broadcast серверов), плохо для производительности (один большой broadcast-домен), плохо для проектирования. Решается это VLAN'ами.
Когда в сети появляется резервирование (две связки между свитчами на случай обрыва), возникает другой подвох — петля L2, которая за секунды кладёт всю сеть. Лечится STP/RSTP.
«Инцидент. 9:05 утра, офис на 400 человек: сеть лежит ВСЯ — ни телефония, ни интернет, ни принтеры. На этажных коммутаторах все индикаторы мигают как гирлянда, CPU 99%, в консоль не зайти. В 8:50 сотрудник подключил принесённый из дома „маленький свитчик на 5 портов“, чтобы воткнуть ноутбук и телефон одновременно». Это широковещательный шторм — самая зрелищная авария L2: один кадр, попавший в петлю, размножается миллионы раз в секунду, потому что у Ethernet-кадра нет TTL. Почему пятипортовый свитчик убил сеть на 400 человек, как за 3 минуты найти петлю и какие две команды на каждом access-порту сделали бы аварию невозможной — весь этот урок.
- Объяснить, зачем резать сеть на VLAN, тремя аргументами: безопасность, broadcast, порядок в адресации
- Найти тег 802.1Q в дампе и прочитать его поля (VID, PCP) побайтно
- Настроить и отличить access- и trunk-порт; объяснить, чем опасен native VLAN
- Соединить два VLAN через SVI или router-on-a-stick — и сказать, почему между VLAN всегда L3
- Предсказать, что случится с сетью при петле без STP — и почему это происходит за секунды
- Проследить выбор root bridge и вычислить, какой порт STP заблокирует
- Защитить access-порты связкой portfast + BPDU guard и объяснить каждую команду
- Прочитать QinQ-кадр и объяснить, зачем провайдеру второй тег
Broadcast-домен — область, где широковещательный кадр слышат все; коммутаторы его не ограничивают, только расширяют. CAM-таблица учится по src MAC и решает по dst MAC; неизвестный unicast — флудится во все порты. MAC-flapping — когда один MAC скачет между портами. Сегодня всё это сложится в картину: VLAN режет broadcast-домены, а петля превращает флудинг в шторм — и flapping в логах будет первым свидетелем.
1. Что такое VLAN — и зачем
VLAN (Virtual LAN) — это способ логически разделить один физический коммутатор на несколько независимых сетей. Хосты в разных VLAN не слышат друг друга на L2, даже если воткнуты в один и тот же свитч.
Зачем нужны VLAN — реальные причины
- Безопасность. Гость в офисе через Wi-Fi не должен видеть серверы. Бухгалтерия — не должна видеть R&D.
- Уменьшение broadcast-домена. В сети из 500 устройств broadcast'ы (ARP, DHCP) забивают канал. Разделили на VLAN'ы по 50 — broadcast в 10 раз меньше.
- QoS. На VoIP VLAN можно дать приоритет, чтобы голос не лагал из-за бэкапа на серверах.
- Гибкость. Перевести сотрудника из «офиса» в «лабораторию» — это сменить VLAN на его порту, без перепрокладки кабеля.
- Multi-tenancy. В одном здании работают две компании — каждой свой VLAN, изоляция на L2.
2. Формат тега 802.1Q
Когда кадр идёт между свитчами по trunk-порту, ему нужно нести информацию: «я из VLAN 10». Это делается через тег 802.1Q — 4 байта, вставляемые в Ethernet-кадр.
Reserved VLAN IDs
| VID | Назначение |
|---|---|
0 | Priority-only tag (есть PCP, но нет принадлежности к VLAN) |
1 | Default VLAN на большинстве коммутаторов (Cisco). НЕ используется в production. |
2-1001 | Стандартный диапазон, доступен везде. |
1002-1005 | Зарезервированы Cisco для legacy (Token Ring, FDDI). Не использовать. |
1006-4094 | Расширенный диапазон, доступен на современных свитчах. |
4095 | Reserved (служебный). |
3. Access vs Trunk порты
Порт коммутатора может работать в одном из двух режимов:
Native VLAN — нюанс trunk-порта
На trunk-порту один из VLAN объявляется native — его кадры идут без тега. По умолчанию native = VLAN 1.
switchport trunk native vlan tag.
4. Inter-VLAN routing — как VLAN общаются между собой
L2-коммутатор внутри VLAN'а — это L2. А чтобы пакет ушёл из VLAN 10 в VLAN 20, нужен L3. Между разными VLAN — всегда маршрутизация.
5. STP — зачем нужен и что без него
Представь сеть с резервированием — два uplink'а между свитчами на случай обрыва одного. Это правильно с точки зрения надёжности. Но без специальной защиты — это смерть сети.
6. Как STP всё это лечит
STP (Spanning Tree Protocol, 802.1D) умеет одну простую вещь: построить из топологии с кольцами логическое дерево (без циклов), заблокировав избыточные порты. Если основной линк падает — заблокированный «оживает» автоматически. Эластичность + защита от петель.
Состояния портов STP (классический)
RSTP — современная замена
RSTP (Rapid Spanning Tree Protocol, 802.1w) сократил время сходимости с 50с до ~6с.
Состояний теперь три: Discarding → Learning → Forwarding. Используется по умолчанию
на всех современных свитчах.
Расширения STP — must know
| Фича | Зачем |
|---|---|
BPDU Guard |
На access-портах. Если кто-то воткнул свой свитч (а тот шлёт BPDU) → порт мгновенно err-disabled. Защита от подделки root. |
Root Guard |
На trunk-портах в сторону «не root». Если оттуда приходит BPDU с лучшим priority — порт блокируется. Защита, что root не «переедет» внезапно. |
BPDU Filter |
Запрещает порту участвовать в STP. Использовать ОСТОРОЖНО — можно создать loop, если ошибся в топологии. |
PortFast / edge port |
На access-портах. Порт сразу в Forwarding, не ждёт STP. Для DHCP-клиентов, серверов — важно (быстрая загрузка). |
Loop Guard |
Защита от «unidirectional link» (когда BPDU перестали приходить, но физически линк жив) — блокирует порт вместо ошибочного forwarding. |
UDLD (Unidirectional Link Detection) |
Cisco-specific. Активная проверка двунаправленности линка. Часто включают на оптике. |
7. EtherChannel / LAG — альтернатива STP
Когда нужно несколько линков в одну сторону, но не хочется блокировать половину через STP — собирают их в EtherChannel (Cisco) / Link Aggregation Group (стандарт IEEE 802.3ad / 802.1AX). Несколько физических линков становятся одним логическим, с балансировкой по hash.
8. Cisco-конфиги для практики
Создать VLAN
Access-порт
Trunk-порт
SVI (L3 на L3-свитче)
STP / RSTP
LACP (LAG)
9. QinQ (802.1ad) — двойной тег
Провайдеру нужно пропустить через свою сеть клиентские VLAN'ы, не трогая их. Решение — QinQ: добавляет ещё один внешний 802.1Q-тег поверх клиентского. Клиент думает, что его кадры идут «как есть»; провайдер коммутирует по своему внешнему тегу.
QinQ на стыке: внешний тег занимает место, и его надо где-то взять
Второй тег — это +4 байта к каждому кадру. Кадр, который на клиентской стороне ровно помещался в допустимый размер, на стыке провайдера в него уже не помещается. Это самая частая авария при вводе QinQ, и выглядит она знакомо по уроку о MTU: мелкое проходит, объёмное — нет.
Официальная документация Junos OS формулирует выбор прямо. При значении MTU по умолчанию «you need to make one of the following adjustments»:
- «Reduce the MTU on the access links by at least 4 bytes so that the frames do not exceed the MTU of the trunk link when S-VLAN tags are added» — урезать клиентскую сторону;
- «Increase the MTU on the trunk link so that the link can handle the larger frame size» — расширить свою.
На практике операторы почти всегда выбирают второе: урезать клиента означает трогать его оборудование, к которому доступа нет, а расширять свой стык — работа внутри своей зоны. Отсюда практическое правило: перед вводом QinQ поднимается допустимый размер кадра на всех устройствах по пути услуги, а не только на двух крайних.
10. Частые ошибки и сценарии
show vlan brief).
2) Проверь, что trunk правильно поднят (show interfaces trunk).
3) Проверь, что в switchport trunk allowed vlan есть нужный номер.
4) Если разные native VLAN на сторонах — увидишь warning «native VLAN mismatch».
spanning-tree priority 4096, на новых
устанавливай bpduguard на все access-порты.
11. Плейбук: «легла вся сеть» — разбираем шторм из заявки
Возвращаемся к инциденту 9:05. Сеть на 400 человек мертва, коммутаторы мигают всеми портами. Действия по секундам — здесь дорога каждая минута простоя:
show processes cpu (интерапты под 100%), show interfaces
(у всех портов гигантский broadcast input rate), и главное —
show mac address-table | include flap или лог: «MAC … flapping between
Gi0/12 and Gi0/24». Эти два порта — стороны петли или путь к ней.shutdown. Сеть оживает мгновенно —
шторм умирает в ту же секунду, как рвётся кольцо. Если flapping указывает на аплинк
к этажному коммутатору — глуши не аплинк, а спускайся на этот коммутатор и ищи петлю там
(тот самый принесённый свитчик, у которого сотрудник воткнул оба конца одного патч-корда
или соединил две розетки).spanning-tree portfast +
spanning-tree bpduguard enable (чужой коммутатор с BPDU → порт в err-disabled),
плюс storm-control broadcast level 1.00 (душить broadcast выше 1% полосы —
петля через тупой свитч без BPDU тоже будет обезврежена). На аплинках — root guard.
15 минут конфигурации против часа простоя всей компании.12. Мини-лаба: потрогай тег 802.1Q руками
Домашние свитчи теги снимают, поэтому берём два пути: виртуальный Linux (WSL2 подойдёт) и Packet Tracer для полной картины.
vlan 10, p 0, ethertype IPv4 — тег 802.1Q в живом кадре.
Сабинтерфейс .10 — ровно то, что делает router-on-a-stick из раздела 4.
Уборка: sudo ip link del vethA.switchport mode trunk) — поедут оба. Открой Simulation-режим и посмотри,
как кадр получает тег на входе в trunk и теряет на выходе в access.no spanning-tree vlan 1). Пусти один broadcast (пинг на несуществующий адрес)
в Simulation-режиме — и смотри, как кадр бесконечно ходит по кольцу, размножаясь.
Потом включи STP обратно и увидь, как один порт станет оранжевым (blocked) — кольцо
разорвано логически. Всё, ты видел шторм и его лекарство своими глазами.13. Словарик урока
| Термин | По-английски | Смысл в одну строку |
|---|---|---|
| VLAN | virtual LAN, 802.1Q | логическая L2-сеть внутри физической; отдельный broadcast-домен на каждый VID |
| Тег | 802.1Q tag | 4 байта в кадре: 12 бит VID (до 4094 сетей) + 3 бита приоритета (CoS) |
| Порт доступа | access port | порт одного VLAN, кадры ходят без тега — для конечных устройств |
| Магистральный порт | trunk port | несёт много VLAN, кадры с тегами — между коммутаторами и к роутеру |
| Нетегированный VLAN | native VLAN | VLAN без тега на trunk; несовпадение сторон = тихая утечка кадров между сетями |
| SVI | switched virtual interface | L3-интерфейс VLAN на коммутаторе (interface vlan 10) — современный inter-VLAN routing |
| Роутер-на-палочке | router-on-a-stick | один физический линк, сабинтерфейсы с тегами — старая школа inter-VLAN |
| Петля | L2 loop | кольцо в топологии; у кадра нет TTL — трафик размножается до смерти сети |
| Широковещательный шторм | broadcast storm | лавина размноженных петлёй кадров: CPU 100%, сеть мертва за секунды |
| STP / RSTP | spanning tree protocol | протокол, логически блокирующий избыточные линки; RSTP сходится за ~6 с |
| Корневой мост | root bridge | «центр» STP-дерева: выбирается по наименьшему priority+MAC; назначай его сам! |
| BPDU | bridge protocol data unit | служебные кадры STP; по ним строится дерево и ловятся чужие коммутаторы |
| Защита BPDU guard | — | BPDU на access-порту → порт в err-disabled; главный щит от принесённых свитчей |
| Portfast | — | access-порт минует состояния STP и работает сразу — иначе DHCP-клиенты ждут 30 с |
| Агрегация линков | LAG / EtherChannel / LACP | несколько линков как один логический: и резерв, и вся полоса (STP не блокирует) |
| Двойной тег | QinQ, 802.1ad | провайдер оборачивает клиентский тег своим: 4094×4094 ≈ 16 млн сетей |
14. Задачи на понимание
Задача 1. Два ПК воткнуты в один коммутатор, адреса 192.168.1.10/24 и 192.168.1.20/24, но порты в разных VLAN (10 и 20). Будет ли пинг и почему? Что покажет arp -a?
Пинга не будет, хотя подсеть одна. ARP-запрос — это broadcast, а broadcast
не пересекает границу VLAN: второй ПК его физически не услышит. arp -a покажет
запись INCOMPLETE/недоступную, пинг скажет «Destination host unreachable».
Мораль: VLAN изолирует ниже IP — никакая адресация не поможет без L3-маршрутизатора между VLAN.
Задача 2. На trunk между двумя коммутаторами native VLAN: слева 1, справа 99. Чем это опасно и как проявится?
Кадры VLAN 1 слева уходят в trunk без тега; справа бестеговые кадры зачисляются
в VLAN 99 — трафик тихо перетекает между сетями (и это вектор атаки VLAN hopping).
CDP выдаст «Native VLAN mismatch», STP может блокировать. Правило: native VLAN одинаковый
с обеих сторон, выделенный, без пользователей — а лучше тегировать всё
(vlan dot1q tag native).
Задача 3. Четыре коммутатора: A (priority 4096, MAC …aa), B (32768, …01), C (32768, …ff), D (8192, …bb). Кто root bridge? А если A выключится?
Root — A: сначала сравнивается priority, 4096 меньше всех. Если A умрёт — root станет D (8192). MAC решает только при равных priority (тогда между B и C выиграл бы B с меньшим …01). Вывод: root назначают руками через priority на core-коммутаторах, иначе root'ом станет случайная железка с древним MAC — и трафик поедет через неё.
Задача 4. Зачем на access-порту нужны ОБЕ команды: spanning-tree portfast И bpduguard enable? Что делает каждая и что будет, если оставить только portfast?
portfast — порт не ждёт 30 секунд STP-состояний (иначе ПК не успевает получить
DHCP при загрузке). Но portfast-порт всё ещё доверяет BPDU: воткнутый коммутатор
может встроиться в топологию или даже стать root. bpduguard закрывает дыру:
пришёл BPDU → порт в err-disabled. Вместе: быстрый старт для ПК + смерть для принесённых
свитчей. По одиночке каждая решает полдела.
Задача 5. После подключения нового коммутатора из коробки сеть «замерла» на полминуты, потом ожила, но стала медленнее. Ни петли, ни шторма. Что произошло?
Новый коммутатор с дефолтным priority 32768 и старым/маленьким MAC выиграл
выборы root bridge. STP перестроил дерево (пауза ~30–50 с у классического STP), и теперь
межэтажный трафик ходит через новую слабую железку — отсюда «медленнее». Диагностика:
show spanning-tree root. Лечение: на core — spanning-tree vlan 1-4094 priority
4096, на границе — root guard.
Задача 6. Провайдер даёт тебе EPL-услугу «прозрачный L2 между офисами» через QinQ. Твои кадры уже несут теги VLAN 10–30. Сколько тегов будет в кадре внутри сети провайдера и кто какой снимет?
Два тега: внутренний (C-tag, твой 10–30 — провайдер его не трогает и не видит) и внешний (S-tag, например 1547 — номер твоей услуги в сети провайдера). На входе PE-коммутатор провайдера надевает S-tag, на выходе к второму офису — снимает. Твои VLAN приезжают нетронутыми, как будто офисы соединили длинным патч-кордом. Подробный разбор EPL — в треке СПД, урок «EPL/EVPL».
- VLAN изолирует broadcast и L2-трафик. Один свитч = N логических подсетей.
- Тег 802.1Q = 4 байта между Src MAC и EtherType. VID — 12 бит (4096 максимум).
- Access — без тега, один VLAN. Trunk — с тегами, много VLAN.
- Native VLAN на trunk → кадры без тега. Делать неиспользуемым ради безопасности.
- Между VLAN — всегда L3. На L3-свитче через SVI, в старой школе — router-on-a-stick.
- Без STP петля = broadcast storm = смерть сети за секунды. Ethernet не имеет TTL!
- STP блокирует избыточные линки. RSTP — современная замена, сходимость ~6с вместо 50с.
- На access-портах:
portfast + bpduguard. На trunk:root guard. - LAG (LACP) — альтернатива STP, чтобы оба линка работали параллельно.
- QinQ — двойной тег для провайдеров. 16M клиентских сетей.
- QinQ добавляет 4 байта — расширь допустимый размер кадра на всём пути услуги.
15. Источники
- Junos OS: Configuring Q-in-Q Tunneling and VLAN Translation — официальная документация Juniper: 4 байта тега S-VLAN и два допустимых способа это учесть (уменьшить MTU на access-линках минимум на 4 байта либо увеличить его на trunk-линке); значение по умолчанию, от которого ведётся отсчёт
- RFC 9542 — реестр значений EtherType и упоминание C-Tag как носителя клиентского VLAN и приоритета
Ты нарезал сеть на VLAN — и у тебя появились изолированные broadcast-домены: бухгалтерия, разработка, телефония, гости. Но каждому домену теперь нужна своя IP-подсеть, и кто-то должен решить: сколько адресов выделить каждой, как их нарезать без пересечений и оставить запас на рост. Это ремесло следующего модуля — IP-адресация и подсети: маски, CIDR, VLSM и расчёты, которые сетевик делает в уме. Именно там VLAN 10 получит свои 10.0.10.0/24.