TCP-backlog ha le dimensioni della "coda di connessione completa" (handshake a tre vie completo, come descritto qui) o della "coda di connessione incompleta"?
tcp-backlog
è la dimensione della coda di connessione completa . Infatti, Redis passa questa configurazione come secondo parametro del listen(int s, int backlog)
chiama.
@GuangshengZuo aveva già una buona risposta a questa domanda. Quindi mi concentrerò sull'altro.
Se significa "coda di connessione completa", perché dovrei aumentare tcp_max_syn_backlog che limita la dimensione di una coda di connessione incompleta?
Citazione dal documento che hai citato:
L'implementazione utilizza due code, una coda SYN (o coda di connessione incompleta) e una coda di accettazione (o coda di connessione completa). Le connessioni nello stato SYN RECEIVED vengono aggiunte alla coda SYN e successivamente spostate nella coda di accettazione quando il loro stato cambia in ESTABLISHED, ovvero quando viene ricevuto il pacchetto ACK nell'handshake a 3 vie. Come suggerisce il nome, la chiamata di accettazione viene quindi implementata semplicemente per consumare le connessioni dalla coda di accettazione. In questo caso, l'argomento backlog della syscall di ascolto determina la dimensione della coda di accettazione.
Possiamo vedere che elementi in complete connection queue
vengono spostati dalla incomplete connection queue
.
Se hai un somaxconn
grande con un piccolo tcp_max_syn_backlog
, potresti NON avere abbastanza elementi per essere spostati nella complete connection queue
e la complete connection queue
potrebbe non essere mai pieno. Molte richieste potrebbero essere già state eliminate dalla prima coda prima che abbiano la possibilità di essere spostate nella seconda.
Quindi aumenta solo il valore di somaxconn
potrebbe NON funzionare. Devi rilanciare entrambi.