📚 [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 인사요청하고 응답없으면 끊으라는 얘기

💭 Reviews
  • 기본은 오래되어도 변하지 않음.
  • 결론이 너무 너그럽군 -_-;
  • 📖 References
  • [TCP Keepalive HOWTO]