GNU/Linux >> Linux Esercitazione >  >> Linux

Ottieni il valore corrente/predefinito di TCP initcwnd su Linux

Non lo so per certo, ma questo mi sembra un riferimento legittimo

Intuizione:

$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`

fuori:

/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND          10

Beh, 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 es. g.:

 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 ci atteniamo solo alle prese 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.


Se ho capito bene, stai cercando il valore iniziale di snd_cwnd parametro impostato quando viene inizializzato un socket TCP.

Sembra che inizi con il kernel Linux 2.6.39 , una macro TCP_INIT_CWND è stato introdotto in linux/include/net/tcp.h che popola il valore di snd_cwnd durante l'inizializzazione di un socket TCP.

So dove si trova questo codice nel kernel per IPv4 , e sfortunatamente non sembra utilizzare alcuna macro per popolare il valore per i kernel più vecchi di 2.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 di inizializzazione simile per IPv6 anche all'interno di tcp_v6_init_sock() funzione in net/ipv6/tcp_ipv6.c


Linux
  1. Qual è l'attuale runlevel del sistema Linux?

  2. Linux:ottenere file per la data corrente in Linux?

  3. Come ottenere informazioni sulla configurazione corrente di Grub / Boot?

  4. Qual è l'attuale sorgente del kernel Linux?

  5. Ottieni il nome utente corrente in Julia (Linux)

Come ottenere la dimensione di una directory in Linux

Come ottenere il numero di processori/core in Linux

Come modificare la shell predefinita nel sistema Linux

5 Esempi del comando Netcat (nc) in Linux

Ottieni un indirizzo IP su Linux:scopri i molti modi

Quale priorità in tempo reale è la priorità più alta in Linux