NetLab Academy

Сетевые лаборатории в браузере

Войти Начать бесплатно

Теория: Ethernet и коммутация L2

Кадры Ethernet, MAC-таблицы коммутаторов, домены коллизий и широковещания. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.

Почему коммутатор победил хаб

Раньше для объединения компьютеров в сеть использовали хаб — устройство физического уровня, которое просто повторяет электрический сигнал из одного порта во все остальные, без какого-либо понимания, что это за сигнал и кому он адресован. Все устройства за хабом сидели в одном общем домене коллизий, а значит, действовало правило CSMA/CD (Carrier Sense Multiple Access with Collision Detection): перед отправкой устройство слушало провод, и если он был свободен — передавало, а если две карты начинали говорить одновременно — происходила коллизия, обе передачи прерывались, и обе стороны ждали случайную паузу перед повторной попыткой. При росте числа устройств в сегменте коллизии множились почти экспоненциально, и эффективная пропускная способность падала задолго до того, как физический канал реально оказывался занят.

Коммутатор решает эту проблему кардинально: вместо повторения сигнала всем он разбирает кадр и решает, в какой конкретно порт его отправить. У каждого порта коммутатора свой собственный домен коллизий (фактически — на современных full-duplex линках коллизий не бывает вообще, потому что передача и приём идут по разным физическим парам проводов одновременно). Поэтому переход с хаба на коммутатор для сети из десятков машин — это не «было плохо, стало чуть лучше», а буквально переход из мира с постоянными коллизиями в мир, где их нет в принципе.

Анатомия кадра Ethernet

Перед самим кадром на проводе идёт преамбула — 7 байт чередующихся 1 и 0, за которыми следует 1 байт SFD (Start Frame Delimiter) — это сигнал «внимание, дальше начинается настоящий кадр», нужный для синхронизации приёмника по времени. Сам кадр устроен так: 6 байт MAC-адрес получателя, 6 байт MAC-адрес отправителя, 2 байта поле EtherType (какой протокол лежит внутри — например 0x0800 для IPv4 или 0x0806 для ARP), дальше сами данные (от 46 до 1500 байт), и в конце 4 байта FCS (Frame Check Sequence) — контрольная сумма по алгоритму CRC-32, которая позволяет получателю проверить, не повредился ли кадр в пути, и если контрольная сумма не совпала — молча выбросить кадр без какого-либо уведомления отправителя (на канальном уровне нет механизма переотправки, это забота более высоких уровней, например TCP).

У кадра есть жёсткие границы размера: минимум 64 байта (если данных меньше, они дополняются нулями — это называется padding, и нужно, чтобы коллизию успевали обнаружить до окончания передачи кадра даже в самой большой сети), максимум 1518 байт с учётом заголовка и FCS при стандартном MTU 1500. Кадры меньше минимума называют runt, больше максимума — giant (или jabber, если ещё и с битой контрольной суммой) — оба вида считаются признаком проблем на линии и видны в счётчиках ошибок интерфейса.
Кадр Ethernet по байтам
серым — то, что не считается размером кадра 1518 байт
Преамбула7 Б
SFD1 Б
MAC получателя6 Б
MAC отправителя6 Б
EtherType2 Б
Данные1500 Б
FCS4 Б
Ширина блоков не в масштабе: поле данных в реальности шире всех заголовков вместе взятых в сотню раз, и в масштабе их было бы не разглядеть.

MAC-адрес: из чего он состоит

MAC-адрес — 48 бит, обычно записывается как 6 байт в hex через двоеточие или дефис, например 00:1A:2B:3C:4D:5E. Первые 3 байта — OUI (Organizationally Unique Identifier), который IEEE продаёт производителям оборудования блоками; по OUI можно довольно точно узнать вендора сетевой карты, даже не зная модели устройства. Оставшиеся 3 байта производитель присваивает сам, гарантируя уникальность внутри своего диапазона.

Есть два служебных бита, которые редко вспоминают, но они реально влияют на поведение: младший бит первого байта — это флаг unicast/multicast (если он выставлен в 1, адрес означает группу получателей, а не одно устройство), а следующий бит — флаг U/L (universal/local): 0 означает «адрес зашит производителем», 1 — «адрес назначен локально». Современные смартфоны при подключении к Wi-Fi часто генерируют случайный MAC-адрес с выставленным битом U/L специально для приватности — чтобы вас не отслеживали по одному и тому же физическому идентификатору при перемещении между разными точками доступа.

Домены коллизий и широковещания

Домен коллизий — сегмент сети, где в принципе может произойти коллизия. На хабе таким доменом был весь сегмент целиком; на коммутаторе — каждый порт по отдельности, а на full-duplex линках, как уже говорилось, коллизий не бывает вовсе.

Домен широковещания (broadcast domain) — куда более живучая проблема. Это набор устройств, которые получат широковещательный кадр (адрес получателя FF:FF:FF:FF:FF:FF). Коммутатор широковещание не блокирует — он добросовестно пересылает его на все порты, кроме входного. Разбить домен широковещания способен только маршрутизатор или граница VLAN (тема следующего урока) — никакими настройками самого коммутатора этого не добиться, в этом и состоит главное архитектурное ограничение плоской L2-сети без VLAN: чем она больше, тем сильнее каждое устройство страдает от широковещательного шума всех остальных.
Что чинит коммутатор, а что — нет
Хаб один провод на всех
домен широковещания — один
домен коллизий — тоже один, на всех сразу
Хаб AB CD
Коммутатор половину проблемы решил
домен широковещания — по-прежнему ОДИН
Коммутатор
порт 1
A
порт 2
B
порт 3
C
порт 4
D
Маршрутизатор или граница VLAN вот теперь разорвано
домен широковещания №1
Коммутатор
AB
Маршрутизатор
домен широковещания №2
Коммутатор
CD
Цвета не случайны: зелёный — канальный уровень, жёлтый — сетевой. Жёлтой рамкой обведено ровно то, с чем канальный уровень не справляется.

Как коммутатор учится, заливает и забывает

Коммутатор не настраивается заранее под конкретную топологию — он строит карту сети сам, и делает это на удивление просто. Получив кадр на каком-то порту, он смотрит на MAC-адрес отправителя и запоминает: «этот MAC живёт за этим портом» — записывает это в MAC address table (она же CAM-таблица, Content Addressable Memory). Это и называется обучением (learning).

Дальше, чтобы решить, куда отправить кадр, коммутатор смотрит уже на MAC-адрес получателя. Если такой адрес уже есть в таблице — кадр отправляется ровно в один нужный порт. Если адреса в таблице нет (например, устройство ещё не успело ничего отправить, и коммутатор о нём не знает) — кадр заливается (flooding) на все порты, кроме входного, точно как широковещание, в надежде, что получатель сам отзовётся, и тогда коммутатор узнает его реальный порт из ответного кадра.

Записи в таблице не висят вечно — у каждой есть таймер устаревания (aging time), обычно 300 секунд по умолчанию: если за это время с MAC-адреса не пришло ни одного кадра, запись удаляется, и в следующий раз для него снова понадобится flooding. У таблицы есть и физический лимит размера (порядка нескольких тысяч или десятков тысяч записей в зависимости от модели коммутатора) — и именно на этом построена атака MAC flooding: злоумышленник засыпает коммутатор кадрами с тысячами случайных поддельных MAC-адресов, таблица переполняется, и коммутатор от беспомощности начинает заливать весь трафик на все порты подряд — фактически превращаясь обратно в хаб, что позволяет атакующему подслушивать чужой трафик.
Коммутатор учится, заливает и забывает
A00:1A:2B:3C:4D:01
B00:1A:2B:3C:4D:02
C00:1A:2B:3C:4D:03
D00:1A:2B:3C:4D:04
MAC-адресПортБездействует
Три колонки — те же, что печатает настоящий коммутатор.

Unicast, broadcast, multicast

Unicast — кадр для одного конкретного получателя, это подавляющее большинство трафика в обычной сети. Broadcast — кадр для всех в сегменте сразу: классический пример — ARP-запрос «кто владеет таким IP», который рассылается широковещательно именно потому, что отправитель ещё не знает MAC получателя и не может отправить кадр адресно. Multicast — кадр для определённой группы заинтересованных получателей, не всех и не одного: например, потоковое видео для тех, кто подписался на конкретный канал, или служебные пакеты протоколов маршрутизации.

Наивная реализация multicast на коммутаторе ничем не отличалась бы от broadcast — рассылка всем подряд, даже тем, кому не интересно. Поэтому существует IGMP snooping: коммутатор слушает служебные IGMP-сообщения, которыми устройства сообщают «я хочу получать вот этот multicast-поток», и затем отправляет multicast-трафик только в порты, где реально есть подписчики, а не заливает его повсюду.

Duplex и автопереговоры

Half-duplex — передача и приём не могут происходить одновременно (характерно для старых хабов, где возможны коллизии). Full-duplex — передача и приём идут одновременно по разным физическим парам проводов, и коллизий не бывает в принципе, потому что нет общей среды, за которую нужно конкурировать. Современные коммутаторы и сетевые карты по умолчанию работают в full-duplex и согласовывают скорость и режим автоматически через протокол auto-negotiation — стороны линка обмениваются короткими импульсами и договариваются о максимально общей для обоих скорости и duplex-режиме.

Duplex mismatch — ситуация, когда одна сторона зафиксирована вручную на full-duplex, а другая осталась в режиме auto-negotiation (или у обеих ручные настройки разъехались) — классическая причина крайне неприятных, трудноуловимых проблем: интерфейс физически «работает», линк горит зелёным, но передача мучительно медленная и нестабильная, потому что половина стороны пытается работать без коллизий, а другая ожидает их и считает каждый нормальный одновременный обмен данными коллизией. Внешне это выглядит как «сеть медленная», а не как «сеть не работает», что делает диагностику дольше: ping обычно проходит нормально, а вот передача большого файла мучительно тормозит.

Как проверять / частые ошибки

show mac address-table — какие MAC-адреса коммутатор видит сейчас и за каким портом. show interfaces — счётчики ошибок (CRC errors, runts, giants), drops, текущий duplex-режим и скорость порта — первое место, куда стоит смотреть при подозрении на физическую проблему или duplex mismatch.

Частые проблемы: duplex mismatch (см. выше); физическая петля между коммутаторами без защиты STP, которая приводит к broadcast storm — широковещательные кадры начинают бесконечно множиться по петле, забивая всю полосу за считаные секунды; неправильно спроектированный, слишком большой плоский broadcast domain без разбиения на VLAN, из-за чего обычный широковещательный шум от сотен устройств заметно нагружает каждое отдельное устройство в сети.

Команды настройки — шпаргалка

Базовые команды для работы с портами и MAC-таблицей (Cisco-style синтаксис, общепринятый ориентир для коммутаторов):
# войти в настройку порта
interface GigabitEthernet0/1    # после типа идёт номер вида «слот/порт».
                                #   Всё, что дальше, относится к нему одному

# скорость и дуплекс вручную — только если автопереговоры подводят
 duplex full                    # full — приём и передача одновременно;
                                #   есть half и auto
 speed 100                      # мегабиты в секунду; в норме оставляют auto

# ограничить порт по MAC-адресам
 switchport port-security       # включить механизм. Лимитов сама не задаёт
 switchport port-security maximum 2
                                # сколько разных MAC порт согласен видеть
                                #   одновременно. Защита от MAC flooding и от
                                #   подключения чужого коммутатора
 switchport port-security violation restrict
                                # что делать при превышении: restrict отбросит
                                #   и запишет в журнал, shutdown выключит порт,
                                #   protect отбросит молча

# MAC-таблица
show mac address-table          # вся выученная таблица
clear mac address-table dynamic # стереть только выученное; слово dynamic важно —
                                #   статические записи оно не тронет
Контрольные вопросы

Дальше — лабораторная работа «Анатомия кадра Ethernet»

Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.

Теория прочитана. Дальше — руками.

Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.

Начать бесплатно → бета открыта, доступ бесплатный