GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rufen Sie den aktuellen/Standardwert von TCP initcwnd unter Linux ab

Ich weiß es nicht genau, aber das scheint eine legitime Referenz zu sein

Ahnung:

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

aus:

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

Nun, ich kann nicht sagen, dass ich 100 % sicher bin, dass dies die Antwort sein sollte, aber, wie es oft kommt, ss ist die gute Wahl, um ein paar Infos preiszugeben, z. B.:

 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 ist typisch, um die lästige DNS-Auflösung loszuwerden, -l halten wir uns nur an Listening-Sockets und -i (der Schlüssel) ist "Interne TCP-Informationen anzeigen". Wie zu sehen ist, werden sowohl der Staualgorithmus als auch die Standard-cwnd angezeigt.


Wenn ich Sie richtig verstanden habe, suchen Sie den Anfangswert von snd_cwnd Parametersatz, wenn ein TCP-Socket initialisiert wird.

Es sieht so aus, als würde es mit dem Linux-Kernel 2.6.39 beginnen , ein Makro TCP_INIT_CWND wurde in linux/include/net/tcp.h eingeführt, das den Wert von snd_cwnd auffüllt beim Initialisieren eines TCP-Sockets.

Ich weiß, wo dieser Code im Kernel für IPv4 ist , und leider scheint es kein Makro zu verwenden, um den Wert für Kernel älter als 2.6.39 zu füllen

/* 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;

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

Ein ähnlicher Initialisierungscode existiert für IPv6 sowie in tcp_v6_init_sock() Funktion in net/ipv6/tcp_ipv6.c


Linux
  1. Was ist der aktuelle Runlevel des Linux-Systems?

  2. Linux – Der tragbare Weg, um die Standard-Routen-Quelladresse zu erhalten?

  3. Holen Sie sich die aktuelle Zeit in Sekunden seit der Epoche auf Linux, Bash

  4. Was ist die aktuelle Linux-Kernelquelle?

  5. Wie erhalte ich die physische Größe einer Datei unter Linux?

So erhalten Sie die Größe eines Verzeichnisses in Linux

So erhalten Sie die Anzahl der Prozessoren / Kerne in Linux

So ändern Sie die Standard-Shell im Linux-System

5 Beispiele für den Befehl Netcat (nc) unter Linux

Holen Sie sich eine IP-Adresse unter Linux:Entdecken Sie die vielen Möglichkeiten

Welche Echtzeitpriorität hat in Linux die höchste Priorität?