У меня проблемы с интернет-соединением, которое, кажется, случайно "замораживает" произвольные tcp-соединения, когда они не использовались некоторое время. Соединения остаются установленными, но данные не передаются.
Когда это происходит, netstat по- прежнему показывает состояние соединения как ESTABLISHED
на обоих локальных компьютерах:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Timer
tcp 0 53 192.168.0.10:41129 173.255.235.238:143 ESTABLISHED 8219/gnutls-cli on (79.31/13/0)
..и удаленный сервер:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name Timer
tcp 0 0 173.255.235.238:143 68.5.174.98:41129 ESTABLISHED 5303/imapd off (0.00/0/0)
Однако, похоже, что данные вообще не передаются. Если я запускаю strace на локальном и удаленном процессах, оба показывают просто повторяющуюся последовательность вызовов select (с разными fds, конечно), например
select(6, [0 5], NULL, NULL, {0, 50000}) = 0 (Timeout)
select(6, [0 5], NULL, NULL, {0, 50000}) = 0 (Timeout)
select(6, [0 5], NULL, NULL, {0, 50000}) = 0 (Timeout)
Интернет-соединение в целом не подвержено влиянию, но я по-прежнему могу без проблем устанавливать новые подключения к той же службе на том же сервере. Однако уязвимые локальные приложения, похоже, не знают о проблеме и просто зависают.
Примерно через 10 минут после попытки передачи на локальный конец соединение на удаленном конце исчезает из netstat (я не смог перехватить какое-либо промежуточное состояние), но все еще остается ESTABLISHED
на локальном конце.
Наконец, через еще несколько минут локальное приложение прерывается по истечении времени ожидания и также исчезает из локального вывода netstat.
Когда я смотрю на захват пакета этого соединения на стороне клиента, существует длительный (ожидаемый) период бездействия, который, кажется, вызывает проблему, затем локальный конец снова пытается передать некоторые данные, но никогда не получает ACK. Вместо этого происходит 15 повторных TCP-передач с интервалами, увеличивающимися с 0,3 до 120 секунд. Никакая активность не фиксируется после этого.
У кого-нибудь есть предложение, как я мог бы отладить это дальше, чтобы выяснить, где проблема и как ее исправить?
Дополнительно и / или в качестве временного обходного пути: существует ли какой-либо способ глобально сократить время ожидания на клиенте и / или сервере, чтобы сократить время до прерывания работы локального приложения?