Увеличить размер окна tcp

Описание компонентов TCP для Windows

В этой статье описываются функции TCP в Windows 2000 и Windows Server 2003.

Исходная версия продукта: Windows 10 — все выпуски, Windows Server 2012 R2
Исходный номер статьи базы знаний: 224829

Аннотация

В этой статье описываются следующие функции протокола TCP в Microsoft Windows 2000 и Microsoft Windows Server 2003:

  • Размер окна TCP
  • Теперь параметры TCP поддерживаются
  • Масштабирование Windows — RFC 1323
  • Метка времени — RFC 1323
  • Защита от номеров последовательностей в оболочке (ПАВС)
  • Избирательные подтверждения (SACK) — RFC 2018
  • Поведение повторной передачи TCP и быстрая повторная передача

Функции TCP можно изменить, изменив записи в реестре.

Дополнительные сведения

В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Для получения дополнительных сведений о резервном копировании и восстановлении реестра щелкните следующий номер статьи базы знаний Майкрософт:
322756 Создание резервной копии и восстановление реестра Windows

Размер окна TCP

Размер окна приема TCP — это объем данных, которые могут быть помещены в буфер во время подключения (в байтах). Узел отправки может отправить только этот объем данных, прежде чем он будет ожидать подтверждения и обновления окна от узла получения. Стек Windows TCP/IP предназначен для самостоятельной настройки в большинстве сред и использует больше размеров окон по умолчанию по сравнению с предыдущими версиями.

Вместо использования жестко запрограммированного размера окна приема по умолчанию; TCP регулируется на равные величины максимального размера сегмента (MSS), который согласовывается во время установки подключения. При настройке окна получения равным увеличению размера MSS увеличивается процент сегментов TCP с полным размером, используемых во время массовой передачи данных.

Размер окна приема определяется следующим образом:

  1. Первый запрос на подключение, отправленный на удаленный узел, объявляет размер окна получения 16 КБ (16 384 байт).
  2. При установке подключения размер окна приема округляется до четного приращения в длину MSS.
  3. Размер окна устанавливается в четыре раза больше, чем 64 Кбайт, за исключением случаев, когда используется параметр масштабирования окна (RFC 1323).

Ознакомьтесь с разделом «масштабирование Windows».

Для подключений Ethernet размер окна обычно задается равным 17 520 байт (16 КБ округляется до 12 1460 байт). Размер окна может снижаться при установке подключения к компьютеру, поддерживающему расширенные параметры TCP-заголовка, такие как избирательные подтверждения (SACK) и штампы времени. Эти два параметра увеличивают размер заголовка TCP до 20 байтов, что приводит к уменьшению количества места для данных.

В предыдущих версиях Windows NT размер окна для подключения Ethernet составляет 8 760 байт или 6 1460 байт.

Чтобы задать определенное значение размера окна получения, добавьте значение Ткпвиндовсизе в подраздел реестра, относящийся к вашей версии Windows. Для этого выполните следующие действия:

Нажмите кнопку Пуск , выберите пункт выполнить , введите regedit и нажмите кнопку ОК.

Разверните подраздел реестра, относящийся к вашей версии Windows:

Для Windows 2000 разверните следующий подраздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

Для Windows Server 2003 разверните следующий подраздел: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

В меню Правка выберите пункт Создать , а затем Параметр DWORD.

Введите Ткпвиндовсизе в поле новое значение , а затем нажмите клавишу ВВОД.

В меню Правка выберите команду изменить .

Введите нужный размер окна в поле значение данных .

Допустимый диапазон для размера окна: 0 — 0x3FFFC000 шестнадцатеричный.

По умолчанию это значение отсутствует. При добавлении значения Ткпвиндовсизе он переопределяет используемый по умолчанию алгоритм размера окна, описанный выше.

Ткпвиндовсизе также можно добавить в ключ Parameters, чтобы задать глобально размер окна для всех интерфейсов.

Теперь параметры TCP поддерживаются

В предыдущих вариантах параметры TCP использовались в основном для согласования максимальных размеров сегментов. В Windows параметры TCP используются для масштабирования окна, отметки времени и выборочного подтверждения.

Существует два типа параметров TCP:

  1. Один параметр TCP в октете, который используется для указания определенного типа параметра.
  2. Параметр протокола TCP с несколькими октетами, который состоит из типа параметра, длины параметра и ряда параметров-октетов.
Читайте также:  Размеры окон для двухэтажного дома

В следующем списке приведены все параметры TCP, длина, имя и описание.

Вид: 0
Длина: 1
Вариант: конец списка вариантов
Описание: используется, если для последней опции TCP требуется заполнение.

Вид: 1
Длина: 1
Вариант: нет операции
Описание: этот параметр используется, когда требуется заполнение и дополнительные параметры TCP следуют в пределах одного пакета.

Вид: 2
Длина: 4
Вариант: максимальный размер сегмента
Описание: этот параметр указывает максимальный размер сегмента TCP, который может быть отправлен по сети.

Вид: 3
Длина: 3
Параметр: параметр «масштаб окна»
Description: указывает коэффициент масштабирования, используемый при использовании размеров окон, превышающих 64 КБ.

Вид: 8
Длина: 10
Параметр: параметр «метка времени»
Описание: используется для вычисления времени приема-передачи (RTT) передаваемых пакетов.

Вид: 4
Length: 2
Параметр: разрешен TCP-SACK
Описание: информирует другие узлы, которым разрешено избирательное расподтверждений.

Вид: 5
Length: изменяется
Параметр: параметр TCP SACK
Описание: используется узлами для определения того, получены ли неупорядоченные пакеты.

Масштабирование Windows

Для более эффективного использования сетей с высокой пропускной способностью можно использовать больший размер окна TCP. В поле Размер окна TCP задаются данные, которые могут быть ограничены 2 байтами, или размером окна 65 535 байт.

Так как поле размер не может быть развернуто, используется коэффициент масштабирования. Масштабирование окна TCP — это параметр, используемый для увеличения максимального размера окна от 65 535 до 1 ГБ.

Параметр Scale Window используется только во время TCP-связи 3-связи. Значение масштаба Window представляет количество разрядов, которые должны быть смещены в 16 – разрядном поле размера окна. Значение масштаба окна можно задать от 0 (без смены) до 14.

Чтобы вычислить истинный размер окна, умножьте размер окна на 2 ^ S, где S — значение масштаба.

Если размер окна равен 65 535 байт с коэффициентом масштабирования окна 3.
Истинный размер окна = 65535 * 2 ^ 3
Истинный размер окна = 524280

Следующая Трассировка сетевого монитора показывает, как используется параметр Window Scale:

TCP. S., len: 0, seq: 725163-725163, ACK: 0, Win: 65535, src: 1217 DST: 139 (сеанс NBT)
TCP: исходный порт = 0x04C1
TCP: порт назначения = Служба сеанса NETBIOS
TCP: порядковый номер = 725163 (0xB10AB)
TCP: номер подтверждения = 0 (0x0)
TCP: смещение данных = 44 (0x2C)
TCP: reserved = 0 (0x0000)
+ TCP: flags = 0x02. :.
TCP: Window = 65535 (0xFFFF)
TCP: CHECKSUM = 0x8565
TCP: срочный указатель = 0 (0x0)
TCP: параметры
+ TCP: параметр максимального размера сегмента
TCP: параметр НОП = 1 (0x1)
TCP: параметр масштабирования окна
TCP: тип параметра = Window Scale
TCP: параметр length = 3 (0x3)
TCP: масштаб окна = 3 (0x3)
TCP: параметр НОП = 1 (0x1)
TCP: параметр НОП = 1 (0x1)
+ TCP: параметры отметок времени
TCP: параметр НОП = 1 (0x1)
TCP: параметр НОП = 1 (0x1)
+ TCP: параметр SACK разрешен

Обратите внимание на то, что размер окна, используемый в данном трехстороннее согласование, не является масштабируемым размером. Это значение для каждого 2,2 раздела RFC 1323, «поле окна в SYN (например, [SYN] или [SYN, ACK]) сам сегмент никогда не масштабируется.»

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

Коэффициент масштабирования Значение масштаба Начальное окно Масштабированное окно
нуль 1 65535 или меньше 65535 или меньше
1 2 65535 131 070
2 4 65535 262 140
4 8 65535 524 280
4 16 65535 1 048 560
5 32 65535 2 097 120
6 64 65535 4 194 240
7 128 65535 8 388 480
8 256 65535 16 776 960
9 512 65535 33 553 920
10 1024 65535 67 107 840
11 2048 65535 134 215 680
12 4096 65535 268 431 360
13 8192 65535 536 862 720
14 16384 65535 1 073 725 440

Если размер окна в реестре вводится как 269000000 (269M) в десятичном формате, коэффициент масштабирования в ходе 3-проходного согласования составляет 13, так как коэффициент масштабирования 12 допускает только размер окна до 268 431 360 байт (268M).

Начальный размер окна в этом примере вычисляется следующим образом:
65 535 байт с коэффициентом масштабирования окна 13.
Истинный размер окна = 65535 * 2 ^ 13
Истинный размер окна = 536 862 720

Когда значение размера окна добавляется в реестр, а его размер больше значения по умолчанию, Windows пытается использовать значение масштаба, соответствующее новому размеру окна.

Значение Tcp1323Opts в следующем разделе реестра можно добавить к окнам масштабирования и отметке времени элемента управления:

На панели инструментов нажмите кнопку Пуск, выберите пункт Выполнить и введите regedit, чтобы открыть редактор реестра.

В редакторе реестра нажмите кнопку Правка, наведите указатель мыши на пункт Создать и выберите значение DWORD.

В поле новое значение введите Tcp1323Opts, нажмите клавишу ВВОД, а затем в меню Правка выберите команду Изменить.

Допустимый диапазон: 0, 1, 2 или 3, где:
0 (отключить параметры RFC 1323)
1 (доступно только масштабирование окна)
2 (метки времени включены только)
3 (оба параметра включены)

Эта запись реестра управляет отметками времени RFC 1323 и параметрами масштабирования окна. Временные метки и масштабирование окна включены по умолчанию, но могут управляться с помощью битов флагов. Бит 0 управляет масштабированием окна, а бит 1 — элементы управления отметок времени.

Меток времени

Ранее стек TCP/IP использовал один пример для каждого окна данных, отправляемых для вычисления времени кругового пути (RTT). Таймер (таймер повторной передачи) был задан при отправке пакета, пока не будет получено подтверждение. Например, если размер окна равен 64 240 байт (44 полных сегментов) в сети Ethernet, для пересчета времени кругового пути использовался только один из каждых пакетов 44. При максимальном размере окна 65 535 байт эта частота дискретизации была достаточно. При использовании масштабирования окна и максимального размера окна 1 ГБ эта частота выборки для RTT недостаточна.

Теперь параметр timestamp TCP можно использовать в сегментах (данные и ACK), которые считаются соответствующими стеку, для выполнения таких операций, как расчеты RTT, проверка ПАВС и т. д. С помощью этих данных RTT может быть правильно рассчитан с использованием больших размеров окон. RTT используется для вычисления интервалов повторной передачи. Для оптимальной пропускной способности необходимы точные значения таймаутов приема-передачи и повторной передачи.

Когда отметка времени TCP используется в сеансе TCP, инициатор сеанса отправляет параметр в первом пакете протокола TCP с тройным подтверждением (пакет SYN). Затем в этой же стороне можно использовать параметр TCP во время сеанса.

Параметр «метки времени TCP» (Тсопт):

Вид = 8 Длина = 10 Значение TS (Тсвал) Эхо-ответ TS (Тсекр)
1 байт 1 байт 4 байта 4 байта

Поле параметра timestamp можно просмотреть в трассировке сетевого монитора, развернув поле Параметры TCP, как показано ниже:

TCP: параметры отметок времени
TCP: тип параметра = timestamps
TCP: параметр length = 10 (0xA)
TCP: timestamp = 2525186 (0x268802)
TCP: метка времени ответа = 1823192 (0x1BD1D8)

Защита от номеров последовательностей в оболочке (ПАВС)

Значение поля порядкового номера TCP ограничено 32 битами, которое ограничивает число доступных последовательных номеров. В сетях большой емкости и большом объеме передачи данных можно заключить порядковые номера перед прохождением пакетов в сеть. При отправке данных в однобайтовой сети с Гига (Гбит/с) порядковые номера могут быть не меньше 34 секунды. Если пакет задерживается, может существовать другой пакет с таким же порядковым номером. Чтобы избежать путаницы в событии с повторяющимися номерами последовательности, в качестве расширения порядкового номера используется TCP timestamp. Пакеты имеют текущие штампы времени и время выполнения. Старый пакет имеет старую отметку времени и отбрасывается.

Избирательные подтверждения (SACK)

В Windows реализована поддержка функций производительности, называемых избирательным подтверждением, или SACK. SACK особенно важен для подключений, использующих большие размеры окон TCP. Перед использованием параметра SACK получатель может только подтвердить последний последовательный номер получаемого непрерывного потока данных или «левый край» окна приема. При включенном параметре SACK получатель продолжает использовать номер подтверждения для подтверждения левого края окна приема, но также может принимать и другие блоки принимаемых данных по отдельности. SACK использует параметры заголовков TCP, как показано ниже.

SACK использует два типа параметров TCP.

Параметр TCP Sack-Permitted используется только в пакете SYN (во время установления подключения TCP), чтобы показать, что он может выполнить выборочное подтверждение.

Второй вариант TCP, параметр TCP SACK содержит подтверждение для одного или нескольких блоков данных. Блоки данных определяются с помощью порядкового номера в начале и в конце этого блока данных. Это также называется левым и правым краем блока данных.

Тип 4 — параметр TCP Sack-Permitted, тип 5 — параметр TCP SACK. Length — это длина параметра TCP в байтах.

Разрешен TCP SACK:

Вид = 4 Длина = 2
1 байт 1 байт

Параметр TCP SACK:

Вид = 5 Length = переменная
1 байт Левый край первого блока для правого края первого блока
.
Левый край n блока к правому краю n блока

При включенном параметре SACK (по умолчанию) пакет или ряд пакетов можно удалить, а получатель информирует отправителя о том, какие данные были получены, и где могут находиться «отверстия» в данных. После этого отправитель может выборочно пересылать недостающие данные без повторной передачи блоков данных, которые уже были получены успешно. SACK управляется параметром реестра Саккоптс.

Значение Саккоптс в следующем разделе реестра можно изменить, чтобы управлять использованием избирательных подтверждений:

  1. На панели инструментов нажмите кнопку Пуск, выберите пункт Выполнить и введите regedit, чтобы открыть редактор реестра.
  2. Найдите и щелкните приведенный выше ключ в редакторе реестра, а затем выберите команду изменить в меню Правка.
  3. Введите нужное значение в поле значение.

Допустимые двоичные значения: 0 или 1, значение по умолчанию — 1. Этот параметр определяет, включена ли поддержка селективного подтверждения (SACK-RFC 2018).

Следующая Трассировка сетевого монитора показывает ведущее приложение, которое подтверждает все данные, вплоть до порядкового номера 54857341, плюс данные из порядкового номера 54858789-54861685. Недостающие данные — от 54857341 до 54858788.

TCP:. A. len: 0, seq: 925104-925104, ACK: 54857341, Win: 32722, src: 1242 DST: 139
TCP: исходный порт = 0x04DA
TCP: порт назначения = Служба сеанса NETBIOS
TCP: порядковый номер = 925104 (0xE1DB0)
TCP: номер подтверждения = 54857341 (0x3450E7D)
TCP: смещение данных = 44 (0x2C)
TCP: reserved = 0 (0x0000)
+ TCP: flags = 0x10:. A.
TCP: Window = 32722 (0x7FD2)
TCP: CHECKSUM = 0x4A72
TCP: срочный указатель = 0 (0x0)
TCP: параметры
TCP: параметр НОП = 1 (0x1)
TCP: параметр НОП = 1 (0x1)
+ TCP: параметры отметок времени
TCP: параметр НОП = 1 (0x1)
TCP: параметр НОП = 1 (0x1)
TCP: параметр SACK
TCP: тип параметра = 0x05
TCP: параметр length = 10 (0xA)
TCP: левый край блока = 54858789 (0x3451425)
TCP: правый край блока = 54861685 (0x3451F75)

Поведение повторной передачи TCP и быстрая повторная передача

Повторная передача TCP

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

Время ожидания повторной передачи (RTO) постоянно корректируется в соответствии с характеристиками подключения с использованием гладких расчетов времени кругового пути (СРТТ), как описано в документе RFC 793. Таймер для данного сегмента удваивается после каждой повторной передачи этого сегмента. При использовании этого алгоритма TCP настраивается на нормальную задержку подключения.

Быстрая повторная передача

TCP повторно передает данные до истечения срока действия таймера повторной передачи в некоторых обстоятельствах. Наиболее распространенные из них могут быть вызваны функцией быстрой повторной передачи. Когда получатель, который поддерживает быструю перепередачу, получает данные с порядковым номером, который находится за пределами текущего ожидаемого, то, скорее всего, некоторые данные были удалены. Чтобы помочь уведомить отправителя о событии, получатель немедленно отправляет подтверждение ACK с номером подтверждения, равным порядковому номеру, который ожидался. Это будет продолжаться для каждого из остальных поступающих сегментов TCP. Когда отправитель начинает получать поток подтверждений с тем же порядковым номером, скорее всего, сегмент был удален. Отправитель сразу же отправляет сегмент, который ожидает получатель, не дожидаясь истечения срока действия таймера повторной передачи. Такая оптимизация значительно повышает производительность при частом удалении пакетов.

По умолчанию Windows повторно отправляет сегмент, если он получает три подтверждения для одного и того же порядкового номера (один ACK и два повторения), а этот порядковый номер отстает от текущего. Это может быть управляемым с помощью параметра реестра Ткпмаксдупаккс.

Значение Ткпмаксдупаккс в следующем разделе реестра можно изменить, чтобы управлять количеством подтверждений, необходимым для запуска быстрой повторной передачи:

  1. На панели инструментов нажмите кнопку Пуск, выберите пункт Выполнить и введите regedit, чтобы открыть редактор реестра.
  2. Найдите и щелкните приведенный выше ключ в редакторе реестра, а затем выберите команду изменить в меню Правка.
  3. Введите нужное значение в поле значение.

Допустимый диапазон — 1-3, значение по умолчанию — 2.

Этот параметр определяет количество повторяющихся подтверждений, которые должны быть получены для того же порядкового номера отправленных данных, прежде чем fast retransmit будет инициирован повторная отправка сегмента, который был удален при передаче.

Источник

Поделиться с друзьями