HTTP 2.0 & HTTP/3.0

이태곤·2023년 8월 15일
0

Network

목록 보기
10/23
post-thumbnail

1. HTTP 2.0

  • HTTP 1.0 / HTTP 1.1 버전에서 해결되지 못한 HOL 문제를 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 통해 어느정도 해결하였으며, latency, RTT를 줄였다.
  1. 바이너리 포멧 계층: 애플리케이션 계층 ↔ 전송 계층 사이에 바이너리 포맷 계층이 추가됨

    • HTTP/2는 텍스트 형태로 전달되는 HTTP 메시지가 아닌 binary 형태로 인코딩되어 전송
      • HTTP/1.0 : 텍스트 & 줄바꿈 형태로 데이터를 전달
      • HTTP/2.0 : 0과 1로 이루어진 바이너리 형태로 데이터를 전달
        → 더 작은 메세지가 프레임 단위로 캡슐화 되어 전달
        → 10바이트만 있으면 1024개의 정보를 표현
  2. 멀티플렉싱: 단일 TCP 연결을 통해 여러 HTTP 요청과 응답을 병렬로 처리할 수 있는 스트림 전송 방식

    • 스트림 내에서 오브젝트들을 프레임 단위로 쪼개어(Framing) 번갈아가며 수행함으로써 HOL 문제를 해결
    • 비교
      • HTTP/1.x: 병렬 요청을 처리하기 위해 다중 TCP 연결을 사용
        → TCP 연결비용↑
      • HTTP/2.0: 바이너리 프레임의 스트림 전송 방식을 도입하여 하나의 TCP 연결을 통해 병렬 처리
    • 특정 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미침
    • 작은 단위로 나뉘어 다운로드되어도 각각의 프레임에는 스트림 ID와 해당 청크의 크기가 포함되어 있으므로 응답 데이터를 올바른 순서로 재조립할 수 있다.
  1. 서버 푸시: 서버가 클라이언트의 요청 없이 연관된 객체를 함께 클라이언트에게 전송할 수 있는 기능을 제공

    • 예를 들어, 요청한 html에 css가 포함되어 있다면:
      • HTTP/1.0: 아래 그림과 같이 html, css 각각 요청
      • HTTP/2.0: html 요청시에 별도의 요청 없이 css와 같이 클라이언트에게 PUSH
  2. 헤더 압축

    • 서버: 리소스를 클라이언트에게 전달 할 때, 중복되는 헤더의 내용은 제거하고 전송
      • 중복되지 않은 값들은 허프만 인코딩 압축을 사용해 데이터를 전달
        → 허프만 인코딩: 문자열을 문자 단위로 나누어서, 자주 사용되는 문자는 적은 비트 수로 표현하고 적게 사용되는 문자는 더 많은 비트로 표현하여 전체적인 비트 수를 줄이는 압축 기술
    • 클라이언트: 공통된 헤더를 재조립
  3. 우선 순위 지정: 서버에서 우선순위를 정해서 클라이언트에게 리소스를 전달

  • 한계
    1. 여전히 TCP 연결을 사용하므로, 연결 수립 및 해제를 위한 handshaking 과정에서 Response time이 증가 할 수 있다.
    2. TCP는 신뢰성 있는 프로토콜로 알려져 있지만, 패킷이 유실되거나 오류가 발생할 경우 재전송 기법을 사용한다.
      이로 인해 패킷 지연이 발생할 수 있으며, 이러한 지연은 HOL을 유발할 수 있다.

2. HTTP 3.0

  • HTTP/2.0 또한 TCP 연결을 사용하므로, 연결 수립 및 해제를 위한 handshaking 과정에서 Response time이 증가 할 수 있다.
    → 이를 해결하기 위해 HTTP/3.0 등장

  • HTTP 3.0에서는 UDP 위에서 동작하는 QUIC 프로토콜을 사용한다.

    1. 흐름제어 및 혼잡제어: UDP는 흐름제어와 혼잡제어를 지원하지 않아 데이터 전송에 제한이 없으며 이로 인해 네트워크 혼잡 상황에서 데이터 손실이 발생할 수 있다.
      QUIC는 흐름제어 및 혼잡제어 기능을 통해 데이터의 안정적인 전송을 보장하며 네트워크 혼잡을 최소화한다.
      • FEC(Foward Error Correction) 사용: 수신측에서 에러 정정 및 검출을하는 순방향 오류 수정 메커니즘을 사용
    2. 보안 및 제어 개선: QUIC은 보안 측면에서도 개선되어 있으며, TLS(Transport Layer Security) 프로토콜과 함께 사용된다.
    3. Zero Round-Trip Time (0-RTT): 첫 연결 설정에서 1-RTT만 소요되고, 이를 재사용하여 연결을 빠르게 설정할 수 있다.

0개의 댓글