Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Служебные поля Ethernet-пакета
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
b-volkov
В зависимости от стандарта Ethernet, в его пакете кроме полей адреса присутствуют различные служебные поля:Type/Length, DSAP, SSAP, CONTROL, SNAP. Я планирую использовать "чистый" ethernet, и мне эти поля без надобности. Могу ли я использовать их в своих целях или там должны быть записаны определенные цифры? Не будут ли пакеты с некорректными значениями полей восприниматься каким-либо сетевым оборудованием как плохие и сбрасываться?
prig
Что означает использовать "чистый" ethernet?

Любое сетевое оборудование(устаревшее не в счёт) должно использовать эти поля для парсинга ethernet фреймов.
Т.е., от значения одних полей будет зависеть наличие/положение других полей и размер фрейма.

Ну а если у Вас будет не так, значит Вы будете использовать нестандартный формат фрейма, который стороннее оборудование просто не поймёт.
Т.е., ни разу не "чистый" ethernet.

b-volkov
Цитата(prig @ Mar 13 2018, 18:49) *
Что означает использовать "чистый" ethernet?

Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д. Компьютер передает Ethernet-пакет, устройство (мое же) его принимает. И наоборот.
Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей, но вот Wireshark при определенных цифрах в поле type/length помечает кадры как некорректные. А я как раз планировал это поле использовать именно как длину.
Цитата
Ну а если у Вас будет не так, значит Вы будете использовать нестандартный формат фрейма, который стороннее оборудование просто не поймёт.

Хотелось бы сразу уточнить,я в своем посте под сетевым оборудованием подразумевал коммуникационные устройства: хабы, роутеры, свичи. Если проблемы с этим оборудованием возможны, тогда скажите мне, чайнику, как в моем случае правильно заполнить эти поля?
RobFPGA
Приветствую!

Цитата(b-volkov @ Mar 14 2018, 11:30) *
Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д. Компьютер передает Ethernet-пакет, устройство (мое же) его принимает. И наоборот.
Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей, но вот Wireshark при определенных цифрах в поле type/length помечает кадры как некорректные. А я как раз планировал это поле использовать именно как длину.

Хотелось бы сразу уточнить,я в своем посте под сетевым оборудованием подразумевал коммуникационные устройства: хабы, роутеры, свичи. Если проблемы с этим оборудованием возможны, тогда скажите мне, чайнику, как в моем случае правильно заполнить эти поля?

Вообще то чистый Ethernet это первые 14 байт (естественно без VLAN) - как раз dst, src адреса и 16 bit type.
Значение в этом поле кодирует либо длину данных и она должна быть в диавазоне 0x0000-0x05DC.
Либо тип последующего заголовка - и при этом длинна пакета будет определятся в зависимости от этого типа.

Естественно если Вы в type что то записали > 0x05DC то Wireshark пытается распарсить все что после type в соответствии со стандартным значением в этом поле.
Если Вы хотите гонять такой траффик через стандартные устройства то что бы не было проблем придется следовать канонам сетевой религии - а иначе результат не гарантирован.

Ну а если и так сойдет то для Wireshark можно создать свой шаблон для парсинга чтобы он не ругался на такое святотатство.

Удачи! Rob.
b-volkov
Цитата(RobFPGA @ Mar 14 2018, 12:49) *
Вообще то чистый Ethernet это первые 14 байт (естественно без VLAN) - как раз dst, src адреса и 16 bit type.
Значение в этом поле кодирует либо длину данных и она должна быть в диавазоне 0x0000-0x05DC.
Либо тип последующего заголовка - и при этом длинна пакета будет определятся в зависимости от этого типа.

Мне тогда непонятно вот что: а как определяется, как интерпретировать поле type/length, как тип или как длину?
Я использую его как длину и, естественно, число там не превышает 0x05DC. Тем не менее, Wireshark реагирует на число в этом поле непонятым для меня образом. Внизу приведены скриншоты Wireshark при передаче/приеме трех пакетов, у которых в поле type/length находятся числа 255,256 и 257.
Пакеты передаются в мой девайс, который возвращает их обратно в РС.
Нажмите для просмотра прикрепленного файла
Пакет воспринимается как Eternet II, поле type/length как тип, сразу за этим полем идут собственно данные.
Нажмите для просмотра прикрепленного файла
Пакет воспринимается как IEEE 802.3 но почему-то некорректная CRC. Хотя этот пакет нормально воспринимается получателем.
Нажмите для просмотра прикрепленного файла
Пакет воспринимается как IEEE 802.3, поле type/length - как длина, следующие четыре байта - как служебные
Практически одинаковые пакеты, а какая разница!

Собственно говоря, мне без разницы, как мои пакеты интерпретирует Wireshark. Главное, что бы их понимали чужие железки.
По сему вопрос: если я укажу в поле type/length правильную длину (0x0000-0x05DC) и, бог с ним, не буду использовать следующие за ней 4 байта, а заполню их нулями, то можно ли быть уверенным, что такой пакет будет считаться корректным?

RobFPGA
Приветствую!

Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым)
Поэтому то что Вам кажется как 0x00FF Wireshark воспринимает как 0xFF00 (и чем он Вам честно сообщает).
Отсюда и все остальное wacko.gif

Надо бы хоть чуть чуть почитать псалмы о формате сетевых пакетов.

Удачи! Rob.



prig
Цитата(RobFPGA @ Mar 14 2018, 12:49) *
Приветствую!


Вообще то чистый Ethernet это первые 14 байт (естественно без VLAN) - как раз dst, src адреса и 16 bit type.
...


Строго говоря, "чистый Ethernet" - это 802.3

А так, да. При том, что 802.3 определяет кучу полей фрейма, для доступа к среде ему только этот минимум и нужен.
До остальных полей ему фиолетово. Впрочем, и Ethertype прислонился к собственно 802.3 слегка боком.

Но вот как только появляется коммутация, всплывают прочие разделы 802 и хренова туча других стандартов.
При этом, без Ethertype обойтись иногда можно, но бывает и сложно (например, при использовании семейства протоколов STP и т.п.).
И это только на уровне простейшей коммутации. А дальше - больше. Из серии "чем дальше в лес, тем толще партизаны".

Так что, затею ТС трудно назвать удачной.

Цитата(b-volkov @ Mar 14 2018, 11:30) *
Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д....
...
Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей,...


- Дык, даже на канальном уровне используется куча протоколов.
Т.е., на произвольном значении поля type/length можно срубиться на раз ещё до L3/L4.

- Похоже, что это просто очень тупой роутер. Как вариант - просто отключены кое-какие фичи.
b-volkov
Цитата(RobFPGA @ Mar 14 2018, 16:41) *
Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым)

Да, мой косяк. Спасибо за разъяснение! Великая сила привычки, я полагал, что кроме little-endian других вариантов и не бывает sm.gif. Буду пробовать...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.