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