Connection을 유지하기 위한 메커니즘. TCP와 HTTP에서 사용하지만 두 keep-alive 방식은 다르다.
connection은 너무 오래 유지하거나 너무 짧게 유지하는 것 둘 다 낭비.
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
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 패킷을 지속적으로 주고받으며 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
40초동안 응답이 없다면 5초 간격으로 KeepAlive 패킷을 3번 주고받는다.
만약 keepalive 패킷을 주고받지 못하면 connection종료