답변:
나는 확실히 확실하지 않지만, 이것은 합법적 인 참조처럼 보인다
직감 :
$ 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
글쎄, 나는 이것이 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가 모두 표시됩니다.
올바르게 이해했다면 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