Para simulações de catástrofes de rede em nosso ambiente de servidor, estamos procurando uma maneira de atingir intencionalmente o tempo limite de um soquete TCP. Existem maneiras simples de soquetes existentes? Além disso, um pequeno programa de caso de teste C seria uma vantagem.
Já tentamos derrubar interfaces de rede durante a leitura do buffer TCP e a leitura de recursos montados desconectados (samba).
O servidor de teste é o Ubuntu 12.04.4.
/proc/sys/net/ipv4/tcp_keepalive_time
para um número muito pequenoncat -v
para ver o que exatamentencat
está fazendo. Demorou 2m7.291s em uma instalação baunilha do Ubuntu 12.04 até o tempo limiteA primeira resposta está correta, mas eu descobri como esses tempos limite funcionam, para que você possa observá-los e testá-los (não se esqueça de bloquear a porta!).
Existem 4 parâmetros de kernel mais interessantes que lidam com tempos limite de TCP:
Agora existem 2 cenários:
O soquete está aberto e tentando transmitir - então (se não houver resposta do outro lado), o sistema tenta novamente os
tcp_retries2
tempos. Com o valor padrão de desativações, leva mais de 2 minutos e o soquete expira.O soquete está aberto e ocioso - os limites de manutenção vital são interessantes. Com um sistema de tomada inativa irá esperar
tcp_keepalive_time
segundos e, depois disso, tentetcp_keepalive_probes
enviar um TCP KEEPALIVE em intervalos detcp_keepalive_intvl
segundos. E somente depois disso tudo falha, o soquete expira.fonte
netstat -o