애플리케이션 계층 (Application layer)

 
 
HTTP, FTP, SMTP, SSH 등 응용 프로그램이 사용하는 계층
 

HTTP 1.0

클라이언트가 서버에 요청할 때마다 매번 TCP 연결(3-way handshake) 하는 구조.
요청마다 매번 TCP 연결을 하면 RTT 증가하는 단점이 있다.
RTT(Round Trip Time): 클라이언트의 요청 패킷이 서버에 도착하고, 서버에서 패킷 처리 후 보낸 응답을 클라이언트가 받기 까지 소요되는 시간. 패킷 왕복 시간이라고도 한다.
참고자료
 
 

HTTP 1.1

HTTP 1.0 의 단점을 개선.
매번 TCP 연결을 하는 게 아니라 Keep-Alive 헤더를 사용해 여러 개의 파일을 송수신 할 수 있도록 한다.
헤더에 들어가는 메타데이터 용량이 커서 메세지 송수신에 지연이 발생하는 단점이 있다.
 
 

Keep-Alive

parameter
role
timeout
메세지를 송수신 하지 않는 idle 상태의 연결을 허용하는 최대 시간.
max
하나의 TCP 커넥션 내에서 허용하는 최대 요청 수.
HTTP/1.1 200 OK Connection: Keep-Alive Keep-Alive: timeout=5, max=1000
참고자료
 

HOL(Head Of Line) blocking

 
TCP 에서의 HOL blocking
TCP 는 세그먼트의 전송 순서를 보장하기 위해 세그먼트 전송 과정에서 실패가 발생하면 재전송을 시도한다. 이 때 재전송을 시도하는 세그먼트 뒤에 있는 것들의 전송이 지연되는데 이를 HOL blocking 으로 간주한다.
 
HTTP 에서의 HOL blocking
TCP 연결이 성립되고 나서 alive 상태인 파이프라인에 요청을 여러번 처리할 수 있는데, 동기 방식이기 때문에 첫번째 요청에 대한 응답을 받아야 다음 요청이 가능하다. 이 때 첫번째 요청에 대한 응답이 느리면 뒤에 있는 요청들이 대기하게 되는데 이를 HOL blocking 이라고 간주한다.
 
 

HTTP 2.0

HTTP 1.1 에 비해 지연시간이 적다.
멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원한다.
 
 

HTTP 2.0 - 멀티플렉싱

notion image
이미지 출처
 
HTTP 1.1 에서 발생하던 HOL blocking 문제를 해결한다.
하나의 TCP 커낵션 안에 여러개의 가상화된 소켓을 만드는데, 이 과정을 멀티플렉싱이라고 하고, 가상화된 소켓의 단위를 스트림이라고 한다.
스트림 내에서의 데이터 송수신 단위는 프레임이고, TCP 통신 용량이 허락하는 한 수많은 스트림을 만들 수 있다.
클라이언트와 서버는 프레임 단위로 쪼개진 메세지를 병렬로 받아서 다시 메세지로 조립하므로, 빠른 시간안에 메세지를 주고받을 수 있다.
 
 

HTTP 2.0 - 헤더 압축

HTTP2 에서는 HPACK 이라는 모듈로 헤더를 압축하는데, HPACK은 허프만코딩, 동적테이블, 정적테이블을 사용한다.
  • 정적 테이블 : HTTP 2.0 스펙에 정의된 테이블로 자주 출현하는 헤더(http method, status code, content-type 등)의 키/값을 저장한다.
  • 동적 테이블 : 정적 테이블에 없는 키/값을 임의로 저장하는 캐시 역할을 한다.
 
HPACK 에서의 헤더 압축 과정
  1. 클라이언트에서 메세지를 전송하기 전에 헤더에 있는 키/값을 정적 테이블에 있는 키/값과 비교하여 키/값에 대응하는 테이블의 인덱스 번호로 치환한다.
  1. 정적 테이블에 없는 키/값은 허프만 코딩 알고리즘을 통해 압축하고, 압축된 키/값은 동적 테이블에 저장한다.
  1. 정적테이블에 있는 인덱스로 치환되었거나 허프만코딩 알고리즘으로 압축되어 동적테이블에 저장되어있는 헤더를 전송한다.
  1. 이후에 동일한 헤더가 재전송되는 경우 압축과정을 다시 거치지 않고 동적테이블에 있는 결과를 그대로 전송한다.
참고자료
 
 

HTTP 2.0 - 서버 푸시

클라이언트의 요청 없이 서버에서 선제적으로 클라이언트에게 필요한 리소스를 전송하는 것.
하지만 서버에서는 클라이언트가 어떤 리소스를 자주 로딩하는지 모르기 때문에 무작위적으로 빈번한 서버 푸시는 대역폭의 과소비를 초래한다.
출처
 
 

NLB와 ALB의 차이

L4, NLB(Network Load Balancer)
L7, ALB (Application Load Balancer)
계층
transport layer 단계에서 트래픽 분산을 담당한다.
application layer 에서 트래픽 분산을 담당한다.
분산 기준
IP 와 포트번호 기반으로 트래픽을 분산한다.
URL, 캐시, 세션, 쿠키 등을 기반으로 트래픽을 분산한다.