Перейти к содержанию

    

Служебные поля Ethernet-пакета

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Т.е., от значения одних полей будет зависеть наличие/положение других полей и размер фрейма.

 

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

Т.е., ни разу не "чистый" ethernet.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Что означает использовать "чистый" ethernet?

Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д. Компьютер передает Ethernet-пакет, устройство (мое же) его принимает. И наоборот.

Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей, но вот Wireshark при определенных цифрах в поле type/length помечает кадры как некорректные. А я как раз планировал это поле использовать именно как длину.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Это означает, что я не планирую использовать поверх 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.

Поделиться сообщением


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

Значение в этом поле кодирует либо длину данных и она должна быть в диавазоне 0x0000-0x05DC.

Либо тип последующего заголовка - и при этом длинна пакета будет определятся в зависимости от этого типа.

Мне тогда непонятно вот что: а как определяется, как интерпретировать поле type/length, как тип или как длину?

Я использую его как длину и, естественно, число там не превышает 0x05DC. Тем не менее, Wireshark реагирует на число в этом поле непонятым для меня образом. Внизу приведены скриншоты Wireshark при передаче/приеме трех пакетов, у которых в поле type/length находятся числа 255,256 и 257.

Пакеты передаются в мой девайс, который возвращает их обратно в РС.

post-26907-1521030895_thumb.png

Пакет воспринимается как Eternet II, поле type/length как тип, сразу за этим полем идут собственно данные.

post-26907-1521030915_thumb.png

Пакет воспринимается как IEEE 802.3 но почему-то некорректная CRC. Хотя этот пакет нормально воспринимается получателем.

post-26907-1521030933_thumb.png

Пакет воспринимается как IEEE 802.3, поле type/length - как длина, следующие четыре байта - как служебные

Практически одинаковые пакеты, а какая разница!

 

Собственно говоря, мне без разницы, как мои пакеты интерпретирует Wireshark. Главное, что бы их понимали чужие железки.

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым)

Поэтому то что Вам кажется как 0x00FF Wireshark воспринимает как 0xFF00 (и чем он Вам честно сообщает).

Отсюда и все остальное :wacko:

 

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

 

Удачи! Rob.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Приветствую!

 

 

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

...

 

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

 

А так, да. При том, что 802.3 определяет кучу полей фрейма, для доступа к среде ему только этот минимум и нужен.

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

 

Но вот как только появляется коммутация, всплывают прочие разделы 802 и хренова туча других стандартов.

При этом, без Ethertype обойтись иногда можно, но бывает и сложно (например, при использовании семейства протоколов STP и т.п.).

И это только на уровне простейшей коммутации. А дальше - больше. Из серии "чем дальше в лес, тем толще партизаны".

 

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

 

Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д....

...

Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей,...

 

- Дык, даже на канальном уровне используется куча протоколов.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация