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