Хорошо, я только что закончил устранение проблемы с большими кадрами между несколькими серверами 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.