Цитата(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 байта, а заполню их нулями, то можно ли быть уверенным, что такой пакет будет считаться корректным?