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

9

Eu posso manipular esse valor com:

ip route change ... initcwnd 10

e depois ter 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 uma referência válida que mostre o valor padrão codificado para cada versão do kernel?

    
por cYrus 28.02.2013 / 15:01

3 respostas

9

Eu realmente não sei ao certo, mas isso parece ser uma referência legítima

Palpite:

$ 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
    
por 02.03.2013 / 20:41
5

Bem, eu não posso dizer que tenho 100% de certeza que esta deve ser a resposta, buuut, como sempre acontece, ss é a boa escolha para obter alguma informação revelada, por exemplo. 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 é típico de se livrar da resolução irritante de DNS, -l é que nos limitamos apenas a soquetes de escuta e -i (a chave) é "Mostrar informações TCP internas". Como pode ser visto, o algoritmo de congestionamento e o cwnd padrão são mostrados.

    
por 15.02.2016 / 21:43
2

Se eu entendi corretamente, você está procurando o valor inicial do parâmetro snd_cwnd definido quando um soquete TCP é inicializado.

Parece que, começando com o kernel do linux 2.6.39 , uma macro TCP_INIT_CWND foi introduzida em linux / include / net / tcp.h que preenche o valor de snd_cwnd ao inicializar um soquete TCP.

Eu sei onde esse código está no kernel para IPv4 e, infelizmente, ele não parece usar nenhuma macro para preencher o valor de kernels mais antigos que 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;

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

Existe um código init semelhante para IPv6 , bem como dentro da função tcp_v6_init_sock() em net/ipv6/tcp_ipv6.c

    
por 02.03.2013 / 20:44

Tags