본문 바로가기
면접,CS/네트워크

[네트워크] HTTP (HTTP1.0 HTTP1.1 HTTP2 HTTP3)

by Cafe Mocha 2023. 1. 27.

HTTP?

HTTP는 전송 계층 위에 있는 애플리케이션 계층으로 웹서비스 통신에 이용된다.


HTTP/1.0

HTTP/1.0은 한 연결 당 하나의 요청을 처리하도록 설계되었다.

서버로부터 파일을 가져올 때마다 TCP 3-Way HandShake를 계속해서 해야하기 때문에 RTT 증가를 불러오는 단점이 있다.

RTT?

패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기 까지 걸리는 시간(패킷왕복시간)

RTT 증가를 해결하기 위한 방법

  • 이미지 스플리팅
    • 많은 이미지가 합쳐 있는 하나의 이미지(EX)이미지 스프라이트)를 다운받고 background-image의 position을 활용해 이미지를 표기하는 방법
  • 코드 압축
    • 코드의 개행 문자, 빈칸을 없애서 코드의 크기를 취소화하는 방법
    • 코드의 용량을 줄이는 방법이다.
  • 이미지 Base64 인코딩
    • 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법
    • 서버와의 연결을 열고 이미지에 대해 HTTP 요청을 할 필요가 없음
    • Base64 문자열로 변환하면 37%정도 크기가 커지는 단점이 있음

인코딩?

  • 정보의 형태나 형식을 표준화, 보안, 처리속도 향상, 저장공간 절약 등을 위해 다른 형태나 형식으로 변환하는 처리 방식

HTTP/1.1

HTTP/1.0에서 발전한 것이 HTTP/1.1이다. 매번 TCP연결을 하는 것이 아니라 한번 TCP 초기화를 한 이후 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있도록 바뀌었다.

기존 HTTP/1.0에도 keep-alive옵션은 있었지만, 표준화되지 않았고 HTTP/1.1부터 기본 옵션으로 설정되었다.

단점

1. HOL Blocking

HOL Blocking(Head Of Line Blocking)은 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상이다.

2. 무거운 헤더 구조

HTTP/1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고, 압축되지 않아 무거웠다.

 


HTTP/2

HTTP/2는 HTTP/1.x보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜이다.

 

개선점

1. 멀티플렉싱

멀티플렉싱이란 여러 개의 스트림을 사용하여 송수신한다는 것이다.

특정 스트림의 패킷이 손실되어도 해당 스트림에만 영향을 미치고 나머지 스트림은 정상 작동

 

스트림?

시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름

멀티플렉싱을 통해 단일 연결을 사용해 여러 요청을 받을 수 있고 응답을 줄 수 있다.

이를 통해 HOL Blocking을 해결할 수 있다.

2. 헤더 압축

HTTP/2는 허프만 코딩 압축 알고리즘을 사용해 HPACK 압축 형식을 가진다.

허프만 코딩

허프만 코딩은 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 비트양을 줄이는 원리

3. 서버 푸시

HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.

ex) html을 읽으면서 그 안에 들어 있던 css파일을 서버에서 푸시하여 클라이언트에게 먼저 줄 수 있다.

 


HTTP/3

HTTP/3는 TCP 위에서 돌아가는 HTTP/2와 달리 QUIC라는 계층 위에서 돌아가며 UDP 기반으로 돌아간다.

HTTP/2의 장점인 멀티플렉싱 등을 가지고 있으며, 초기연결설정시 지연시간 감소라는 대표적 특징과 순방향 오류 수정 메커니즘이라는 특징을 가진다.

QUIC?

Quick UDP Internet Connection 또는 QUIC은 UDP 상에 구현된 실험적인 다중 전송 프로토콜로 TCP 및 웹 애플리케이션 전송을 개선하기 위한 방법을 위해 Google에서 실험적으로 개발했다.

QUIC의 중요한 기능

  • 연결 설정 시간 단축
  • 혼잡 제어 개선
  • Head of Line Blocking 없는 멀티플렉싱
  • 전달 오류 수정
  • 연결 마이그레이션

초기 연결 설정 시 지연 시간 감소

QUIC는 TCP를 사용하지 않기 때문에 통신을 시작할 때 3-웨이 핸드셰이크를 사용하지 않는다.

첫 연결 설정에 1-RTT만 소요된다. 즉, 클라이언트가 서버에 어떤 신호를 한 번 주고, 서버가 응답하기만 하면 통신을 시작할 수 있다.

순방향 오류 수정 메커니즘

전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식이며 열악한 네트워크 환셩에서도 낮은 패킷 손실률을 자랑한다.

 


Reference

- 면접을 위한 cs 전공지식노트