|
|
|
Служебные поля Ethernet-пакета, Нужно ли их заполнять? |
|
|
|
Mar 14 2018, 08:30
|
Частый гость
Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907
|
Цитата(prig @ Mar 13 2018, 18:49) Что означает использовать "чистый" ethernet? Это означает, что я не планирую использовать поверх Ethernet каких-либо стандартных протоколов типа TCP,UDP и т.д. Компьютер передает Ethernet-пакет, устройство (мое же) его принимает. И наоборот. Сейчас комп и устройство соединены через LAN-порты роутера DIR-300. Пакеты нормально передаются независимо от значения полей, но вот Wireshark при определенных цифрах в поле type/length помечает кадры как некорректные. А я как раз планировал это поле использовать именно как длину. Цитата Ну а если у Вас будет не так, значит Вы будете использовать нестандартный формат фрейма, который стороннее оборудование просто не поймёт. Хотелось бы сразу уточнить,я в своем посте под сетевым оборудованием подразумевал коммуникационные устройства: хабы, роутеры, свичи. Если проблемы с этим оборудованием возможны, тогда скажите мне, чайнику, как в моем случае правильно заполнить эти поля?
|
|
|
|
|
Mar 14 2018, 09:49
|
Профессионал
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643
|
Приветствую! Цитата(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.
|
|
|
|
|
Mar 14 2018, 13:21
|
Частый гость
Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907
|
Цитата(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 байта, а заполню их нулями, то можно ли быть уверенным, что такой пакет будет считаться корректным?
|
|
|
|
|
Mar 14 2018, 13:41
|
Профессионал
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643
|
Приветствую! Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым) Поэтому то что Вам кажется как 0x00FF Wireshark воспринимает как 0xFF00 (и чем он Вам честно сообщает). Отсюда и все остальное Надо бы хоть чуть чуть почитать псалмы о формате сетевых пакетов. Удачи! Rob.
|
|
|
|
|
Mar 15 2018, 12:17
|
Знающий
Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595
|
Цитата(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. - Похоже, что это просто очень тупой роутер. Как вариант - просто отключены кое-какие фичи.
|
|
|
|
|
Mar 19 2018, 05:42
|
Частый гость
Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907
|
Цитата(RobFPGA @ Mar 14 2018, 16:41) Для начала Вам было бы неплохо знать что формат ВСЕХ переменных в полях заголовков big-endian (старший байт первым) Да, мой косяк. Спасибо за разъяснение! Великая сила привычки, я полагал, что кроме little-endian других вариантов и не бывает . Буду пробовать...
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|