세션 풀(Session Pool) 개념
SNAT의 세션 풀 크기는 다음 공식으로 계산된다
"세션 풀 크기 = SNAT IP 개수 × 사용 가능한 포트 개수"
-한 IP가 가질 수 있는 최대 포트는 약 64K (65535개)
-하지만 OS 예약 포트, 커널 설정값(ip_local_port_range), L4 정책 등에 따라 실제 가용 포트는 더 적음
- 예: 49152 ~ 65535라면 약 16K 개
세션 풀이 다 차면 어떤 일이 발생할까
- 신규 연결 시도가 실패 (TCP SYN drop 등)
- TIME_WAIT 세션이 계속 포트를 묶어두면 더 빨리 고갈
해결 방법
세션 풀 고갈은 대고객시스템 설계 단계에서 반드시 고려해야 하는 포인트입니다. 대표적인 해결책은 다음과 같음
- SNAT IP 추가
- 가장 확실한 방법. IP를 여러 개 할당해 풀 크기를 확장
- 포트 범위 확대
- Linux: /proc/sys/net/ipv4/ip_local_port_range 조정
- 예: 1024 65535로 확장하여 약 64K 포트 사용
- TIME_WAIT 관리
- tcp_tw_reuse, tcp_fin_timeout 설정으로 재사용 및 해제 시간 단축
- 단, 안정성을 해치지 않도록 서비스 특성을 고려해야 함
- Persistent Connection(Keep-Alive)
- 매 요청마다 새 연결을 만드는 대신 세션을 재활용
'Infra' 카테고리의 다른 글
| tcp_fin_timeout란? (0) | 2025.11.02 |
|---|---|
| SQL 튜닝 not exists (0) | 2025.10.26 |
| SQL 튜닝 case when (0) | 2025.10.19 |
| TCP 3-way Handshake (0) | 2025.10.19 |
| L4 SNAT란 (0) | 2025.10.12 |