Получить текущее/значение по умолчанию TCP initcwnd в Linux

Получить текущее/значение по умолчанию TCP initcwnd в Linux

Я могу манипулировать таким значением с помощью:

ip route change ... initcwnd 10

а затем получите обратную связь:

ip route show

Но что насчет значения по умолчанию до любого изменения? Есть ли способ запросить это значение из системы?

В качестве альтернативы, можете ли вы предоставитьдействительныйссылка, показывающая жестко закодированное значение по умолчанию для каждой версии ядра?

решение1

Я не знаю наверняка, но это похоже на настоящую ссылку.

Догадка:

$ 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

решение2

Ну, я не могу сказать, что на 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 по умолчанию.

решение3

Если я правильно вас понял, вы ищете начальное значение параметра, snd_cwndустановленного при инициализации TCP-сокета.

Похоже, начиная с ядра 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также внутри tcp_v6_init_sock()функции вnet/ipv6/tcp_ipv6.c

Связанный контент