[네트워크] HTTP/2, HTTP/3

oldshoe·2024년 4월 18일

네트워크

목록 보기
9/34

HTTP 1.0, HTTP 1.1

앞선 게시물에 나온 HTTP 1.0과 HTTP 1.1의 얘기를 조금 하자면 다음과 같다.

HTTP1.0은 Non-persistent HTTP 였다. 그러니까 TCP 연결을 하고 데이터를 주고 받을 때마다 연결이 끊겨서 데이터를 요청할 때마다 다시 TCP 연결을 해야했다.

하지만 HTTP 1.1은 그렇지 않다.
한 번 TCP 연결을 하면, 데이터를 요청하더라 TCP 연결은 유지된다.
persistent HTTP이기 때문이다.
그래서 1.0에 비해 response time도 상당히 개선된다.

그리고 HTTP 1.1은 파이프라이닝을 제공한다. 클라이언트가 하나의 요청을 보내고, 그 요청을 받기 전에 또 다른 요청을 보낼 수 있다. 그러면 delay가 줄어들고 throughput이 증가한다.

HTTP/2

HTTP 1.0보다 개선된 HTTP1.1이지만, 해결되지 않은 문제가 있다.
바로 HOL (Head of Line) Blocking 이다.

HOL Blokcing은 여러 개의 요청이 온다고 가정할 때, 첫 번째 온 요청이 걸리는 시간이 매우 길어, 뒤에 온 요청이 걸리는 시간이 매우 짧은데도 불구하고 첫 번째 요청을 처리하기 전에는 후속 요청들이 처리되지 않는 문제이다.

HTTP/2에서는 전송하는 객체들을 프레임 단위로 쪼개어 번갈아가며 수행하여 해결한다.

위를 보면 처음 보낸 객체가 처리하는데 너무 오래 걸려 후속 요청들이 처리가 안되고 있다.

객체를 프레임 단위로 나눠서 번갈아가면서 처리하면 뒤에 짧은 객체들을 먼저 처리할 수 있다.
우리는 이를 Framing이라고 한다.

HTTP/3

HTTP/2은 TCP를 기반으로 프로토콜이다. 그래서 TCP의 문제가 그대로 나타난다.

  • TCP 연결 및 해제를 위한 handshaking 과정이 오래 걸림
  • 패킷이 유실되거나 오류가 발생하면 재전송 -> 패킷 지연 발생 -> HOL blokcing 발생

HTTP/3에서는 TCP를 사용하지 않고 UDP를 기반으로 보안이 추가 되고, 객체 당 error와 congestion control을 할 수 있다.

profile
toomuxi : There are many things in the world that I want to do

0개의 댓글