
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, -l
nos 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_cwnd
parâmetro 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 emlinux/include/net/tcp.hque preenche o valor de snd_cwnd
ao inicializar um soquete TCP.
Eu sei onde esse código está no kernel IPv4
e, 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 IPv6
também para tcp_v6_init_sock()
funções internas emnet/ipv6/tcp_ipv6.c