← 질문 목록
#375깊이 0
HTTP의 Keep-Alive 설정이 TCP의 TIME_WAIT 상태 발생을 어떻게 완화하는가?
네트워크
Keep-Alive는 단일 TCP 연결로 여러 HTTP 요청을 처리해 연결을 끊는 횟수 자체를 줄이기 때문이다.
| 구분 | Keep-Alive 미사용 | Keep-Alive 사용 |
|---|---|---|
| 연결 방식 | 요청마다 새 TCP 연결 생성 | 단일 TCP 연결 재사용 |
| 종료 시점 | 매 응답 후 즉시 능동 종료 | 타임아웃이나 종료 요청 시 능동 종료 |
| TIME_WAIT | 요청 수만큼 고빈도 발생 | 연결 수만큼만 드물게 발생 |
TCP 연결을 먼저 닫는 주체에는 TIME_WAIT 상태가 남는다. Keep-Alive를 쓰지 않으면 모든 HTTP 요청마다 TCP 연결을 새로 맺고 끊는다. 요청이 몰릴 때 매번 연결을 끊으면 소켓 자원과 포트가 금세 부족해진다.
Keep-Alive를 켜면 설정된 시간 동안 기존 TCP 연결을 끊지 않고 유지한다. 여러 HTTP 요청과 응답이 하나의 연결 위에서 오간다. 연결을 종료하는 주기 자체가 길어져 전체 TIME_WAIT 소켓 수가 줄어든다.