본문 바로가기
Infra

tcp_fin_timeout란?

by 당리 2025. 11. 2.

tcp_fin_timeout은 TCP 연결이 종료될 때 FIN-WAIT-2 상태로 머무는 시간을 설정하는 커널 파라미터다.
리눅스에서는 /proc/sys/net/ipv4/tcp_fin_timeout 파일을 통해 확인하거나, sysctl 명령으로 조정할 수 있다.

 

 

동작 원리

TCP 연결이 종료될 때는 다음 순서로 상태가 바뀐다:

  1. 클라이언트가 FIN 패킷을 보내면서 연결 종료 요청 → FIN-WAIT-1
  2. 서버가 ACK를 응답하면 → FIN-WAIT-2
  3. 서버가 나중에 자기 쪽 FIN을 보내면 → TIME-WAIT 혹은 세션 종료

여기서 서버가 FIN을 보내지 않거나 유실된 경우,
연결은 FIN-WAIT-2 상태에서 일정 시간 대기하게 되는데,
이 대기 시간을 정하는 값이 바로 tcp_fin_timeout 이다.

 

 

왜 조정해야 하나?

대규모 연결 환경

서버가 동시에 수천 개의 TCP 연결을 처리하는 환경에서는
FIN-WAIT-2 상태의 세션이 누적되어 커널 메모리와 포트 리소스를 잡아먹을 수 있다.
이때 tcp_fin_timeout 값을 줄이면 세션 해제 속도를 높일 수 있다.

 

 

불안정한 네트워크

클라이언트가 비정상적으로 종료되거나 방화벽이 중간에서 세션을 끊는 경우에도
FIN-WAIT-2 세션이 쌓인다. 이런 환경에서는 10~30초 정도로 낮춰 설정하는 것이 좋다.

 

 

주의점

tcp_fin_timeout을 너무 낮게 설정하면
정상적으로 종료 중인 연결이 아직 데이터 송신을 마치기 전에
강제로 종료될 가능성도 있다.
따라서 서버 부하, 트래픽 패턴을 고려해 점진적으로 조정하는 것이 중요하다.

 

 

 

'Infra' 카테고리의 다른 글

클라우드 공통 저장소(Storage)  (0) 2025.11.23
ORA 01795 IN절에 사용 가능한 목록의 최대 수  (0) 2025.11.02
SQL 튜닝 not exists  (0) 2025.10.26
L4 SNAT 세션 풀(Session Pool)  (0) 2025.10.26
SQL 튜닝 case when  (0) 2025.10.19