Ottieni il valore corrente / predefinito di TCP initcwnd su Linux


9

Posso manipolare tale valore con:

ip route change ... initcwnd 10

e quindi avere un feedback con:

ip route show

Ma per quanto riguarda il valore predefinito prima di qualsiasi modifica? C'è un modo per interrogare quel valore dal sistema?

In alternativa, puoi fornire un riferimento valido che mostri il valore predefinito codificato per ogni versione del kernel?

Risposte:



6

Bene, non posso dire di essere sicuro al 100% che questa dovrebbe essere la risposta, ma, come spesso accade, ssè la buona scelta per ottenere alcune informazioni rivelate, ad esempio:

 ss -nli|fgrep cwnd
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10
     westwood rto:1000 mss:536 cwnd:10

-nè tipico per sbarazzarsi della fastidiosa risoluzione DNS, -lè attenersi solo ai socket di ascolto e -i(la chiave) è "Mostra informazioni TCP interne". Come si può vedere, vengono mostrati sia l'algoritmo di congestione che il cwnd predefinito.


2

Se ti ho capito correttamente, stai cercando il valore iniziale del snd_cwndset di parametri quando viene inizializzato un socket TCP.

Sembra che a partire dal kernel Linux 2.6.39, TCP_INIT_CWNDsia stata introdotta una macro in Linux / include / net / tcp.h che popola il valore snd_cwnddell'inizializzazione di un socket TCP.

So dove si trova questo codice nel kernel IPv4, e sfortunatamente non sembra usare alcuna macro per popolare il valore per kernel più vecchi di2.6.39

/* net/ipv4/tcp_ipv4.c from 2.6.37 kernel */
static int tcp_v4_init_sock(struct sock *sk)
{
        struct inet_connection_sock *icsk = inet_csk(sk);
        struct tcp_sock *tp = tcp_sk(sk);

        ....
        ....
        ....

        /* So many TCP implementations out there (incorrectly) count the
         * initial SYN frame in their delayed-ACK and congestion control
         * algorithms that we must have the following bandaid to talk
         * efficiently to them.  -DaveM
         */
        tp->snd_cwnd = 2;

        ....
        ....
        ....
}

Esiste un codice init simile anche per IPv6la tcp_v6_init_sock()funzione inside innet/ipv6/tcp_ipv6.c

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.