2017-09-06 4 views
0

je tente de réduire la quantité de temps une connexion est dans l'état TIME_WAIT en définissant tcp_fin_timeout here détaillée:Impossible de réduire TIME_WAIT

root:~# sysctl -w net.ipv4.tcp_fin_timeout=30 
net.ipv4.tcp_fin_timeout = 30 

Cependant, ce paramètre ne semble pas affecter quoi que ce soit. Quand je regarde la netstat de la machine, les connexions attendent encore les années 60 par défaut:

root:~# watch netstat -nato 
tcp  0  0 127.0.0.1:34185   127.0.0.1:11209   TIME_WAIT timewait (59.14/0/0) 
tcp  0  0 127.0.0.1:34190   127.0.0.1:11209   TIME_WAIT timewait (59.14/0/0) 

Y at-il quelque chose que je suis absent? La machine fonctionne sous Ubuntu 14.04.1.

Répondre

0

Votre lien est mythe urbain. La fonction réelle de net.ipv4.tcp_fin_timeout est as follows:

Cela indique le nombre de secondes d'attente pour un paquet final FIN avant que la socket est fermée de force. Ceci est strictement une violation de la spécification TCP, mais nécessaire pour empêcher les attaques par déni de service. Sous Linux 2.2, la valeur par défaut était 180.

Ceci n'a rien à voir avec TIME_WAIT. Il établit un délai d'attente pour une socket dans FIN_WAIT_1, après quoi la connexion est réinitialisée (ce qui contourne TIME_WAIT tout à fait). Ceci est une mesure DOS, comme indiqué, et ne devrait jamais survenir dans une application client-serveur correctement écrite. Vous ne voulez pas le régler si bas que les connexions ordinaires sont réinitialisées: vous perdrez des données. En fait, vous ne voulez pas jouer du tout. La méthode correcte pour réduire les états TIME_WAIT est here.