Dapatkan nilai saat ini / standar dari TCP initcwnd di Linux

9

Saya dapat memanipulasi nilai tersebut dengan:

ip route change ... initcwnd 10

dan kemudian beri umpan balik dengan:

ip route show

Tetapi bagaimana dengan nilai default sebelum modifikasi? Apakah ada cara untuk menanyakan nilai itu dari sistem?

Atau, dapatkah Anda memberikan referensi yang valid yang menunjukkan nilai hardcoded default untuk setiap versi kernel?

cYrus
sumber

Jawaban:

6

Yah, saya tidak bisa mengatakan saya 100% yakin ini harus menjadi jawabannya, tetapi, seperti yang sering terjadi, ssadalah pilihan yang baik untuk mendapatkan beberapa info terungkap, misalnya:

 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

-nadalah tipikal untuk menghilangkan penyelesaian DNS yang menyebalkan, -lapakah kita tetap hanya mendengarkan soket dan -i(kuncinya) adalah "Tampilkan informasi TCP internal". Seperti dapat dilihat, kedua algoritma kemacetan dan cwnd default ditampilkan.

poige
sumber
2

Jika saya mengerti Anda dengan benar, Anda sedang mencari nilai awal dari snd_cwndset parameter ketika sebuah soket TCP diinisialisasi.

Sepertinya dimulai dengan kernel linux 2.6.39, sebuah makro TCP_INIT_CWNDtelah diperkenalkan di linux / include / net / tcp.h yang mengisi nilai snd_cwndketika menginisialisasi soket TCP.

Saya tahu di mana kode ini berada di kernel untuk IPv4, dan sayangnya sepertinya tidak menggunakan makro untuk mengisi nilai untuk kernel yang lebih tua dari2.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;

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

Kode init serupa juga ada untuk fungsi di IPv6dalamnyatcp_v6_init_sock()net/ipv6/tcp_ipv6.c

Tuxdude
sumber