Приветствую, коллеги! Меня зовут @ProstoKirReal. Сегодня мы обсудим заголовки, относящиеся к уровню L2 модели OSI в Ethernet-кадре.
❯ Зачем нужна эта статья?
Я часто сталкиваюсь с необходимостью быстро найти информацию о различных протоколах и их заголовках, поэтому решил создать своего рода "шпаргалку", к которой можно было бы возвращаться снова и снова. Планирую опубликовать две статьи на эту тему. В первой, которую вы читаете сейчас, мы обсудим заголовки на уровне канала данных (L2) модели OSI. Во второй статье разберем заголовки на уровнях сети (L3) и транспорта (L4).
❯ Почему не рассматриваю уровни выше?
На текущий момент уже есть качественные материалы на Хабре от других авторов, которые подробно разбирают уровни выше, особенно в контексте программирования (например, HTTP/HTTPS). Поэтому я решил не повторяться и сосредоточиться на менее освещенных аспектах, не менее важных для понимания сетевых взаимодействий.
❯ Заголовки на L2 уровне
В этой статье мы подробно рассмотрим, какие заголовки входят в Ethernet-кадр на L2 уровне. Напомню, что Ethernet спецификация была впервые разработана группой компаний Digital Equipment Corp, Intel и Xerox (Ethernet DIX). В наши дни наиболее популярными спецификациями являются Ethernet II, IEEE 802.3 и IEEE 802.3 с SNAP заголовком.
Ethernet II
Ethernet II, также известный как DIX Ethernet, является наиболее распространенным форматом Ethernet-кадров. Он использует поле типа (EtherType) для указания протокола верхнего уровня, что делает его удобным для инкапсуляции различных протоколов. Ethernet II поддерживает протоколы IPv4, IPv6, ARP, RARP и PPPoE.
IEEE 802.3
IEEE 802.3 определяет стандартные Ethernet-кадры, которые используют поле длины (Length) для указания размера данных. Этот стандарт описывает физические и канальные уровни Ethernet и поддерживает протоколы, использующие LLC и SNAP.
IEEE 802.3 с SNAP заголовком
IEEE 802.3 с SNAP (Subnetwork Access Protocol) заголовком используется для инкапсуляции различных сетевых протоколов в кадры IEEE 802.3. SNAP позволяет указывать больший набор протоколов через дополнительные поля в заголовке. Этот формат нужен для инкапсуляции протоколов, таких как IPX, AppleTalk, CLNP и SNA.
❯ Структура Ethernet-кадра
Преамбула
Первым элементом в кадре идет преамбула, представляющая собой последовательность битов, которая используется для синхронизации приемника с передатчиком. Преамбула состоит из 7 байт чередующихся единиц и нулей (10101010) и одного байта, который завершается последовательностью 10101011. Преамбула помогает устройствам подготовиться к приему данных, синхронизируя внутренние часы передачи данных.
В IEEE Ethernet 802.3 и IEEE 802.3 с SNAP, выделено дополнительное поле SD или SFD (Start of Frame Delimiter, «начальный разделитель кадра»).
По сути, последовательность байт и функция преамбулы не изменилось, но выделилось отдельное поле, обозначающее конец преамбулы и начало самого кадра.
Почему мы не видим преамбулу в Wireshark?
В Wireshark преамбула и поле SD (Start of Frame Delimiter) не отображаются, так как они не несут смысловой нагрузки для анализа трафика.
MAC-адреса
После преамбулы в Ethernet-кадре идут MAC-адреса:
Dst MAC-адрес (адрес назначения) — определяет, кому предназначен кадр.
Src MAC-адрес (адрес источника) — определяет, от кого поступает кадр.
MAC-адрес состоит из 6 байт (48 бит). Первые три байта идентифицируют производителя сетевого устройства, а вторые три байта являются уникальным идентификатором устройства.
EtherType
Поле EtherType в Ethernet II имеет длину 2 байта и указывает тип протокола верхнего уровня (например, IPv4 (0x0800), ARP (0x0806), IPv6 (0x86DD). На принимающей стороне это поле помогает определить, как обрабатывать данные.
Все EtherType можно узнать по данной ссылке. Но в текущих реалиях большинство типов уже не используются и самыми популярными являются ARP, IPv4 и IPv6.
Payload
После EtherType находится полезные данные (Payload), в них входят заголовки и информация верхних уровней.
❯ Контрольная сумма (FCS)
Контрольная сумма, или FCS (Frame Check Sequence), представляет собой метод проверки целостности данных. FCS используется для обнаружения ошибок, которые могут возникнуть при передаче данных, и вычисляется с помощью алгоритма CRC-32.
VLAN-тег (IEEE 802.1Q)
Если необходимо разделить одну физическую сеть на логические сети, в кадр добавляется VLAN-тег, который находится между MAC-адресом источника и полем EtherType. Тег IEEE 802.1Q содержит:
• Tag Protocol Identifier (TPID) (2 байта): значение 0x8100 указывает на наличие VLAN-тега.
• Tag Control Information (TCI) (2 байта): содержит информацию о приоритете кадра, идентификаторе VLAN и других параметрах.
TCI включает:
Priority Code Point (PCP) (3 бита) — указывает приоритет кадра.
Canonical Format Indicator (CFI) (1 бит) — указывает формат кадра.
VLAN Identifier (VLAN ID) (12 бит) — идентифицирует VLAN.
Priority Code Point (PCP) в IEEE 802.1Q
Поле Priority Code Point (PCP) в IEEE 802.1Q — это 3-битное поле, используемое для указания приоритета кадра. Оно позволяет сетевым устройствам различать и обрабатывать трафик с различными уровнями приоритета, что важно для управления качеством обслуживания (QoS). Значения PCP варьируются от 0 до 7 и определяют приоритет обработки трафика, где 7 — самый высокий приоритет, а 0 — самый низкий.
Значения Priority Code Point (PCP)
Каждое значение PCP соответствует определенному классу обслуживания, что позволяет сетевым администраторам настраивать правила обработки трафика в зависимости от типа данных и их важности. Вот более детальная информация о значениях PCP:
0. (Best Effort): стандартный приоритет для большинства данных, не требующих специальных условий доставки. Этот трафик обрабатывается по мере доступности ресурсов.
Примеры: обычный веб-трафик, фоновые загрузки.
1. (Background): Низкий приоритет для данных, которые могут быть отложены без серьезных последствий. Используется для фоновых задач, которые не критичны по времени.
Примеры: резервное копирование данных, синхронизация файлов.
2. (Excellent Effort): Немного более высокий приоритет по сравнению с Best Effort. Используется для трафика, который важен, но не критичен по времени.
Примеры: транзакции электронной почты, обмен файлами.
3. (Critical Applications): Средний приоритет для трафика, который требует своевременной доставки. Используется для приложений, которые зависят от определенных временных рамок.
Примеры: корпоративные приложения, транзакции баз данных.
4. (Video, < 100 ms latency): Высокий приоритет для трафика, чувствительного к задержкам. Используется для видео данных, требующих низкой задержки.
Примеры: видеоконференции, потоковое видео.
5. (Voice, < 10 ms latency): Очень высокий приоритет для трафика, крайне чувствительного к задержкам. Используется для передачи голосовых данных, которые требуют минимальной задержки.
Примеры: VoIP (Voice over IP), онлайн-звонки.
6. (Internetwork Control): Высший приоритет для трафика, связанного с управлением и контролем сети. Используется для важных сетевых протоколов и систем управления.
Примеры: маршрутизирующие протоколы, сетевые обновления.
7. (Network Control): Самый высокий приоритет для критически важного сетевого трафика. Используется для управления сетевой инфраструктурой и критических системных сообщений.
Примеры: протоколы синхронизации времени, аварийные оповещения.
Настройка приоритизации
Сетевые устройства, такие как маршрутизаторы и коммутаторы, могут быть настроены для обработки кадров с учетом PCP. Например, они могут предоставлять больше полосы пропускания или уменьшать задержки для трафика с высоким приоритетом (PCP 5-7) и обрабатывать трафик с низким приоритетом (PCP 0-2) с более низким приоритетом в очередях.
Canonical Format Indicator (CFI) — это 1-битное поле в заголовке IEEE 802.1Q, которое указывает формат кадра. Обычно оно используется для совместимости между различными типами сетей, такими как Ethernet и Token Ring. В Ethernet-кадрах это поле обычно устанавливается в 0. Рассмотрим подробнее его значение и использование.
Значение поля CFI:
0: Указывает, что кадр имеет канонический формат (Canonical Format).
1: Указывает, что кадр имеет неканонический формат (Non-Canonical Format).
Канонический и неканонический форматы
Канонический формат (Canonical Format) используется в Ethernet-сетях. В этом формате байты и биты в MAC-адресах записываются и передаются в порядке от младшего к старшему (LSB-MSB, Little-Endian). Это стандартный способ представления данных в Ethernet-кадрах.
Неканонический формат (Non-Canonical Format) используется в некоторых других типах сетей, таких как Token Ring. В этом формате байты и биты в MAC-адресах записываются и передаются в порядке от старшего к младшему (MSB-LSB, Big-Endian).
❯ Важное пояснение
VLAN находится именно между src MAC-адресом и E-Type.
Значение 0x8100 в E-Type, которое мы можем видеть это поле TPID указывающее VLAN тег.
После идентификатора VLAN ID всегда идет поле E-Type, указывающее протокол верхнего уровня.
❯ Структура Ethernet 802.3
Заголовки в данной спецификации похожи на заголовки в Ethernet II, но есть некоторые отличия.
Как писал выше в IEEE Ethernet 802.3 и IEEE 802.3 с SNAP, также первым заголовком идет преамбула и выделено дополнительное поле SD или SFD (Start of Frame Delimiter, «начальный разделитель кадра») в конце, обозначающий начало кадра.
Вместо заголовка EtherType используется Length — длина фрейма.
Поле Length (длина кадра) в Ethernet кадре используется для указания размера полезной нагрузки (payload) кадра. Это поле играет важную роль в сетевой передаче данных. Давайте рассмотрим, зачем нужно это поле и как оно используется.
Length: Указывает размер поля данных в байтах. Например, если Length = 1500, это означает, что полезная нагрузка кадра составляет 1500 байт.
❯ Основные функции поля Length
Идентификация размера данных:
• поле Length указывает точный размер полезной нагрузки кадра, что позволяет принимающему устройству определить, где заканчивается полезная нагрузка и начинается контрольная сумма (Frame Check Sequence, FCS). Это важно для корректной обработки данных.
Эффективное использование полосы пропускания:
• знание размера данных позволяет сетевым устройствам оптимизировать использование полосы пропускания, минимизируя время передачи и улучшая производительность сети.
Совместимость и обработка данных:
• в стандарте IEEE 802.3 поле Length помогает определить, как обрабатывать кадры разной длины. Это особенно полезно при работе с кадрами переменной длины.
Различие с полем EtherType
В Ethernet кадре, основанном на стандарте DIX (Ethernet II), вместо поля Length используется поле EtherType, которое указывает тип протокола инкапсулированных данных (например, IPv4, IPv6).
В стандарте IEEE 802.3 поле Length указывает длину полезной нагрузки кадра.
❯ Заголовок LLC стандарта 802.2
Так стоп. Мы же разбирали 802.3, откуда появился 802.2?
Стандарт IEEE 802.3, который определяет спецификации Ethernet, использует заголовок LLC (Logical Link Control) стандарта IEEE 802.2 для обеспечения совместимости и поддержки многоуровневой сетевой архитектуры. Основная цель стандарта IEEE 802.2 LLC — обеспечить унифицированный метод логического управления связью, который может использоваться различными типами сетей, включая Ethernet, Token Ring и другие. Он обеспечивает интерфейс между физической передачей данных и сетевыми протоколами более высокого уровня.
Причины появления заголовка LLC в стандарте IEEE 802.3
1. Унификация протоколов:
• заголовок LLC стандарта IEEE 802.2 обеспечивает унифицированный способ обработки данных на канальном уровне для различных типов сетей. Это позволяет различным сетевым технологиям использовать общий метод логического управления связью.
2. Поддержка многоуровневой архитектуры:
• заголовок LLC позволяет Ethernet и другим сетям интегрироваться в многоуровневую архитектуру сети, где данные могут передаваться и обрабатываться на различных уровнях сетевой модели OSI.
3. Маршрутизация и управление данными:
• поля DSAP и SSAP в заголовке LLC позволяют указать конечные и исходные службы или протоколы, обеспечивая правильную маршрутизацию и обработку данных на канальном уровне. Это особенно важно для сетей с большим количеством протоколов.
4. Совместимость:
• использование стандарта IEEE 802.2 LLC в Ethernet (IEEE 802.3) обеспечивает совместимость с другими сетевыми стандартами, которые также используют LLC.
Основные функции заголовка LLC
1. Идентификация служб:
• поля DSAP и SSAP в заголовке LLC используются для указания конечных и исходных служб или протоколов, обеспечивая правильную маршрутизацию и обработку данных.
2. Управление логической связью:
• поле Control используется для управления потоком данных, подтверждениями и управлением соединениями.
Структура заголовка LLC
Заголовок LLC включает три основных поля:
DSAP (Destination Service Access Point): 1 байт.
SSAP (Source Service Access Point): 1 байт.
Control: 1 или 2 байта, в зависимости от типа кадра (информационный, управляющий или ненумерованный).
Описание полей заголовка LLC
1. DSAP (Destination Service Access Point):
• поле DSAP указывает на конечную службу или протокол получателя.
Примеры значений: 0x06 для IP, 0x42 для STP (Spanning Tree Protocol).
2. SSAP (Source Service Access Point):
• Поле SSAP указывает на исходную службу или протокол отправителя.
Примеры значений: 0x06 для IP, 0x42 для STP.
3. Control:
Поле Control используется для управления логической связью и может иметь разные форматы в зависимости от типа кадра:
• информационные кадры (I-кадры) используются для передачи данных и управления подтверждениями;
• Управляющие кадры (S-кадры) используются для управления потоком данных и подтверждениями;
• Ненумерованные кадры (U-кадры) используются для установления и завершения логических соединений.
Пример использования заголовка LLC
Когда компьютер A отправляет данные компьютеру B через Ethernet, используя LLC, заголовок может выглядеть следующим образом:
• поля DSAP и SSAP указывают на службы или протоколы отправителя и получателя, такие как IP;
• поле Control управляет передачей данных, например, содержит номера кадров и команды управления потоком.
Заголовок LLC играет ключевую роль в обеспечении логического управления связью на канальном уровне. Он помогает идентифицировать службы и протоколы, управляющие потоком данных и подтверждениями, что обеспечивает эффективное и организованное взаимодействие между устройствами в сети.
❯ Структура IEEE Ethernet 802.3 с SNAP заголовками
SNAP (Subnetwork Access Protocol) Header — это расширение заголовка LLC (Logical Link Control) в сетевых кадрах. Он используется для предоставления дополнительной информации о протоколе, инкапсулированном в кадре. SNAP заголовок позволяет использовать протоколы, которые не поддерживаются стандартными полями DSAP и SSAP, и расширяет возможности идентификации протоколов.
Основные аспекты SNAP Header
1. Назначение:
• SNAP заголовок используется для идентификации протоколов, которые не могут быть идентифицированы с помощью стандартных значений DSAP и SSAP. Это расширяет диапазон поддерживаемых протоколов.
2. Структура:
• SNAP заголовок добавляется после заголовка LLC и имеет фиксированный размер 5 байт. Он включает поля для организации, идентификатора протокола и типа протокола.
3. Поля SNAP Header:
• Organizationally Unique Identifier (OUI) — 3 байта. Идентифицирует организацию, которая назначает значение протокола;
• Protocol Identifier — 2 байта. Идентифицирует конкретный протокол, инкапсулированный в кадре.
Пример использования SNAP Header
SNAP заголовок часто используется в Ethernet кадрах для инкапсуляции протоколов, таких как IPX или AppleTalk, которые не имеют стандартных значений DSAP и SSAP.
Пример структуры кадра с заголовком LLC и SNAP
Преамбула | SFD | MAC-адрес назначения | MAC-адрес источника | Length/Type | LLC Header (DSAP | SSAP | Control) | SNAP Header (OUI | Protocol Identifier) | Данные | FCS |
• DSAP: Обычно устанавливается в 0xAA, что указывает на использование SNAP.
• SSAP: Обычно устанавливается в 0xAA, что указывает на использование SNAP.
• Control: Обычно устанавливается в 0x03, что указывает на ненумерованный кадр.
• OUI: Идентификатор организации (например, 0x000000 для стандартных протоколов).
• Protocol Identifier: Идентификатор конкретного протокола (например, 0x0800 для IPv4).
Пример кадра с SNAP для IPv4
Преамбула | SFD | MAC-адрес назначения | MAC-адрес источника | Length/Type | DSAP (0xAA) | SSAP (0xAA) | Control (0x03) | OUI (0x000000) | Protocol Identifier (0x0800) | Данные | FCS |
SNAP заголовок расширяет возможности заголовка LLC, позволяя идентифицировать и инкапсулировать дополнительные протоколы, которые не поддерживаются стандартными полями DSAP и SSAP. Это обеспечивает большую гибкость и совместимость в сетевых технологиях, поддерживая более широкий спектр протоколов и служб.
❯ Заключение
В заключение, заголовки на L2 уровне модели OSI играют ключевую роль в обеспечении правильной передачи данных в Ethernet-сетях. Преамбула и SFD помогают синхронизировать устройства и указать начало кадра, MAC-адреса идентифицируют устройства, а поля EtherType и Length указывают тип и размер данных. Контрольная сумма FCS проверяет целостность кадра, а VLAN-тегирование и PCP-приоритеты помогают управлять качеством обслуживания и созданием логически изолированных сетей.
Знание этих заголовков поможет вам лучше понять работу Ethernet и управлять сетевой инфраструктурой более эффективно.
Какой заголовок находятся в Ethernet фрейме (Frame) между L2 и L3 уровне?
Этот заголовок неофициально называют L 2,5 или shim header
Термин "shim header" используется для описания заголовка, который вставляется между двумя другими заголовками на разных уровнях сетевой модели.
Заголовок MPLS (Multiprotocol Label Switching)
MPLS (Multiprotocol Label Switching) — это технология, используемая для ускорения и управления потоками трафика в сетях.
В контексте MPLS (Multiprotocol Label Switching), заголовок MPLS часто называют "shim header" из-за его расположения между заголовками канального уровня (L2) и сетевого уровня (L3). Он добавляется поверх фрейма канального уровня и перед заголовком сетевого уровня, например, IP.
Структура заголовка MPLS
Заголовок MPLS состоит из 32 бит (4 байта) и включает следующие поля:
• Label (метка) — 20 бит. Используется для маршрутизации пакета;
• Traffic Class (Класс трафика) — 3 бита. Обозначает приоритет и качество обслуживания (QoS);
• Bottom of Stack (дно стека) — 1 бит. Указывает, является ли эта метка последней в стеке меток (1 — последняя, 0 — не последняя);
• Time to Live (TTL) — 8 бит. Используется для предотвращения зацикливания пакетов.
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩