A conexão permanece marcada como ESTABLISHED mesmo se o host não estiver conectado

5

Estou trabalhando em uma distribuição Linux embarcada e preciso monitorar as conexões de entrada e saída (se elas ainda são ativas, etc.) e estou tendo problemas porque notei que, mesmo se o host remoto desligar a conexão, eu pode ver a conexão como ESTABLISHED através do netstat.

Eu tenho duas versões diferentes deste sistema embarcado Linux: um que usa um kernel 2.6.34 antigo e funciona bem, enquanto o que está falhando usa um kernel 3.18.18.

Procurando mais informações, suspeito que precisei definir / alterar os tempos limite TCP . configurou-os através do syctl.conf mas não altera nada. O sistema que usa o kernel 2.6.34 não tem timeouts TCP configurados, então me faz pensar que o TCP não é a raiz do meu problema.

Você tem uma ideia sobre o motivo pelo qual a conexão permanece como ESTABELECIDO ?

    
por simo-zz 05.01.2016 / 09:29

1 resposta

2

Se um host se desconecta do outro e você ainda vê sua conexão como ESTABLISHED , provavelmente está relacionado ao fato de ele não estar honrando o protocolo TCP e não fechar a conexão corretamente.

A saída netstat é um intérprete do estado atual de TCP connections. Se um cliente quiser desconectar / fechar o soquete anteriormente aberto e estabelecido, ele deverá notificar isso ao sistema remoto. Isso é feito enviando o FIN request para o outro nó (mais informações aqui ), neste caso, o servidor.

Se não o fizerem, o cliente realmente se desconecta, mas o servidor remoto mantém pensando que o cliente ainda está conectado e mantendo seu estado como ESTABLISHED , e é aí que o tcp_keepalive_time parâmetro une a equação. Como nenhum pacote adicional será recebido, o kernel irá esperar o tempo especificado para este parâmetro para tempo limite da conexão e forçosamente fechá-lo.

Você pode depurar esse problema usando a ferramenta tcpdump . Você poderia simplesmente ouvir a conexão do host do cliente no lado do servidor e verificar se ele não envia a solicitação FIN .

tcpdump host X.X.X.X and port Y
    
por 05.01.2016 / 10:06