Ethernet и коммутация
Предпосылки: общая компьютерная грамотность (файл, программа, оперативная память).
Два ноутбука стоят на одном столе, соединённые кабелем. Задача элементарна — передать один байт с первого на второй. Но даже для этого нужно решить цепочку проблем: как представить данные в физическом сигнале, как понять, где заканчивается одно сообщение и начинается другое, и что делать, когда устройств станет не два, а двести.
Биты, байты, сигналы
Вся информация в компьютере — последовательность битов (binary digit, двоичная цифра). Бит принимает два значения: 0 или 1. Два значения — потому что это самый простой способ что-то различить: лампочка горит или не горит, напряжение высокое или низкое.
Байт — группа из 8 битов. Один байт хранит 2⁸ = 256 различных значений (от 0 до 255). Подробнее о двоичной системе, причинах выбора 8 бит и шестнадцатеричной записи — основы представления данных.
Для передачи битов между компьютерами нужна среда передачи — физический путь для сигнала. По медному кабелю пускается электрический ток: разные уровни напряжения представляют 0 и 1. По оптоволокну передаётся свет через тонкую стеклянную нить — свет быстрее и не подвержен электромагнитным помехам. Радиоволны (Wi-Fi) передают сигнал через воздух: передатчик создаёт радиоволну с определёнными характеристиками, приёмник распознаёт биты.
При передаче последовательности битов возникает проблема: как получатель узнает, где заканчивается один бит и начинается другой? Синхронизация (от греческого “syn” — вместе, “chronos” — время) — договорённость между отправителем и получателем о моменте считывания каждого бита. Решения включают тактовый сигнал (отдельный провод, который “тикает”) или специальные методы кодирования, где сам сигнал содержит информацию о границах битов.
Сетевой интерфейс и MAC-адрес
Итак, два компьютера соединены кабелем. Каждый из них подключён к сети через сетевой интерфейс (сетевая карта, NIC — Network Interface Card) — устройство, которое преобразует данные из памяти компьютера в электрические/оптические сигналы для отправки и обратно.
Пока устройств два, всё просто — данные может получить только один адресат. Но стоит подключить к сети третий, четвёртый, десятый компьютер — нужен способ указать, кому предназначено сообщение.
MAC-адрес (Media Access Control — управление доступом к среде) — уникальный идентификатор сетевого интерфейса. Формат: 00:1A:2B:3C:4D:5E — 6 байт (48 бит) в шестнадцатеричной записи. MAC-адрес прошит в сетевую карту на заводе: первые 3 байта — идентификатор производителя, последние 3 — серийный номер устройства.
Кадр: упаковка данных для передачи
Сырые байты не отправляются в сеть как есть — они упаковываются в структуру с чётко определёнными полями, кадр (frame — “рамка”, “каркас”):
+-----------------+-----------------+----------+----------------+---------+
| MAC-адрес | MAC-адрес | Тип/ | Данные | Контр. |
| получателя | отправителя | Длина | (payload) | сумма |
| (6 байт) | (6 байт) | (2 байта)| (46-1500 байт) | (4 байта)|
+-----------------+-----------------+----------+----------------+---------+
MAC-адрес получателя указывает, кому предназначен кадр — сетевая карта принимает кадр только если адрес совпадает с её собственным. Специальный адрес FF:FF:FF:FF:FF:FF — широковещательный (broadcast): кадр с таким адресом получателя принимают все устройства в сети. Это нужно, когда отправитель хочет обратиться ко всем сразу или не знает конкретного адресата. MAC-адрес отправителя нужен для ответа. Payload (полезная нагрузка) — собственно передаваемые данные.
Контрольная сумма (checksum) защищает от повреждений при передаче. Отправитель вычисляет число по определённому алгоритму на основе данных и добавляет к кадру. Получатель вычисляет сумму заново — если результаты совпадают, данные целы; если нет, кадр отбрасывается. В Ethernet используется CRC (Cyclic Redundancy Check) — алгоритм, который обнаруживает ошибки, но не исправляет их.
Ethernet
Всё описанное выше — формат кадров, MAC-адреса, способы кодирования сигналов — определяется стандартом Ethernet (от “ether” — эфир: данные распространяются через общую среду, как волны через эфир). Скорости Ethernet эволюционировали: 10 Mbps, 100 Mbps, 1 Gbps, 10 Gbps, 100 Gbps.
Коллизии: когда устройств стало много
Ранний Ethernet работал через общую шину — все устройства подключены к одному проводу. Когда два устройства начинали передачу одновременно, их сигналы смешивались — коллизия (от латинского “collisio” — столкновение).
Для борьбы с коллизиями Ethernet использовал CSMA/CD (Carrier Sense Multiple Access with Collision Detection): слушай перед отправкой — не передаёт ли кто-то другой? Если коллизия случилась — прекрати передачу, подожди случайное время, попробуй снова.
При низкой нагрузке это работало. Но чем больше устройств в сети, тем чаще коллизии и тем больше времени тратится на ожидание и повторные попытки.
Коммутатор: изоляция трафика
В современных сетях проблема коллизий решена через коммутатор (switch) — устройство с множеством портов, к каждому из которых подключается отдельный компьютер.
Когда компьютер A отправляет кадр компьютеру B, коммутатор принимает кадр, смотрит на MAC-адрес получателя и отправляет кадр только в тот порт, где находится B. Остальные порты этот трафик не видят — коллизии исключены.
Коммутатор учится: запоминает, в каком порту какой MAC-адрес, анализируя адреса отправителей входящих кадров. Если адрес получателя неизвестен — flooding (затопление): кадр отправляется во все порты, кроме исходного. Ответ вернётся с конкретного порта, и коммутатор запомнит этот MAC-адрес.
Коммутатор решил проблему производительности внутри локальной сети. Но у MAC-адресов есть фундаментальное ограничение: они не отражают структуру сети. MAC — просто серийный номер, прошитый на заводе. По нему невозможно понять, где устройство находится географически или топологически. Коммутатор не может хранить миллиарды MAC-адресов всех устройств мира. Для связи между сетями нужна иерархическая адресация — IP и маршрутизация.