|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть приложение, написанное на C#, СУБД Firebird 2.5.7, SuperServer. По истечении двухчасового молчания клиента, подключенного к серверу Firebird, происходит разрыв соединения. Под молчанием имею в виду - пользователь ничего не делает в программе в течение двух часов. После при попытке выполнить какое-либо действие (например, записать информацию или сохранить), выходит ошибка о разрыве соединения: Error reading data from the connection. Из того, что накопала: разобралась в KEEPALIVE, он работает, если смотреть по перехваченным пакетам в Wareshark, KeepAlive происходит каждые две минуты с сервера, параметры меняла, он не влияет на наличие ошибки. Интересно, что разрыв стабилен ровно через два часа. По перехвату пакетов... Через два часа приходит пакет от сервера о подтверждении соединения, как думаю, тег ACK,на что клиент ему кидает ответный пакет. Затем КЛИЕНТ первый отправляет пакет с тегами ACK и FIN по порту 3050(192.168.132.79-клиент, 192.168.100.97-сервер. ): 192.168.132.79 192.168.100.97 64388 → 3050 [ACK] Seq=405 Ack=469 Win=65024 Len=0 192.168.132.79 192.168.100.97 64388 → 3050 [FIN, ACK] Seq=405 Ack=469 Win=65024 Len=0 И если используется порт 3050 от клиента, как понимаю, это Firebird сам разрывает соединение, не ОС. ОС сервера: Windows Server 2008 R2 Standart. ОС клиента: любая, на win 7, 8, XP выходит данная ошибка. Подскажите, что у меня не так, если есть вопросы-охотно отвечу. Тяготит, что после двухчасового простоя клиенту приходится переподключаться. Сервер в сети, каждые 30 сек на сервер отправляются пустые пакеты Ping-ом для проверки доступности сервера, все пакеты успешно доходят и возвращаются. Может я саму работу системы недопонимаю, помогите, уже неделю убила на решение этого вопроса... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:26 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
nnivanova, подозрительно похоже на параметр KeepAliveTime в винде, он по умолчанию как раз 2 часа... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:35 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
тоже так думала, но нет, его я меняла и на 5 мин, и на 2 минуты. И первый FIN идет от клиента к серверу, а не наоборт. на форуме одном читала про "FIN-все данные переданы, получены все подтверждения и соединение ЗАВЕРШАЕТСЯ логичным способом." Только как это так, если пользователь ничего не нажимает и не собирался разрывать соединение. Такая же беда, если подключиться к БД через IBExpert, два часа - и разрыв. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:42 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
nnivanova, где вы его меняли? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:47 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Tactical Nuclear Penguin, на сервере, создала соответ. параметры в разделе:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters: KeepAliveTime = 300000. KeepAliveInterval = 1000 и TcpMaxDataRetransmissions=5 На клиенте тоже пыталась изменить, установила на 5 мин, но разрыв спустя два часа опять произошел ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:56 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:56 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
P.S. Могу даже с автографом :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:57 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
o_v_a, спасибо! По этой статье и изменяла параметры. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:58 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
o_v_a, не помогло. Как понимаю, эти параметры в сервере нужно изменять? или в клиенте? И это же на случай разрыва (потери) соединения по сети. А потери то нет, пинги то идут стабильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 09:59 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
В винде параметры keepalive применяются только после перезагрузки, кстати. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:00 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
o_v_a, да, всегда перезагружала. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:01 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
А у Вас всё в локалке или удалёнка какая? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:07 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
P.S. Кипалив итак по умолчанию включён, AFAIK. Лучше уж тогда dummy-пакеты посылайте, это проще. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:08 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
nnivanova, o_v_aСтек TCP отслеживает момент прекращения прохождения пакетов между клиентом и сервером, запуская таймер KEEPALIVE. Как только таймер достигнет величины KEEPALIVE_ TIME, стек TCP сервера выполняет первую пробу KEEPALIVE. Проба – это пустой пакет c флагом ACK, отправляемый клиенту. Если на стороне клиента все в порядке, то стек TCP на клиентской стороне посылает ответный пакет с флагом ACK и стек TCP сервера, получив ответ, сбрасывает таймер KEEPALIVE. Если клиент не отвечает на пробу, то пробы со стороны сервера продолжают выполняться. Их количество равно KEEPALIVE_ PROBES и выполняются они через интервал времени KEEPALIVE_ INTERVAL. Если клиент не ответил на последнюю пробу, то по истечении еще одного интервала времени KEEPALIVE_ INTERVAL стек TCP операционной системы сервера закрывает соединение и Firebird высвобождает все ресурсы, занимаемые обслуживанием данного соединения. Вы в первом сообщении привели только финальный аккорд. А предыдущие пробы как проходят? Меняйте параметры keepalive на сервере на вменяемые для тестов, например, KeepAliveTime = 15000 KeepAliveInterval = 1000 и TcpMaxDataRetransmissions=5 Перезагружайте сервер. Запускайте клиента. Стартуйте сниффер. 15 секунд ничего не делайте в клиенте для чистоты эксперимента, дожидайтесь обрыва через ещё 5 секунд и препарируйте трафик по логам сниффера. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:08 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
А, сорри, вопрос про локалку снимается, судя по айпишникам. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:11 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамP.S. Кипалив итак по умолчанию включён, AFAIK. Лучше уж тогда dummy-пакеты посылайте, это проще. Решение для легких извращенцев 18968142 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:14 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
wadman> Решение для легких извращенцев 18968142 Не знаю, что ты там менял (или просто для развлечения/изучения?), но сто лет уже как соотв. настройка в конфиге есть. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:23 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Только ведь вот... Клиент инициирует у вас закрытие соединения. KEEPALIVE тут не при чём. Нет ли каких настроек по таймауту неактивного открытого соединения в используемом вами наборе компонент для работы с Firebird? Вы разработчик и у вас есть исходные тексты программы? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:26 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНе знаю, что ты там менял (или просто для развлечения/изучения?), Там обертка над клиентской частью (прокладка), которая при простое дергает указанный в ini-файле запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:27 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Эх ты, слабак... :) Нет чтобы на более низком уровне работать. :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:28 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
И косвенно то, что настройки KEEPALIVE не влияют на поведение программы, подтверждает тот факт, что причина разрыва - она именно на клиентской стороне. Сниффер запускаете на сервере или на клиенте, кстати? Просто если произошел ФИЗИЧЕСКИЙ разрыв и сервер на свой ACK не получает от клиента ACK, то по истечении количества проб СЕРВЕР закрывает сокет. В вашем логе по вашим же словам закрытие коннекта выполняет клиент. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:31 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Дык кипалив и на клиенте есть. По сути, надо на клиенте его ставить меньше, чем на сервере. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:32 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Ха... nnivanovaТакая же беда, если подключиться к БД через IBExpert, два часа - и разрыв. А вот это уже интересно... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:33 |
|
Разрыв пользовательского соединения через 2 часа
|
|||
---|---|---|---|
#18+
Если шашечки - напишите простенькую программу, которая делает то же самое - простой TCP-коннект c параметром KEAPLIVE и логируйте на обоих концах. Если ехать - попробуйте таки dummypacketinterval. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2017, 10:37 |
|
|
start [/forum/topic.php?fid=40&fpage=41&tid=1561437]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 161ms |
0 / 0 |