1. Физический уровень и среда передачи: от электрических сигналов к кадрам Ethernet
Физический уровень и среда передачи: от электрических сигналов к кадрам Ethernet
Когда вы скачиваете образ операционной системы объемом 10 гигабайт, по кабелю, подключенному к вашему компьютеру, не передаются ни файлы, ни папки, ни даже нули и единицы в чистом виде. По медному проводу бежит лишь электрический ток, напряжение которого меняется миллионы раз в секунду. Как сетевая карта понимает, где в этом хаотичном потоке скачков напряжения начинается осмысленное сообщение, кому оно адресовано и нет ли в нем ошибки?
Чтобы стать инженером уровня Middle, недостаточно знать, что «коммутатор работает на втором уровне OSI». Необходимо кристально ясно понимать границу, где физика превращается в логику.
Физическая среда: почему кабель «витой»
Самая популярная среда передачи данных в корпоративных сетях — медный кабель UTP (Unshielded Twisted Pair, неэкранированная витая пара). Внутри него находятся восемь медных жил, попарно свитых между собой.
Почему провода скручивают, а не пускают параллельно? Любой проводник с током работает как антенна: он излучает электромагнитные волны и улавливает чужие (от соседних проводов, ламп освещения, микроволновок). Это создает помехи, искажающие сигнал.
Инженеры применили элегантное физическое решение — дифференциальную передачу сигнала. По двум проводам одной пары передается один и тот же сигнал, но в противофазе (зеркально). Если на одном проводе напряжение В, то на втором В. Когда внешняя электромагнитная наводка бьет по кабелю, она добавляет одинаковый «шум» к обоим проводам (например, В). На выходе сетевая карта вычитает сигнал одного провода из другого: В. Шум математически уничтожается. А скручивание гарантирует, что оба провода находятся на одинаковом расстоянии от источника помех и получают абсолютно идентичный шум.
Проблема синхронизации: как передать нули и единицы
Допустим, мы договорились: высокое напряжение — это логическая «1», низкое — «0». Компьютер А хочет передать компьютеру Б миллион единиц подряд. Он просто подает высокое напряжение.
Но как компьютер Б поймет, что это именно единиц, а не или ? Идеальных часов не существует, таймеры на передатчике и приемнике неизбежно разойдутся на доли микросекунды, и приемник «просчитается».
Чтобы этого избежать, сигнал должен нести в себе не только данные, но и ритм (синхронизацию). Для этого используют линейное кодирование (Line Coding). Например, в манчестерском кодировании (использовалось в раннем Ethernet) значение имеет не сам уровень напряжения, а переход между уровнями в середине такта. Падение напряжения — это «0», скачок вверх — это «1». Даже если идет длинная последовательность нулей, напряжение будет постоянно «скакать», позволяя приемнику синхронизировать свои часы с каждым битом.
!Анимация линейного кодирования сигнала
В современных стандартах (Gigabit Ethernet и выше) используются более сложные схемы кодирования амплитуды и фазы, но фундаментальный принцип остается тем же: физический уровень гарантирует, что непрерывный поток электрических изменений будет безошибочно распознан как поток битов.
От потока битов к кадру: рождение канального уровня (L2)
Итак, сетевая карта (NIC) успешно конвертирует напряжение в непрерывную ленту из нулей и единиц. Но это просто «труба». Если в сеть подключено несколько устройств, как понять, где начало сообщения и кому оно предназначено?
Здесь заканчивается физический уровень (L1) и начинается канальный (L2). Поток битов необходимо нарезать на порции — кадры (frames).
> Кадр Ethernet — это базовая единица данных канального уровня, контейнер, который инкапсулирует данные верхних уровней и снабжает их служебной информацией для доставки в пределах одного широковещательного домена.
Чтобы сетевая карта приемника поняла, что сейчас начнется кадр, передатчик отправляет «будильник» — Преамбулу (Preamble) и Ограничитель начала кадра (SFD - Start Frame Delimiter).
Это строгая последовательность из 8 байт: 7 байт чередующихся единиц и нулей (10101010), а последний байт заканчивается на две единицы (10101011). Как только приемник видит эти две единицы на конце, он понимает: синхронизация окончена, следующий бит — это начало полезной информации.
Анатомия кадра Ethernet
После того как преамбула разбудила приемник, начинается сам кадр. Его структура стандартизирована (IEEE 802.3) и не менялась в своей основе десятилетиями.
Рассмотрим ключевые поля кадра в том порядке, в котором их читает сетевая карта:
FF:FF:FF:FF:FF:FF), карта мгновенно отбрасывает кадр, не тратя ресурсы процессора на обработку остатка.0x0800 означает, что внутри лежит IPv4-пакет, а 0x0806 — что это ARP-запрос.Как работает FCS (Frame Check Sequence)
Электрический сигнал подвержен искажениям. Даже при наличии витой пары сильный всплеск может инвертировать один бит (сделать из 0 единицу).
Перед отправкой кадра чип сетевой карты прогоняет все его биты через сложную математическую функцию (CRC32), получая уникальное 4-байтовое число. Это число записывается в конец кадра — в поле FCS. Принимающая сторона, получив кадр, делает ту же самую математическую операцию над полученными битами. Если вычисленный результат совпадает с тем, что записан в поле FCS, значит, кадр долетел без искажений.
!Что происходит при несовпадении контрольной суммы FCS
Жизненный цикл: от провода до операционной системы
Сведем все воедино. Вот что происходит за микросекунды внутри вашего компьютера:
На этом зона ответственности физического и канального уровней заканчивается. Сетевая карта не знает ничего об IP-адресах, портах или потерянных файлах. Ее задача — надежно доставить кадр от одного физического порта до другого в пределах одного сегмента кабеля. О том, как кадры находят путь в сетях с тысячами устройств, мы поговорим в следующей теме, разбирая логику работы коммутаторов.