MTU
Первым делом, конечно, необходимо разобраться в MTU, о котором наслышаны уже почти все, кто когда-либо сталкивался с Интернетом. MTU – Maximum Transmission Unit.
В реестре он задается таким образом:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Services\Class \NetTrans\000x
"MaxMTU"
=
"1500"
Это максимальный размер пакета данных, который может быть передан за один физический кадр по протоколу TCP/IP. Дело в том, что данные от компьютера к компьютеру в Интернете идут не сплошным потоком, а этими самыми кадрами.
Кадр – это пакет определенного размера. Казалось бы, все очень просто, но нет. Самым оптимальным вариантом был бы следующий. Предположим, что все компании, в той или иной мере связанные с Интернетом, договорились о едином стандарте (размере) этих пакетов, то можно было бы по максимуму использовать каналы связи, отсутствовал бы так называемый "пакетный" мусор.
К сожалению, это невозможно. Еще одна проблема состоит в том, что при установке соединения два компьютера должны согласовать размер пакетов, но еще и по пути следования их размеры могут меняться, т. к. кадр на пути к месту назначения преодолевает целый ряд промежуточных серверов и маршрутизаторов, настройки MTU которых могут быть совершенно различными. Следовательно, чем больше пакет, тем больше вероятность того, что он по пути следования будет разбит и заполнен "мусором".
Так, если ваш провайдер имеет установки MTU=576, а у вас в Windows задано MTU=1500, то каждый ваш пакет будет им разбиваться на три по 576 байт: 576+576+576=1728 – т. е. 228 байт балласта будут добавляться к каждому вашему пакету. Но даже если провайдер тоже поставил у себя MTU=1500, то при связи с удаленным сервером вполне может попасться маршрутизатор с меньшим значением MTU, и пакеты опять-таки будут фрагментироваться, замедляя передачу данных.
В Microsoft Windows есть функция автоматического определения MTU. Она включена по умолчанию и несколько спасает ситуацию. Но есть и минус: процедура вычисления MTU для каждого соединения требует немало времени, что чуть тормозит работу при прокачке небольших файлов и веб-серфинге. Да и в случае несогласования ваших параметров c параметрами интернет-провайдера эта функция вряд ли вам поможет. Конечно, существуют некие более или менее общепринятые стандарты для данного параметра: так, например, для Ethernet MTU равен 1500 байт, для SLIP – 1006, для РРРоЕ – 1492, для РРР (т. е. модемной связи с Интернетом) – 576.
На деле ваш интернет-провайдер мог выставить любые другие значения по своему усмотрению. В результате чего отправляются либо совсем маленькие кадры, которые не позволяют в полной мере загрузить канал связи, либо слишком большие, которые интернет-провайдер разбивает на меньшие. Тем самым ухудшается качество связи, скорость работы во Всемирной паутине.
На самом деле каждый пакет состоит еще из нескольких сегментов. Это заголовки и фактические данные. Та часть, где содержатся только фактические данные, называется MSS или Maximum Segment Size, что является еше одним параметром протокола TCP/IP, определяющим самый большой сегмент, теперь уже данных, передаваемых в единицу времени. В действительности MTU состоит из MSS и заголовков TCP/IP.
В реестре MSS задается так:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Services\VxD\MSTCP
"DefaultMSS"
=
"Ваше число"
Заголовок также имеет стандартный размер – 40 байт. 20 байт под IP и 20 байт под TCP. Следовательно, размер MSS составляет разность MTU и заголовка, т. е. 40 байт. Вот почему в определении оптимального размера MTU есть некоторые тонкости.
Для примера, стоит изучить передачу данных при разном размере MTU по широкополосной линии Т1 (пропускная способность – 1544000 бит/с), используя следующую формулу:
[(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 Мбайт по той же широкополосной линии Т1. Один мегабайт равен 1024 Кбайт или 1 048 576 байт. Если MTU = 1500, то, как мы выяснили, задержка на один хоп составит 7.772 мс.