Obtenga el valor actual/predeterminado de TCP initcwnd en Linux

Obtenga el valor actual/predeterminado de TCP initcwnd en Linux

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, sses 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

-nEs típico deshacerse de la molesta resolución de DNS, -lnos 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_cwndconjunto de parámetros cuando se inicializa un socket TCP.

Parece que a partir del kernel de Linux , se ha introducido 2.6.39una macro enTCP_INIT_CWNDLinux/include/net/tcp.hque completa el valor de snd_cwndal inicializar un socket TCP.

Sé dónde está este código en el kernel IPv4y 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;

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

IPv6También existe un código de inicio similar para tcp_v6_init_sock()la función interna ennet/ipv6/tcp_ipv6.c

información relacionada