Назад | Перейти на главную страницу

Что я не понимаю в вычислении MTU?

Хорошо, я только что закончил устранение проблемы с большими кадрами между несколькими серверами Xserve, Netgear GSM7224 и Drobo B800i. Оказалось, что Xserve (Mac OS X 10.6.8 Server) и Drobo B800i принимают MTU в байтах, как обычно и ожидается (1500-9000), но Netgear, похоже, хотел, чтобы он включал различные заголовки / нижние колонтитулы Ethernet (трейлеры ), и в конечном итоге я получил Xserve & Drobo, настроенный с MTU 9000, а для портов Netgear установлено значение MTU 9216.

Я использовал следующие команды для тестирования и проверки MTU между двумя серверами X через Netgear (Примечание: это команды Mac OS X, для Windows и Linux они отличаются):

ping -D -s <mtu> <ip_address>

traceroute -F <ip_address> <mtu>

Отмечено использование первого в man страница как: «Укажите количество байтов данных для отправки. Значение по умолчанию - 56, что переводится в 64 байта данных ICMP в сочетании с 8 байтами данных заголовка ICMP». При тестировании я обнаружил, что ping -D 1472 <ip_address> был эквивалентен MTU 1500 из-за 8 байтов данных заголовка ICMP плюс 20 байтов заголовков IP (см. этот и этот). Все это имеет смысл.

Теперь, почему эквивалентная команда для 9000 MTU ping -D -s 8164 <ip_address>? Я убедился, что это предел, прежде чем я начну получать ошибки «sendto: Message too long», но также и то, что 9000 MTU работает правильно, поскольку traceroute -F <ip_address> 9000 работает и traceroute -F <ip_address> 9001 не. Итак, почему 8164? Я ожидал 8972 (MTU - 28 байт, как и для 1500 MTU).

Кроме того, почему 9216 MTU для Netgear? Я насчитал 42 байта для заголовков MAC и Ethernet (включая CRC), плюс 20 для заголовков IP (которые должны съесть MTU).

Я действительно устала в этой математике и знаю, что просто что-то упускаю.

Добро пожаловать в странный и загадочный мир гигантских кадров! Это нормально, что у Ethernet-оборудования с большим размером кадра MTU> 1518 и <65 Кбайт, и вам нужно найти параметр, который является наименьшим общим знаменателем в вашем домене L2, чтобы обеспечить правильный большой трафик.

Я предполагаю, что ваша реализация ping / ICMP работает только для полезной нагрузки 8192 байта, поэтому 8164 + 28 (20 для заголовка IP и 8 для заголовка ICMP) дает вам 8192 байта.

MTU 9216 также является стандартным размером 9K MTU для многих устройств Cisco, поэтому я предполагаю, что Netgear хочет быть «совместимым» с этим.

Также обратите внимание, что к спецификации размера MTU следует относиться серьезно, многие производители не включают 802.1Q (vLAN) или даже заголовки кадров L2. Обратитесь к документации поставщика коммутатора, что они на самом деле указывают, когда говорят о размере MTU.