GNU/Linux >> Belajar Linux >  >> Linux

Dapatkan nilai saat ini/default dari TCP initcwnd di Linux

Saya tidak begitu tahu pasti, tapi ini sepertinya referensi yang sah

Firasat:

$ grep -A 2 initcwnd `find /usr/src/linux/include -type f -iname '*h'`

keluar:

/usr/src/linux/include/net/tcp.h:
/* TCP initial congestion window as per draft-hkchu-tcpm-initcwnd-01 */
#define TCP_INIT_CWND          10

Yah, saya tidak bisa mengatakan saya 100% yakin ini harus menjadi jawabannya, tapi, seperti yang sering muncul, ss adalah pilihan yang baik untuk mengungkapkan beberapa info, misalnya. g.:

 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 tipikal untuk menyingkirkan penyelesaian DNS yang mengganggu, -l apakah kita hanya menggunakan soket pendengar dan -i (kuncinya) adalah "Tampilkan informasi TCP internal". Seperti yang dapat dilihat, baik algoritme kongesti maupun cwnd default ditampilkan.


Jika saya memahami Anda dengan benar, Anda sedang mencari nilai awal dari snd_cwnd parameter disetel saat soket TCP diinisialisasi.

Sepertinya dimulai dengan kernel linux 2.6.39 , makro TCP_INIT_CWND telah diperkenalkan di linux/include/net/tcp.h yang mengisi nilai snd_cwnd saat menginisialisasi soket TCP.

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

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

Kode init serupa ada untuk IPv6 juga di dalam tcp_v6_init_sock() berfungsi di net/ipv6/tcp_ipv6.c


Linux
  1. Apa runlevel sistem Linux saat ini?

  2. Linux – Cara Portabel Untuk Mendapatkan Alamat Sumber Rute Default?

  3. Linux – Mendapatkan File Untuk Tanggal Saat Ini Di Linux?

  1. Apa sumber kernel Linux saat ini?

  2. Dapatkan nama pengguna saat ini di Julia (Linux)

  3. Apa urutan default dari jenis Linux?

  1. Linux – Mengapa Utils Linux Tidak Menggunakan System Call Untuk Mendapatkan Waktu Saat Ini?

  2. Bagaimana Mendapatkan Info Tentang Konfigurasi Grub / Boot Saat Ini?

  3. Apakah ada cara untuk memeriksa rpath saat ini di Linux?