9

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

ip route change ... initcwnd 10

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

ip route show

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

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

3 ответа3

9

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

Hunch:

$ 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
5

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

2

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

Похоже , начиная с Linux ядра 2.6.39 макрос TCP_INIT_CWND был введен в Linux / включать / нетто / 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .