Я могу манипулировать таким значением с помощью:
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