Opravdu to nevím jistě, ale vypadá to jako legitimní reference
Tušení:
$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`
ven:
/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND 10
No, nemůžu říct, že jsem si 100% jistý, že tohle by měla být odpověď, ale jak to často přichází, ss
je dobrou volbou pro odhalení některých informací, např. např.:
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
je typické zbavit se nepříjemného překládání DNS, -l
držíme se pouze naslouchacích zásuvek a -i
(klíč) je "Zobrazit interní informace TCP". Jak je vidět, je zobrazen jak algoritmus přetížení, tak výchozí cwnd.
Pokud jsem vám správně rozuměl, hledáte počáteční hodnotu snd_cwnd
nastaven při inicializaci soketu TCP.
Vypadá to, že začíná linuxovým jádrem 2.6.39
, makro TCP_INIT_CWND
byl zaveden v linux/include/net/tcp.h, který naplňuje hodnotu snd_cwnd
při inicializaci soketu TCP.
Vím, kde je tento kód v jádře pro IPv4
a bohužel se zdá, že nepoužívá žádné makro k naplnění hodnoty pro jádra starší než 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;
....
....
....
}
Podobný init kód existuje pro IPv6
také uvnitř tcp_v6_init_sock()
funkce v net/ipv6/tcp_ipv6.c