Puedo manipular ese valor con:
ip route change ... initcwnd 10
y luego tener una retroalimentación con:
ip route show
Pero ¿qué pasa con el valor predeterminado antes de cualquier modificación? ¿Hay alguna manera de consultar ese valor desde el sistema?
Alternativamente, ¿puede proporcionar unválido¿Referencia que muestra el valor codificado predeterminado para cada versión del kernel?
Respuesta1
No lo sé con certeza, pero parece una referencia legítima.
Corazonada:
$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`
afuera:
/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND 10
Respuesta2
Bueno, no puedo decir que esté 100% seguro de que esta debería ser la respuesta, pero, como suele ocurrir, ss
es una buena opción para revelar información, por ejemplo:
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
Es típico deshacerse de la molesta resolución de DNS, -l
nos limitamos a escuchar sockets únicamente y -i
(la clave) es "Mostrar información TCP interna". Como puede verse, se muestran tanto el algoritmo de congestión como el cwnd predeterminado.
Respuesta3
Si te entendí correctamente, estás buscando el valor inicial del snd_cwnd
conjunto de parámetros cuando se inicializa un socket TCP.
Parece que a partir del kernel de Linux , se ha introducido 2.6.39
una macro enTCP_INIT_CWND
Linux/include/net/tcp.hque completa el valor de snd_cwnd
al inicializar un socket TCP.
Sé dónde está este código en el kernel IPv4
y desafortunadamente no parece usar ninguna macro para completar el valor de los 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;
....
....
....
}
IPv6
También existe un código de inicio similar para tcp_v6_init_sock()
la función interna ennet/ipv6/tcp_ipv6.c