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