Форум разработчиков электроники ELECTRONIX.ru: Служебные поля Ethernet-пакета - Форум разработчиков электроники ELECTRONIX.ru

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Служебные поля Ethernet-пакета Нужно ли их заполнять?

#1 User is offline   b-volkov Icon

  • Частый гость
  • PipPip
  • Group: Свой
  • Posts: 137
  • Joined: 10 апреля 07

Posted 13 марта 2018 - 14:35

В зависимости от стандарта Ethernet, в его пакете кроме полей адреса присутствуют различные служебные поля:Type/Length, DSAP, SSAP, CONTROL, SNAP. Я планирую использовать "чистый" ethernet, и мне эти поля без надобности. Могу ли я использовать их в своих целях или там должны быть записаны определенные цифры? Не будут ли пакеты с некорректными значениями полей восприниматься каким-либо сетевым оборудованием как плохие и сбрасываться?
0

#2 User is offline   prig Icon

  • Знающий
  • PipPipPipPip
  • Group: Свой
  • Posts: 869
  • Joined: 30 января 08

Posted 13 марта 2018 - 18:49

Что означает использовать "чистый" ethernet?

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

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


0

#3 User is offline   b-volkov Icon

  • Частый гость
  • PipPip
  • Group: Свой
  • Posts: 137
  • Joined: 10 апреля 07

Posted 14 марта 2018 - 11:30

Цитата(prig @ Mar 13 2018, 18:49) <{POST_SNAPBACK}>
Что означает использовать "чистый" ethernet?

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

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

#4 User is offline   RobFPGA Icon

  • Профессионал
  • PipPipPipPipPip
  • Group: Свой
  • Posts: 1 214
  • Joined: 23 декабря 04

Posted 14 марта 2018 - 12:49

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

Цитата(b-volkov @ Mar 14 2018, 11:30) <{POST_SNAPBACK}>
Это означает, что я не планирую использовать поверх 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.
0

#5 User is offline   b-volkov Icon

  • Частый гость
  • PipPip
  • Group: Свой
  • Posts: 137
  • Joined: 10 апреля 07

Posted 14 марта 2018 - 16:21

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

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

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


0

#6 User is offline   RobFPGA Icon

  • Профессионал
  • PipPipPipPipPip
  • Group: Свой
  • Posts: 1 214
  • Joined: 23 декабря 04

Posted 14 марта 2018 - 16:41

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

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

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

Удачи! Rob.




0

#7 User is offline   prig Icon

  • Знающий
  • PipPipPipPip
  • Group: Свой
  • Posts: 869
  • Joined: 30 января 08

Posted 15 марта 2018 - 15:17

Цитата(RobFPGA @ Mar 14 2018, 12:49) <{POST_SNAPBACK}>
Приветствую!


Вообще то чистый 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) <{POST_SNAPBACK}>
Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д....
...
Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей,...


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

- Похоже, что это просто очень тупой роутер. Как вариант - просто отключены кое-какие фичи.
0

#8 User is offline   b-volkov Icon

  • Частый гость
  • PipPip
  • Group: Свой
  • Posts: 137
  • Joined: 10 апреля 07

Posted 19 марта 2018 - 08:42

Цитата(RobFPGA @ Mar 14 2018, 16:41) <{POST_SNAPBACK}>
Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым)

Да, мой косяк. Спасибо за разъяснение! Великая сила привычки, я полагал, что кроме little-endian других вариантов и не бывает sm.gif. Буду пробовать...
0

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1
0