TCP Keepalive 와 HTTP Keep-Alive

1. TCP Keepalive — 죽은 연결 감지

  • 목적: idle 연결에서 상대방 생존 여부 확인
  • 동작 주체: 커널
  • 프로브에 ACK 오면 → 연결 유지
  • N번 무응답이면 → 연결 종료 (ETIMEDOUT or ECONNRESET)

종료 공식

종료까지 시간 = tcp_keepalive_time + (tcp_keepalive_intvl × tcp_keepalive_probes)
기본값 = 7200 + (75 × 9) = 7875초 ≈ 2시간 11분

파라미터

파라미터 기본값 의미

tcp_keepalive_time7200초마지막 데이터 후 첫 프로브까지 대기
tcp_keepalive_intvl75초프로브 재전송 간격
tcp_keepalive_probes9회최대 프로브 횟수

종료 방식

상황 종료 방식

호스트 다운 (응답 없음)ETIMEDOUT
재부팅 후 연결 모름RST → 즉시 ECONNRESET

TCP Keepalive가 실제로 필요한 경우

  • 서버 크래시 / 전원 차단 (FIN 없이 사라짐)
  • 방화벽 / NAT가 idle 연결을 몰래 끊는 경우
  • 케이블 뽑힘, NIC 장애
서버가 정상 동작 중이면 프로브에 계속 ACK → 연결은 영원히 유지됨

2. HTTP Keep-Alive — TCP 연결 재사용

  • 목적: 매 요청마다 TCP 연결을 새로 맺는 오버헤드 제거
  • 동작 주체: 애플리케이션
  • HTTP/1.1부터 기본 활성화 (Connection: close로 명시해야 끊음)
HTTP/1.0: TCP연결 → 요청 → 응답 → TCP종료  (매번 반복)
HTTP/1.1: TCP연결 → 요청1 → 응답1 → 요청2 → 응답2 → TCP종료

3. nginx의 Keepalive

설정 대상 성격

keepalive_timeout 65클라이언트 ↔ nginxHTTP Keep-Alive (L7)
keepalive 32nginx ↔ upstreamTCP 연결 풀 재사용
Client ──(keepalive_timeout)──▶ nginx ──(keepalive 풀)──▶ WAS

4. TCP Keepalive vs HTTP Keep-Alive 비교

TCP Keepalive HTTP Keep-Alive

레이어L4 (Transport)L7 (Application)
목적죽은 연결 감지TCP 연결 재사용
동작 주체커널애플리케이션
패킷빈 ACK 프로브실제 HTTP 요청/응답

5. 타임아웃 우선순위

둘 중 짧은 쪽이 실제 연결 수명을 결정한다
  • TCP Keepalive 60초, HTTP Keep-Alive 30초인 경우
    • 30초에 nginx가 FIN 전송 → TCP 연결 종료
    • TCP Keepalive는 개입할 여지 없음
TCP Keepalive는 "아무도 끊으려 하지 않는데 상대가 죽은 경우"를 감지하는 것
애플리케이션이 먼저 끊으면 TCP Keepalive는 동작하지 않음

Read more

mybloodyvalentine 3집 loveless

마이블러디발렌타인의 정규 2집 loveless 엘피를 김밥레코즈에서 5만원가량의 금액으로 구매. 요건 평생 들어도 질리지않을거같아 바이닐로 구매했다. 물리적인 이슈가 발생하지않는 한 이제 스트리밍 플랫폼의 의존성없이 평생 청취 가능하다 내부 크레딧 개인적으로 빌린다 부처의 맥아리없는 보컬을 참 좋아한다. 바이닐 커버를 벗기면 평범하다 0:00 /0:12 1× 2집 loveless만큼 3집 mbv도 좋아해서 아마

By 권동혁