📚 [Linux] tcp_keepAlive_time 값에 대하여..
Category: Linux | 📅 July 14, 2021
요즘 질문이 자꾸 들어와서 정리함
(이렇게 또 하나의 지식은 정리됨 👍 )
sysctl
명령으로 확인할 수 있는 내용 중 tcp_keepalive 관련 내용들이 있는데 먼저 정리해 보면..
설정이 필요한 이유
일반적으로 Client 와 Server는 통신을 주고 받으면서 “용무 끝 “ , “수고하시오” 등의 마무리 인사를 주고 받아야 하나, 어떤 이유로(?) 인사없이 끝나는 경우가 있다.
이때 서버의 입장에서 마냥 기다릴 수가 없으니 알아서 종료해야 하는데..
- tcp_keepalive_time : 대기시간 (초)
- tcp_keepalive_probe : 종료 요청 횟수
- tcp_keepalive_invl : 종료 요청을 기다리는 시간 (초)
설정값 확인
$cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
$cat /proc/sys/net/ipv4/tcp_keepalive_probes
9
$cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
한번도 건드린 적이 없다면 저렇게 숫자가 나올 것임.
## 설정값의 의미 ##
7200 : 난 7200초 동안 기다려주마 9 : 7200초씩 9번을 ‘good by’ 신호를 요청하마 75 : ‘good by’ 신호에 응답이 없으면 75초 후에 다시 보내마
결과적으로 client <-> server 간 종료신호가 7200초 동안 조용할 경우, ‘끝났냐?’ 요청을 75초동안 9회까지 보내고 응답이 없는 경우, 연결을 종료한다는 얘기임.
결론
Client <-> Server 간 연계구간이 복잡한 경우, 최대 시간을 측정하여 아래와 같이 변경하는 것이 좋다.
연계구간의 최대 측정시간이 30초인 경우
- keepalive_time : 40
- tcp_keepalive_probes : 3
- tcp_keepalive_intvl : 5
40초 동안 응답이 없는 경우, 5초간격으로 3번 good by 인사요청하고 응답없으면 끊으라는 얘기