Linux에서 TCP initcwnd의 현재 / 기본값을 가져옵니다.


9

나는 그런 가치를 다음과 같이 조작 할 수있다.

ip route change ... initcwnd 10

다음 의견을 보내주십시오.

ip route show

그러나 수정하기 전에 기본값은 어떻습니까? 시스템에서 해당 값을 쿼리하는 방법이 있습니까?

또는 각 커널 버전의 기본 하드 코딩 된 값을 표시 하는 유효한 참조 를 제공 할 수 있습니까?

답변:



6

글쎄, 나는 이것이 100 % 확실하다고 말할 수는 없다. buuut 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_cwndTCP 소켓이 초기화 될 때 매개 변수 세트 의 초기 값을 찾고 있습니다.

linux 커널로 시작하는 것처럼 보입니다 2.6.39. 매크로 TCP_INIT_CWNDlinux / include / net / tcp.h 에 도입되어 snd_cwndTCP 소켓을 초기화 할 때 의 값을 채 웁니다 .

이 코드가 커널에서 어디에 있는지 알고 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.