Obtenha o valor atual/padrão do TCP initcwnd no Linux

Obtenha o valor atual/padrão do TCP initcwnd no Linux

Posso manipular esse valor com:

ip route change ... initcwnd 10

e depois dê um feedback com:

ip route show

Mas e o valor padrão antes de qualquer modificação? Existe uma maneira de consultar esse valor do sistema?

Como alternativa, você pode fornecer umválidoreferência que mostra o valor codificado padrão para cada versão do kernel?

Responder1

Não tenho certeza, mas parece uma referência legítima

Pressentimento:

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

fora:

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

Responder2

Bem, não posso dizer que tenho 100% de certeza de que essa deve ser a resposta, mas, como costuma acontecer, ssé uma boa opção para revelar algumas informações, por exemplo:

 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é típico para nos livrarmos da irritante resolução de DNS, -lnos limitamos apenas aos soquetes de escuta e -i(a chave) é "Mostrar informações TCP internas". Como pode ser visto, tanto o algoritmo de congestionamento quanto o cwnd padrão são mostrados.

Responder3

Se bem entendi, você está procurando o valor inicial do snd_cwndparâmetro definido quando um soquete TCP é inicializado.

Parece que começando com o kernel do Linux 2.6.39, uma macro TCP_INIT_CWNDfoi introduzida emlinux/include/net/tcp.hque preenche o valor de snd_cwndao inicializar um soquete TCP.

Eu sei onde esse código está no kernel IPv4e, infelizmente, ele não parece usar nenhuma macro para preencher o valor para kernels anteriores a2.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;

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

Um código de inicialização semelhante existe IPv6também para tcp_v6_init_sock()funções internas emnet/ipv6/tcp_ipv6.c

informação relacionada