네트워크 TCP keepalive 세션 유지하기

TCP Keepalive Interval timeout wireshark 세션 유지하기

네트워크 TCP keepalive 세션 유지하기

 

TCP Keepalive

3-way handshake를 통해 연결된 세션을 끊지 않고 계속 사용하는 방식

이때 세션 연결을 지속적으로 확인하기 위해 아주 작은 크기의 패킷을 보냅니다. 패킷을 주고 받은 다음 타이머는 원점으로 돌아갑니다.

tcp 3way handshake
tcp 3way handshake

 

ESTABLISHED 상태의 소켓에서는 Keepalive 타이머를 확인할 수 있습니다.

 

ss : keepalive 확인 명령어

ss 명령어

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로 인한 장점은 무엇일까?

  1. 3-way handshake의 생략으로 인한 지연시간을 줄일 수 있다.
  2. CPU 사용량을 줄여준다 : 새로운 TCP 연결을 만들기 위해서는 CPU, 메모리 사용과 같은 많은 리소스가 필요하다. 연결된 커넥션을 재사용하기 때문에 리소스 사용을 줄여준다.
  3. HTTP 파이프라인 커넥션 : 여러 개의 요청을 파이프라이닝 할 수 있다.

HTTP Keep-alive 브라우저 호환성

브라우저별 keep-alive 호환성

댓글

Designed by JB FACTORY