Hosted by uCoz

Оптимизация модемного соединения
с Интернетом в Windows 9x

Сергей Трошин
http://stnvidnoye.chat.ru

stnvidnoye@chat.ru

Пока цивилизованный мир вовсю осваивает интернет, используя широкополосный доступ посредством выделенных линий, всевозможных кабельных модемов, ISDN, ADSL и прочих недоступных нашему пользователю прибамбасов, мы с вами довольствуемся дешевой и доступной (пока не ввели повременку) модемной связью, не забывая периодически ругать ее за плохое качество и низкую скорость передачи данных.

Однако грамотным пользователям достаточно хорошо известно, что иногда удается заметно ускорить свою работу с интернетом, если удачно настроить некоторые слабо документированные параметры операционной системы Windows 9x. То, что при настройке соединения с интернет-провайдером надо первым же делом выставить параметры протокола TCP/IP, стало уже догмой и многие даже не задумываются, насколько общепринятые настройки подходят именно для их конкретного соединения.

Тем более что при этом совершенно не нужно обладать какими-то особыми знаниями - программ, предназначенных для автоматического внесения в реестр Windows всех необходимых изменений настолько много, что создается впечатление, будто все начинающие программисты набираются опыта именно на "ускорителях интернета". А между тем, слепо изменяя установленные в Windows по умолчанию значения на среднестатистические, следуя советам, почерпнутым из порой сомнительных источников, вы можете с равной вероятностью как улучшить скорость прокачки файлов, так и ухудшить ее.

Tочно так же, оставив в покое настройки ОС, вы в ряде случаев будете зря терять время и деньги, не используя по максимуму свой интернет-доступ. Что же это за таинственные параметры и каким образом следует выбирать наиболее оптимальные в каждом конкретном случае значения?

MTU
Первым делом, конечно же, надо разобраться с давно навязшим в зубах параметром MTU - Maximum Transmission Unit. В реестре он задается таким образом: 
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Class\NetTrans\000х
"MaxMTU"="1500"

Это максимальный размер пакета данных, который может быть передан за один физический кадр по протоколу TCP/IP. Дело в том, что данные от компьютера к компьютеру в интернете идут не сплошным потоком, а этими самыми кадрами - пакетами строго определенного размера. Если бы все компании и фирмы, имеющие хоть какое-то отношение к интернету, договорились о едином стандарте на размер этих пакетов, то мы бы использовали каждый такой кадр по максимуму, полностью заполняя каналы передачи данных своими битами.

Однако это не так. Мало того, что при установке нового соединения два удаленных компьютера должны согласовать между собой размер кадра, так еще и по пути к месту назначения пакет преодолевает целый ряд промежуточных серверов и маршрутизаторов, настройки MTU которых могут быть совершенно различными. При этом слишком большой пакет в пути, скорее всего, будет фрагментироваться и заполняться "воздухом", "балластом", что негативно скажется на эффективности связи.

Так, если ваш провайдер имеет установки MTU=576, а у вас в Windows задано MTU=1500, то каждый ваш пакет будет им разбиваться на три по 576 байт: 576+576+576=1728 - то есть 228 байт балласта будут добавляться к каждому вашему пакету. Но даже если провайдер тоже поставил у себя MTU=1500, то при связи с удаленным сервером вполне может попасться маршрутизатор с меньшим значением MTU и пакеты опять-таки будут фрагментироваться, замедляя передачу данных.

Несколько спасает ситуацию включенная в "виндах" по умолчанию функция автоматического определения MTU - "PMTU Discovery" или, как ее иногда называют, "MTU Auto Discovery", однако процедура вычисления MTU для каждого соединения требует немало времени, что чуть тормозит работу при прокачке небольших файлов и веб-серфинге. Да и в случае несогласования ваших параметров с параметрами провайдера эта функция вряд ли вам поможет. Конечно, существуют некие более или менее общепринятые стандарты для данного параметра: так, например, для Ethernet MTU равен 1500 байт, для SLIP - 1006, для PPPoE -1492, для PPP (то есть модемной связи с интернетом) - 576.

Но на деле ваш провайдер может выбрать отличное от этих значений число, исходя из каких-то своих соображений. Мы же в результате либо не загружаем свой канал связи полностью, отправляя кадры меньшего размера, чем это позволяет провайдер и часто посещаемые серверы, либо наоборот, наши установки превышают необходимое значение и большие пакеты идут фрагментированными, что еще более снижает возможности линии связи.

Каждый такой пакет данных в действительности состоит из нескольких сегментов - нескольких заголовков и фактических данных. Та его часть, в которой содержатся только фактические данные, называется MSS (Maximum Segment Size) - это еще один параметр протокола TCP, определяющий самый большой сегмент данных TCP, которые могут быть переданы за один раз. То есть, MTU = MSS + заголовки TCP/IP. В реестре MSS задается так:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\VxD\MSTCP
"DefaultMSS"="ваше число"

Для заголовка тоже имеется общепринятый размер - это 40 байт (20 байт IP и 20 байт TCP), следовательно, обычно MSS = MTU - 40. По этой причине в определении оптимального размера MTU есть некоторые тонкости.

Давайте изучим передачу данных при разном размере MTU по широкополосной линии T1 (пропускная способность - 1 544 000 бит/с), используя следующую формулу: 
[(MSS + заголовок) * 8 бит/байт] / [1 544 000 бит/с] = задержка на один хоп (то есть на каждый компьютер в Сети по пути нашего пакета). Используя в этой формуле разные величины MTU, мы можем вычислить задержку одного пакета. Если MTU=1500, тогда задержка = (1460 + 40) * 8 / 1 544 000 = 7,772 мс. Если же MTU=576, то задержка = (536 + 40) * 8 / 1 544 000 = 2,984 мс.

Предположим, что по пути пакета встречается 10 серверов, тогда при MTU=1500 получим задержку 77,72 мс, а при MTU=576 - 29,84 мс - разница весьма заметна.

Таким образом, очевидно, что меньшие пакеты будут переданы быстрее просто из-за ограничения производительности линии. Однако не все так просто. 
Используя ту же формулу, давайте посчитаем, за какой промежуток времени будет передан файл размером 1 Мбайт по той же широкополосной линии T1. Один мегабайт равен 1024 кбайт или 1 048 576 байт. Если MTU=1500, то, как мы выяснили, задержка на один хоп составит 7,772 мс.

Сколько при этом понадобится послать пакетов? 1 МБ / MSS = 1 048 576 / 1460 = 718,2, то есть всего требуется 719 эффективных пакетов, чтобы передать 1 мегабайт данных. Далее, умножаем 719 пакетов на 7,772 мс, получаем 5588,083 мс, или 5,588 секунд задержки на один хоп. Если же мы передаем свой файл через 10 хопов, что встречается чаще, чем один, то получаем 55,88 сек. - это время, которое мы (вернее, провайдер, имеющий линию T1) потратим на передачу файла в 1 МБ при идеальной связи. Если же MTU=576, то: 1 МБ / MSS = 1 048 576 / 536 = 1956,300, то есть при таком MTU нужно 1957 пакетов, чтобы передать 1 мегабайт.

Далее, умножаем количество пакетов на задержку каждого из них: 1957 * 2,984 = 5840,580 мс, или 5,841 секунды на один хоп. Ну и соответственно на 10 хопов придется 58,41 сек. Как видим, из-за того, что при использовании больших пакетов передается меньше заголовков, реальная скорость передачи файла получается выше.

Для того чтобы передать 1 мегабайт при использовании MTU = 1500 нужно переслать "довесок" заголовков из 28 760 байт, тогда как при использовании MTU=576 получаем аж 1957 * 40 = 78 280 байт, то есть дополнительные 49 520 байт заголовков на каждый мегабайт полезной информации. Для нашей 10-хоповой передачи это выливается в лишних 2,52 секунды при передаче каждого мегабайта даже при сверхбыстрой связи.

Эта разница, возможно, будет еще немного выше на практике, так как современные реализации TCP/IP стремятся использовать еще большие заголовки (например, дополнительные 12 байтов заголовка для отметок времени). Если же провести аналогичные расчеты для связи по модему на скорости 
33 600 кбит/с, то получим, что на передачу мегабайта информации на расстояние одного хопа, то есть непосредственно вашему провайдеру, будет потрачено в идеале 256 секунд при MTU=1500 и 268 секунд при MTU=576.

Разница на одном переходе 12 секунд или около 4,5%! Но не следует забывать, что эти цифры получатся при условии отсутствия фрагментации пакетов, то есть если у вашего провайдера MTU=1500. Если же это не так, то, разумеется, больший, чем нужно, пакет будет фрагментироваться - разбиваться на несколько пакетов и даже разбавляться "воздухом", и связь ухудшится на 10-50%.

Таким образом, логично считать, что большие пакеты в итоге все-таки предпочтительнее, и если ваш провайдер настроил свои серверы и маршрутизаторы на большие пакеты, то надо стремиться использовать это на всю катушку, но не забывать и о том, что в интернете встречаются серверы с MTU=576 (об этом чуть ниже мы еще поговорим). Тем не менее, если чистая производительность не является окончательной целью, то меньшие пакеты будут более "быстрыми", поскольку они требуют меньше времени для своих путешествий по Сети.

Этот эффект может перевешивать все другие достоинства больших пакетов в некоторых интернет-приложениях и онлайновых играх за счет уменьшения времени отклика удаленного сервера при передаче небольших объемов информации.

В интернете по пути следования ваших пакетов, вероятно, встретятся самые разные серверы с самыми разными настройками, но для начала все-таки желательно определить наилучшее значение MTU при связи только с вашим провайдером, поскольку именно оно может оказать решающее значение при оптимизации вашего доступа в Сеть.

В Windows 95 разработчиками по умолчанию было выбрано MTU=1500, что якобы не соответствует оптимальному для модемного соединения значению, которое всеми считается равным 576. В Windows 98 корпорация Microsoft уже исправила этот недостаток, и теперь по умолчанию при соединениях ниже 128 килобит в секунду мы имеем MTU=576, что вроде бы должно чаще оказываться наилучшим вариантом. Попробуем разобраться, так ли оно на самом деле.

Итак, есть несколько способов определить значение MTU, оптимальное для связи с вашим интернет-провайдером.
1. Послать письмо с вопросом в службу технической поддержки провайдера. Тут в принципе все понятно - если работники провайдера сами в курсе своих собственных настроек, то они дадут вам квалифицированный ответ, который, впрочем, не помешает все-таки и проверить самолично на практике.

2. Подключиться к интернету в терминальном режиме - иногда при осуществлении регистрации пользователя в одной из строк появляется рекомендуемое значение MTU. Для этого войдите в папку "Удаленный доступ", найдите там значок своего соединения и, щелкнув по нему правой кнопкой мыши, выберите пункт "Свойства".

На странице "Общие" открывшегося меню жмите кнопку "Настроить" возле строки с названием вашего модема и в диалоге свойств модема переходите на вкладку "Дополнительно", где установите флажок "Выводить окно терминала после соединения". Теперь соединяйтесь с провайдером и при появлении окна терминала вводите вручную имя пользователя и пароль по соответствующим запросам. Если после этого вы увидите что-то типа "Entering PPP mode. Your IP address is ххх.ххх.ххх.ххх. MaxMTU is 1524", то вам повезло - вы получили MTU провайдера. Но и тут нелишним будет проверить это значение лично.

3. И, наконец, ручное определение MTU.

дальше >>

Источник: http://www.computery.ru/upgrade/


Copyright © "Internet Zone"
Источник получения информации http://www.izcity.com/