GNU/Linux >> Tutoriales Linux >  >> Linux

Obtenga el valor actual/predeterminado de TCP initcwnd en Linux

Realmente no estoy seguro, pero esto parece una referencia legítima

Presunción:

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

fuera:

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

Bueno, no puedo decir que esté 100 % seguro de que esta debería ser la respuesta, pero, como sucede a menudo, ss es la buena opción para revelar información, por ej. ej.:

 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 para deshacerse de la molesta resolución de DNS, -l es que nos atenemos a los enchufes de escucha solamente 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.


Si te entendí bien, estás buscando el valor inicial del snd_cwnd conjunto de parámetros cuando se inicializa un socket TCP.

Parece comenzar con el kernel de Linux 2.6.39 , una macro TCP_INIT_CWND se ha introducido en linux/include/net/tcp.h que rellena el valor de snd_cwnd al inicializar un socket TCP.

Sé dónde está este código en el kernel para IPv4 , y desafortunadamente no parece usar ninguna macro para completar el valor de los núcleos anteriores a 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 un código de inicio similar para IPv6 también dentro de tcp_v6_init_sock() función en net/ipv6/tcp_ipv6.c


Linux
  1. ¿Cuál es el nivel de ejecución actual del sistema Linux?

  2. Linux:¿por qué las utilidades de Linux no utilizan una llamada al sistema para obtener la hora actual?

  3. Linux:¿la forma portátil de obtener la dirección de origen de la ruta predeterminada?

  4. Linux:¿obtener archivos para la fecha actual en Linux?

  5. ¿Hay alguna manera de inspeccionar el rpath actual en Linux?

Cómo obtener el tamaño de un directorio en Linux

Cómo obtener la cantidad de procesadores/núcleos en Linux

Cómo cambiar el shell predeterminado en el sistema Linux

5 ejemplos del comando Netcat (nc) en Linux

Obtenga una dirección IP en Linux:descubra las muchas formas

¿Qué prioridad en tiempo real es la prioridad más alta en Linux?