[네트워크] TCP, HTTP Keep Alive

jh Seo·2025년 5월 29일
0

네트워크 공부

목록 보기
10/16

Keep- Alive

Connection을 유지하기 위한 메커니즘. TCP와 HTTP에서 사용하지만 두 keep-alive 방식은 다르다.

connection은 너무 오래 유지하거나 너무 짧게 유지하는 것 둘 다 낭비.

  • 너무 길게 유지하면? 더이상 사용하지 않는 connection이 유지될 가능성이 있어 리소스낭비
  • 너무 짧게 유지하면? 모든 요청에 대해 새 connection만들어야 하므로 리소스 낭비

HTTP Keep-Alive

HTTP Client와 Server사이에 동일한 TCP Connection을 이용해 여러 번 요청 보내기 위해 사용 .

여러 요청을 하나의 TCP Connection에서 진행하기 때문에, TCP 연결을 위한 3-way handshake는 첫번째 이후 새롭게 맺지 않음.

HTTP 서버는 TCP 커넥션을 keep-alive 시간동안 끊지 않고 기다림.

마지막 request부터 keep-alive 시간이 지나면 서버에서 connection을 끊음.

timeout은 서버에서 관리
timeout은 서버에서 관리

HTTP/1.1 200 OK
Connection: Keep-Alive
Keep-Alive: timeout=10, max=500
  • 해석
    • connection : keep-alive
    • timeout : 지속시간 표시, 10초간 지속
    • max : 연결 닫히기 전에 요청될 수 있는 최대 요청수
HTTP/1.1 200 OK
Connection: Close

keep-alive를 서버에서 사용안하거나 못하는 상황이면 위처럼 close 형식으로 데이터를 전달받음

request보낼 때, connection header을 설정해서 서버에 전송 가능!

하지만 설정은 서버에서 관리하므로, keep-alive 지원안하는 서버라면 클라이언트에서 connection header에 keep-alive 요청해도 close상태로 반환됨

TCP Keep-Alive

tcp keep-alive는 tcp연결이 맺어진 이후, 해당 연결 유지하는 것에 대해 작은 패킷들을 보내며 체크하는 매커니즘

keep-alive 패킷을 지속적으로 주고받으며 connection이 끊어지면 끊어졌다고 알려주는 역할도 한다.

keep-alive 패킷이 없다면 패킷을 전송할때 연결이 정상적인지 확인 불가능

tcp keep-alive는 os설정에서 관리

net.ipv4.tcp_keepalive_time=40
net.ipv4.tcp_keepalive_intvl=5
net.ipv4.tcp_keepalive_probes=3
  • 해석
    • time은 최초 keepalive 패킷 보내는 시간
    • intvl은 추가로 keepalive패킷 보낼때 간격
    • probes는 응답이 없을 때, 추가로 패킷 보내는 횟수

40초동안 응답이 없다면 5초 간격으로 KeepAlive 패킷을 3번 주고받는다.

만약 keepalive 패킷을 주고받지 못하면 connection종료

profile
코딩 창고!

0개의 댓글