Вопрос или проблема
Недавно (я думаю, после обновления до 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
-
Автоматическое обнаружение MTU: После обновления до Mac OS X 10.6.4 система могла включить автоматическое обнаружение MTU. Это значит, что операционная система пытается определить оптимальный размер пакета для передачи данных через сеть, что может привести к повторной установке MTU на значение 1500.
-
Стандартные настройки: MTU 1500 является стандартным размером для Ethernet-соединений. Mac OS X применяет это значение по умолчанию, чтобы обеспечить совместимость с большинством сетевых устройств. Если ваша сеть поддерживает меньший MTU, это может вызвать фрагментацию пакетов, что, как вы заметили, негативно сказывается на производительности.
Решения проблемы
Чтобы остановить Mac OS X от автоматической смены MTU на 1500, вы можете воспользоваться несколькими методами:
-
Отключение автоматического обнаружения MTU:
Вы можете отключить автоматическое обнаружение размера MTU с помощью следующей команды в терминале:sudo sysctl -w net.inet.tcp.path_mtu_discovery=0
Для применения этих изменений на постоянной основе, добавьте строку
net.inet.tcp.path_mtu_discovery=0
в файл/etc/sysctl.conf
, а затем перезагрузите систему. -
Установка MTU вручную:
Вы также можете вручную установить MTU, используя командуnetworksetup
. Например, для устройстваen1
выполните:sudo networksetup -setMTU en1 1472
Однако, если вы заметили, что MTU остается у установленного значения только после использования команды
ifconfig
, вы можете использовать её, чтобы установить MTU:ifconfig en0 mtu 1472
Помните, что использование
ifconfig
может быть временным решением. Для более стабильной настройки используйтеnetworksetup
. -
Скрипт для автоматизации:
Чтобы автоматизировать восстанавливающее изменение MTU при каждом запуске, вы можете создать скрипт на AppleScript или использовать shell-скрипт, который запускает нужную команду сразу после входа в систему.
Итог
Изменения, касающиеся MTU в Mac OS X, могут быть следствием как настроек системы, так и поведения автоматической настройки. Чтобы обеспечить оптимальную работу сетевых подключений, рекомендуется вручную установить MTU в соответствии с возможностями вашего маршрутизатора и отключить автоматическое обнаружение. Это поможет избежать проблемы с фрагментацией пакетов и повысит общую производительность сети.
Если после исполнения всех вышеописанных шагов ваша проблема не разрешится, рекомендую обратиться в службу поддержки Apple или оставить сообщение о возможном сбое в работе системы на официальном сайте Apple.