私はそのような値を次のように操作できます:
ip route change ... initcwnd 10
そして、次のフィードバックがあります:
ip route show
しかし、変更前のデフォルト値はどうですか?システムからその値を照会する方法はありますか?
または、各カーネルバージョンのデフォルトのハードコードされた値を示すvalid参照を提供できますか?
予感:
$ 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
(キー)は「Showinternal TCP information」です。ご覧のとおり、輻輳アルゴリズムとデフォルトのcwndの両方が表示されています。
私があなたを正しく理解していれば、TCPソケットが初期化されるときに設定される_snd_cwnd
_パラメータの初期値を探しています。
Linuxカーネル_2.6.39
_から始めて、マクロ_TCP_INIT_CWND
_が linux/include/net/tcp.h に導入され、_snd_cwnd
_の値が入力されているようです。 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
_にも存在し、_net/ipv6/tcp_ipv6.c
_のtcp_v6_init_sock()
関数内にも存在します。