Почему Mac OS X настаивает на изменении моего MTU на 1500?

Вопрос или проблема

Недавно (я думаю, после обновления до 10.6.4) Mac OS X настаивал на изменении моего MTU на 1500, хотя маршрутизатор, к которому мой Mac подключен напрямую, имеет MTU 1472. Я заметил, что ручная установка MTU на 1472 значительно увеличивает производительность, предположительно потому, что это практически устраняет фрагментацию пакетов, но Mac OS X периодически возвращает MTU обратно на 1500.

Кто-нибудь знает, почему это происходит и как это остановить?

Вы можете отключить автоматическое определение размера MTU на Mac OS X с помощью следующей команды:

  • Только сессия :

sudo sysctl -w net.inet.tcp.path_mtu_discovery=0

  • Постоянно :

    • Отредактируйте файл /etc/sysctl.conf, например :

      sudo nano /etc/sysctl.conf

    • Затем добавьте следующую строку :

      net.inet.tcp.path_mtu_discovery=0

    • Наконец, перезагрузите систему

Это предотвратит автоматическую установку размера MTU на Mac OS X, но вам все равно придется настраивать свой размер вручную.

Временным решением может быть выполнение следующей команды в Терминале (или выполнение ее через AppleScript) каждый раз, когда вы входите в систему:

sudo networksetup -setMTU en1 1472

Это не решит основную проблему сброса MTU. Я рекомендую сообщить об ошибке в Apple через BugReporter.

К сожалению, вы не упомянули как вы устанавливали MTU. Вы уже пробовали это?

Mac OS X 10.4 или более поздние версии: Как изменить MTU для целей устранения неполадок

Это официальный способ установки нестандартного MTU постоянно.

Я устанавливал MTU с помощью команды ifconfig.

ifconfig en0 mtu=1492 

Вы должны использовать свой собственный идентификатор адаптера, мой — en0.

Это единственный способ, которым он оставался установленным. Я пробовал использовать “официальный” метод, и он всегда сразу же возвращался обратно.

Я также использовал вышеуказанную команду, чтобы отключить автоматическое:

net.inet.tcp.path_mtu_discovery=0

Я попробовал оба способа и мне пришлось перейти на ручной, чтобы это работало.

Я проводил некоторые сетевые тесты на osx 10.6.7 и обнаружил, что mtu всегда сбрасывается на 1500. Решение заключалось в том, чтобы включить автоматическое определение в osx и убедиться, что маршрутизатор установлен на желаемый mtu, а не в автоматическом режиме.

С помощью этой команды вы можете точно видеть, где происходит фрагментация:

ping -g 1400 -G 1500 -h 1 -D  www.google.com

Каждый отправленный пакет будет на один байт длиннее, поэтому первый пакет будет размером 1400 байт, затем следующий 1401 и так далее.

Результаты ping покажут icmp_seq=X, где X — это номер пакета. Другими словами, вы берете 1400 из команды плюс номер icmp_seq, и это будет размер пакета.

Пусть работает до тех пор, пока не истечет время ожидания.


Чтобы ответить на ваш вопрос о том, почему:

Я обнаружил, что если вручную установить MTU на 1500, команда ping будет начинать истекать в 1472. Но если я установлю MTU на 1472, а затем снова запущу команду, она начнет истекать около 1444. Кажется, что OSX уже корректирует размер пакета, чтобы учесть накладные расходы в 28 байт.

Ответ или решение

Почему Mac OS X меняет MTU на 1500 и как это остановить

Ваша проблема с изменением MTU (Maximum Transmission Unit) в Mac OS X на 1500, несмотря на то что ваш маршрутизатор поддерживает MTU 1472, может быть связана с несколькими факторами, включая настройки системы и механизмы автоматического обнаружения MTU.

Причины изменения MTU

  1. Автоматическое обнаружение MTU: После обновления до Mac OS X 10.6.4 система могла включить автоматическое обнаружение MTU. Это значит, что операционная система пытается определить оптимальный размер пакета для передачи данных через сеть, что может привести к повторной установке MTU на значение 1500.

  2. Стандартные настройки: MTU 1500 является стандартным размером для Ethernet-соединений. Mac OS X применяет это значение по умолчанию, чтобы обеспечить совместимость с большинством сетевых устройств. Если ваша сеть поддерживает меньший MTU, это может вызвать фрагментацию пакетов, что, как вы заметили, негативно сказывается на производительности.

Решения проблемы

Чтобы остановить Mac OS X от автоматической смены MTU на 1500, вы можете воспользоваться несколькими методами:

  1. Отключение автоматического обнаружения MTU:
    Вы можете отключить автоматическое обнаружение размера MTU с помощью следующей команды в терминале:

    sudo sysctl -w net.inet.tcp.path_mtu_discovery=0

    Для применения этих изменений на постоянной основе, добавьте строку net.inet.tcp.path_mtu_discovery=0 в файл /etc/sysctl.conf, а затем перезагрузите систему.

  2. Установка MTU вручную:
    Вы также можете вручную установить MTU, используя команду networksetup. Например, для устройства en1 выполните:

    sudo networksetup -setMTU en1 1472

    Однако, если вы заметили, что MTU остается у установленного значения только после использования команды ifconfig, вы можете использовать её, чтобы установить MTU:

    ifconfig en0 mtu 1472

    Помните, что использование ifconfig может быть временным решением. Для более стабильной настройки используйте networksetup.

  3. Скрипт для автоматизации:
    Чтобы автоматизировать восстанавливающее изменение MTU при каждом запуске, вы можете создать скрипт на AppleScript или использовать shell-скрипт, который запускает нужную команду сразу после входа в систему.

Итог

Изменения, касающиеся MTU в Mac OS X, могут быть следствием как настроек системы, так и поведения автоматической настройки. Чтобы обеспечить оптимальную работу сетевых подключений, рекомендуется вручную установить MTU в соответствии с возможностями вашего маршрутизатора и отключить автоматическое обнаружение. Это поможет избежать проблемы с фрагментацией пакетов и повысит общую производительность сети.

Если после исполнения всех вышеописанных шагов ваша проблема не разрешится, рекомендую обратиться в службу поддержки Apple или оставить сообщение о возможном сбое в работе системы на официальном сайте Apple.

Оцените материал
Добавить комментарий

Капча загружается...