-
TCP Keepalive 와 HTTP KeepaliveComputer Science/Network 2024. 2. 10. 01:01
TCP 사용되는 Keepalive 개념과 HTTP/1.1에서 사용되는 Keepalive의 개념이 어떤 차이가 있을까
TCP의 Keepalive와 HTTP의 Keepalive는 둘 다 하나의 커넥션으로 데이터를 주고 받는 점에서는 같다고 볼 수는 있다.
하지만 목적과 특성이 다르다.
TCP Keepalive는 서버와 클라이언트 간의 연결을 유지하기 위한 목적이 있다.
반면 HTTP Keepalive는 불필요한 새로운 연결을 줄이고 기존 연결을 재사용함으로써 성능을 높이는 데에 목적이 있다.
또한 TCP Keepalive는 일정 시간 간격으로 payload가 없는 (0 or 1byte) 데이터를 전송하여 커넥션이 살아있나 확인하고 미리 설정된 일정 시간만큼 커넥션을 연장한다. 이는 좀비소켓을 방지하는 데에도 도움이 될 수 있는데 패킷을 보내고 응답이 없으면 좀비소켓으로 간주하고 소켓을 정리할 수 있다. (RST 패킷을 보내고 소켓을 닫는다.) 하지만 일반적으로 기본값이 2시간 이상으로 설정되어 있기 때문에 주의해야 한다.
반면 HTTP Keepalive는 제한된 설정 (요청횟수, 유휴시간 등)에 따라 자발적으로 연결을 끊는다.
Nginx의 Upstream의 Keepalive 설정은 둘 중 어떤 기능과 유사한 걸까? 위의 두 개념과는 조금씩은 다른 것 같지만 HTTP/1.1의 목적과 유사한 것 같다.
Nginx Upstream의 Keepalive는 생존 시간, 최대 개수 등을 설정할 수 있다.
이는 마찬가지로 불필요한 handshake를 줄여주고 4-way handshake으로 Timewait 대기 상태의 소켓이 많아지면서 로컬 포트가 고갈되는 문제도 keepalive 설정으로 해결할 수 있다. (대규모 트래픽이 발생하면 Timewait 보통 60초 동안 제거되지 않는 소켓 대거 발생 가능)
'Computer Science > Network' 카테고리의 다른 글
TCP 소켓 옵션 (0) 2023.01.28 TCP의 혼잡제어 (0) 2020.10.06 TCP의 흐름제어, 오류제어 (0) 2020.10.03 로드밸런서(Load Balancer)란?? (0) 2020.09.30