Ruft den aktuellen / Standardwert von TCP initcwnd unter Linux ab

9

Ich kann einen solchen Wert manipulieren mit:

ip route change ... initcwnd 10

und dann ein Feedback mit:

ip route show

Aber was ist mit dem Standardwert vor jeder Änderung? Gibt es eine Möglichkeit, diesen Wert vom System abzufragen?

Können Sie alternativ eine gültige Referenz angeben, die den fest codierten Standardwert für jede Kernelversion anzeigt?

cYrus
quelle

Antworten:

6

Nun, ich kann nicht sagen, dass ich zu 100% sicher bin, dass dies die Antwort sein sollte, aber wie so oft ssist es die gute Wahl, einige Informationen preiszugeben, zum Beispiel:

 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

-nist typisch, um lästige DNS-Auflösung loszuwerden. Bleiben -lwir nur bei Abhörsockets und -i(der Schlüssel) lautet "Interne TCP-Informationen anzeigen". Wie zu sehen ist, werden sowohl der Überlastungsalgorithmus als auch die Standard-cwnd angezeigt.

poige
quelle
2

Wenn ich Sie richtig verstanden habe, suchen Sie nach dem Anfangswert des snd_cwndParametersatzes, wenn ein TCP-Socket initialisiert wird.

Beginnend mit dem Linux-Kernel 2.6.39wurde TCP_INIT_CWNDin linux / include / net / tcp.h ein Makro eingeführt, das den Wert snd_cwndbeim Initialisieren eines TCP- Sockets auffüllt .

Ich weiß, wo sich dieser Code im Kernel befindet IPv4, und leider scheint er kein Makro zu verwenden, um den Wert für Kernel zu füllen, die älter als sind2.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;

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

Ein ähnlicher Init-Code existiert auch für IPv6die tcp_v6_init_sock()Funktion innerhalbnet/ipv6/tcp_ipv6.c

Tuxdude
quelle