Você tem um roteador NAT ou um firewall com monitor de estado semelhante entre seu cliente e o servidor. Quando você abriu a sessão TCP, o firewall lembrou que uma conexão TCP foi criada entre a porta do cliente e a porta do servidor. Contanto que o firewall se lembre da conexão, continuará transmitindo pacotes entre o cliente e o servidor.
A sessão "quebra" porque o firewall esquece a conexão e pára de passar pacotes. O firewall pode esquecer a conexão porque tem um tempo limite em conexões inativas. Ou pode esquecer porque tem uma quantidade limitada de memória e muitas novas conexões foram criadas para que ele se lembre de todas elas.
ssh
tem algumas opções para solucionar isso envio periódico de pacotes "keep-alive" quando a conexão estiver inativa. Veja as opções TCPKeepAlive
, ServerAliveInterval
e ServerAliveCountMax
.