Tcp windows size изменение

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

Я новичок в сетевом программировании. Я прочитал некоторые ресурсы, которые я мог найти в Интернете, где я столкнулся с TCP Window Scaling. Как я понял, коэффициент масштабирования оговаривается при первом установлении соединения в пакете SYN. Значит ли это, что масштабирование окна TCP не может быть установлено кодом, который мы напишем для программирования сокетов? Это операционная система, которая делает это? Скажем, в среде Windows, как это происходит, и есть ли способ для нас / динамически изменить это вручную?

Решение

Нет, я считаю, что это может быть установлено только на глобальном уровне. Для этого есть параметр реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters ключ.

Если вы на самом деле имеете в виду изменение размера буфера приема и передачи сокета, то это можно изменить с помощью Winsock. Увидеть SO_RCVBUF а также SO_SNDBUF ,

Другие решения

Масштабирование окна включается автоматически, если вы установили размер буфера приема сокета более 64 Кб через setsockopt().

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

Размер окна пакетов TCP управляется операционной системой. Пока вы не можете изменить это динамически. Статический способ изменить размер окна для всей системы см. Никс ответ.

Есть только один очень сложный путь: вы WinCap, там вы можете написать любой TCP-пакет, который вы хотите. Но это настоящая боль.

Какие параметры влияют на производительность приложений? Часть 1. TCP Window Size

Самый простой способ понять значение термина размер TCP окна (TCP Window Size), это представить разговор двух человек. Один человек говорит, а второй кивает головой или говорит да, тем самым подтверждая, что он понял, а по сути, получил все слова, которые ему были сказаны. После этого разговор продолжается. Если мы встречаем особо говорливого человека, то наша голова быстро загружается, и мы начинаем терять нить разговора или переспрашивать нашего собеседника. Тоже самое происходит и в Матрице — в мире цифр и машин.

Размер TCP окна (TCP Window Size) – количество октетов (начиная с номера подтверждения), которое принимающая сторона готова принять в настоящий момент без подтверждения. На стадии установления соединения рабочая станция и сервер обмениваются значениями максимального размера TCP окна (TCP Window Size), которые присутствуют в пакете и эти значения можно легко увидеть, воспользовавшись захватом трафика.

Например, если размер окна получателя равен 16384 байта, то отправитель может отправить 16384 байта без остановки. Принимая во внимание, что максимальная длина сегмента (MSS) может быть 1460 байт, то отправитель сможет передать данный объем в 12 фреймах, и затем будет ждать подтверждение доставки от получателя и информации по обновлению размера окна. Если процесс прошел без ошибок, то размер окна может быть увеличен. Таким образом, реализуется размер скользящего окна в стеке протокола TCP.

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

Читайте также:  Разграничение прав доступа linux windows

Для расчёта максимального размера окна (т.е. максимальный объем данных, которые могут передаваться одним пользователем другому в канале связи) рассчитывается по формуле:

Полоса пропускания (бит/сек) * RTT (круговое время передачи по сети) = размер окна в битах

Таким образом, если ваши два офиса соединяет канал связи в 10 Мбит/сек и круговое время составляет 85 миллисекунд, то воспользовавшись данной формулой, мы получим значение окна равное:

10 000 000 * 0,085 / 8 = 106250 байт

Размер поля Window в заголовке TCP составляет 16 бит; это означает, что узел TCP может указать максимальный размер TCP окна 65535 байт. Таким образом, максимальная пропускная способность составляет:

65535 * 8 / 0,085 = 6,2 Мбит/сек

т.е. чуть больше 50% от реально доступной полосы пропускания канала.

В современных версиях операционных систем можно увеличить размер окна TCP Window Size и включить динамическое изменение окна в зависимости от состояния канала связи. В предложении RFC 1323 дано определение масштабирования окон, позволяющего получателю указывать размер окна больше 65535 байт, что позволит применять большие размеры окон и высокоскоростные каналы передачи. Параметр TCP Window Scale указывает коэффициент масштабирования окна, который в сочетании с 16-битным полем Window в заголовке TCP может увеличивать размер окна приема до максимального значения, составляющего примерно 1 ГБ. Параметр Window Scale отправляется только в сегментах синхронизации (SYN) при установке соединения. На нашем скриншоте из WireShark он составляет 256. Устройства, общающиеся друг с другом, могут указывать разные коэффициенты масштабирования для TCP окон.

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

Изменение параметров TCP/IP

Протокол TCP/IP определяет порядок обмена данными между вашим компьютером и другими компьютерами.

Чтобы упростить управление параметрами TCP/IP, рекомендуется использовать автоматический протокол DHCP. При использовании DHCP IP-адреса автоматически назначаются компьютерам в сети (если сеть поддерживает эту функцию). Если вы используете DHCP, то при перемещении компьютера в другое расположение вам не потребуется изменять параметры TCP/IP. При использовании DHCP не нужно вручную настраивать параметры TCP/IP, например DNS и WINS.

Включение DHCP и изменение других параметров TCP/IP

Нажмите кнопку Пуск и выберите Параметры > Сеть и Интернет .

Выполните одно из следующих действий:

В Wi-Fi сети выберите Wi-Fi > управлять известными сетями. Выберите сеть, параметры которой нужно изменить, а затем выберите Свойства.

Для сети Ethernet выберите Ethernet , а затем выберите сеть Ethernet, к которой вы подключены.

В разделе Назначение IP нажмите кнопку Изменить.

В разделе Изменить параметры IP выберите параметр Автоматически (DHCP) или Вручную.

Указание параметров IPv4 вручную

В разделе Изменить параметры IP выберите параметр Вручную и включите параметр IPv4.

Чтобы указать IP-адрес, в полях IP-адрес, Длина префикса подсети и Шлюз введите параметры IP-адресов.

Чтобы указать адрес DNS-сервера, в полях Предпочитаемый DNS-сервер и Альтернативный DNS-сервер введите адреса основного и дополнительного DNS-серверов.

Указание параметров IPv6 вручную

В разделе Изменить параметры IP выберите параметр Вручную и включите параметр IPv6.

Чтобы указать IP-адрес, в полях IP-адрес, Длина префикса подсети и Шлюз введите параметры IP-адресов.

Читайте также:  Лучшие билды windows 10

Чтобы указать адрес DNS-сервера, в полях Предпочитаемый DNS-сервер и Альтернативный DNS-сервер введите адреса основного и дополнительного DNS-серверов.

Если выбрать параметр Автоматически (DHCP), параметры IP-адресов и адрес DNS-сервера устанавливаются автоматически маршрутизатором или другой точкой доступа (рекомендуется).

Если выбрать параметр Вручную, вы сможете вручную задать параметры IP-адресов и адрес DNS-сервера.

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

Включение DHCP и изменение других параметров TCP/IP

Выполните одно из следующих действий:

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

В Windows 7 откройте раздел Сетевые подключения. Для этого нажмите кнопку Пуск и выберите Панель управления. В поле поиска введите адаптер, а затем в разделе Центр управления сетями и общим доступом выберите Просмотр сетевых подключений.

Щелкните правой кнопкой мыши подключение, которое вы хотите изменить, и выберите Свойства. Если требуется ввести пароль администратора или подтвердить действие, введите пароль или предоставьте подтверждение.

Откройте вкладку Сеть . В разделе Отмеченные компоненты используются этим подключением выберите либо IP версии 4 (TCP/IPv4), либо IP версии 6 (TCP/IPv6), а затем нажмите кнопку Свойства.

Чтобы указать параметры IP-адреса IPv4, выполните одно из указанных ниже действий.

Чтобы автоматически получать параметры IP-адреса с помощью DHCP, выберите Получить IP-адрес автоматически, а затем нажмите кнопку ОК.

Чтобы указать IP-адрес, выберите Использовать следующий IP-адрес, а затем в полях IP-адрес, Маска подсети и Основной шлюз введите параметры IP-адреса.

Чтобы указать параметры IP-адреса IPv6, выполните одно из указанных ниже действий.

Чтобы автоматически получать параметры IP-адреса с помощью DHCP, выберите Получить IP-адрес автоматически, а затем нажмите кнопку ОК.

Чтобы указать IP-адрес, выберите Использовать следующий IPv6-адрес, а затем в полях IPv6-адрес, Длина префикса подсети и Основной шлюз введите соответствующие параметры IP-адреса.

Чтобы указать параметры адреса DNS-сервера, выполните одно из указанных ниже действий.

Чтобы автоматически получать адрес DNS-сервера с помощью DHCP, выберите Получить адрес DNS-сервера автоматически, а затем нажмите кнопку ОК.

Чтобы указать адрес DNS-сервера, выберите Использовать следующие адреса DNS-серверов, а затем в полях Предпочитаемый DNS-сервер и Альтернативный DNS-сервер введите адрес основного и дополнительного DNS-серверов.

Чтобы изменить дополнительные параметры DNS, WINS и IP-адреса, нажмите кнопку Дополнительно.

Примечание: Чтобы установить IPv4, запустите командную строку с правами администратора, введите netsh interface ipv4 install, а затем нажмите клавишу ВВОД.

Tcp windows size изменение

Введение:
Термины:

MTU — Maximum Transmission Unit.
Это максимальный размер пакета данных, который может быть передан за один физический кадр по протоколу TCP/IP. Дело в том, что данные от компьютера к компьютеру в Интернете идут не сплошным потоком, а этими самыми кадрами — пакетами строго определенного размера.
При этом слишком большой пакет в пути, скорее всего, будет фрагментироваться и заполняться «воздухом», «балластом», что негативно скажется на эффективности связи. Так, если ваш провайдер имеет установки MTU=576, а у вас в Windows задано MTU=1500, то каждый ваш пакет будет им разбиваться на три по 576 байт: 576+576+576=1728 — то есть, 228 байт балласта будут добавляться к каждому вашему пакету. Но даже если провайдер тоже имеет MTU=1500, то при связи с удаленным сервером вполне может попасться маршрутизатор с меньшим значением MTU и пакеты опять-таки будут фрагментироваться, замедляя передачу данных.

MSS — Maximum Segment Size — это еще один параметр протокола TCP, определяющий самый большой сегмент данных TCP, которые могут быть переданы за один раз. То есть, MTU = MSS + заголовки TCP/IP. Для заголовка тоже имеется общепринятый размер — это 40 байт (20 байт IP и 20 байт TCP), следовательно, обычно MSS = MTU — 40. Этот параметр не устанавливается, а вычисляется:)

Читайте также:  Boot camp booting windows

RWIN — Receive Window — окно приема, размер буфера, в котором накапливается содержимое области данных (MSS) нескольких полученных пакетов, прежде чем передается дальше, например, в браузер. При недостаточном размере этого буфера иногда происходит его переполнение, и поступающие пакеты отвергаются и теряются. Размер RWIN обязательно должен быть кратен MSS и обычно для лучшей эффективности модемного соединения рекомендуется его устанавливать равным 4 — 8 MSS. Однако, чрезмерно большой размер буфера также нежелателен, особенно на плохих линиях — при потере всего одного пакета в случае сбоя на линии будет повторно затребован не один потерянный пакет, а все пакеты из этого буфера, что займет некоторое время.

TTL — Time To Live — время жизни — количество хопов, то есть промежуточных серверов, через которые может пройти ваш пакет в поисках своего места назначения. Каждый такой сервер добавляет единицу к специальному счетчику в заголовке вашего пакета, и когда счетчик достигает максимально разрешенного значения, пакет считается заблудившимся и прекращает свое существование. По умолчанию TTL равен 32, что сегодня явно недостаточно для разросшегося Интернета — нередки случаи, когда удаленный сервер находится более чем в 32 переходах, поэтому TTL следует увеличить как минимум до 64.

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

Итак, надо определить MTU провайдера (оператора). Определяем вручную: Только сначала надо установить MTU равным 1500б. это можно сделать и вручную в реестре, но лучше (чтобы и остальные параметры также править) использовать спец. проги, например
MTUspeed .
После этого мерием MTU прова.
В командной строке:
PING -f -l 1500 ххх.ххх.ххх.ххх, где «ххх.ххх.ххх.ххх» — IP-адрес тестируемого сервера, а «-I» — это буква L, а не единица. -l это размер буфера отправки(1500). -f это флаг запрещающий фрагментацию пакета.

Например, у меня получилось так:

PING -f -l 1472 mail.ru
Обмен пакетами с mail.ru [194.67.57.51] по 1472 байт:
Ответ от 194.67.57.51: число байт=1472 время=3617мс TTL=249
Ответ от 194.67.57.51: число байт=1472 время=3315мс TTL=249
Ответ от 194.67.57.51: число байт=1472 время=3271мс TTL=249

PING -f -l 1473 mail.ru
Обмен пакетами с mail.ru [194.67.57.51] по 1473 байт:
Требуется фрагментация пакета, но установлен запрещающий флаг.
Требуется фрагментация пакета, но установлен запрещающий флаг.
Требуется фрагментация пакета, но установлен запрещающий флаг.

Но это не значит, что MTU прова 1472б. Ping прибавляет к нашим данным заголовок — IP (20 Байтов) и ICMP (8 Байтов). Итак, MTU прова 1500б .

Несмотря на то, что программ, предназначенных якобы для двукратного улучшения связи одним кликом мыши — пруд пруди. И тут, как вы можете сами понять, совсем не факт, что MTU=576, которое везде рекомендуется западными программистами и экспертами, будет оптимальным и для нас в России. Наши провайдеры сплошь и рядом выбирают для себя MTU=1500, а при «пинговании» удаленных серверов мы обнаруживаем, что пакет такого размера, вопреки всем утверждениям, проходит чаще всего нефрагментированным.

Для остальных параметров не считаю нужным ничего писать:) потому что они не так спорны как MTU.

Читайте также

Подключаем ReadyBoost Один из самых простых и недорогих способов ускорить работу Vista…

используют разное ядро существуют разные драйвера, оптимизированные под каждую систему…

Похоже, что многостраничные инструкции на тему того, как создать загрузочную флешку и…

В этой статье хочу рассказать вам о бесспорно хорошей и необходимой функции Windows –…

работать с AIMP для windows 7 стало намного удобнее и приятнее. Если вы впервые слышите…

Подпишись на нашу группу в контакте и будь в курсе обновлений:

Оцените статью