Домашняя сеть · Ethernet · L2 · STP/RSTP

Как работает Ethernet-коммутатор: MAC-таблица, flooding, STP и сетевые петли

Почему обычный switch не отправляет каждый кадр во все порты, как он обучается MAC-адресам, что происходит с unknown unicast и broadcast, зачем нужна FDB, почему Ethernet-петля способна положить всю сеть и как STP/RSTP оставляет резервный линк без L2-цикла.

MAC / FDB Learning Unknown Unicast Flooding STP / RSTP L2 Loop
Switch учится по source MAC

Получая Ethernet-кадр, коммутатор запоминает, с какого порта и VLAN пришёл source MAC.

Пересылка идёт по destination MAC

Если адрес известен, кадр отправляется только в нужный forwarding-порт. Неизвестный unicast flood-ится в пределах VLAN.

STP защищает от L2-петель

Избыточные пути полезны, но без loop prevention могут вызвать broadcast storm, MAC flapping и массовые сбои.

Что делает Ethernet-коммутатор

L2-коммутатор соединяет устройства внутри канального домена и пересылает Ethernet-кадры между портами на основе MAC-адресов. Он не обязан отправлять каждый кадр во все порты, как это делал классический hub.

Основная логика проста:

кадр пришёл→изучить source MAC→найти destination MAC→forward / filter / flood

В обычной L2-пересылке коммутатор работает прежде всего с Ethernet header и VLAN-контекстом. IP-адрес нужен уже L3-маршрутизации. Поэтому один и тот же switch может передавать IPv4, IPv6, ARP и другие Ethernet payload без необходимости «понимать интернет» как маршрутизатор.

Место коммутатора в сетевом стеке разобрано в статье Модель OSI и TCP/IP.

Hub, switch и router - это разные устройства

УстройствоОсновная задачаПо чему принимает решение
HubПовторяет сигнал на другие портыНе строит MAC forwarding table
L2 switchПересылает Ethernet-кадры внутри L2-доменаDestination MAC + VLAN/FDB
L3 switchМожет и коммутировать, и маршрутизироватьMAC на L2, IP routing table на L3
RouterМаршрутизирует между IP-сетямиDestination IP и routing table
Домашний Wi-Fi-роутер совмещает несколько ролей. В одном корпусе могут находиться router, firewall, NAT, DHCP/DNS proxy, Wi-Fi access point и Ethernet switch.

Какие поля кадра важны коммутатору

Для базового L2 forwarding особенно важны source MAC и destination MAC. При VLAN-схеме учитывается также принадлежность кадра к VLAN.

Preamble / SFD Destination MAC Source MAC 802.1Q tag при наличии EtherType / Length Payload FCS

Source MAC сообщает, откуда кадр пришёл. Destination MAC говорит, кому он предназначен. Коммутатор использует source для обучения forwarding database, а destination - для выбора исходящего порта.

MAC-адрес не является маршрутом через интернет.

Он имеет смысл на конкретном L2-участке. После маршрутизатора Ethernet header формируется заново для следующего канального сегмента.

MAC-таблица, FDB и CAM table

Таблицу, по которой bridge/switch принимает L2 forwarding decisions, корректно называть Filtering Database, FDB. В документации оборудования также широко используется название MAC address table.

Термин CAM table часто применяют как бытовой синоним MAC-table, потому что аппаратные коммутаторы традиционно используют content-addressable memory или похожие аппаратные структуры для быстрых lookup. Но FDB - это логическая таблица forwarding, а CAM - конкретный способ реализации памяти. Поэтому эти слова не всегда полностью взаимозаменяемы.

VLANMACPortТип
1000:11:22:33:44:55Port 3dynamic
1000:AA:BB:CC:DD:EEPort 7dynamic
2010:20:30:40:50:60Port 12dynamic

В managed switch таблицу обычно можно посмотреть командой или через web-интерфейс. Название функции зависит от производителя: MAC Address Table, FDB, Forwarding Database, Bridge Hosts и т.п.

Как коммутатор обучается MAC-адресам

Когда кадр приходит на порт, switch анализирует source MAC. Если такого адреса ещё нет в таблице или он раньше был привязан к другому порту, запись создаётся или обновляется для текущего порта и VLAN.

01
ПК A отправляет кадр

Source AA:AA:AA:AA:AA:AA, destination BB:BB:BB:BB:BB:BB.

02
Кадр приходит в Port 1

Switch запоминает: AA:AA:AA:AA:AA:AA → Port 1.

03
Switch ищет destination B

Если B пока неизвестен, выполняется unknown-unicast flooding.

04
ПК B отвечает

Ответ приходит, например, через Port 5. Теперь switch учит BB:BB:BB:BB:BB:BB → Port 5.

05
Следующие кадры идут точечно

Известный unicast между A и B больше не нужно flood-ить по всем forwarding-портам VLAN.

Switch учится по source MAC, а не по destination MAC. Destination используется для lookup и решения, куда пересылать уже полученный кадр.

Что происходит, когда destination MAC уже известен

Если FDB содержит destination MAC и этот MAC связан с другим forwarding-портом, кадр отправляется только в этот порт.

PC A
AA:AA
Port 1
SWITCH
BB:BB → Port 5
Port 5
PC B
BB:BB

Если destination MAC найден на том же порту, откуда кадр пришёл, bridge не должен отправлять его обратно в этот сегмент. Это называют filtering.

Что такое flooding неизвестного unicast

Если destination MAC отсутствует в FDB, switch пока не знает конкретный исходящий порт. Такой unknown unicast обычно реплицируется на остальные forwarding-порты соответствующего VLAN, кроме входного.

P1
IN
P2
flood
P3
flood
P4
flood
P5
не forwarding

Это нормальная часть Ethernet switching. Проблемой flooding становится тогда, когда он происходит массово и постоянно, например из-за неправильного aging, асимметрии, переполнения таблицы или L2-loop.

Актуальная документация Cisco описывает именно такую логику: известный destination отправляется на конкретный порт, неизвестный destination flood-ится внутри того же VLAN.

Чем broadcast отличается от unknown unicast

Ethernet broadcast имеет destination MAC FF:FF:FF:FF:FF:FF. Он предназначен всем участникам broadcast domain и обычно распространяется на все подходящие forwarding-порты VLAN, кроме входного.

Unknown unicast

Получатель конкретный, но switch пока не знает, где находится его MAC.

Broadcast

Кадр изначально адресован всем узлам данного L2 broadcast domain.

ARP Request в IPv4 является знакомым примером Ethernet broadcast. После ARP Request/Reply switch одновременно получает возможность обучиться MAC-адресам участников.

ARP подробно разобран в материале ARP, IP и MAC: ARP-кэш, конфликты IP и Gratuitous ARP.

Multicast нельзя объяснять только правилом «flood во все порты»

Без дополнительной информации L2-switch может распространять multicast внутри VLAN шире, чем реально требуется получателям. Но managed switches часто используют IGMP/MLD snooping и формируют multicast forwarding state, чтобы отправлять поток только туда, где есть заинтересованные receivers.

Unknown multicast и broadcast - не одно и то же.

Поведение multicast зависит от возможностей switch, snooping, multicast router ports и конкретной конфигурации. Поэтому правило «любой multicast всегда идёт всем» слишком грубое.

Multicast и IGMP имеет смысл вынести в отдельный материал, если после завершения этого кластера останется подтверждённый поисковый интент.

Почему динамические MAC-записи не хранятся вечно

Устройства перемещаются между портами, выключаются, меняют topology. Поэтому dynamic FDB entries имеют aging timer. Если source MAC долго не наблюдается на данном порту, запись удаляется и при необходимости будет изучена заново.

Слишком короткий aging

Записи удаляются слишком часто, растёт relearning и unknown-unicast flooding.

Слишком длинный aging

Устаревшие записи дольше остаются в FDB после реального перемещения endpoint.

Значение 300 секунд является распространённым default в ряде реализаций, включая Linux bridge и многие Cisco switches, но считать его универсальным стандартным значением для любого оборудования нельзя.

Что такое MAC flapping

MAC flapping означает, что один MAC быстро изучается то на одном, то на другом порту. Иногда это объяснимо нормальной topology или virtualized environment, но в обычной домашней/офисной LAN частое flapping часто указывает на петлю, неправильную агрегацию или некорректное подключение.

MAC AA:BB:CC:DD:EE:FF Port 5 → Port 8 → Port 5 → Port 8 ...

При loop FDB становится нестабильной: switch видит копии кадров с одинаковыми source MAC с разных направлений и постоянно меняет запись. Cisco прямо указывает MAC flapping как возможный признак loop или misconfiguration.

MAC-таблица работает в контексте VLAN

Managed switch не должен смешивать одинаковый L2 forwarding domain разных VLAN. На практике MAC forwarding entry обычно рассматривается вместе с VLAN/FID-контекстом.

VLANMACPort
10AA:AA:AA:AA:AA:AAPort 2
20AA:AA:AA:AA:AA:AAPort 9

Это разные forwarding contexts. Flooding также ограничивается соответствующим VLAN, а не автоматически всей физической коробкой.

Tagged/untagged ports, access/trunk и разделение камер, IoT и гостей уже подробно разобраны в статье VLAN простыми словами для дома и малого офиса.

Что происходит с MAC learning на trunk

Trunk переносит несколько VLAN между сетевыми устройствами. Поэтому за одним физическим uplink switch может изучить десятки или тысячи MAC из разных VLAN.

Access ports→Switch A⇄ trunk VLAN 10/20/30 ⇄Switch B→Access ports

Если на uplink видно много MAC, это само по себе нормально. Важно, соответствуют ли они ожидаемым VLAN и topology.

Почему Ethernet-петля так опасна

Представим два коммутатора, соединённые двумя обычными независимыми Ethernet-линками без STP или корректной link aggregation.

SWITCH A
SWITCH B

Broadcast или flooded frame может пройти A → B по одному линку, вернуться B → A по другому, снова размножиться и продолжить циркуляцию.

Почему кадр не «заканчивается по TTL»

Обычный Ethernet L2 frame не имеет IP TTL/Hop Limit, который маршрутизатор уменьшал бы на каждом L3-hop. Поэтому прозрачная L2-петля не обладает встроенным IP-подобным счётчиком, который гарантированно остановит такой кадр.

Последствия

Broadcast storm

Копии broadcast/flooded traffic быстро занимают пропускную способность.

MAC flapping

Один source MAC постоянно появляется с разных портов.

Duplicate frames

Endpoint может получать несколько копий одного трафика.

Control-plane overload

Коммутатору становится сложнее обрабатывать STP и управление.

В актуальном руководстве Cisco по troubleshooting L2 loops broadcast storm рассматривается как один из типичных результатов петли, а повышенные interface input rates рекомендуются как важный диагностический признак.

Что делает Spanning Tree Protocol

STP строит loop-free active topology в bridged Ethernet network. Избыточные физические пути могут существовать, но часть из них не участвует в обычной forwarding topology до тех пор, пока основной путь работает.

несколько физических путей→STP/RSTP topology calculation→один loop-free forwarding tree

Switches обмениваются Bridge Protocol Data Units, BPDUs, и используют priority vectors, path cost и идентификаторы для выбора root bridge и ролей портов.

STP не «выключает лишний кабель навсегда». Резервный путь остаётся частью topology knowledge и может стать активным после изменения сети.

Зачем STP выбирает root bridge

Root bridge является логической точкой отсчёта spanning tree. Остальные bridges выбирают лучший путь к root по path cost и BPDU-information.

ROOT BRIDGE
SWITCH B
SWITCH C

В управляемой сети root лучше выбирать осознанно. Если priority нигде не планируется, root может стать тот switch, у которого просто выиграл Bridge ID, а это не всегда оптимальная topology.

RSTP и классический STP

Rapid Spanning Tree Protocol был разработан для более быстрой convergence при изменениях topology. Исторически он появился как IEEE 802.1w и позже был интегрирован в стандарты bridging IEEE 802.1.

Для практической сети главное отличие не в названии стандарта, а в более быстрой и явной работе с port roles и rapid transitions.

Классический STP

Историческая модель с blocking, listening, learning и forwarding transitions.

RSTP

Использует состояния discarding, learning и forwarding и дополнительные port roles для быстрого резервирования.

Cisco в актуальной документации описывает STP/RSTP как механизм, который назначает роли портам, оставляет redundant data paths в standby и активирует резерв при отказе основного пути.

Root, designated, alternate и backup port

РольСмыслОбычное состояние в стабильной topology
Root portЛучший путь non-root bridge к root bridgeForwarding
Designated portЛучший forwarding port для конкретного LAN segmentForwarding
Alternate portАльтернативный путь к rootDiscarding
Backup portРезерв для designated path на том же shared segmentDiscarding

RSTP разделяет port role и port state. Поэтому понимать только слово «blocked» недостаточно: важно, почему именно этот порт не forwarding и какую роль он выполняет.

Discarding, learning и forwarding

Discarding

Обычные data frames не forwarding, dynamic MAC learning для этого состояния не выполняется как в forwarding path.

Learning

Порт уже учит source MAC, но ещё не пересылает обычный data traffic как forwarding port.

Forwarding

Порт участвует в data forwarding и MAC learning.

Именно эти три состояния RSTP сопоставляет с более старой STP-моделью; disabled, blocking и listening старой модели объединены в discarding с точки зрения RSTP states.

Что такое edge port и почему его нельзя назначать вслепую

Edge port предназначен для подключения конечного устройства, где за портом не ожидается другой bridge, способный создать L2-loop. Такое определение позволяет RSTP быстрее перевести endpoint-port в рабочее состояние.

Хороший кандидат на edge

ПК, одиночная камера, принтер, телевизор, сервер с обычным single-link подключением.

Не назначать механически

Uplink на другой switch, bridge, unmanaged switch с возможной петлёй или неизвестную инфраструктуру.

В UniFi Network уже встречается Auto STP Edge, но автоматизация не отменяет понимание uplinks и topology. Это отдельно отмечено в вашем материале про UniFi Network 10.5.67.

BPDU Guard, Root Guard и Loop Guard - не одно и то же

У разных производителей названия и детали реализации могут отличаться, но смысл механизмов различается:

BPDU Guard

Защищает edge/access-порт от неожиданного появления bridge/STP-соседа. Типичная реакция - отключение или блокировка порта.

Root Guard

Не позволяет порту привести к неожиданной смене root bridge из-за superior BPDU.

Loop Guard

Защищает определённые STP-сценарии, когда ожидаемые BPDUs перестают приходить и blocked path мог бы ошибочно стать forwarding.

UDLD

Отдельный механизм некоторых платформ для обнаружения односторонних link-проблем. Это не замена STP.

Не включайте все «защитные галочки» на всех портах одинаково.

Edge, uplink, LAG и provider-facing ports выполняют разные роли. Неверный guard-механизм способен сам отключить нужный uplink.

LACP не заменяет STP, но правильно объединяет параллельные линки

Если между двумя switches нужны два и более физических линка одновременно, их нельзя просто соединить параллельно и надеяться, что всё заработает. Один из правильных вариантов - собрать их в единый Link Aggregation Group, LAG.

SWITCH A⇄Logical LAG: Link1 + Link2⇄SWITCH B

LACP является протоколом управления link aggregation в рамках IEEE 802.1AX. Для STP корректно сформированный aggregate обычно выглядит как один логический link, а распределение flows внутри LAG решает агрегатор.

LACP не делает один TCP-сеанс автоматически в два раза быстрее. Hashing обычно закрепляет конкретный flow за одним member link. Aggregate увеличивает суммарную пропускную способность для нескольких flows и даёт link redundancy.

Практический контекст 2.5G, 10G и агрегации уже разобран в статье 2.5G или 10G Ethernet для дома, NAS и Wi-Fi 7.

LLDP помогает понять topology, но не пересылает пользовательский трафик

LLDP сообщает соседям информацию об устройстве и порте: system name, port ID, capabilities и другие TLV. Это помогает понять, какой switch, access point, IP-телефон или другое устройство подключено к порту.

Но LLDP не строит FDB вместо switch и не является STP. Это discovery-протокол.

Практическая диагностика уже есть в материале LLDP и LLDP-MED: как узнать, что подключено к порту коммутатора.

PoE и Ethernet switching работают рядом, но решают разные задачи

PoE-коммутатор одновременно передаёт данные Ethernet и питание совместимому Powered Device. При этом MAC learning, VLAN, STP и forwarding остаются сетевыми функциями, а PoE budget, class и power negotiation относятся к питанию.

Link есть, но устройство не работает - не всегда проблема switching. У PoE-камеры или access point отдельно проверяют питание, power budget, кабель, negotiated speed, VLAN, DHCP и только затем L2/L3 forwarding.

Что умеет обычный неуправляемый коммутатор

Даже простой unmanaged switch обычно выполняет MAC learning, known-unicast forwarding, flooding и aging автоматически. Для этого не нужен web-интерфейс.

Но пользователь часто не может:

  • посмотреть FDB;
  • увидеть STP topology;
  • создать VLAN;
  • управлять multicast snooping;
  • настроить LACP;
  • включить BPDU Guard/Loop Guard;
  • посмотреть port counters и errors;
  • ограничить storm control.

Поддержка STP/RSTP на unmanaged-моделях зависит от конкретного устройства. Нельзя исходить из предположения, что любой «маленький switch» корректно участвует в spanning tree.

Когда управляемый switch действительно нужен

Managed switch оправдан не ради красивой панели, а когда нужны VLAN, контролируемые uplinks, STP/RSTP, PoE monitoring, LLDP, LACP, multicast control, port statistics или централизованная диагностика.

СценарийЗачем management
Камеры + IoT + Main + GuestVLAN и segmentation
Несколько switchesSTP/RSTP, uplink diagnostics, LLDP
NAS / сервер2.5/10G, LACP по задаче, counters
PoE cameras / APPower budget и per-port monitoring
IPTV / multicastIGMP snooping и multicast visibility

Как диагностировать L2-проблему по шагам

01

Нарисовать физическую topology. Switches, uplinks, LAG, AP, камеры, NAS, роутеры.

02

Проверить Link и negotiated speed. Не начинать с STP, если порт физически flap-ает.

03

Проверить VLAN. PVID/access VLAN и allowed/tagged VLAN на uplinks.

04

Посмотреть FDB. На каком порту реально изучен MAC нужного устройства.

05

Искать MAC flapping. Один MAC быстро скачет между портами - важный сигнал.

06

Проверить STP root и roles. Кто root, какие ports root/designated/alternate.

07

Проверить counters. Broadcast, multicast, discards, errors, input/output rate.

08

Проверить LAG. Все member links должны одинаково восприниматься с обеих сторон.

09

Проверить LLDP. Соответствует ли реальный сосед схеме.

10

Только потом менять topology. Сначала сохранить evidence, иначе loop может исчезнуть вместе с причиной.

Как выглядит сетевой L2-loop на практике

СимптомЧто может происходить
Внезапно тормозит вся LANBroadcast/flood storm занимает links и CPU
Ping то есть, то нетCongestion, duplicate frames, unstable forwarding
MAC постоянно меняет portMAC flapping из-за loop или ошибочного LAG
STP topology changes идут сериямиПорт flap-ает или topology нестабильна
Switch CPU резко высокийControl-plane может быть перегружен storm/loop
После подключения второго кабеля всё «легло»Создан L2-loop без STP/LAG

Как действовать, если сеть уже попала в broadcast storm

Если сеть практически недоступна, главная задача - остановить цикл. Но перед хаотичным отключением всех кабелей полезно хотя бы зафиксировать, какие uplinks показывают аномально высокий traffic и где MAC flapping.

На удалённом объекте не меняйте STP/root/uplink вслепую.

Можно одновременно потерять management access и резервный путь. Для критичной сети изменения делают с recovery-plan или локальным человеком на объекте.

После локализации loop нужно восстановить правильную topology: один физический link, корректный LAG или redundant links под STP/RSTP, а не просто оставить отключённый кабель без понимания причины.

Что можно увидеть с обычного компьютера

ПК не видит FDB управляемого switch напрямую, но может дать полезные косвенные данные.

getmac /v arp -a ipconfig /all ping адрес_устройства

arp -a показывает ARP/neighbor information хоста, а не MAC table switch. Это принципиально разные таблицы.

ARP table ≠ switch FDB. ARP сопоставляет IPv4 с MAC для L3-to-L2 delivery на host/router. FDB сопоставляет MAC с L2 port/VLAN внутри bridge.

Linux тоже умеет быть Ethernet bridge

Linux bridge реализует L2 bridging программно или совместно с hardware offload. В нём также есть FDB, MAC learning, aging, flooding controls, VLAN filtering и STP state.

bridge fdb show bridge link show bridge vlan show ip -d link show type bridge

Актуальная документация Linux Kernel отдельно описывает FDB learned entries, aging time, per-port learning, unicast flood и STP state, то есть логика программного bridge соответствует тем же фундаментальным понятиям.

Что чаще всего понимают неправильно

  • Считать, что switch знает IP каждого устройства для обычного L2 forwarding.
  • Считать ARP table и MAC/FDB одной таблицей.
  • Думать, что switch учится по destination MAC.
  • Считать unknown unicast ошибкой - ограниченный flooding нормален.
  • Считать любой multicast обычным broadcast.
  • Соединять два switches двумя независимыми кабелями без STP или LAG.
  • Отключать STP ради «уменьшения задержки».
  • Назначать все ports edge без понимания topology.
  • Считать LACP способом ускорить один TCP-flow в N раз.
  • Считать VLAN и STP взаимоисключающими функциями.
  • Игнорировать MAC flapping.
  • Сбрасывать switch до factory defaults вместо анализа FDB/STP/counters.

Как связать Ethernet switching с остальным кластером

На что опирается материал

IEEE 802.1Q

Bridges, VLAN-aware bridging и spanning tree mechanisms в современных bridged LAN.

IEEE 802.1D / 802.1w

Историческая база STP и появление Rapid Spanning Tree Protocol.

IEEE 802.1AX

Link Aggregation, включая LACP.

IEEE 802.3

Семейство стандартов Ethernet.

Linux Kernel Ethernet Bridging

FDB, learning, aging, flooding controls, VLAN filtering и STP state.

Cisco STP/MAC documentation

Практическая реализация MAC learning, unknown-unicast flooding, port roles и loop troubleshooting.

Частые вопросы про Ethernet-коммутаторы

Как switch понимает, в какой порт отправить кадр?

Он ищет destination MAC в своей FDB/MAC-table для соответствующего VLAN. Если адрес известен, кадр отправляется в нужный forwarding-port.

Как switch узнаёт MAC-адрес устройства?

Из source MAC входящих Ethernet-кадров. Он связывает source MAC с ingress port и VLAN.

Что происходит, если MAC получателя неизвестен?

Unknown unicast обычно flood-ится на другие подходящие forwarding-порты VLAN, кроме входного.

MAC table и ARP table - одно и то же?

Нет. FDB связывает MAC с switch-port/VLAN. ARP cache связывает IPv4 с MAC на host/router.

Что такое broadcast storm?

Это резкий массовый рост broadcast/flooded traffic, часто из-за L2-loop. Он способен занять bandwidth и перегрузить switches.

Почему два кабеля между коммутаторами могут положить сеть?

Если это два независимых L2 links без корректного STP или LAG, они образуют цикл, по которому broadcast/flooded frames могут циркулировать и размножаться.

Что делает STP?

Строит loop-free active topology и удерживает избыточные paths в standby/discarding состоянии до необходимости.

Чем RSTP отличается от STP?

RSTP рассчитан на более быструю convergence и использует явные port roles плюс состояния discarding, learning и forwarding.

Что такое root bridge?

Это логическая точка отсчёта spanning tree, относительно которой остальные bridges рассчитывают лучший path.

Что такое edge port?

Порт к конечному устройству, за которым не ожидается другой bridge. Его нельзя бездумно назначать на uplinks.

LACP защищает от петли?

Правильно настроенный LAG объединяет несколько физических links в один logical aggregate. Но LACP не заменяет STP для всей остальной topology.

Почему один LACP из двух гигабитных портов не даёт 2 Гбит/с одному TCP-сеансу?

Распределение обычно выполняется по hash от flow-параметров, поэтому один flow закрепляется за одним member link. Aggregate полезен для нескольких flows и redundancy.

Нужен ли managed switch дома?

Для простой сети не обязательно. Он становится полезным при VLAN, нескольких switches, PoE, STP/RSTP, LACP, multicast, LLDP и необходимости нормальной диагностики.

Когда проблема уже не в одном Ethernet-кабеле

Если в сети несколько switches, VLAN, PoE-камеры, NAS, Wi-Fi access points и резервные uplinks, диагностика должна учитывать физическую topology, FDB, STP roles, VLAN и counters, а не сводиться к перезагрузке роутера.

Для монтажа и настройки локальной сети в Туле и Тульской области можно посмотреть услугу настройки домашней сети.