Глядя на Ethernet запись в Википедии, я не могу понять, как указывается длина кадра Ethernet. Поле заголовка EtherType / Length, по-видимому, может указывать либо тип кадра, либо явную длину, и я предполагаю, что в случае типа кадра он должен выполнить некоторую другую логику, чтобы выяснить, какова длина пакета. Например, если поле EtherType равно 0x0800, это указывает на полезную нагрузку IPv4, и поэтому принимающая сетевая карта должна будет проверить первые 32 бита полезной нагрузки, чтобы определить длину IP-пакета и, следовательно, выяснить общую длину кадра Ethernet, и знать, когда искать контрольную сумму конца кадра и промежуток между кадрами.
Это звучит правильно? Я также посмотрел на Спецификация IEEE 802.3 для Ethernet (во всяком случае, часть 1), что, кажется, подтверждает это, но это довольно непрозрачно.
Подуровень физического кодирования отвечает за разграничение кадров и отправку их на уровень MAC.
В Gigabit Ethernet, например, схема кодирования 8B / 10B использует 10-битную кодовую группу для кодирования 8-битного байта. Дополнительные два бита указывают, является ли байт управляющей информацией или данными. Управляющая информация может быть конфигурацией, Start_of_packet, End_of_packet, IDLE, Carrier_extend, Error_propagation.
Вот как сетевая карта узнает, где начинается и заканчивается кадр. Это также означает, что длина кадра неизвестна до его полного декодирования, аналогично строке с завершающим NULL в C.
Статья, на которую вы действительно хотите ответить, - это http://en.wikipedia.org/wiki/Ethernet_II_framing; который говорит:
Поскольку этот промышленно разработанный стандарт прошел формальный процесс стандартизации IEEE, поле EtherType было изменено на поле длины (данных) в новом стандарте 802.3. (Исходные пакеты Ethernet определяют свою длину с помощью кадрирования, которое их окружает, а не с явным счетчиком длины.) Поскольку получатель пакета все еще должен знать, как интерпретировать пакет, стандарт требовал, чтобы заголовок IEEE 802.2 соответствовал длине и указывал тип пакета.
По логике, вариантов всего три:
Один из них работает в Ethernet, потому что в настоящее время нет других доступных вариантов для современных сетей;) 1-й и 3-й неправильные для Ethernet, так что вы правы!
Потребовалось время, чтобы разобраться с этим один раз раньше и снова сейчас. Информации о нем не так много, что удивительно, ведь это такой очевидный вопрос. В конце концов я остановился на решении, согласно которому используются поля длины в заголовках пакетов. См. Следующую ссылку
http://www3.rad.com/networks/infrastructure/lans/etherform.htm#_ieee