RTO를 구체적으로 변경할 수없는 이유는 RTO가 정적 값이 아니기 때문입니다. 대신 (자연스럽게 초기 SYN 제외) 각 연결에 대한 RTT (Round Trip Time)를 기반으로합니다. 실제로, RTT의 스무딩 버전과 일부 상수가 혼합 된 RTT 분산을 기반으로합니다. 따라서 각 TCP 연결에 대해 동적으로 계산 된 값이므로 일반적으로 계산 및 RTO에 대해 자세히 설명하는 이 기사 를 적극 권장 합니다 .
RFC 6298 도 관련이 있습니다 (많은 것들 중에서) :
RTO가 계산 될 때마다 1 초 미만이면 RTO를 1 초로 반올림해야합니다.
커널은 항상 RTO를 1 초로 설정합니까? Linux를 사용하면 다음 ss -i
명령 을 실행하여 열린 연결에 대한 현재 RTO 값을 표시 할 수 있습니다 .
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.0.2.15:52861 216.58.219.46:http
cubic rto:204 rtt:4/2 cwnd:10 send 29.2Mbps rcv_space:14600
ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:52586
cubic rto:201 rtt:1.5/0.75 ato:40 cwnd:10 send 77.9Mbps rcv_space:14600
ESTAB 0 0 10.0.2.15:52864 216.58.219.46:http
cubic rto:204 rtt:4.5/4.5 cwnd:10 send 26.0Mbps rcv_space:14600
위의 내용은 SSH로 로그인 한 VM의 결과이며 google.com에 연결되어 있습니다. 보다시피 RTO는 실제로 200-ish (밀리 초)로 설정되어 있습니다. RFC에서 1 초 값으로 반올림되지 않았으며 약간 높다고 생각할 수도 있습니다. Linux 용 RTO와 관련하여 최소 (200 밀리 초) 및 최대 (120 초) 범위가 있기 때문입니다 (위의 링크 된 기사에서 이에 대한 자세한 설명이 있습니다).
따라서 RTO 값을 직접 변경할 수는 없지만 무선과 같은 손실이있는 네트워크의 경우 F-RTO를 조정할 수 있습니다 (이는 이미 배포판에 따라 활성화되어있을 수 있음). 실제로 조정할 수있는 F-RTO와 관련된 두 가지 관련 옵션이 있습니다 ( 여기 요약 ).
net.ipv4.tcp_frto
net.ipv4.tcp_frto_response
최적화하려는 대상에 따라 유용하거나 유용하지 않을 수 있습니다.
편집 : 주석에서 TCP의 rto_min / max 값을 조정할 수있는 기능에 후속.
TCP에 대한 전역 최소 RTO를 변경할 수는 없지만 (SCTP에 대해서는 가능하지만 sysctl에 노출되어 있음) 라우팅 당 RTO의 최소값을 조정할 수 있다는 것은 좋은 소식입니다. 기초. CentOS VM의 라우팅 테이블은 다음과 같습니다.
ip route
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
169.254.0.0/16 dev eth0 scope link metric 1002
default via 10.0.2.2 dev eth0
다음과 같이 기본 경로에서 rto_min 값을 변경할 수 있습니다.
ip route change default via 10.0.2.2 dev eth0 rto_min 5ms
이제 내 라우팅 테이블은 다음과 같습니다.
ip route
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
169.254.0.0/16 dev eth0 scope link metric 1002
default via 10.0.2.2 dev eth0 rto_min lock 5ms
마지막으로 연결을 시작하고 ss -i
이것이 존중되는지 확인 하십시오.
ss -i
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.0.2.15:ssh 10.0.2.2:50714
cubic rto:201 rtt:1.5/0.75 ato:40 cwnd:10 send 77.9Mbps rcv_space:14600
ESTAB 0 0 10.0.2.15:39042 216.58.216.14:http
cubic rto:15 rtt:5/2.5 cwnd:10 send 23.4Mbps rcv_space:14600
성공! HTTP 연결의 rto (변경 후)는 15ms 인 반면 SSH 연결 (변경 전)은 200+입니다.
실제로이 방법이 마음에 듭니다. 다른 트래픽을 유발할 수있는 전 세계가 아닌 적절한 경로에서 더 낮은 값을 설정할 수 있습니다. 마찬가지로 ( ip 매뉴얼 페이지 참조 ) 경로의 초기 rtt 추정값과 초기 rttvar를 조정할 수 있습니다 (동적 RTO를 계산할 때 사용됨). 조정 측면에서 완벽한 솔루션은 아니지만 대부분의 중요한 부분이 있다고 생각합니다. 최대 설정을 조정할 수는 없지만 어떤 경우에도 일반적으로 유용하지는 않습니다.