Почему я вижу кадры Ethernet, размер которых превышает размер заголовка MTU + Ethernet?

360
Janus Varmarken

У меня есть маршрутизатор Wi-Fi потребительского уровня, на котором размещена локальная сеть. Маршрутизатор подключен к Интернету через сеть кампуса (т. Е. Кабель Ethernet соединяет порт WAN с разъемом Ethernet кампуса). Я использую tcpdumpинтерфейсы WLAN и WAN маршрутизатора для захвата трафика, генерируемого устройствами, подключенными к маршрутизатору.

Меня озадачивает то, что я вижу кадры, которые значительно длиннее, чем предел, определенный MTU, плюс размер заголовка уровня 2. Сначала я подумал, что это должно быть объяснено поддержкой кампусной сетью гигантских кадров Ethernet, но они (как правило) ограничены MTU 9 000 байт, и я вижу некоторые кадры длиной почти 13 000 байт.

Затем я подумал, что, поскольку устройства подключены по Wi-Fi, они не ограничены MTU Ethernet, а скорее MTU 802.11, но этот размер составляет около 2304 байта, поэтому кадр 13 КБ все еще слишком велик. Примечание: кадры отображаются в Wireshark как кадры Ethernet, но это, по-видимому, объясняется тем, что кадры 802.11 преобразуются в «поддельные» кадры Ethernet до их доставки в сетевой стек ОС, как описано здесь :

Адаптеры 802.11 часто преобразуют пакеты данных 802.11 в поддельные пакеты Ethernet перед их передачей на хост, и, даже если они этого не делают, драйверы для адаптеров часто делают это перед подачей пакетов в сетевой стек операционной системы и механизм захвата пакетов.

Некоторые интересные наблюдения, которые могут помочь вам пролить свет на это:

  • Для трассировки, захваченной на интерфейсе WLAN маршрутизатора, это только пакеты, исходящие от локального устройства и идущие к узлу Интернета, которые превышают MTU. Все входящие пакеты (Интернет-хост на локальное устройство) имеют длину 1514 или меньше.
  • Для трассировки, захваченной на интерфейсе WAN маршрутизатора, только входящий трафик (Интернет-хост к маршрутизатору) превышает Ethernet MTU.
  • Можно действительно «сопоставить» большой кадр (который превышает MTU), захваченный на одной стороне маршрутизатора, с несколькими кадрами, которые имеют размер MTU или меньше на другой стороне маршрутизатора, путем перекрестной ссылки на две трассы.
  • Это весь трафик TLS (но это не должно иметь никакого значения, поскольку это ограничение уровня 2).

Я предполагаю, что такое поведение может быть связано с TSO / GSO на основе этого ответа . Тем не менее, он говорит, что нужно не увидеть эти большие кадры, если один выполняет захват на сетевом устройстве:

[...] вы могли бы видеть, что TCP отправляет большие сегменты, чем MTU. Однако пакеты на проводе будут иметь размер только MTU. Вы можете убедиться в этом, захватив сетевое устройство (коммутатор) и т. Д.

Я действительно выполняю захват на сетевом устройстве (маршрутизаторе), но все еще вижу большие кадры. Тем не менее, маршрутизатор работает с LEDE / OpenWrt, что, по-моему, делает его «усовершенствованным» сетевым устройством в большей степени, чем реальный хост, чем сетевое устройство ...?

Я прилагаю пример кадра, который превышает MTU. Обратите внимание, что этот кадр был захвачен на интерфейсе WAN маршрутизатора ( eth0). Это просто результат TSO / GSO, или происходит что-то еще, о чем я не знаю? Кроме того, TSO / GSO работает в обоих направлениях или это относится только к исходящим пакетам? Если последнее имеет место, то TSO / GSO не может быть объяснением, так как пример пакета является входящим с точки зрения маршрутизатора.

Обновление: отключение TSO / GSO на интерфейсах WAN и WLAN маршрутизатора ничего не изменило; большие кадры все еще присутствуют при повторном запуске эксперимента.

Example of frame that exceeds MTU

2
Быть _router_ делает его своего рода «улучшенным» сетевым устройством. Коммутаторы, как правило, не изменяют пропущенные кадры, но маршрутизаторы делают это по замыслу (хотя ... обычно не до такой степени, как сборка TCP) - так что GSO все равно может повлиять на него. grawity 5 лет назад 0
@grawity Под «расширенным» я подразумевал, что маршрутизатор становится более полноценным хостом, который реализует все уровни, а не «обычным» маршрутизатором, который реализует только уровни 2 и 3 :) Janus Varmarken 5 лет назад 0

1 ответ на вопрос

3
Spiff

Это только ваш маршрутизатор делает LRO (или, может быть, GRO).

Это не TSO / GSO, потому что вы видите его только в пакетах, полученных вашим маршрутизатором, а не в тех, которые он передает.