Was bedeutet tcp_orphan_retries auf 0 gesetzt?

8

Bedeutet das Setzen von tcp_orphan_retries auf 0, dass es keine Begrenzung für Wiederholungsversuche gibt, oder bedeutet dies, dass es überhaupt nicht erneut versucht wird?

benjarrell
quelle

Antworten:

4

Es bedeutet nicht "für immer versuchen", es bedeutet "überhaupt nicht versuchen". Dies ist der Server, der versucht, dem Client höflich mitzuteilen, dass der Server bereit ist, seinen Socket zu schließen, und wenn er eine ordnungsgemäße Trennung vornehmen oder weitere Daten senden würde, wäre dies wunderbar. Es wird X-mal versucht, den Client zur Antwort zu bewegen, und nach X wird der Socket auf der Systemseite zurückgefordert.

Das Setzen dieser Zahl auf 0 würde mir bedeuten, dass dieser Server stark ausgelastet ist und eine Null-Toleranz-Richtlinie für Waisenkinder gilt. Es könnte auch eine Antwort auf ein DDOS gewesen sein: Viele Arbeiten von DDOS wurden ausgeführt, indem eine Socket-Verbindung geöffnet und dann daran festgehalten wurde, ohne etwas zu tun.

Satanicpuppy
quelle
Ich hatte diese Zahl standardmäßig auf 0 gesetzt und das Ergebnis war, dass die Waisenkinder für immer bleiben. Musste es auf eine größere Zahl einstellen, damit sie verschwinden.
JJRV
1
es bedeutet "versuche es überhaupt nicht". : falsch. siehe die Antwort mit der Kernelfunktion tcp_orphan_retries ()
Massimo
1
Diese Antwort ist falsch! Das Setzen von tcp_orphan_retries auf 0 bedeutet 8. Siehe die Antwort von xrtgavin unten.
Elad Nava
7

Das Setzen von tcp_orphan_retries auf 0 ist ein Sonderfall, siehe tcp_timer.c

 98 /* Calculate maximal number or retries on an orphaned socket. */
 99 static int tcp_orphan_retries(struct sock *sk, int alive)
 100 {
 101         int retries = sysctl_tcp_orphan_retries; /* May be zero. */
 102 
 103         /* We know from an ICMP that something is wrong. */
 104         if (sk->sk_err_soft && !alive)
 105                 retries = 0;
 106 
 107         /* However, if socket sent something recently, select some safe
 108          * number of retries. 8 corresponds to >100 seconds with minimal
 109          * RTO of 200msec. */
 110         if (retries == 0 && alive)
 111                 retries = 8;
 112         return retries;
 113 }
rtxu
quelle
1
Welches unterstützt, was die Manpage sagt. "tcp_orphan_retries (Ganzzahl; Standard: 8; seit Linux 2.4)"
Matt
0

Ziemlich sicher, dass es bedeutet, dass es überhaupt nicht erneut versucht wird. Diese Kommentare aus der Kernelquelle (tcp_timer.c) unterstützen Folgendes:

/* Do not allow orphaned sockets to eat all our resources.
 * This is direct violation of TCP specs, but it is required
 * to prevent DoS attacks. It is called when a retransmission timeout
 * or zero probe timeout occurs on orphaned socket.
 *
 * Criteria is still not confirmed experimentally and may change.
 * We kill the socket, if:
 * 1. If number of orphaned sockets exceeds an administratively configured
 *    limit.
 * 2. If we have strong memory pressure.
 */
DictatorBob
quelle
Dieser Kommentar ist für tcp_out_of_resources()und "ein administrativ konfiguriertes Limit" ist in der Definition näher an tcp_max_orphans.
Andrew B