Всё, что вы хотели знать о Ethernet фреймах, но боялись спросить, и не зря. Форматы кадров Ethernet

.
Сегодня постараемся разобраться в Ethernet кадре .

В сетевых технологиях, различают такие понятия как фрейм (frame ) и пакет packet . Новички сетевых технологий, часто делают ошибки в использовании этих терминов и считают что эти термины являются синонимами, но это не так.

Давайте определимся, что же называют фреймами, а что называют пакетами.

Фреймами называют некоторое число байт, которые содержат в себе заголовк Layer 2 OSI и концевик, вместе с инкапсулированными данными (в инкапсулированных данных обычно содержатся так же другие заголовки, других уровней).

Пакетами в свою очередь часто описывают Layer 3 заголовок вместе с данными. (так же инкапсулированы могут быть заголовки вышестоящих уровней), но уже без заголовка Layer 2 и концевика (trailer).

Используя знания, полученные в предыдущих статьях, мы знаем, что hub это устройство первого уровня (то есть устройство не знает ни о какой информации, оно не знает о Layer 2 заголовках, и тем более уж о Layer 3).
Но, в то же время, обычно это Layer 2 устройство (то есть оно понимает заголовок Layer 2 Header) и исходя из этого может делать некоторые действия (например брать MAC адрес получателя, искать к какому порту этот MAC-адрес привязан и отправлять фрейм только туда и никуда больше). Так же существуют и Layer 3 коммутаторы.

Итак, спецификация .

Давайте поговорим о ней. Какие они были, какие они сейчас.

Первым основателем Ethernet спецификации стала такая компания как DIX , на самом деле это группа компаний: Digital Equipment Corp, Intel , Xerox.
В начале 1980х годов, IEEE стандартизировала технологию Ethernet. Эта технология разделялась на две части:

  1. 802.3 Media Access Control (MAC)
  2. 802.2 Logical Link Control (LLC)

Существует несколько версий Ethernet фрейма, давайте рассмотрим их.

Теперь разберем поля поподробнее.

  1. Preamble — преамбула, существует во всех версиях Ethernet кадра. Но есть некоторые отличия.Эти отличия есть между DIX версией и остальными. В DIX версии, это поле занимало 8 байт.
    Вообще, что такое преамбула вообще? Это некая совокупность 0 и 1, которая используется для синхронизации. То есть говорит ресиверу, что будет принят ethernet кадр.

    В DIX преамбула была 8 байт, семь первых байтов содержало последовательность 10101010 и так семь раз (7 байт), последний 8-ой байт выглядел так: 10101011.
    В 802.3 преамбула стала 7 байт, которые так содержало последовательность 10101010 (7 раз, 7 байт) и было добавлено еще одно поле, которое назвали SD (Start of Frame Delimiter), что означает: начало ethernet кадра.
    Собственно тоже самое что и в DIX реализации, только выделено дополнительное поле. Вместо одного как в DIX’е.

  2. Destination address — адрес получателя. MAC адрес. — 6 байт.
  3. Source address — адрес отправителя. MAC адрес. — 6 байт.
  4. Length — длина фрейма. Это поле указывает на размер фрейма целиком, для того, чтоб получатель мог «предсказать» окончание пакета. Размер поля 2 байта.
  5. Data — непосредственно сами данные, их размер может варьироваться от 46 до 1500 байт.
  6. FCS — проверка целостности фрейма.Эти поля относятся к первой части 802.3 Ethernet — MAC.
    Так же присутствует как мы помним и вторая часть LLC, давайте рассмотрим ее поля.
  7. DSAP — Destination Service Access Point. 1 байтовое поле. Это точка доступа к сервису системы получателя, которая указывает на то, в каком месте системы получателя буферов памяти следует разместить данные фрейма.
  8. SSAP — Source Service Access Point — так же 1 байтовое поле. Это точка доступа к сервису системы отправителя, которая указывает на то, в каком месте системы отправителя буферов памяти следует разместить данные фрейма.
  9. Control — Управление. Размер поля 1-2 байта. Это поле указывает на тип сервиса, который необходим для данных. В зависимости от того, какой сервис нужно предоставить, поле может быть как 1 так и 2 байта.
  10. Заголовок SNAP — занимает 5 байт. Состоит из двух полей — OUI и TYPE. При приеме данных, приемник должен знать, какой из сетевых протоколов должен получить входящие данные (например, IP). Для этого и предназначено набор этих полей SNAP — Sub Network Access Protocol (протокол доступа к подсетям).
  11. OUI — Код организации, 3 байта. Идентификатор организации или производителя. Совпадает с первыми 3-мя байтами MAC адреса отправителя.
  12. TYPE — Локальный код. Поле длиной 2 байта. Функцианально это тоже самое что и Ethertype в заголовке Ethernet II.

Как же может устройство определить, какой тип ethernet кадра принимается?

Ведь существует DIX формат (Ethernet II), 802.3 и 802_3 с SNAP ?

Все очень просто. Давайте рассмотрим алгоритм определения.

  1. Устройство получает фрейм. Смотрит на поле Lenght/Type (помним, оно занимает 2 байта). Если значение больше чем 1518 байт (размер всего фрейма с заголовками), то это уже не Ethernet II , а 802.3 или 802.3 SNAP, потому как только в Ethernet II указывается размер в указанном поле.
  2. Допустим Lenght/Type у нас больше 1518 (0x5FE).
    Здесь нам нужно определить, какой фрейм 802.3 или 802.3 SNAP. Это делается на основе заголовка LLC (802.2), таких как DSAP,SSAP и SNAP. Заметим, что SNAP это расширение заголовков DSAP и SSAP (Сервисов стало настолько много, что в 1 байте не удавалось закодировать тот или иной сервис и пришлось создавать еще одну реализацию, которая называется 802.3 SNAP).
    SSAP и DSAP обычно принимают одно и тоже значение. Поле Control принимает обычно значение 0x03, что означает, что нет необходимости устанавливать соединение на канальном уровне (Layer 2).

И все же, как определить какой формат Ethernet передается, 802.3 или 802.3 SNAP?

Если передается кадр с SNAP, то значение первого и второго байта данных (по сути это наши SSAP и DSAP) равны 0xAA, а третьего (по сути нашего Control) равняется 0x03.

Вот такой алгоритм работает при том, как определить какой формат кадра передается на приемник.

По формату кадров пока все.

Сейчас немного поговорим о адресации на канальном уровне, так же называемой Mac — адресацией.

На канальном уровне, адресация проходит по MAC адресам (помните, когда рассматривали ethernet кадр, первые поля были Destination Address и Source Address, которые занимали 6 байт). Эти адреса имеют 48 битный формат и записываются в 16-ом виде.

Тут стоит отметить тот факт, что, существуют юникастовые рассылки (грубо говоря точка-точка), а существуют множественные рассылки (от одного к нескольким). Это определяется по первому биту MAC адреса, если этот бит равен 1, то это значит что осуществляется множественная рассылка (например широковещательная рассылка, такой адрес имеет все единицы), если первый бит равен «0», юникастовая рассылка.

Mac адрес состоит как бы из двух частей. Первые три байта прикреплены к той или иной компании, которая производит сетевые устройства, тоесть например устройства имеет определнные 3 байта одинаковые (некоторые компании имеют не один такой адрес, а целый пул адресов), а вторые 3 байта, это непосредственно уникальный адрес сетевого устройства.

Статья получилась не маленькой. Материал может показаться запутанным. Думаю что в целом все понятно. Если что, поправляйте в комментариях, буду редактировать.

Данные, передаваемые в сети Ethernet, разбиты на кадры. Так как существует несколько типов кадров, для того, что бы понять друг друга, отправитель и получатель должны использовать один и тот же тип кадра. Кадры могут быть четырех различных форматов, несколько отличающихся друг от друга. Базовых форматов кадров (raw formats) существует всего два – Ethernet II и Ethernet 802.3. эти форматы отличаются назначением всего одного поля.

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

Существует четыре основных разновидности кадров Ethernet:

Ethernet Type II

Ethernet 802.3

Ethernet 802.2

Ethernet SNAP (SubNetwork Adress Protokol).

Рассмотрим поля, общие для всех четырех типов кадров:

Рис. 11.1 – Формат кадра Ethernet

Поля в кадре имеют следующее значение:

Поле «Преамбула» и «Признак начала кадра» . Предназначены для синхронизации отправителя и получателя. Преамбула представляет собой 7-байтовую последовательность единиц и нулей. Признак начала кадра имеет длину 1 байт. Эти поля не принимаются в расчет, при вычислении длинны кадра.

Поле «Адрес получателя» . Состоит из 6 байт и содержит физический адрес устройства в сети, которому адресован данный кадр. Значения этого и следующего поля являются уникальными. Каждому производителю адаптеров Ethernet назначаются первые три байта адреса, а оставшиеся три байта определяет сам производитель. Например, для адаптеров фирмы 3Com физические адреса будут начинаться с 0020AF. Первый бит адреса получателя имеет специальное назначение, если он равен 0, то адрес конкретного устройства (только в этом случае первые три байта служат для идентификации производителя сетевой платы), а если 1 – широковещательный. Обычно в широковещательном адресе все оставшиеся биты тоже устанавливаются равными единице (FF FF FF FF FF FF).

Поле «Адрес отправителя» . Состоит из 6 байт и содержит физический адрес устройства в сети, которое отправило данный кадр. Первый бит адреса отправителя всегда равен нулю.

Поле «Длинна/тип» . Может содержать длину или тип кадра в зависимости от используемого кадра Ethernet. Если поле зает длину, она указывается в двух байтах. Если тип – то поле указывает на тип протокола верхнего уровня, которому принадлежит данный кадр. Например, при использовании протокола IPX поле имеет значение 8137, а для протокола IP – 0800.

Поле «Данные» . Содержит данные кадра. Чаще всего эта информация необходима протоколам верхнего уровня. Данное поле не имеет фиксированного размера.

Поле «Контрольная сумма». Содержит результаты вычисления контрольной суммы всех полей за исключением преамбулы, признака начала кадра и самой контрольной суммы. Вычисление производится отправителем и добавляется в кадр. Аналогичная процедура вычисления производится и на устройстве получателя. В случае, если результат вычисления не совпадает со значением данного поля, предполагается, что произошла ошибка при передаче. В этом случае кадр считается испорченным и игнорируется.

Минимально допустимая длинна всех четырех типов кадров Ethernet составляет 64 байта, а максимальна – 1518 байт. Так как на служебную информацию в кадре отводится 18 байт, то поле «Данные» может принимать значение от 46 до 1500 байт. Если передаваемые данные меньше допустимой длинны. Кадр будет автоматически дополняться до 46 байт. Эти ограничения на минимальную длину кадра введены для обеспечения нормальной работы механизма обнаружения коллизий.

Рассмотрим более подробно форматы кадров различных типов. Тип кадра Ethernet II используется многими протоколами верхнего уровня, такими как TCP/IP, IPX и AppleTalk. Данный тип кадра был разработан такими фирмами как DEC, Intel и Xerox. Необходимо учитывать, что хотя данный тип кадра и является наиболее широко используемым, он не одобрен организациями IEEE и ISO. Формат данного типа кадра отличается от рассмотренного выше только тем, что в поле «Длинна/тип» всегда указывается тип протокола.

Сетевые операционные системы Novell Net Ware 2.x и 3.x (за исключением 3.12) по умолчанию используют кадр Ethernet 802.3. Хотя в названии этого кадра есть упоминание комитета IEEE, последний не имел никакого отношения к его разработке.

Данный тип кадра не содержит никакой информации о протоколе. Поле «Длинна/тип» всегда указывает длину кадра. В результате нет стандартных методов идентификации сетевого протокола, которому принадлежит данный кадр. Однако в соответствии с концепцией фирмы Novell, только протокол IPX может использоваться с данным типом кадров. Разработана специальная последовательность действий для определения того, что именно протокол IPX был инкапсулирован в кадр данного типа.

Проверяется поле «Длинна/тип». Если оно содержит значение между 0 и 1518 (05ЕЕ), то данное поле определяет длину кадра, а не тип протокола (то есть это кадр Ethernet 802.3, в противном случае – Ethernet II).

Проверяются следующие два байта за полем «Длинна/тип». Если они содержат FFFF, это означает, что кадр принадлежит протоколу IPX, так как заголовок этого протокола всегда начинается с FFFF.

В результате стандартизации сетей Ethernet подкомитетом IEEE 802.3 появился кадр Ethernet 802.2. этот кадр является базовым для операционных сиcтем Novell Net Ware 3.12 и 4.x. В данном типе кадра сразу же за полем адреса отправителя следует поле длинны, имеющее такое же назначение. кроме того, этот тип кадра содержит несколько дополнительных полей, рекомендованных IEEE 802.3. Эти поля располагаются за полем «Длинна/тип» и имеют следующее значение:

Поле «DSAP» указывает на используемый получателем протокол сетевого уровня. Размер поля составляет 1 байт (один бит в нем зарезервирован). Для протокола IPX значение поля равно E0, для протоколов IP – 06, для NetBIOS – F0.

Поле «SSAP» указывает на используемый отправителем протокол сетевого уровня. Размер поля составляет 1 байт (один бит из которого зарезервирован).

Поле «Контроль» указывает на тип сервиса, требуемый для сетевого протокола. Размер данного поля составляет 1 байт.

Формат кадра Ethernet 802.2 имеет некоторые недостатки, в частности он содержит нечетное число байт служебной информации. Это не совсем удобно для работы большинства сетевых устройств. Кроме того, для идентификации протокола сетевого уровня отводится 7 бит, что позволяет поддерживать всего 128 различных протоколов. Кадр Ethernet SNAP, являющийся развитием спецификации Ethernet 802.2 содержит следующие дополнительные поля:

Поле «Код организации» имеет длину три байта и содержит код организации (фирмы), которая присвоила значения поля «Идентификатор протокола». Если значение поля равно 000000, то поле «Идентификатор протокола» содержит значение, которое обычно помещается в поле «Длинна/тип», то есть идентификатор протокола верхнего уровня.

Поле «Идентификатор протокола» имеет длину два байта и идентифицирует протокол верхнего уровня, инкапсулированный в поле «Данные» кадра. При использовании протокола IPX это поле содержит значение 8137.

В совокупности эти два поля составляют дополнительное пяти байтовое поле для идентификации протокола. Это было сделано для увеличения числа поддерживаемых протоколов.

Как и на производстве, кадры в сети Ethernet решают все. Они служат вместилищем для всех высокоуровневых пакетов, поэтому, чтобы понять друг друга, отправитель и получатель должны использовать один и тот же тип кадров Ethernet. К счастью (или к сожалению), кадры могут быть всего четырех разных форматов, и к тому же не сильно отличающихся друг от друга. Более того, базовых форматов кадров существует всего два (в английской терминологии их называют "raw formats") - Ethernet_II и Ethernet_802.3, причем они отличаются назначением всего одного поля.

Современные компьютерные сети гетерогенны по своей природе, а сетевые протоколы третьего уровня используют зачастую разные типы кадров Ethernet. Так, в старых версиях NetWare 3.х компании Novell базовым форматом по умолчанию является Ethernet_802.3, а не 802.2 или SNAP, как это предусмотрено стандартами IEEE, причем, кроме нее, этот формат больше никто не применяет. С выходом NetWare 4.х протоколы IPX/SPX используют по умолчанию стандартные кадры Ethernet_802.2, а с планируемым переводом IntranetWare на протоколы TCP/IP эта сетевая ОС будет, возможно, работать по умолчанию с кадрами Ethernet_SNAP, так как именно этот формат применяется в новейших реализациях TCP/IP. Вообще говоря, пакеты протоколов IPX/SPX могут передаваться с помощью кадров любых типов, поэтому - а также потому, что тип Ethernet_802.3 используется исключительно Novell, - в этом уроке мы будем рассматривать кадры Ethernet преимущественно с точки зрения сетей NetWare.

ETHERNET II

Несмотря на то что мы привычно называем стандарт 802.3 именем Ethernet, это не совсем правильно, так как последнее название является торговой маркой Xerox, Intel и Digital, чья технология послужила прототипом этого столь популярного стандарта. Формат Ethernet_II соответствует оригинальному формату кадров Ethernet и имеет следующий вид.

Как и всякий кадр, Ethernet_II начинается с семибайтной преамбулы, состоящей из чередующихся единиц и нулей, и однобайтного начального ограничителя кадра, в котором два младших бита равны 112, а не 102, как остальные биты в преамбуле и ограничителе. Однако, если быть более точным, в Ethernet_II преамбула не разделяется на собственно преамбулу и начальный ограничитель кадра - и это является одним из отличий Ethernet от IEEE 802.3, хотя весьма несущественным, можно сказать, схоластическим, тем более что очень часто преамбула вообще рассматривается как часть физического механизма синхронизации передающей и принимающей стороны, а не как часть кадра (поэтому на рисунках мы не будет обозначать преамбулу и начальный ограничитель).

Собственно заголовок кадра состоит из шестибайтного поля адреса получателя (Destination Address), шестибайтного поля адреса отправителя (Source Address) и двухбайтного поля типа протокола (Frame Type) (см. Рисунок 1). При передаче каждого байта адреса младшие биты (крайние справа) передаются первыми. В адресе получателя первый передаваемый бит (бит 0 байта 0) указывает тип адреса - обычный или групповой. Таким образом, нечетный первый байт адреса получателя означает, что кадр предназначен группе станций. Разновидностью многоадресной передачи является широковещательная передача. В этом случае все биты адреса получателя задаются равными 1.

Рисунок 1.

Базовые пакеты Ethernet II и IEEE 802.3 имеют одинаковую структуру. Их различие - в назначении 13-го и 14-го байтов: поля типа протокола и длины кадра соответственно. Совместное использование разных форматов кадров в одном сегменте Ethernet возможно благодаря тому, что тип протокола характеризуется числом, большим 0x05FE.

Однако поле адреса отправителя должно содержать адрес конкретной станции-отправителя.

В случае обычных адресов первые три байта служат для идентификации производителя сетевой платы, а последние три байта составляют уникальный номер конкретной платы. Так, первые три байта адреса популярных сетевых плат производства 3Com выражаются следующим числом - 02608С в шестнадцатеричной системе счисления (далее для обозначения чисел в шестнадцатеричной системе счисления мы будем использовать обозначение 0x, т. е. идентификатор 3Com будет иметь вид 0x02608C). Адрес получателя называется также физическим или MAC-адресом.

Вообще говоря, адрес получателя идентифицирует непосредственного, а не конечного получателя, например маршрутизатор в сети Ethernet. Конечный получатель идентифицируется с помощью высокоуровневых протоколов. В случае TCP/IP - это IP-адрес станции и TCP- или UDP-порт процесса на данной станции.

Поле типа протокола идентифицирует высокоуровневый протокол, такой как IP, AppleTalk и т. д., контейнером для пакета которого служит кадр. Ниже мы приводим значения поля типа протокола для некоторых распространенных сетевых протоколов:

    Internet Protocol (IP) - 0x0800; Address Resolution Protocol (ARP) - 0x0806; AppleTalk - 0x809B; Xerox Network System (XNS) - 0x0600; NetWare IPX/SPX - 0x8137.

Следующее поле кадра служит собственно для передачи полезной информации (на уровне кадра к полезной нагрузке мы относим такую служебную информацию высокоуровневых протоколов, как заголовок пакета и т. п.).

В отличие от служебных полей, поле данных имеет переменную длину, причем оно не может быть короче 46 байт и длиннее 1500 байт. Таким образом, общая длина кадра без учета преамбулы и начального ограничителя кадра находится в диапазоне от 64 до 1518 байт. В случае, когда реальный объем передаваемых данных меньше 46 байт (например, для эмуляции терминала часто передается всего один символ, вводимый с клавиатуры), поле данных дополняется до минимального размера заполнителем. Байт заполнения может вставляться, даже если объем передаваемых данных более 46 байт. По предложению Novell, в случае нечетного количества байт драйвер сетевой платы добавляет еще один. Это сделано потому, что некоторые старые маршрутизаторы не понимают кадры нечетной длины.

Последнее поле в кадре - это четырехбайтное поле контрольной последовательности кадра (Frame Check Sequence, FCS). Значение этого поля вычисляется на основе содержимого заголовка и данных (вместе с заполнителем, но без учета преамбулы и ограничителя) с помощью 32-разрядного циклического избыточного кода (Cyclic Redundancy Code, CRC-32) по следующей формуле (в двоичной системе счисления):

контрольная последовательность = MOD(данные/полином)

В Ethernet порождающим полиномом служит многочлен x 32 +x 26 +x 23 +x 23 +x 22 +x 16 +x 12 +x 11 +x 10 +x 8 +x 7 +x 5 +x 4 +x 2 +x+1. Данный код позволяет обнаружить 99,999999977% всех ошибок в сообщениях длиной до 64 байт! Таким образом, вероятность того, что принимающая станция воспримет испорченный кадр как целый, практически равна нулю.

После приема кадра принимающая станция заново вычисляет контрольную последовательность и сравнивает полученный результат с содержимым поля FCS. В случае несовпадения пакет считается испорченным и игнорируется.

БАЗОВЫЙ ФОРМАТ КАДРА 802.3

Определяемый спецификацией 802.3 формат кадра практически идентичен своему предшественнику за исключением того, что поле типа протокола имеет смысл длины кадра. На первый взгляд это неизбежно должно привести к путанице, когда кадры Ethernet_II и Ethernet_802.3 передаются между станциями в одном сегменте. Однако на практике эти кадры не представляет труда отличить друг от друга. Как мы уже говорили, длина поля данных не превышает 1500 байт, поэтому, в соответствии с принятыми соглашениями, тип высокоуровневого протокола задается большим, чем 0х05FE (1518 в шестнадцатеричной системе счисления - полная длина кадра), благо двухбайтное поле может принимать 65 536 разных значений. Таким образом, если значение поля между адресом отправителя и данными меньше или равно 1518, то это кадр 802.3, в противном случае - это кадр Ethernet_II.

Другое небольшое отличие между Ethernet и 802.3 состоит в классификации групповых адресов. В отличие от Ethernet, спецификация 802.3 подразделяет групповые адреса на имеющие глобальное и локальное значение. Однако это разделение редко используется на практике. (О третьем незначительном отличии - в преамбуле - мы говорили выше.)

В соответствии с эталонной моделью OSI, каждый протокольный блок данных содержит (инкапсулирует) пакеты вышележащих протоколов своего стека. Протокол 802.3 описывает метод доступа к среде передачи - нижний подуровень канального уровня, и для него вышележащим протоколом является протокол логического

управления каналом (Logical Link Control, LLC) - верхний подуровень канального уровня. Таким образом, согласно требованиям стандарта, поле данных должно содержать заголовок LLC. В ранних версиях NetWare компания Novell проигнорировала этот заголовок и стала помещать пакеты IPX/SPX непосредственно за полем длины кадра, и поле данных начиналось так же, как и обычный заголовок IPX, с двух байтов, состоящих из единиц (число 0xFFFF). Иными словами, Novell использовала кадры просто в качестве контейнера.

В принципе применение базового формата кадра 802.3 без служебной информации верхнего подуровня канального уровня позволяет Novell несколько сократить накладные расходы в расчете на кадр. Однако выигрыш невелик, а в гетерогенной среде применение нестандартного формата ведет к проигрышу, так как маршрутизатор или сетевая плата вынуждены проверять дополнительные поля для определения типа пакета. Это послужило одним из побудительных мотивов, почему начиная с версии 4.0 Novell перешла по умолчанию на стандартный формат Ethernet_802.2. Другой причиной было то, что использование базовых кадров Ethernet_802.3 делало невозможным применение таких опций защиты, как подпись пакетов, из-за того, что поле контрольной суммы пакета было фиксированным и равным 0хFFFF, чтобы кадр Ethernet_802.3 можно было отличить от других типов кадров.

ДВА СТАНДАРТНЫХ ФОРМАТА

Спецификации IEEE предусматривают всего два стандартных формата - 802.2 и 802.2 SNAP, причем второй является естественным расширением первого. Как уже говорилось, стандартный кадр должен содержать в поле данных служебную информацию логического управления каналом, а именно однобайтное поле точки доступа к сервису для получателя (Destination Service Access Point, DSAP), однобайтное поле точки доступа к сервису для отправителя (Source Service Access Point, SSAP) и однобайтное управляющее поле (см. Рисунок 2). Назначением номеров точек доступа к сервису (Service Access Point, SAP) занимается IEEE, и он выделил следующие номера:

Поля DSAP и SSAP служат для определения вышележащего протокола и, как правило, содержат одно и то же значение. Управляющее поле обычно задается равным 0x03 (в соответствии с протоколом LLC это означает, что соединение на канальном уровне не устанавливается).

Протокол доступа к подсети (Sub-Network Access Protocol, SNAP) был разработан с целью увеличения числа поддерживаемых протоколов, так как однобайтные поля SAP позволяют поддерживать не более 256 протоколов. Формат Ethernet_SNAP предусматривает дополнительное пятибайтное поле для идентификации протокола (Protocol Identification, PI) внутри поля данных, причем значения двух последних байтов этого поля совпадают со значениями поля протокола в Ethernet_II в случае, если кадры содержат пакеты одного и того же высокоуровневого протокола, например они равны 0x8137 для NetWare.

АЛГОРИТМ ОПРЕДЕЛЕНИЯ ФОРМАТА КАДРА

Отличить один формат кадра Ethernet от другого не представляет большого труда, и сделать это можно с помощью следующего простого алгоритма (см. Рисунок 3). Сначала драйвер должен проверить значение поля типа протокола/длины кадра (13-й и 14-й байты в заголовке). Если записанное там значение превышает 0x05FE (максимально возможная длина кадра), то это кадр Ethernet_II.

(1x1)

Рисунок 3.

Для определения типа кадра Ethernet сначала необходимо проверить значение поля после адреса отправителя, а затем первых двух байтов поля данных.

Если нет, следует продолжить проверку. Если первые два байта равны 0xFFFF, то это формат Ethernet_802.3 для NetWare 3.х. В противном случае это стандартный формат кадра 802.2, и нам остается только выяснить, какой из двух - обычный (Ethernet_802.2) или расширенный (Ether-net_SNAP). В случае Ethernet_SNAP значение первого, впрочем, как и второго, байта в поле данных равняется 0xAA. (Значение третьего байта равняется 0x03, но это проверять излишне.)

ЗА КАДРОМ

Разные протоколы используют разные форматы кадров (см. Таблицу 1). Однако число последних не так уж велико, и их несложно отличить один от другого. К тому же протокол TCP/IP выдвигается на доминирующую позицию не только в глобальных, но и в локальных сетях, поэтому даже Novell решила отказаться от своего протокола IPX/SPX в пользу TCP/IP в следующей версии NetWare. Это означает, что в большинстве случаев администратору сети не придется беспокоиться о том, какой формат кадров Ethernet используется. Однако, как показывает опыт, унаследованные технологии живут довольно долго, так что знание форматов кадров может представлять не только теоретический, но и практический интерес.

ТАБЛИЦА 1 - ПРОТОКОЛЫ И СООТВЕТСТВУЮЩИЕ ТИПЫ КАДРОВ

Поля кадра Преамбула (7 байтов) и Начальный разграничитель кадров (SFD) (1 байт) в Ethernet используются для синхронизации между передающим и принимающим устройствами. Эти первые восемь байтов фрейма используются, чтобы привлечь внимание узлов получения. По существу первые несколько байтов говорят получателям подготовиться принимать новый кадр.

Поле MAC-адрес Назначения

Поле MAC Адрес Назначения (6 байтов) является идентификатором для предполагаемого получателя. Как Вы можете вспомнить, этот адрес используется Уровнем 2, чтобы помочь устройствам в определении, адресуется ли им данный фрейм. Адрес во фрейме сравнивается с MAC-адресом устройства. Если адреса совпадают, устройство принимает фрейм.

Поле MAC-адрес Источника

Поле MAC Адрес Назначения (6 байтов) идентифицирует отправляющий NIC или интерфейс фрейма. Коммутаторы также используют этот адрес, чтобы добавить его к своим таблицам сопоставления. Роль коммутаторов будет обсуждаться позже в этой рубрике.

Поле Длина/Тип

Для любого стандарта IEEE 802.3, более раннего 1997 года, поле Длина определяет точную длину поля данных фрейма. Это позже используется позже в качестве части FCS, чтобы гарантировать, что сообщение было получено корректно. Если цель поля состоит в том, чтобы определить тип, как в Ethernet II, поле Тип описывает, какой реализуется протокол.

Эти два применения поля были официально объединены в 1997 в стандарте IEEE 802.3x, потому что оба применения были распространены. Поле Тип Ethernet II включается в текущее определение фрейма 802.3. Когда узел принимает кадр, он должен исследовать поле Длина, чтобы определить, какой протокол более высокого уровня в нем присутствует. Если значение двух октетов больше или равно, чем шестнадцатеричное число 0x0600 или десятичное число 1536, то содержимое поля Данные декодируется согласно обозначенному типу протокола. Если значение поля меньше или равно, чем шестнадцатеричное число 0x05DC или десятичное число 1500, поле Длина используется для указания использования формата кадра IEEE 802.3. Таким образом различаются кадры Ethernet II и 802.3.

Поля Данные и Набивка

Поля Данные и Набивка (46 - 1500 байтов) содержат инкапсулированные данные от более высокого уровня, который является типичным PDU Уровня 3, обычно, пакетом IPv4. Все фреймы должны быть по крайней мере 64 байта длиной. Если инкапсулируется пакет меньшего размера, используется Набивка, чтобы увеличить размер кадра до этого минимального размера.

IEEE поддерживает список общего назначения типов Ethernet II.

Стандарт на технологию Ethernet, описанный в документе 802.3, дает описание единственного формата кадра МАС-уровня. Так как в кадр МАС-уровня должен вкладываться кадр уровня LLC, описанный в документе 802.2, то по стандартам IEEE в сети Ethernet может использоваться только единственный вариант кадра канального уровня, образованный комбинацией заголовков МАС и LLC подуровней.

Тем не менее, на практике в сетях Ethernet на канальном уровне используются заголовки 4-х типов. Это связано с длительной историей развития технологии Ethernet до принятия стандартов IEEE 802, когда подуровень LLC не выделялся из общего протокола и, соответственно, заголовок LLC не применялся.

Консорциум трех фирм Digital,IntelиXeroxв 1980 году представил на рассмотрение комитету 802.3 свою фирменную версию стандартаEthernet, но комитет 802.3 принял стандарт, отличающийся в некоторых деталях от предложенияDIX. Отличия касались и формата кадра, что породило существование двух различных типов кадров в сетиEthernet.

Еще один формат кадра появился в результате усилий компании Novellпо ускорению работы своего стека протоколов в сетяхEthernet.

И, наконец, четвертый формат кадра стал результатом деятельности комитета 802.2 по приведению предыдущих форматов кадров к некоторому общему стандарту.

Сегодня практически все сетевые адаптеры, драйверы сетевых адаптеров, мосты/коммутаторы и маршрутизаторы умеют работать со всеми используемыми на практике форматами кадров технологии Ethernet, причем распознавание типа кадра выполняется автоматически.

Ниже приводится описание всех четырех модификаций заголовков кадров Ethernet (здесь под кадром понимается весь набор полей, которые относятся к канальному уровню, то есть поля MACиLLCуровней):

    Кадр 802.3/LLC (кадр 802.3/802.2 или кадр Novell 802.2)

    Кадр Raw 802.3 (или кадр Novell 802.3)

    Кадр Ethernet DIX (или кадр Ethernet II)

    Кадр Ethernet SNAP

Форматы этих четырех типов кадров Ethernetприведены на рис.6.2.

Рис.6. 2 . Форматы кадров Ethernet.

Рис. 14.3. Форматы кадров Ethernet.

Кадр 802.3/llc

Заголовок кадра 802.3/LLC является результатом объединения полей заголовков кадров, определенных в стандартах IEEE802.3 и 802.2.

Стандарт 802.3 определяет восемь полей заголовка:

    Поле преамбулы ( Preamble ) состоит изсеми байтов синхронизирующих данных . Каждый байт содержит одну и ту же последовательность битов -10101010 . При манчестерском кодировании эта комбинация представляется в физической среде периодическим волновым сигналом с частотой 5 МГц.

    Начальный ограничитель кадра (Start - of - frame - delimiter , SFD ) состоит из одного байта с набором битов10101011 . Появление этой комбинации бит является указанием на то, что следующий байт - это первый байт заголовка кадра.

    Адрес назначения (Destination Address, DA) - 6 байт. Первый бит старшего байта адреса назначения являетсяпризнак ом того, являетсяадрес индивидуальным или групповым . Если0 , то адрес являетсяиндивидуальным ( unicast ), а если1 , то этогрупповой адрес ( multicast ). Групповой адрес сети может предназначаться всем узлам сети или же определенной группе узлов сети.Если адрес состоит из всех единиц, то есть имеет шестнадцатеричное представление0* FFFFFFFFFFFF , то он предназначенвсем узлам сети и называетсяшироковещательным адресом ( broadcast ) . В остальных случаях групповой адрес связан только с теми узлами, которые сконфигурированы (например, вручную) как члены группы, номер которой указан в групповом адресе.Второй бит старшего байта адреса определяетспособ назначения адреса - централизованный или локальный . Если этот бит равен0 (что бывает почти всегда в стандартной аппаратуреEthernet), тоадрес назначен централизованно , с помощью комитетаIEEE. КомитетIEEEраспределяет между производителями оборудования так называемыеорганизационно уникальные идентификаторы (Organizationally Unique Identifier , OUI ) . Этот идентификатор помещается в3 старших байта адреса (например, идентификатор 000081 определяет компаниюBay Networks) .За уникальность младших 3-х байт адреса отвечает производитель оборудования. Двадцать четыре бита , отводимые производителю для адресации интерфейсов его продукции, позволяют выпустить16 миллионов интерфейсов под одним идентификатором организации . Уникальность централизованно распределяемых адресов распространяется на все основные технологии локальных сетей -Ethernet,TokenRing,FDDIи т.д.

Внимание: В стандартахIEEEEthernetмладший бит байта изображается в самой левой позиции поля, а старший бит - в самой правой. Это нестандартный способ отображения порядка бит в байте соответствует порядку передачи бит в линию связи передатчикомEthernet.

    Адрес источника ( Source Address , SA ) - 6-ти байтовое поле, содержащее адрес станции - отправителя кадра. Первый бит - всегда имеет значение 0.

    Длина (Length, L ) . Двухбайтовоеполе длины определяет длину поля данных в кадре.

Кадр 802.3 является кадром MAС-подуровня, в соответствии со стандартом 802.2 в егополе данных вкладывается кадр подуровня LLC с удаленными флагами начала и конца кадра

    DSAP адрес доступа к службе получателя ( Destination Service Access Point ) -1 байт.

    SSAP адрес доступа службы отпрвителя (Source Service Access Point) - 1 байт.

    Control поле управления – 1 байт в режимеLLC1 и 2 байта в режимеLLC2.

9. Поле данных ( Data ) может содержать от 0 до 1500 байт. Но если длина поля меньше 46 байт, то используется поле заполнения(Padding ) , чтобы дополнить кадр до минимально допустимого значения в 46 байт. Так как кадр LLC имеет заголовок длиной 3 (в режимеLLC1) или 4 байт (в режимеLLC2), то максимальный размер поля данных уменьшается до 1497 (1796) байт.

10. Поле контрольной суммы ( frame Check Sequence , FCS ) - 4 байта, содержащие значение, которое вычисляется по определенному алгоритму CRC-32.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: