네트워크 TCP keepalive 세션 유지하기
- IT/네트워크(Network)
- 2022. 9. 9.
TCP Keepalive Interval timeout wireshark 세션 유지하기
TCP Keepalive
3-way handshake를 통해 연결된 세션을 끊지 않고 계속 사용하는 방식
이때 세션 연결을 지속적으로 확인하기 위해 아주 작은 크기의 패킷을 보냅니다. 패킷을 주고 받은 다음 타이머는 원점으로 돌아갑니다.
ESTABLISHED 상태의 소켓에서는 Keepalive 타이머를 확인할 수 있습니다.
ss : keepalive 확인 명령어
ss -otn
-o : Show timer information.
-t : Display only TCP sockets.
-n : Do now try to resolve service names.
Keepalive 파라미터 설정 확인 명령어
sysctl -a | grep -i keepalive
net.ipv4.tcp_keepalive_intvl
재전송 패킷을 보내는 주기를 의미한다. intvl 간격으로 probes번의 패킷을 보낸다.
위 그림을 보면 75초간 9번의 신호를 요청한다. 응답이 없는 경우 연결을 종료한다.
net.ipv4.tcp_keepalive_probes
패킷을 보낼 최대 전송 횟수를 정의한다.
네트워크 패킷은 여러 사유로 인해 유실될 수 있으므로 재전송 매커니즘을 넣는다.
net.ipv4.tcp_keepalive_time
keepalive 소켓의 유지시간
위 그림에서는 TCP Keepalive 옵션이 적용된 소켓은 최소한 7200초 연결을 유지한다.
keepalive 값 변경
# sysctl -w net.ipv4.tcp_keepalive_time=120
또는
# vi /etc/sysctl.conf 값 변경
net.ipv4.tcp_keepalive_time=120
HTTP Keepalive
HTTP Keep alive의 목적은 최대 얼마동안 연결을 유지하도록 하는 것이냐 입니다. 버전은 HTTP/1.1 부터 keepalive 기능을 사용합니다.
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache
2개의 파라미터로 구분됩니다.
timeout
연결의 유지를 위한 최소한의 시간
max
연결을 종료하기 전까지 보낼 수 있는 최대 요청 수.
요청 당 1씩 줄어들게 됩니다.
HTTP/1.1에서 Keep-Alive로 인한 장점은 무엇일까?
- 3-way handshake의 생략으로 인한 지연시간을 줄일 수 있다.
- CPU 사용량을 줄여준다 : 새로운 TCP 연결을 만들기 위해서는 CPU, 메모리 사용과 같은 많은 리소스가 필요하다. 연결된 커넥션을 재사용하기 때문에 리소스 사용을 줄여준다.
- HTTP 파이프라인 커넥션 : 여러 개의 요청을 파이프라이닝 할 수 있다.
HTTP Keep-alive 브라우저 호환성