Стек протоколов TCP/IP

Стек протоколов TCP/IP

Стек протоколов TCP/IP является основным и единственным способом взаимодействия конечного компьютера с глобальной сетью Интернет, а также основным стеком взаимодействия с другими компьютерами сети. Именно поэтому было решено рассказать в этой главе и о некоторых настройках стека TCP/IP. Все настройки стека TCP/IP хранятся в ветви реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters. Она может содержать следующие параметры DWORD-типа.

? ArpCacheLife — указывает время жизни записей в ARP-кэше.

? DefaultTTL — определяет время жизни пакетов (TTL), указываемое в заголовках пакетов. Время жизни пакета — это количество маршрутизаторов, через которые может пройти пакет, после чего он станет считаться утерянным и будет уничтожен. Каждый маршрутизатор, передающий пакет, уменьшает его время жизни на 1. Когда время жизни становится равным нулю, следующий принимающий пакет маршрутизатор уничтожает его.

По умолчанию значение равно 0х00000080, но параметр может принимать значения от 0х00000001 до 0х00000100.

? DisableTaskOffload — определяет, будет ли при взаимодействии с сетевым компьютером использоваться дополнительный сопроцессор сетевой карты. Использование дополнительного сопроцессора разгружает работу процессора, установленного на материнской плате компьютера, но не все сетевые карты имеют в своем составе дополнительные сопроцессоры.

По умолчанию значение равно 1, то есть, даже если сетевая карта имеет дополнительный сопроцессор, он будет отключен. Чтобы включить работу сопроцессора, необходимо присвоить этому параметру значение 0.

? EnablePMTUBHDetect — указывает, будет ли при передаче пакетов выполняться поиск маршрутизаторов типа «черная дыра». По умолчанию поиск данных маршрутизаторов отключен, то есть параметр имеет значение 0. Установка значения параметра равным 1 приводит к дополнительной затрате времени на стадии установки соединения.

ПРИМЕЧАНИЕ

Маршрутизаторы типа «черная дыра» не возвращают пакеты типа ICMP Destination Unreachable в случае, если им нужно фрагментировать пакет с установленным флагом, запрещающим фрагментацию. Именно такие пакеты будут использоваться TCP для обнаружения MTU пути. Если после нескольких попыток передачи пакетов с запрещенной дефрагментацией не было получено ответа, то считается, что маршрутизатор имеет тип «черная дыра». Если подтверждение будет получено, то MSS будет уменьшено и флаг, запрещающий дефрагментацию, будет установлен для всех последующих пакетов. 

? EnablePMTUDiscovery — указывает, будет ли TCP перед отправкой пакетов определять максимальный размер пакета (MTU), который не будет фрагментироваться во время передачи к сетевому компьютеру. Если значение равно 0, то все передаваемые пакеты будут иметь MTU, равный 576 байт, а определение максимального размера пакета, способного дойти до сетевого компьютера без фрагментации, вестись не будет. Если же значение равно 1, то перед отправкой пакетов TCP будет определять MTU пакета, способного дойти до сетевого компьютера без фрагментации, и полученный MTU использовать как размер пакетов, которые он будет отправлять (чтобы они не фрагментировались, ведь эта операция занимает дополнительное время). По умолчанию значение параметра равно 1.

? ForwardBufferMemory — указывает размер буфера, который используется IP для хранения данных пакета в очереди пакетов маршрутизатора (когда данный буфер заполняется, маршрутизатор в произвольном порядке удаляет пакеты из буфера). Значение должно быть кратно 256 байт, так как буферы данных очереди пакетов по умолчанию имеют размер в 256 байт. Параметр может принимать значение от величины MTU пакета до 0xFFFFFFFF. По умолчанию значение равно 74240.

ПРИМЕЧАНИЕ

Заголовки IP-пакетов хранятся в отдельном буфере. 

? KeepAliveInterval — определяет интервал отправки пакетов проверки активности до тех пор, пока не будет получен ответ хотя бы на один пакет. Если ответный пакет получен, то отправка пакетов активности прекращается до тех пор, пока не истечет интервал времени, задаваемый DWORD-параметром KeepAliveTime. По истечении данного времени отправка пакетов активности опять начинается.

Если же после отправки количества пакетов активности, заданного в DWORD-параметре TcpMaxDataRetransmissions, ни на один из них не было получено ответа, то данное соединение считается неактивным и разрывается. По умолчанию значение параметра KeepAliveInterval равно 1000. Допустимы значения в диапазоне от 1 до 0xFFFFFFFF.

? KeepAliveTime — указывает интервал ожидания перед началом отправки пакетов активности (Keep Alive Packet), на которые удаленный компьютер должен ответить, иначе будет разорвано соединение. По умолчанию пакеты активности не отправляются, но их отправку может инициировать пользовательское приложение. По умолчанию значение данного параметра равно 7200000 (два часа).

? MTU — определяет максимальный размер передаваемого пакета данных. По умолчанию значение равно 0x000005DC.

? NumForwardPackets — указывает количество заголовков IP-пакетов, которые могут находиться в очереди пакетов маршрутизатора. Если реальное количество IP-заголовков превышает значение данного параметра, то маршрутизатор в случайном порядке начинает отбрасывать пакеты из очереди. Значение может находиться в диапазоне от 1 до 0xFFFFFFFE.

ПРИМЕЧАНИЕ

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

? SackOpts — определяет, включена ли возможность SACK (впервые эта возможность была реализована в Windows XP). По умолчанию значение равно 0, то есть данная возможность отключена. Если же значение равно 1, то при потере пакета отправитель может передать лишь потерянный пакет, а не все пакеты сообщения, пакет которого был потерян.

? SynAttackProtect — указывает, будет ли на компьютере задействована встроенная защита от DOS-атаки SYN-переполнением. Если значение равно 0, то защита будет отключена. Например, если установлен прокси-сервер, то на клиентских машинах, как правило, нет нужды в такой защите. Если значение равно 1, то будет включена стандартная возможность защиты от SYN-атак. Если же значение параметра равно 2, то, кроме стандартной защиты от SYN-атак, используются дополнительные меры защиты: операционная система будет выполнять обращения к драйверу AFD (поддержка Windows Sockets) только в случае установки полного соединения.

? Tcp1323Opts — определяет, будут ли при сетевом соединении использоваться более широкие окна (под шириной окна понимается количество пакетов, которые может передать отправитель до получения подтверждения приема пакетов от получателя) передачи пакетов. Если значение равно 3, то будут использоваться более широкие окна, что может повысить скорость передачи для высокоскоростных сетевых соединений. По умолчанию значение параметра равно 0.

? TcpMaxDataRetransmissions — указывает количество попыток передачи данных, после которых (если они были неуспешны) соединение будет окончательно разорвано. Значение может находиться в пределах от 0 до 0xFFFFFFFF. По умолчанию оно равно 15.

? TcpMaxHalfOpen — определяет максимальное возможное количество одновременных полуоткрытых соединений, которое поддерживает TCP.

? TcpNumConnections — указывает максимальное возможное количество одновременных соединений, которое поддерживает TCP. Значение может находиться в пределах от 0 до 0xFFFFFE. По умолчанию оно равно 0xFFFFFE.

? TCPWindowSize — определяет ширину окна для приема TCP (то есть количество байт, которые могут быть переданы отправителем без приема квитанции о подтверждении получения адресатом). Значение может находиться в пределах от 0 до 65535. По умолчанию оно равно 0хFFFF (65535).

ПРИМЕЧАНИЕ

Для большей эффективности работы сети размер окна, задаваемый параметром Tcpwindowsize, должен быть кратен MSS.