確かなことはわかりませんが、これは正当な参照のようです
直感:
$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`
アウト:
/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND 10
まあ、これが答えであると 100% 確信しているとは言えませんが、ss
というのはよくあることです。 は、いくつかの情報を明らかにするための良い選択です。例:
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
迷惑な DNS 解決を取り除くのに一般的です。 -l
ソケットのみをリッスンし、-i
に固執しますか? (キー)は「内部TCP情報を表示する」です。ご覧のとおり、輻輳アルゴリズムとデフォルトの cwnd の両方が表示されています。
私の理解が正しければ、あなたは snd_cwnd
の初期値を探しています。 TCP ソケットの初期化時に設定されるパラメータ。
Linux カーネル 2.6.39
から始まるようです 、マクロ TCP_INIT_CWND
snd_cwnd
の値を入力する linux/include/net/tcp.h に導入されました TCP ソケットの初期化時。
このコードが IPv4
のカーネルのどこにあるか知っています 残念ながら、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;
....
....
....
}
IPv6
にも同様の初期化コードが存在します tcp_v6_init_sock()
の中にも net/ipv6/tcp_ipv6.c
の関数