HTTP/1.0 /1.1 /2.0 /3.0

오형상·2025년 3월 21일
0

네트워크

목록 보기
1/1
post-thumbnail

http란?

HTTP는 인터넷에서 데이터를 주고받기 위해 사용되는 프로토콜이다. 클라이언트와 서버 간의 통신을 담당하며, 웹 브라우저와 웹 서버 간의 데이터 전송을 위해 주로 사용된다.


HTTP/1.0

  • 하나의 연결에 3-WAY 핸드쉐이크 잔향
  • 하나의 연결로 하나의 요청만 처리 가능 -> 요청마다 새로 연결
  • RTT 증가로 인한 성능 저하 발생

RTT (Round Trip Time)

  • 패킷이 목적지까지 도달하고 나서 다시 출발지로 돌아오는 시간

이를 해결하기위해 HTTP/1.1 등장


HTTP/1.1

HTTP/1.1은 HTTP/1.0의 단점을 보완한 프로토콜입니다.

특징

Keep-Alive 기본 적용

  • HTTP/1.0에도 Connection: keep-alive 헤더가 있었으나 선택 사항이었음
  • HTTP/1.1에서는 기본적으로 연결을 재사용
  • 하나의 TCP 연결로 여러 요청을 처리 가능 → 매 요청마다 3-WAY 핸드셰이크 생략

Pipelining

  • 연속적인 요청을 한 번에 전송하여 RTT를 줄이기 위한 기술
  • 다만, 응답은 순차적으로 받아야 하므로 Head-of-Line Blocking(HOL) 문제가 발생함

Host 헤더 필수화

  • HTTP/1.0은 동일 IP에 하나의 사이트만 운영 가능
  • HTTP/1.1에서는 Host 헤더를 필수화하여
    하나의 IP 주소에서 여러 도메인(가상 호스팅) 운영 가능

문제점

HOL Blocking(Head Of Line Blocking)

네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상

무거운 헤더

HTTP 요청 또는 응답에서 헤더의 크기가 크고 반복적으로 전송되어 네트워크 성능에 악영향을 주는 현상


HTTP/2.0

HTTP/2.0은 HTTP/1.1의 성능 문제 해결과 효율성 개선을 목표로 탄생한 프로토콜입니다.

특징

바이너리 포맷 계층

  • 메시지를 바이너리 프레임(Binary Frame)으로 인코딩하여 전송.

  • 바이너리 프레이밍 계층을 도입하여 헤더와 바디를 명확히 레이어 단위로 구분.

  • 데이터 파싱 및 전송 속도 향상.

  • 오류 발생 가능성 감소.

멀티플렉싱

  • 하나의 TCP 커넥션에서 여러 개의 메시지 스트림을 동시에 주고받을 수 있음

  • 응답 순서에 상관없이 독립적으로 처리 가능

  • HTTP/1.1의 Connection Keep-Alive, 파이프라이닝(Pipelining), HOLB(Head of Line Blocking) 문제를 해결함

  • 네트워크 사용 효율이 높아지고 TCP 커넥션 수를 줄일 수 있음

  • 클라우드 환경에서 네트워크 비용 절감에 유리함

서버푸시

  • HTTP/1.1은 클라이언트가 요청한 리소스만 다운로드 가능함

  • HTTP/2.0은 클라이언트의 요청 없이 서버가 리소스를 미리 푸시할 수 있음

  • 예를 들어, 클라이언트가 HTML 파일을 요청하면 서버는 HTML에 포함된 CSS, JS 파일을 함께 전송함

  • 별도의 요청 없이 필요한 리소스를 미리 전달받을 수 있음

헤더압축

  • HTTP/1.x는 헤더 크기가 크고 중복 필드가 많아 전송이 비효율적임

  • HTTP/2는 HPACK 방식의 헤더 압축을 사용함

  • 허프만 코딩 알고리즘 기반으로 압축 처리함

  • 중복된 헤더는 인덱스로 전송하고, 새로운 값은 압축 인코딩함

  • 헤더 전송 크기를 줄여 통신 효율을 높임

문제점

여전한 RTT(Round Trip Time)

  • HTTP/2.0은 TCP 기반으로 동작함
  • TCP 연결 과정에서 Handshake가 필요하며 RTT 지연이 발생함
  • 초기 요청 시 응답 지연을 완전히 제거할 수 없음

TCP 기반의 HOLB(Head Of Line Blocking)

  • HTTP/2.0은 애플리케이션 계층의 HOLB 문제는 멀티플렉싱으로 해결함
  • 전송 계층인 TCP에서는 패킷 손실 시 재전송 과정에서 지연이 발생함
  • 하나의 패킷이 지연되면 이후 패킷들도 함께 지연되는 HOLB 문제가 여전히 존재함
  • TCP 수준의 HOLB는 HTTP/2.0에서 해결되지 않음

HTTP/3.0

HTTP/3.0은 TCP가 아닌 UDP 기반의 전송 프로토콜인 QUIC 위에서 동작하는 HTTP 프로토콜이다. HTTP/2.0의 성능적 장점을 유지하면서 TCP의 구조적 한계를 극복하는 데 중점을 두고 설계되었다.

QUIC

  • Google이 개발한 UDP 기반 전송 계층 프로토콜
  • TLS, TCP, HTTP 기능을 통합하여 설계됨
  • RFC 9000에 의해 표준화
  • 빠른 연결 수립, 스트림 독립성, 내장 보안 기능 등 제공
    기존 TCP 대체 가능성을 가진 차세대 전송 프로토콜

특징

UDP 기반의 통신 구조

  • HTTP/1.1과 HTTP/2.0은 TCP 기반, HTTP/3.0은 UDP 기반의 QUIC 사용
  • 핸드쉐이크 최소화로 지연 시간(RTT) 감소
  • 연결 초기 속도 향상

스트림 독립성 확보

  • 스트림 간 완전 분리
  • 하나의 스트림에서 문제가 발생해도 다른 스트림에는 영향 없음
  • TCP 기반 HTTP/2.0의 HOLB 문제 해결

암호화 기본 적용

  • QUIC 내부에 TLS 포함
  • 헤더 영역까지 암호화하여 보안 강화
  • 별도 암호화 설정 없이 HTTPS 수준의 보호 제공

연결 지속성

  • Connection ID 사용
  • 클라이언트 IP가 변경되어도 연결 유지 가능
  • 모바일 환경에서의 연결 안정성 증가

패킷 손실 처리 최적화

  • 패킷 번호 공간 분리
  • 손실된 패킷만 재요청
  • 전체 연결 지연 없이 부분 복구 가능

Reference

0개의 댓글