Изпраща ли TCP keepalive пакет, за да предотврати стареенето и затварянето на връзката от защитната стена?

Имам настройка, при която имаме защитна стена между клиент и сървър. Свързвам се с 2 различни сървъра, например A и B, и данните могат да текат във всеки момент от A или от B, но само един по един. Изглежда, че връзката ми със сървъра се прекъсва след всеки 2 часа, 11 минути, 15 секунди . Зададох tcp keepAlive в моето приложение и използвам poco библиотека.

Виждам, че по-долу са tcp keepalive параметри на ниво ядро ​​на моята кутия }

  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_time 
  7200
  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl 
  75
  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_probes 
  9

7200 (2 часа) + 9*75 = (11 минути 15 секунди), някои параметри по-горе и време на прекъсване предполагат, че това се случва поради горните настройки на моята кутия. Повечето от връзките между сървъра и клиента са идеални за най-много периоди (часове), но тогава се очаква данните да идват по всяко време (не е фиксирано). Да кажем, че ако идеалното време на защитната стена е зададено на (30 минути), тогава трябва ли всъщност да намаля своето tcp_keepalive_time до по-малко от 20 минути, така че да има сонда между клиент и сървър и по този начин да попречи на защитната стена да види това като идеална връзка и действително да прекрати връзката ?

Моето разбиране е, че дори ако връзката е идеална, параметърът tcp_keepalive_time ще попречи на защитната стена да затвори връзката до този период от време или в идеалния случай трябва да бъде по-малко от идеалното време за изчакване на защитната стена, така че защитната стена да вижда прехвърлянето на пакети между двата сървъра (проба за поддържане на активността, извършена от клиента и получено потвърждение от сървъра) и не се опитва да затвори връзката?

Благодаря


person Invictus    schedule 10.05.2018    source източник
comment
Нищо не може да попречи на защитната стена да затвори връзката, ако пожелае, и лично аз съм категорично против опитите да я подмамите да я държи отворена. Ако неговият изглед на TCP връзките е толкова ценен, че го кара да ги изчаква, или се нуждае от преконфигуриране, ако е грешен, или в противен случай приложенията трябва да бъдат написани съответно, за да се справят с прекъснати връзки чрез повторното им установяване.   -  person user207421    schedule 10.05.2018
comment
Благодаря, EJP за отговора, в идеалния случай keepAlive проучва ли в идеалния случай, ако времето за изчакване, по-малко от idel, зададено на защитната стена, няма да попречи на помощта при поддържане на връзката, тъй като това е прехвърляне на пакети от клиент и потвърждението се изпраща от сървъра?   -  person Invictus    schedule 10.05.2018
comment
Stack Overflow е сайт за въпроси относно програмирането и разработката. Този въпрос изглежда не е по темата, защото не е за програмиране или разработка. Вижте За какви теми мога да попитам тук в Помощния център. Може би Super User или Unix & Linux Stack Exchange бъде по-добро място за питане.   -  person jww    schedule 10.05.2018


Отговори (1)


Опитах се да намаля tcp_keepalive_time от 7200 на 900 секунди (15 минути). Това гарантира, че tcp keep alive сондите са изпратени след 900 секунди. Благодарение на това идеално време за изчакване на връзката от 30 минути, зададено на защитната стена, беше предотвратено затварянето на връзката. Това реши проблема ми. Прочетох за това във връзката по-долу в раздела Решение.

https://www.veritas.com/support/en_US/article.100028680

  [XYZ@ABC /home]$ cat /proc/sys/net/ipv4/tcp_keepalive_time 
  900
person Invictus    schedule 11.05.2018