На L1 у нас просто биты, бегущие по проводу. Чтобы из этого «потока бит» получились кадры
(frames) с адресацией, проверкой целостности и порядком — нужен канальный уровень.
В современном мире это почти всегда означает Ethernet. Всё остальное — Token Ring, FDDI, ATM —
давно ушло в музей.
Что узнаешь
Как устроен Ethernet-кадр (preamble, MAC, EtherType, payload, FCS)
Как читать MAC-адрес и что значат биты U/L, I/G
Чем hub отличается от bridge и от switch — и почему все ушли с hub'ов
Как свитч учит MAC-адреса (CAM-table learning)
Что делает ARP, и почему без него ничего не работает
MTU, jumbo frames, MSS — и почему это болит в реальной сети
Полнодуплекс, half-duplex, collision domain
1. Что такое Ethernet и почему он победил
Ethernet — это семейство стандартов IEEE 802.3. Придуман в 1973 Бобом Меткалфом в Xerox PARC,
в 1980-х вытеснил всех конкурентов (Token Ring, ARCnet) и сегодня живёт от 10 Мбит/с (древний 10BASE-T)
до 800 Гбит/с (современный 800GBASE).
Почему именно Ethernet? Простой, открытый, бесконечно масштабируется (тот же кадр работает и на 10М, и на 400G), цена единицы порта падает каждый год.
Эволюция скоростей Ethernet
От 10 Мбит/с до 400 Гбит/с — 40000-кратный рост за 45 лет. Кадр остался прежним.
2. Анатомия Ethernet-кадра
Кадр (frame) — это то, что реально летит по проводу. У него строгая структура из нескольких полей.
Понимать байтовое устройство кадра — must для любого, кто работает с tcpdump или Wireshark.
Структура кадра Ethernet II (DIX) — IEEE 802.3
Минимальная длина кадра — 64 байта (с FCS), максимальная — 1518. Меньше — дополняется padding. Больше — нужен Jumbo frame.
Поля по порядку
Preamble (7 байт) — последовательность 10101010 × 7. Нужна, чтобы приёмник
вошёл в синхронизацию с битовым потоком отправителя. Не считается частью «полезного» кадра.
Destination MAC (6 байт) — кому. Может быть unicast, multicast или broadcast (FF:FF:FF:FF:FF:FF).
Source MAC (6 байт) — от кого. Всегда unicast.
EtherType (2 байта) — какой протокол лежит внутри payload. По нему ОС/свитч узнаёт, что
делать с содержимым.
Payload (46–1500 байт) — собственно данные (IP-пакет, ARP-запрос и т.д.). Если данных меньше 46 байт — добивается padding'ом до минимума.
FCS (4 байта) — Frame Check Sequence, контрольная сумма CRC32. Если не совпала на приёме — кадр дропается.
Откуда минимум 64 байта? Это «time-slot»-наследие старого CSMA/CD half-duplex Ethernet:
отправителю нужно успеть детектить коллизию до окончания передачи. На 10 Мбит/с time-slot = 51.2 мкс = 512 бит = 64 байта.
Сейчас полнодуплексный Ethernet коллизий не имеет, но минимум так и остался.
3. MAC-адреса — глубоко
MAC-адрес (Media Access Control) — это уникальный 48-битный идентификатор сетевой карты. Записывается
шестью парами шестнадцатеричных цифр через двоеточие или дефис: 00:1B:44:11:3A:B7.
Структура MAC-адреса (48 бит)
Чётность первого октета даёт мгновенный ответ на главные вопросы: кому шлём и кто такой.
Префикс OUI
Производитель
Префикс OUI
Производитель
00:50:56
VMware
00:0C:29
VMware ESXi
00:1B:21
Intel
00:25:90
Supermicro
00:50:E4
Apple
3C:5A:B4
Google
00:0D:3A
Microsoft (Azure)
52:54:00
QEMU/KVM
D0:50:99
ASRock
FC:AA:14
Gigabyte
Совет. Когда видишь странный MAC в логах — ищи OUI на standards-oui.ieee.org
или через утилиту macchanger / ouilookup. Часто помогает быстро понять, что это виртуалка / физическая машина / IoT-устройство.
4. Hub vs Bridge vs Switch
Три устройства, которые когда-то были рядом, но сейчас остался только один. Понимать различие важно — потому что
концепции «коллизионного домена» и «broadcast-домена» до сих пор актуальны.
Эволюция: Hub → Bridge → Switch
Hub шлёт кадр всем портам сразу, switch — только нужному получателю. Это уменьшает коллизии и увеличивает throughput на порядки.
5. Как свитч учится — CAM-table learning
Когда коммутатор только включается, его таблица MAC-адресов (CAM, Content-Addressable Memory) пуста.
Он не знает, где какой хост. Учится он в процессе работы — по полю Source MAC проходящих кадров.
Алгоритм обучения коммутатора — пошагово
Это основной алгоритм коммутации. На команде show mac address-table ты увидишь эту самую CAM-таблицу в реальном времени.
атакаCAM table overflow. Атакующий шлёт миллион поддельных src MAC → таблица переполняется
→ свитч начинает flooding всё подряд → атакующий снифает чужой трафик.
Защита: port security (ограничить число MAC на порт), 802.1X (аутентификация устройств).
6. ARP — как IP превращается в MAC
Хост хочет отправить пакет на IP-адрес. Но в Ethernet-кадре нужен MAC. Как узнать MAC по IP?
Через ARP (Address Resolution Protocol), RFC 826. Это «телефонный справочник» локальной сети.
ARP request / reply — как работает резолвинг
Кэш стандартно живёт 60 секунд (Linux) или несколько минут. После — повторный ARP-запрос.
Gratuitous ARP — «представляюсь без спроса»
Хост может сам отправить ARP-«ответ», даже если никто не спрашивал. Цель — обновить ARP-кэши соседей.
Используется в:
VRRP/HSRP — при takeover master шлёт gARP с VIP+своим MAC.
Failover keepalived/haproxy — то же самое.
Linux при поднятии интерфейса — чтобы коммутаторы быстрее обновили MAC-table.
ARP spoofing-атаки 😈 — атакующий шлёт gARP «я gateway, мой MAC такой» → MITM.
7. MTU, Jumbo frames и реальные проблемы
MTU (Maximum Transmission Unit) — максимальный размер полезной нагрузки на сетевом интерфейсе.
Для Ethernet это 1500 байт. Это критично, потому что:
Стандартный кадр vs Jumbo frame
Jumbo используется в ДЦ для iSCSI/NFS/бэкапов. В интернет НЕ пускают (PMTUD black hole).
типичный баг«После настройки jumbo пинги короткие проходят, ssh и web виснут».
Это MTU mismatch. На одном устройстве MTU=9000, на другом 1500. Маленькие пакеты (ping без -s) проходят,
большие (TCP с MSS=1460) — не проходят. Решение: либо везде одинаковый MTU, либо рабочий PMTUD с пропуском ICMP.
В современной сети ВСЁ работает в full-duplex. Если в логе interface видишь «half-duplex» — это баг конфига auto-negotiation.
9. Команды для работы с L2
Linux
$ ip link show # интерфейсы и их MAC, состояние, MTU$ ip -s link show eth0 # счётчики rx/tx, errors, drops$ ip link set eth0 mtu 9000 # сменить MTU$ ip link set eth0 address 02:01:02:03:04:05 # сменить MAC (LAA)$ ip neigh # ARP-кэш$ ip neigh flush all # сбросить ARP-кэш$ arping -I eth0 10.0.0.1 # целевой ARP-запрос на интерфейс$ bridge fdb show # MAC-таблица софтового bridge (br0)$ tcpdump -i eth0 -e ether host 00:1b:44:11:3a:b7 # фильтр по MAC
Cisco IOS
switch# show mac address-table # CAM-таблицаswitch# show mac address-table aging-time # TTL записейswitch# show interface gi0/1 switchport # режим портаswitch# show interfaces counters errors # CRC errors, runts, giantsswitch# clear mac address-table dynamic # очистить CAM (для дебага)# Port security — защита от CAM overflow и rogue устройствswitch(config-if)# switchport port-security
switch(config-if)# switchport port-security maximum 2
switch(config-if)# switchport port-security violation shutdown
сценарий 1«Хосты в одной подсети не пингуются друг друга» →
1) ip neigh — есть ли ARP-запись? 2) tcpdump -ni eth0 arp — уходит ли запрос?
Если запрос уходит, ответа нет — проверь, не блокирует ли firewall на получателе ICMP (IPTables INPUT),
или VLAN-изоляцию на коммутаторе (private VLAN, port isolation).
сценарий 2«Интерфейс up, но трафик не идёт. CRC errors растут». →
Это L1, а не L2. Возвращайся к уроку 1: патч-корд, обжимка, EMI, грязные оптические разъёмы.
L2 ничего не починит, пока на L1 проблема.
сценарий 3«MAC-flapping в логах коммутатора» →
Один и тот же MAC видится то на одном порту, то на другом. Причины:
1) петля (loop) в L2 без STP → MAC мигрирует;
2) кто-то поставил два сервера с одинаковым MAC (баг hypervisor);
3) Гнерируется gratuitous ARP с одной и той же машины через разные порты (NIC bonding active-backup на свитче без MC-LAG).
Лечится: STP + BPDU guard, проверкой конфига bonding.
Ключевое за этот урок
Ethernet-кадр = Preamble + Dst MAC + Src MAC + EtherType + Payload + FCS.
MAC = 48 бит = OUI (3 байта вендора) + NIC (3 байта серийника). Бит U/L и I/G в первом октете.
HUB → BRIDGE → SWITCH: эволюция от «всем шлю всё» до «учу и шлю точечно».
Свитч учит MAC по полю SrcMAC. Неизвестный dstMAC → flooding. После — unicast.