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 - 멀티플렉싱
이미지 출처
HTTP 1.1 에서 발생하던 HOL blocking 문제를 해결한다.
하나의 TCP 커낵션 안에 여러개의 가상화된 소켓을 만드는데, 이 과정을 멀티플렉싱이라고 하고, 가상화된 소켓의 단위를 스트림이라고 한다.
스트림 내에서의 데이터 송수신 단위는 프레임이고, TCP 통신 용량이 허락하는 한 수많은 스트림을 만들 수 있다.
클라이언트와 서버는 프레임 단위로 쪼개진 메세지를 병렬로 받아서 다시 메세지로 조립하므로, 빠른 시간안에 메세지를 주고받을 수 있다.
HTTP 2.0 - 헤더 압축
HTTP2 에서는 HPACK 이라는 모듈로 헤더를 압축하는데, HPACK은 허프만코딩, 동적테이블, 정적테이블을 사용한다.
- 정적 테이블 : HTTP 2.0 스펙에 정의된 테이블로 자주 출현하는 헤더(http method, status code, content-type 등)의 키/값을 저장한다.
- 동적 테이블 : 정적 테이블에 없는 키/값을 임의로 저장하는 캐시 역할을 한다.
HPACK 에서의 헤더 압축 과정
- 클라이언트에서 메세지를 전송하기 전에 헤더에 있는 키/값을 정적 테이블에 있는 키/값과 비교하여 키/값에 대응하는 테이블의 인덱스 번호로 치환한다.
- 정적 테이블에 없는 키/값은 허프만 코딩 알고리즘을 통해 압축하고, 압축된 키/값은 동적 테이블에 저장한다.
- 정적테이블에 있는 인덱스로 치환되었거나 허프만코딩 알고리즘으로 압축되어 동적테이블에 저장되어있는 헤더를 전송한다.
- 이후에 동일한 헤더가 재전송되는 경우 압축과정을 다시 거치지 않고 동적테이블에 있는 결과를 그대로 전송한다.
참고자료
HTTP 2.0 - 서버 푸시
클라이언트의 요청 없이 서버에서 선제적으로 클라이언트에게 필요한 리소스를 전송하는 것.
하지만 서버에서는 클라이언트가 어떤 리소스를 자주 로딩하는지 모르기 때문에 무작위적으로 빈번한 서버 푸시는 대역폭의 과소비를 초래한다.
출처
NLB와 ALB의 차이
ㅤ | L4, NLB(Network Load Balancer) | L7, ALB (Application Load Balancer) |
계층 | transport layer 단계에서 트래픽 분산을 담당한다. | application layer 에서 트래픽 분산을 담당한다. |
분산 기준 | IP 와 포트번호 기반으로 트래픽을 분산한다. | URL, 캐시, 세션, 쿠키 등을 기반으로 트래픽을 분산한다. |