Keep alive в роутере что это - TurboComputer.ru
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд (пока оценок нет)
Загрузка...

Keep alive в роутере что это

Определение разрыва TCP-соединения


Автор: Андрей Елсуков
Источник: RSDN Magazine #1-2004

Опубликовано: 03.10.2004
Исправлено: 10.12.2016
Версия текста: 1.0

Введение
Таймер keep-alive
Заключение

Введение

Протокол TCP, в отличие от UDP, осуществляет доставку дейтаграмм, называемых сегментами, в виде байтовых потоков с установлением соединения. TCP применяется в тех случаях, когда требуется гарантированная доставка сообщений. Он использует контрольные суммы пакетов для проверки их целостности, контролирует последовательность передаваемых данных и избавляет программиста от многих рутинных задач. В качестве примеров прикладных протоколов, использующих TCP, можно назвать протокол FTP, HTTP, SMTP и многие другие.

ПРИМЕЧАНИЕ

В данной статье речь будет идти о реализациях стека TCP/IP в Microsoft Windows NT/2000/XP и более поздних версиях, а также реализации Windows Sockets версии 2 и более поздних.

Будучи однажды создан, канал TCP может существовать «вечно». Если клиент и сервер пассивны, то при разрыве соединения, например, при проблемах со средой передачи, сетевой атаке, крахе сервера или клиента, участники соединения (либо один из них) не подозревают о возникших проблемах. Конечно, проблема рано или поздно будет выявлена — когда клиент или сервер попытаются послать какую-то информацию.

В архитектуре клиент-сервер довольно часто встречаются реализации, в которых клиент, отправив запрос на сервер, долгое время ожидает ответа сервера. Еще более актуальная ситуация — в реализациях TCP-сервера необходимо точно знать, сколько из соединившихся клиентов реально существуют. Многие из прикладных протоколов применяют для этого «пустую операцию» (NOP), которая время от времени производится между клиентом и сервером для проверки наличия соединения. Данный подход хорош тем, что он не зависит от реализации стека TCP/IP. Есть и другой метод – таймер контроля работоспособности (keep-alive).

Таймер keep-alive

Принцип работы этого таймера предельно прост. Если канал между клиентом и сервером пассивен некоторое время (по умолчанию 2 часа), то посылается служебное сообщение, если ответа на него не поступило, через 75 секунд (обычно) сообщение посылается повторно и так несколько раз. Если ответ получен – таймер сбрасывается, и отчёт начинается заново. Если после нескольких повторов ответа так и не поступило, то соединение разрывается. Число повторов зависит от реализации стека TCP/IP, в некоторых реализациях может изменяться, в некоторых – нет…

При использовании сокетов в Windows keep-alive сообщения по умолчанию выключены. Включить их можно с помощью функции setsockopt :

В качестве параметров в функцию передаются:

  • s – дескриптор сокета, с которым будет связано соединение;
  • level – уровень, для которого определена требуемая опция (SOL_SOCKET, IPPROTO_TCP,…);
  • optname – опция, значение которой нужно изменить;
  • optval – указатель на буфер со значением опции;
  • optlen – размер буфера optval в байтах.

Для включения/выключения посылки keep-alive используется опция SO_KEEPALIVE уровня SOL_SOCKET. Параметр optval интерпретируется функцией как булево значение, для включения посылки он должен иметь значение TRUE, иначе – FALSE.

На практике нет никакого смысла ждать 2 часа до посылки keep-alive сообщения, куда интереснее более реальные интервалы времени (несколько десятков секунд или минут). Для изменения этого интервала в Winsock2 предусмотрена функция WSAIoctl :

В качестве параметров в функцию передаются:

  • s – дескриптор сокета, с которым будет связано соединение;
  • dwIoControlCode – код выполняемой операции;
  • lpvInBuffer – указатель на входной буфер;
  • cbInBuffer – размер входного буфера в байтах;
  • lpvOutBuffer – указатель на выходной буфер;
  • cbOutBuffer – размер выходного буфера;
  • lpcbBytesReturned – указатель на число байт, которые реально возвращены;
  • lpOverlapped – указатель на структуру WSAOVERLAPPED;
  • lpCompletionRoutine – указатель на функцию завершения операции;

Для изменения интервалов времени нужно передать функции структуру tcp_keepalive с кодом операции SIO_KEEPALIVE_VALS, которые определены в заголовочном файле mstcpip.h .

Поле onoff отвечает за включение/выключение посылки keep-alive сообщений. Если его значение отлично от нуля – посылка будет осуществляться, иначе — нет. Поле keepalivetime определяет интервал между посылкой сообщений при пассивном состоянии канала. Поле keepaliveinterval определяет интервал посылки сообщений, если ответ не получен. Интервалы задаются в миллисекундах. Значения интервалов имеют силу только в пределах соединения, связанного с сокетом s.

Заключение

В MSDN очень скупо описано все, что связано с keep-alive. После практических испытаний я обнаружил, что функция WSAIoctl перекрывает действие setsockopt . Точнее, действие setsockopt мною не проверено, потому как ждать 2 часа у меня терпения не хватает. А вызов setsockopt после WSAIoctl ни к чему не приводит. Если кто-то осведомлён о работе этих функций больше меня, буду рад выслушать пояснения.

Для проверки работы keep-alive я написал простенькую программку, которая соединяется с 21-м портом по заданному адресу. Интервал посылки keep-alive сообщений устанавливается равным 10 секундам, с повтором через 1 секунду. Далее я пользовался анализатором трафика и пакетным фильтром. С помощью пакетного фильтра создал ситуацию потери связи с сервером, в результате которой после нескольких безответных посылок keep-alive возникает событие FD_CLOSE.

Исходник проекта (MSVC 7.0) прилагается в архиве.

Настройка D-Link DIR-300 NRU B5

Wi-Fi-точка роутер, стандарт Wi-Fi: 802.11b/g/n. Макс. скорость беспроводного соединения: 150 Мбит/с.

Для роутера D-Link DIR-300 у нас есть четыре варианта инструкций:

Инструкция по настройке роутера D-Link DIR-300 NRU B5

Авторизация

Для того, что бы попасть в веб-интерфейс роутера, необходимо открыть ваш Интернет браузер и в строке адреса набрать 192. 168.0.1, Имя пользователяadmin , Парольadmin (при условии, что роутер имеет заводские настройки, и его IP не менялся).

Смена заводского пароля

В целях безопасности рекомендуется сменить заводской пароль.

По умолчанию: Логин admin, пароль admin.

В интерфейсе роутера необходимо зайти во вкладку Система (System), меню Пароль администратора (Administrator password).

В поле Пароль (New Password) введите новый пароль.

В поле Подтверждение (Confirm Password) повторите новый пароль.

Затем нажмите кнопку Сохранить (Save Settings).

После этого, роутер предложит повторно зайти в его настройки.

Настройка подключения к Интернет

В интерфейсе роутера необходимо зайти во вкладку Сеть, меню Соединение (Здесь Вы можете добавлять, редактировать и удалять соединения). Нажмите на кнопку Добавить.

Настройка PPPoE подключения

  1. В поле Тип соединения (Connection Type): выберите PPPoE
  2. В поле MAC вводите номер вашей сетевой карты (узнать его можно в состоянии подключения по локальной сети или через командную строку «ipconfig /all»)
  3. PPP имя пользователя(PPP Username): Ваш логин из договора
  4. Пароль (Password): Ваш пароль из договора
  5. Подтверждение пароля (Confirm Password): повтор пароля
  6. Алгоритм аутентификации: Auto
  7. Keep alive — ставим галочку для постоянного подключения
  8. Остальные поля оставьте по умолчанию
  9. Сохраняем настройки кнопкой Save и кнопкой Перезагрузка перезагружаем роутер.

Настройка L2TP подключения

Главные настройки

Укажите тип соединения L2TP.

Имя — Имя не меняйте

Разрешить — Оставьте галочку

Физический уровень

Физический интерфейс — Port5

MTU — оставьте без изменений

МАС — Если у провайдера используется привязка по МАС-адресу, пропишите МАС-адрес вашего сетевого адаптера. Если привязки нет, поле МАС; оставьте без изменений.

Остальные Главные настройки и Физический уровень оставьте без изменений.

В поле Настройки PPTP/L2TP:

Соединяться автоматически — поставьте галочку

Как задать имя сервиса — укажите URL или IP

Имя сервиса — пропишите адрес VPN-сервера провайдера

Без авторизации — галочку не ставьте

PPP Имя пользователя — пропишите логин для доступа в интернет, выданный провайдером

Пароль — пропишите пароль для доступа в интернет, выданный провайдером

Подтверждение пароля — повторный ввод пароля

Шифрование — если у провайдера не используется MPPE-шифрование оставьте Без шифрования;. Если шифрование используется, установите MPPE AUTOили уточните тип шифрования у провайдера.

Алгоритм аутентификации — оставьте AUTO

KeepAlive — подключение будет постоянно включенным.

MTU — поменяйте значение на 1450 или меньше

В поле Разное проверьте, чтобы стояли галочки NAT и Сетевой экран.

Если провайдер предоставляет услугу интернет телевидения, поставьте галочку Включить IGMP.

Нажмите Сохранить;.

Настройка PPtP (VPN) при автоматическом получении локального IP адреса (DHCP)

  1. В поле Тип соединения (Connection Type): выберите PPTP (PPTP и L2TP — туннельные протоколы типа точка-точка, позволяющие компьютеру устанавливать защищённое соединение с сервером за счёт создания специального туннеля в стандартной, незащищённой сети.)
  2. В поле MAC вводите номер вашей сетевой карты (узнать его можно в состоянии подключения по локальной сети или через командную строку «ipconfig /all»)
  3. PPP имя пользователя(PPP Username): Ваш логин из договора
  4. Пароль (Password): Ваш пароль из договора
  5. Подтверждение пароля (Confirm Password): повтор пароля
  6. Имя сервиса(Service name): — IP/Имя сервера провайдера
  7. Значение MTU — 1372
  8. Алгоритм аутентификации: Auto
  9. Keep alive — ставим галочку для постоянного подключения
  10. Сохраняем настройки кнопкой Save кнопкой Перезагрузка перезагружаем роутер.

NAT при автоматическом получении IP адреса (DHCP)

  1. В поле Тип соединения (Connection Type): выберите IPoE
  2. В поле MAC вводите номер вашей сетевой карты (узнать его можно в состоянии подключения по локальной сети или через командную строку «ipconfig /all»)
  3. В пункте Настройка IP выбираем получить IP автоматически
  4. В пункте Настройка IP выбираем получить адрес DNS автоматически
  5. Сохраняем настройки кнопкой Save и перезагружаем роутер.

Настройка Wi-Fi на роутере

В интерфейсе роутера необходимо зайти во вкладку Wi-Fi , меню Основные настройки (Basic settings).

1. SSID название вашей беспроводной сети.

2. Во вкладке Wi-Fi, выбираем настройки безопасности.

3. В выпадающем списке Сетевых аутентификаций (Network Authentication): выбираем WPA-PSK/WPA2-PSK mixed — это наиболее безопасный способ защитить Вашу беспроводную сеть.

В поле ключ шифрования PSK Вы должны ввести любой набор цифр, длиной от 8 до 63. Их также необходимо запомнить, чтобы Вы могли указать их при подключении к сети. Нажимаем на кнопку Изменить, чтобы применить и сохранить настройки.

Проверка статуса подключения к Интернет

В интерфейсе роутера необходимо зайти во вкладку Статус (Status),меню Сетевая статистика(Network Statics)

Сохранение/восстановление настроек роутера

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

  1. Выберите сохранение текущий конфигурации, Для сохранения текущих настроек роутера Файл с настройками будет сохранен в указанное место на жёстком диске.
  2. Для восстановления настроек из файла, необходимо нажать и выбрать Загрузка раннее сохранённой конфигурации в устройство, указать путь к файлу с настройками, затем нажать кнопку.

Ускорение Работы Сайта – Включение Режима Keep-Alive

Введение

Как работает режим Keep-Alive?

В этом руководстве вы научитесь 4 способам, как включить режим Keep-Alive. Keep-Alive позволяет браузеру пользователя скачивать весь необходимый контент (такой как JavaScript, CSS, изображения, видео и т.д.) через постоянное TCP соединение, вместо создания нескольких запросов для каждого файла. Это обеспечит скорость и производительность, так как браузер вашего посетителя сможет получить все из одного, постоянного HTTP соединения. Простыми словами, Keep-Alive – это форма связи между сервером и браузером способная серьезно уменьшить количество запросов и скорость загрузки страницы. Эта схема позволит вам понять разницу и преимущество режима Keep-Alive:

Преимущества режима Keep-Alive:

  • Keep-Alive сокращает использование ресурсов сервера из-за меньшего количества сгенерированных HTTP запросов. Это приносит пользу всем пользователям, независимо от их хостинга (бесплатного, виртуального или VPS).
  • Режим Keep-Alive обеспечивает конвейерность (доставку запросов через одно и тоже TCP соединение).
  • HTTPS запросам нужно больше времени и ресурсов центрального процессора. Если вы используете HTTPS и SSL, Keep-Alive станет еще более полезен.
  • Уменьшение задержки, общее увеличение скорости загрузки и производительности.
  • Keep-Alive поддерживается всеми современными браузерами.
  • Режим Keep-Alive также принесет вам пользу в сфере SEO оптимизации, из-за лучшей производительности сайта.

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

Что вам понадобится

Перед тем, как вы начнете это руководство, вам понадобится следующее:

  • Доступ к файлу .htaccess
  • Доступ к httpd.conf (необязательно)
  • Доступ к HttpCoreModule (необязательно)

Шаг 1 — Анализ вашего сайта

Во-первых, вы должны проанализировать ваш сайт с помощью таких инструментов как GTMetrix, чтобы определить включен ли режим Keep-Alive на вашем сервере. Вот результаты после анализа тестовой страницы:

На некоторых серверах или провайдерах услуг хостинга режим Keep-Alive включен по умолчанию. Если ваши результаты выдают 100%, значит вам нет необходимости производить какие-либо действия.

Шаг 2 — Включение режима Keep-Alive

Существует несколько способов включения режима Keep-Alive и их выбор зависит от вашего сервера или провайдера услуг хостинга. Вот несколько вариантов:

Вариант 1 — Редактирование файла .htaccess

Добавление данного кода в ваш файл .htaccess должно помочь включить режим Keep-Alive. Включение режима Keep-Alive через .htaccess заменит собой любые настройки сервера и включит постоянное соединение.

Этот метод должен работать на большинстве виртуальных хостингов на базе Linux. В случае, если вы не знаете где найти файл .htaccess, обратитесь к этому руководству.

Вариант 2 — Включение режима Keep-Alive в Apache через файл httpd.conf

Если у вас есть доступ к файлу настроек Apache, вы можете включить режим оттуда. Вот как должны выглядеть настройки:

  • KeepAlive On включает режим Keep-Alive.
  • MaxKeepAliveRequests устанавливает максимальное количество запросов для одного соединения. 50 запросов для одного соединения считается оптимальным.
  • KeepAliveTimeout определяет, как долго сервер будет ожидать запрос от клиента. Рекомендуется начать с меньших значений, таких как 5 или 10 секунд и увеличивать их по мере необходимости. Выставление слишком больших значений может увеличить нагрузку на сервер.

Если вы не можете найти файл httpd.conf, запустите следующую команду в командной строке:

Вариант 3 — Включение Keep-Alive в NGINX

В NGINX, Keep-Alive по умолчанию обычно включен. Однако в некоторых случаях он может быть выключен. Вы можете включить его используя HttpCoreModule. Найдите значение keepalive_disable, которое в большинстве случаев является причиной его отключения. Перед внесением каких-либо изменений убедитесь, что узнали причину по которой он был отключен.

Вариант 4 — Сервер Windows (IIS)

Если вы используете сервер на базе Windows, вы можете легко включить режим Keep-Alive используя командную строку.

Данная команда включит режим Keep-Alive:

На случай если вы захотите его отключить используйте эту:

Вы также можете обратиться к официальному руководству от Microsoft на эту тему.

Шаг 3 — Проверка изменений

После того, как режим Keep-Alive полностью включен, запустите еще один анализ в GTMetrix или любом другом сайте по анализу производительности. Вот результаты тестового сайта после включения режима Keep-Alive:

Также можно узнать работает ли Keep-Alive проверив header вашего HTTP. Это может быть сделано через терминал, используя следующую команду:

Часть кода Connection: keep-alive означает, что режим Keep-Alive полностью функционирует.

Заключение

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

Вопрос по tcp, http, keep-alive &#8211 Связь между продолжительностью HTTP Keep Alive и длительностью тайм-аута TCP

Я пытаюсь понять связь между значениями таймаута TCP / IP и HTTP. Эти два значения времени ожидания разные или одинаковые? Большинство веб-серверов позволяют пользователям устанавливать значение таймаута HTTP Keep Alive через некоторую конфигурацию. Как это значение используется веб-серверами? это значение только что установлено в базовом сокете TCP / IP, т.е. одинаковые лимиты HTTP Keep Alive и TCP / IP Keep Alive Timeout? или к ним относятся по-разному?

Насколько я понимаю (возможно, неверно): веб-сервер использует таймаут по умолчанию для базового сокета TCP (то есть неопределенный) независимо от настроенного таймаута HTTP Keep Alive и создает рабочий поток, который отсчитывает указанный интервал тайм-аута HTTP. Когда рабочий поток достигает нуля, он закрывает соединение.

РЕДАКТИРОВАТЬ: Мой вопрос касается отношения или разницы между двумя периодами ожидания, т. Е. Что произойдет, если продолжительность времени ожидания активности HTTP и время ожидания на сокете (SO_TIMEOUT), которое использует веб-сервер, различаются? я должен даже волноваться об этих двух одинаковых или нет?

Это два отдельных механизма; имя совпадение

HTTP keep-alive (также известный как постоянные соединения) сохраняет сокет TCP открытым, чтобы можно было выполнить другой запрос без установки нового соединения.

TCP keep-alive — это периодическая проверка, чтобы убедиться, что соединение все еще работает и работает. Он часто используется, чтобы гарантировать, что блок NAT (например, маршрутизатор DSL) не «забывает» отображение между внутренним и внешним ip / портом.

KeepAliveTimeout директива

Описание: Количество времени, в течение которого сервер будет ожидать последующих запросов для постоянного соединения. Синтаксис: KeepAliveTimeout секунд По умолчанию: KeepAliveTimeout 15 Контекст: конфигурация сервера, виртуальный хост Статус: Основной модуль: ядро ​​Количество секунд, в течение которых Apache будет ожидать последующего запроса перед закрытием. связь. После получения запроса применяется значение тайм-аута, указанное в директиве Timeout.

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

В контексте виртуального хоста на основе имени будет использоваться значение первого определенного виртуального хоста (хост по умолчанию) в наборе NameVirtualHost. Другие значения будут игнорироваться.

TimeOut директива

Описание: Количество времени, в течение которого сервер будет ожидать определенных событий, прежде чем выполнить запрос. Синтаксис: TimeOut секунд По умолчанию: TimeOut 300 Контекст: конфигурация сервера, виртуальный хост Статус: Основной модуль: ядро ​​Директива TimeOut в настоящее время определяет количество времени, которое Apache будет ожидать три вещи:

Общее время, необходимое для получения запроса GET. Время между получением пакетов TCP по запросу POST или PUT. Время между ACK при передаче пакетов TCP в ответах. Мы планируем сделать их отдельно настраиваемыми в какой-то момент в будущем. Таймер использовался по умолчанию с 1200 до 1.2, но был снижен до 300, что все еще намного больше, чем необходимо в большинстве ситуаций. По умолчанию он не установлен ниже, потому что в коде все еще могут быть странные места, где таймер не сбрасывается при отправке пакета.

Открытый сокет TCP не требует никакой связи между двумя сторонами (назовем их Алиса и Боб), если только не отправляются фактические данные. Если Алиса получила подтверждения для всех данных, которые она отправила Бобу, она не сможет отличить следующие случаи:

Боб был отключен или недоступен Алисе.Боб был перезагружен или иным образом забыт об открытом TCP-сокете, который он установил с Алисой.Боб связан с Алисой и знает, что у него открытая связь, но ему нечего сказать.

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

Время ожидания указывает, как долго Алиса готова ждать ответа, когда она отправляет пакет, который требует ответа. Время Keepalive показывает, сколько времени она должна дать пройти, прежде чем она повторно передает свой последний бит данных и требует подтверждения. Если Боб пропадет, сумма значений Keepalive и Timeout укажет наихудшее время между Алисой, получающей свой последний бит данных, и ее решением, что Боб мертв.

Использование KEEPALIVE-сокетов для обнаружения и отключения зависших клиентских соединений InterBase и Firebird

Овчинников Василий, 17.05.2005, изменено – 06.09.2005.

Введение

В системах, предназначенных для работы в реальном времени или близком к нему, существует проблема отслеживания на серверной стороне состояния клиентских соединений и принятия мер для их принудительного отключения в случае недоступности клиента вследствие разрыва соединения. Особенно при использовании Classic Firebird SQL Server важно своевременно освобождать ресурсы, занимаемые такими фантомными соединениями.

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

Например, клиент сохраняет измененный набор записей. После выполнения UPDATE, но до выполнения COMMIT модемное соединение разрывается. Обычно клиентское приложение в такой ситуации восстанавливает соединение с сервером, но клиент, продолжая работу с теми же данными, при сохранении которых он получил сообщение об ошибке по причине разрыва соединения, не может сохранить свои изменения, получая со стороны сервера сообщение о конфликте блокировки. Ему мешает его предыдущее соединение, открывшее транзакцию, в контексте которой был выполнен UPDATE, но не был выполнен COMMIT, т. к. соединение со стороны клиента было разорвано.

Точно так же обрывы соединений могут возникать и в локальной сети, если сбоит оборудование – сетевые карты, хабы, коммутаторы – или возникают помехи. В interbase.log/firebird.log обрывы коннектов tcp показываются как ошибки 10054 (Windows. на Unix – 104), обрывы netbeui – как ошибки 108/109.

Для отслеживания и отключения таких «мертвых» соединений InterBase и Firebird использует один из двух механизмов – DUMMY-пакеты (реализован на прикладном уровне начиная с InterBase 5.0 между сервером InterBase/ Firebird и клиентской библиотекой gds32/fbclient, включается в ibconfig/firebird.conf и в данном документе рассматриваться не будет) и KEEPALIVE-сокеты (используется по умолчанию начиная с InterBase 6.0). Использование KEEPALIVE включается установкой опции сокета SO_ KEEPALIVE при его открытии. Вам не нужно специально заботиться об этом, если вы используете Firebird 1.5 или выше – это реализовано в программном коде сервера Firebird, как для Classic, так и для Superserver. Для InterBase и Firebird (младше 1.5) в варианте Classic (существуют только для Unix/ Linux) необходима дополнительная настройка (см. п. 3). В этом случае отслеживание состояния соединения возлагается не на сервер Firebird, а на стек TCP операционной системы. Однако для практического использования требуется настройка параметров KEEPALIVE.

Описание KEEPALIVE

Поведение KEEPALIVE-сокетов регулируется параметрами, представленными в таблице:

ПараметрОписание
KEEPALIVE_ TIMEИнтервал времени, по истечении которого начинаются пробы KEEPALIVE
KEEPALIVE_INTERVALИнтервал времени между пробами KEEPALIVE
KEEPALIVE_PROBESКоличество проб KEEPALIVE

Стек TCP отслеживает момент прекращения прохождения пакетов между клиентом и сервером, запуская таймер KEEPALIVE. Как только таймер достигнет величины KEEPALIVE_ TIME, стек TCP сервера выполняет первую пробу KEEPALIVE. Проба – это пустой пакет c флагом ACK, отправляемый клиенту. Если на стороне клиента все в порядке, то стек TCP на клиентской стороне посылает ответный пакет с флагом ACK и стек TCP сервера, получив ответ, сбрасывает таймер KEEPALIVE. Если клиент не отвечает на пробу, то пробы со стороны сервера продолжают выполняться. Их количество равно KEEPALIVE_ PROBES и выполняются они через интервал времени KEEPALIVE_ INTERVAL. Если клиент не ответил на последнюю пробу, то по истечении еще одного интервала времени KEEPALIVE_ INTERVAL стек TCP операционной системы сервера закрывает соединение и Firebird высвобождает все ресурсы, занимаемые обслуживанием данного соединения.

Таким образом, разорванное клиентское соединение будет закрыто по истечении времени KEEPALIVE_ TIME+ ( KEEPALIVE_ PROBES+1)* KEEPALIVE_ INTERVAL.

Значения параметров по умолчанию достаточно велики, что делает их практическое применение неэффективным. Параметр KEEPALIVE_ TIME, например, имеет значение по умолчанию 2 часа и в Linux и в Windows. Реально достаточно одной-двух минут для принятия решения о принудительном отключении недоступного клиента. С другой стороны, настройки KEEPALIVE по умолчанию иногда приводят к принудительному обрыву соединений в сетях Windows, которые неактивны в течение этих самых двух часов (сомнения по поводу необходимости наличия в приложениях таких соединений – это уже другой вопрос).

Ниже мы рассмотрим настройку этих параметров для операционных систем семейства Windows и операционной системы Linux.

Настройка KEEPAILVE в Linux

Параметры KEEPALIVE в Linux можно изменить либо прямым редактированием файловой системы / proc либо вызовами sysctl.

Для первого случая надо редактировать:

Время задается в секундах.

Для автоматической установки этих параметров в случае перезагрузки сервера добавьте в /etc/sysctl.conf:

Слово замените на нужные вам величины.

Если вы используете Firebird > FLAGS=REUSE KEEPALIVE

Настройка KEEPALIVE в Windows 95/98/ME

  • KeepAliveInterval = 32-значное число
  • MaxDataRetries = 32-значное число

Настройка KEEPALIVE в Windows 2000/NT/XP

Настройка KEEPALIVE в Windows (для клиентов)

  • Убедимся в наличии конфигурационного файла /etc/xinet.d/firebird
  • Изменяем параметры стека TCP
  • Устанавливаем соединение к любой базе данных на сервере с любого сетевого клиента.
  • Смотрим трафик на сервере используя любой фильтр пакетов.
  • Если клиента отключить физически (выключить коммутатор или модем – мало ли, что может случиться в действительности), то на пробу сервера ответ от клиента не приходит, и сервер начинает с 10-ти секундным интервалом посылать пробы. Если на пятую пробу клиент не ответил, то еще через 10 секунд серверный процесс выгружается, освобождая ресурсы и блокировки. Если клиент подал признаки жизни и откликнулся хотя бы и на пятую пробу (худший случай), то снова выдерживается 15-сек тайм-аут и опять начинаются пробы. И т. д.

Заключение

В заключение хотелось бы привести практические рекомендации по выбору величин параметров KEEPALIVE.

Во-первых, определите для себя необходимую величину параметра KEEPALIVE_TIME. Чем больше будет его значение, тем позже начнутся KEEPALIVE-пробы. Если вы постоянно наблюдаете на своем сервере множество зависших коннектов, и вам приходится их удалять вручную, то следует уменьшить величину KEEPALIVE_TIME.

Во-вторых, значения параметров KEEPALIVE_INTERVAL и KEEPALIVE_PROBES должны удовлетворять вашим требованиям по своевременному отключению уже обнаруженных системой зависших соединений. Если ваши пользователи устанавливают соединения с сервером через ненадежные каналы связи, то вам, возможно, захочется увеличить количество проб и интервал между ними для того, чтобы пользователь успел обнаружить обрыв и восстановить соединение с сервером. В случае, если клиентоы используют выделенное подключение к сетям общего пользования (Интернет) или используют доступ к SQL-серверу по локальной сети, возможно уменьшение количества и интервала между KEEPALIVE-пробами.

Общие рекомендации могут звучать так: если вы на практике получаете большое количество сообщений от клиентов об ошибках сохранения результатов работы по причине конфликта блокировки без видимых на то причин, т. е. при отсутствии конкурирующих соединений, работающих с теми же данными, то вам надо увеличивать реакцию системы на отключение зависших коннектов. Практически величина KEEPALIVE_TIME может составлять от 1 минуты и более – вы сами должны оценить время выполнения самой длительной транзакции в системе, чтобы не перегружать сетевой трафик KEEPALIVE-проверками нормально работающих соединений, запустивших длительные транзакции. Величина KEEPALIVE_INTERVAL – от 10 секунд и более, а величина KEEPALIVE_PROBES – от 5 проверок и более. Помните, что большое количество проверок и малый интервал между ними могут существенно увеличить сетевой трафик при большом количестве одновременно работающих пользователей.

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

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

  • Клиенты используют модемные соединения, в системе преобладают короткие транзакции, время простоя ограничено 3 минутами.
Читайте также:  Зашифрованный сетевой трафик недоверенный сертификат что делать
Ссылка на основную публикацию
Adblock
detector