GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir la valeur actuelle/par défaut de TCP initcwnd sous Linux

Je ne sais pas vraiment avec certitude, mais cela semble être une référence légitime

Intuition :

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

sortie :

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

Eh bien, je ne peux pas dire que je suis sûr à 100 % que cela devrait être la réponse, mais, comme cela arrive souvent, ss est le bon choix pour obtenir des informations révélées, pour e. ex. :

 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 est typique pour se débarrasser de la résolution DNS ennuyeuse, -l est-ce que nous nous en tenons aux sockets d'écoute uniquement et -i (la clé) est "Afficher les informations TCP internes". Comme on peut le voir, l'algorithme de congestion et le cwnd par défaut sont affichés.


Si j'ai bien compris, vous cherchez la valeur initiale du snd_cwnd paramètre défini lors de l'initialisation d'un socket TCP.

Cela ressemble à commencer avec le noyau Linux 2.6.39 , une macro TCP_INIT_CWND a été introduit dans linux/include/net/tcp.h qui remplit la valeur de snd_cwnd lors de l'initialisation d'un socket TCP.

Je sais où se trouve ce code dans le noyau pour IPv4 , et malheureusement, il ne semble pas utiliser de macro pour remplir la valeur des noyaux antérieurs à 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;

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

Un code d'initialisation similaire existe pour IPv6 ainsi qu'à l'intérieur du tcp_v6_init_sock() fonction en net/ipv6/tcp_ipv6.c


Linux
  1. Quel est le niveau d'exécution actuel du système Linux ?

  2. Comment changer le shell par défaut sous Linux

  3. Obtenez l'heure actuelle en secondes depuis l'époque sur Linux, Bash

  4. Quelle est la source actuelle du noyau Linux ?

  5. Comment obtenir la taille physique d'un fichier sous Linux ?

Comment obtenir la taille d'un répertoire sous Linux

Comment obtenir le nombre de processeurs/cœurs sous Linux

Comment changer le shell par défaut dans le système Linux

5 exemples de la commande Netcat (nc) sous Linux

Obtenir une adresse IP sous Linux :découvrez les nombreuses façons

Quelle priorité en temps réel est la priorité la plus élevée sous Linux