пятница, 6 августа 2010 г.

Как настроить MTU

Опытным путем


В командной строке выполнить скрипт:
FOR /L %a IN (1300,10,1500) DO ping -f -l %a ya.ru >> ping.txt
Им выполняется отправка пакетов разной длины (от 1300 до 1500 с шагом 10) и проверяется время отклика.



Оптимизация интернета. Как настроить MTU?


Если у Вас бывает так, что мелкие посты и комменты легко уходят, а крупные не всегда доходят до назначения (на форумы или в другую блог-систему), то причина может крыться в неоптимально установленном (завышенном) параметре MTU. Побывав в сообществе, где это обсуждается, я понял, что большинство людей не знает, ни что это такое, ни как оценить, нужно ли параметр менять, ни как это сделать. Поэтому я и решил написать этот пост. Всё написанное исследовалось мной только на Windows XP. И исследования показали, что для большинства провайдеров в России параметр, установленный в ХР по умолчанию (1500), явно завышен и нуждается в коррекции.

Что такое MTU? Теория.

Когда по сети передаётся большой пакет данных, он разбивается на куски (фрагментируется), а затем сшивается в точке назначения. Параметр MTU (Maximum Transmission Unit) является одним из основных, управляющих этой разбивкой в TCP/IP. Некоторые думают, что чем он выше, тем быстрее работает связь. Однако, это так только до определённого предела. Завышение MTU может привезти к резкому падению производительности и, главное, к снижению надёжности доставки пакетов. Вся беда в том, что процесс фрагментации плохо стандартизирован и что по пути пакет может пройти через массу разношёрстных и даже устаревших шлюзов. Эти шлюзы могут начать дофрагментировать ваши фрагменты (производительность резко падает). А некоторые могут даже не сообщить об этом шлюзу-отправителю (надёжность резко падает).

В Window XP по умолчанию установлены параметры, позволяющие и подбирать на ходу оптимальную фрагментацию (но не превышая MTU!), и вносить "плохие" шлюзы в чёрный список. Однако, шлюзы, не возвращающие назад о себе информацию, губят этот прекрасный замысел. Спасение только одно – подобрать и установить оптимальный MTU, т.е. уменьшить максимальный размер фрагментов принудительно.


Как подобрать оптимальное значение MTU?

Первым делом запустите команду cmd, чтобы открыть окно сеанса DOS, в котором будут запускаться все остальные команды из командной строки. Связь будем проверять с ЖЖ и с провайдером.

Сначала просто проверьте связь с сайтом:
ping bulygin.su
Если в ответ вы получите ответы со значенями времени, то всё нормально. Команда ping послала 4 эхо-сигнала и получила на них 4 эхо-ответа. Если пришёл ответ о превышении тайм-аута, то никакие дальнейшие эксперименты у вас не получатся. Либо нет связи с сайтом, либо она есть, но вы работаете через прокси, на котором запрещёны посылка и приём эхо-сигналов по ICMP-протоколу.

Если связь есть, то повторите команду в изменённом виде (чтобы не набивать заново, нажимайте F3 и правьте):
ping bulygin.su – f –l 1500
Что это означает? "-f" запрещает фрагментировать пакет, а "-l" (это английская "л" от слова "length", а не цифра "1") жёстко устанавливает его размер в байтах. Если пакет пройдёт, значит, связь с ЖЖ можно не оптимизировать. Если вы получите сообщение "Требуется фрагментация пакета, но установлен запрещающий флаг", то повторите эту команду, но уже в виде:
ping bulygin.su – f –l 1300
Скорее всего, пакет на этот раз пройдёт успешно. После этого я ищу удачное значение бинарным делением интервала, т.е. запускаю:
ping bulygin.su – f –l 1400
Успешно? Тогда
ping bulygin.su – f –l 1450
В конце концов, я получил предельное значение размера – 1426. Уже при размере 1427 пинг не проходил. Вот теперь прибавьте к найденному числу 28 (в моём случае – 1454) и получите оптимальный размер MTU для связи с bulygin.su. Почему именно 28? Просто при посылке эхо-сигнала к пакету автоматически пришиваются 2 заголовка (как бы надеваются 2 обёртки) – IP (20 байт) и ICMP (8 байт). Поэтому реальный размер пакета всегда получается на 28 байт больше, чем вы пингу указываете.

Но это ещё не всё. Связь с bulygin.su – не самое важное. Самое главное – правильная связь с провайдером. Узнайте IP-адрес основного шлюза вашего провайдера (он всегда сообщает его) и повторите всё с начала, подставив этот адрес в пинг-команды вместо адреса 
bulygin.su. Никогда не ставьте MTU у себя выше, чем MTU провайдера! Если MTU для bulygin.su и для провайдера получились разные, выбирайте наименьшее из них.

Ещё пара замечаний.
1. MTU провайдера – показатель стабильный, т.к. вы попадаете к нему через один шлюз. Он обычно меняется, когда что-то у себя меняет провайдер. MTU, оптимальный для 
bulygin.su, может меняться от испытания к испытанию, т.к. каждый раз вы будете проходить по разным шлюзам. Так что при появлении проблем повторите эксперимент. Корректировать придётся не так уж часто, ведь список применяемых на практике MTU ограничен.
2. Новое значение MTU вступает в силу при перезагрузке компьютера.



http://fstrange.ru/coder/about_all/kak-nastroit-mtu.html
http://ru.wikipedia.org/wiki/MTU
http://chertov.livejournal.com/43348.html

2 комментария:

  1. Чтобы сократить число манипуляций, можете воспользоваться моей утилитой для подбора MTU - http://bescomblog.com/?page_id=5160

    ОтветитьУдалить
    Ответы
    1. спс за удобную и нужную прожечку MTU

      Удалить