В статье «Эффективный доступ к Сети» (см. «Мир ПК», № 2/99, с. 122) были даны общие рекомендации по подстройке размера передаваемого пакета данных. В изложенном ниже материале более подробно рассказывается о том, как установить параметры TCP/IP, чтобы ускорить соединение с Internet. Конечно, если вам не захочется вникать в различные нюансы, то просто перепишите одну из упомянутых в статье программ. Однако учтите, что они не всегда могут вам помочь. Так, PPP-Boost (см. упоминавшуюся статью) выполнит свою миссию только тогда, когда при соединении с Internet вы используете динамический IP-адрес. Вполне возможно, что при работе с данной утилитой, а также с программой TweakDUN не удастся получить на российских телефонных линиях двух-, а то и трехкратное увеличение скорости передачи данных, но тем не менее попробовать стоит. Наибольший эффект это должно дать при загрузке больших файлов с FTP-серверов.
Протоколы и стандарты
При подключении к сети Internet вы пользуетесь протоколом TCP/IP. Если говорить более корректно, то это не один протокол, а два, работающие в одной связке: Transport Control Protocol (TCP), предназначенный для передачи данных между прикладными программами в сети, и протокол сетевого уровня Internet Protocol (IP), отвечающий за пересылку информации непосредственно между ПК. Блоки данных протокола TCP, называемые сегментами, упаковываются в пакеты протокола IP. Информация об IP приведена в стандарте (Requests for Comments) RFC791, а о TCP — в RFC793. Следует также упомянуть и другие стандарты, связанные с рассматриваемой тематикой: RFC1122 и RFC1123 определяют требования, предъявляемые к узлам Internet и используемым в ней протоколам и программам, а RFC1700 назначает числовые параметры для протоколов в Internet. Все указанные выше документы можно найти по адресу http://www.cis.ohio-state.edu/hypertext/information/rfc.html.
Теперь рассмотрим параметры TCP/IP, которые следует оптимизировать для ускорения доступа в Internet и повышения его надежности. Их три:
- Maximum Transmission Unit (MTU)
- Receive Window Size (RWIN)
- Time To Live (TTL)
Модем, кбит/с | Максимальное значение RWIN | Оптимальное значение RWIN |
28,8 | 3216 | 2144 |
33,6 | 3752 | 3216 |
56 | 5360 | 4824 |
Обычно два ПК соединяются не впрямую, а через цепочку маршрутизаторов, последовательно передающих пакет от отправителя к адресату. Для каждого из них обязательно задается максимальный размер пакета (в байтах), который он может передать, называемый Maximum Transmission Unit. Если маршрутизатор получит пакет большего размера, чем заданный для него MTU, то для пересылки он разобьет пакет на несколько частей. Такой процесс называется фрагментацией. Достигнувший пункта назначения фрагментированный пакет будет воссоздан в первозданном виде. В стандартах RFC791 и RFC1122 определено, что если приемник не получил все части пакета в течение определенного времени (рекомендуемый период составляет 60 с), то вся информация аннулируется и требуется ее повторная пересылка. Следовательно, фрагментация увеличивает вероятность того, что пакет не дойдет до получателя, а также замедляет передачу данных в Internet. Подобная проблема может быть решена правильным выбором значения MTU. Дело в том, что каждая сетевая технология определяет некое рекомендуемое значение MTU, например, для Ethernet оно составляет 1500, а для Internet — 576. Однако встречаются маршрутизаторы с величинами MTU как меньшими, так и большими, чем 576.
Если MTU, равное 576, не дает желаемого эффекта, можно выбрать его из следующего ряда: 512, 552, 556, 1006, 1024, 1064 и 1152 (эти величины получены в результате исследований фирмы Patterson Design Systems). Причем не забывайте изменять величину RWIN с учетом приведенных ниже рекомендаций. Имейте в виду, что нет смысла задавать значение MTU, которое превысит установленное у вашего провайдера, поскольку тогда фрагментация пакетов начнется уже на первом этапе пересылки.
Блоки данных, используемые в протоколе TCP, называются сегментами. Стандарт предусматривает, что после передачи определенного числа сегментов отправитель должен получить подтверждение об их приеме со стороны получателя, у которого пришедшие сегменты помещаются в буфер, называемый окном. Размеры последнего определяет параметр RWIN, пересылаемый принимающей стороной в заголовке каждого сегмента TCP. Величина RWIN должна быть кратной целому четному числу максимального размера сегмента TCP (Maximum Segment Size — MSS), в противном случае из-за повторной пересылки сегментов, не поместившихся с первого раза в окно, будет замедляться передача. Что же такое MSS? Это максимальный объем данных (в байтах), который может передаваться в одном сегменте TCP. Величина MSS не должна превышать MTU-40. В случае указания величины MTU пользователем ОС Windows автоматически принимает MSS = MTU-40, т. е. если мы выбрали MTU = 576, то MSS = 536. Начинать отсчет RWIN целесообразно с величины 4*MSS. Можно поэкспериментировать с величинами 6*MSS и 8*MSS.
В таблице на основе рекомендаций специалистов компании C3 Systems приведены максимально допустимые и оптимальные значения параметра RWIN для различных модемов (MTU = 576).
В случае, когда скорость соединения модема из-за плохого качества линии оказывается ниже, чем он может обеспечить (например, модем на 56 кбит/с соединяется на скорости 33,6 кбит/с), следует выбрать то значение RWIN, которое соответствует наиболее частой скорости соединения (в данном случае — 33,6 кбит/с).
Параметр TTL относится к пакету IP. По RFC791 он определяется как максимально допустимое время пребывания пакета в Internet, измеренное в секундах. В заголовке IP для TTL выделяется 8 бит, откуда следует, что пакет IP не может существовать более 255 с. Каждый маршрутизатор, обрабатывающий пакет, обязан уменьшить значение поля TTL на то число секунд, на которое пакет был им задержан, либо хотя бы на единицу, если задержка не превысила 1 с. А так как последнее и бывает чаще всего, то величину параметра TTL можно рассматривать равной максимально допустимому числу маршрутизаторов, которые могут встретиться на пути пакета. Таким образом не только накладывается ограничение на длительность существования пакета, но и решается проблема уничтожения «заблудившихся» или «зациклившихся» пакетов. По RFC1122 значение TTL должно превышать максимально возможное число маршрутизаторов на пути между двумя любыми точками. Если этому не следовать, то в ряде случаев пакет, не дойдя до адресата, будет просто уничтожен. Стандарт RFC1700 рекомендует для TTL значение 64. Создателям TweakDUN больше нравится величина 128. Выбор за вами.
Общая методика оптимизации
Теперь пора применить полученные знания на практике. Но как определить степень влияния различных комбинаций рассмотренных ранее параметров на скорость передачи данных? Можно, конечно, сделать это просто на глазок, но более удобным и точным способом является использование утилиты под названием DU Meter, которая позволяет точно отследить объемы получаемых и отправляемых данных. Ее 30-дневную пробную версию можно загрузить по адресу http://www.infinisource. com/dumeter.html.
Перед тем как приступить к изменению Реестра, обязательно сделайте его резервную копию. Также не забывайте перезагружать ПК после внесенных изменений — новые параметры вступят в действие только после этого. Если в результате проведенных экспериментов вы так и не увеличили скорость передачи данных, то верните настройки Windows к первоначальным значениям, удалив внесенные вами лично параметры. По данным компании Patterson Design Systems, разработавшей утилиту TweakDUN, 10—15% пользователей заявляют, что не получили сколько-нибудь ощутимого эффекта от настройки параметров TCP/IP. Если вам не повезло, не сильно расстраивайтесь — вы не одиноки.
Настройка Windows 95
В случае использования первой версии Windows 95 (не OSR2) перед настройкой параметров TCP/IP неплохо сделать следующее.
Загрузите с ftp://ftp.microsoft.com/Softlib/MSLFILES/UNIMODV.EXE новый улучшенный драйвер unimodem, позволяющий модему работать быстрее. (Владельцам Windows 95 OSR2 не стоит беспокоиться — указанный драйвер уже вошел в ее комплект.)
Теперь можно начинать настройку нужных параметров. Для справки сообщу, что в Windows 95 по умолчанию устанавливаются MTU = 1500, RWIN = 8192 и TTL = 32.
Все изменения для Windows 95 (включая OSR2) придется проводить вручную с помощью Редактора реестра. Если указанных ниже ключей в Реестре не окажется, то их следует создать самим.
В каталоге HKEY_LOCAL_ MACHINESystemCurrentControl SetServicesClassNetTrans 0?? добавьте текстовый параметр MaxMTU и присвойте ему значение 576. Последние два вопросительных знака в имени подкаталога Реестра могут соответствовать любым двум цифрам. Если в подкаталоге NetTrans вы обнаружите несколько строк типа 00??, то изменять следует ту из них, которая относится к соединению с вашим провайдером Internet. Эту ветвь легко определить по наличию в ней таких параметров, как DefaultGateway, IPAddress и IPMask (соответствуют значениям, которые вы получали для настройки соединения от провайдера). Если у вас динамический IP-адрес, то параметр IPAddress будет равен 0.0.0.0.
В каталог HKEY_LOCAL_ MACHINESystemCurrentControl SetServicesVxDMSTCP следует добавить текстовые параметры DefaultRcvWindow и DefaultTTL. Выбор конкретных значений для них обсуждался раньше.
Настройка Windows 98
В Windows 98 Microsoft признает важность правильной настройки MTU, но делает это несколько своеобразно. Если в «Панели управления» выбрать значок «Сеть» и просмотреть «Свойства» «Контроллера удаленного доступа», то в открывшемся окне закладки «Дополнительно» можно в расположенном слева списке выбрать опцию «Размер пакета IP» и установить одно из жестко привязанных к определенным величинам MTU обозначений: «Авто», «Малый», «Средний» или «Большой». Малый пакет соответствует величине 576, средний — 1000, а большой — 1500. Если вы зададите опцию «Авто», то Windows будет пытаться сама определять тип соединения и в зависимости от результата подставлять нужный размер пакета.
Установить произвольное значение MTU, а также задать свои параметры для RWIN и TTL в Windows 98 можно только через ручную корректировку Реестра — процедура та же, что и для Windows 95.
Настройка Windows NT
В операционной системе Windows NT, начиная с версии 3.5, по заявлению Microsoft, используется автоматическая настройка TCP/IP, которая определяет тип соединения и в зависимости от этого устанавливает для него оптимальные параметры. Тем не менее давайте рассмотрим те параметры Реестра, которые можно изменить исключительно в экспериментальных целях. Все они должны находиться в каталоге Реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ServicesTcpipParameters.
1. DefaultTTL. Тип REG_DWORD. Допустимы значения из диапазона 1—255. Для версии 3.51 по умолчанию принято значение 32, а для версии 4.0 — 128.
2. EnablePMTUDiscovery. Тип REG_DWORD. Допустимые значения: 0 (False) или 1 (True). По умолчанию принята 1. В этом параметре заложена основа оптимизации значения MTU в Windows NT. По умолчанию ОС будет пытаться сама определить максимально допустимый размер пакета, который без фрагментации сможет переходить между вашим и удаленным ПК. Если данный параметр установить в 0, то при обмене данными со всеми ПК, не входящими в вашу локальную сеть, будет устанавливаться значение MTU, равное 576.
3. TCPWindowSize. Тип REG_ DWORD. Допустимые значения лежат в диапазоне 0—0xFFFF. Это — параметр RWIN. По умолчанию Windows NT устанавливает для него значение, равное большей из двух величин: 4*MSS и 8192, округленное до четного числа MSS.
Более подробные сведения о конфигурировании параметров TCP/IP можно найти в базе Microsoft Knowledge Base Q120642.
Настройка других ОС
Нельзя объять необъятное, и потому, если вы счастливый обладатель компьютера Macintosh или предпочитаете пользоваться Windows 3.1 или Linux, то за рекомендациями по настройке TPC/IP можно обратиться на страницу http://www.infinisource.com/other_os.html
Литература и другие полезные источники
RFC791. Internet Protocol: DARPA Internet Program Protocol Specification. J. Postel, 1981.
RFC793. Transport Control Protocol: DARPA Internet Program Protocol Specification. J. Postel, 1981.
RFC1122. Requirements for Internet hosts — communication layers. R.T. Braden, 1989.
RFC1700. Assigned Numbers. J. Reynolds, J. Postel, 1994.
MTU FAQ, http://www.snsaccess.com/~netpro/maxmtu.htm.
Al?s Winsock Tuning FAQ, http://www.cerberus-sys.com/~belleisl/mtu_mss_rwin.html.
Microsoft Knowledge Base Q120642, TCP/IP & NBT Configuration Parameters for Windows NT.