Computer Science/네트워크

[네트워크] HTTP/2 - Frame

바보1 2023. 4. 14. 09:24

앞의 글을 읽으시면 이해에 도움이 됩니다.

 

2023.04.13 - [Computer Science/네트워크] - [네트워크] Web Caches

 

[네트워크] Web Caches

앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.13 - [Computer Science/네트워크] - [네트워크] Cookie [네트워크] Cookie 앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.09 - [Computer Science/네트워크] - [

hi-guten-tag.tistory.com


1. HTTP/2

 

 

  • HTTP/2의 가장 주된 목적은 single TCP connection을 통해서 요청/응답의 multiplexing을 가능하게 하면서 대기 시간을 줄이는 것과 그리고 요청/응답에 prioritization을 두는 것과 마지막으로 HTTP header field의 효율적인 압축을 제공하는 것입니다.
  • HTTP/2는 HTTP method, status code, URL, header line을 바꾸지는 않았지만, 데이터가 어떻게 구성되는지, 그리고 클라이언트-서버 간에 어떻게 전송이 되는지를 바꿨습니다.
  • HTTP/1.1에서는 persistent TCP connection을 사용했습니다. 이는 서버의 소켓을 줄여주었으며, 클라이언트로 하여금 네트워크 자원을 공정하게 나눌 수 있도록 했습니다.
  • 하지만 이내 HTTP/1.1에서는 single TCP connection을 사용함으로써 발생되는 Header of Line(HOL) blocking 문제가 발견되었습니다.
  • 이를 해결하기 위해 HTTP/2의 필요하게 되었습니다.

2. Header of Line(HOL) blocking

 

 

  • 우선 HTTP/2를 설명하기 전에 HOL blocking 문제를 짚고 넘어가야 합니다.
  • HOL Blocking 
    • 해당 문제는 웹 페이지에서 첫 번째로 로딩되는 객체가 매우 큰 비디오 클립이고, 아래에는 많은 작은 객체가 있다고 가정할 때 발생합니다.
    • HTTP/1.1은 GET method에 대해 FCFS 방식을 사용합니다.
    • 따라서 먼저 요청이 들어온 큰 비디오 객체를 먼저 응답합니다.
    • 그러면 뒤에 요청이 들어온 작은 객체들은 어떻게 될까요? 해당 객체들은 비디오가 모두 전송되기 전까지 기다려야 합니다.
    • 이 문제는 특히 low speed bottlenect link에서 극대화됩니다.
    • 만약 비디오 객체가 오류라도 발생한다면 딜레이는 더 증가합니다.

 

  • HTTP/1.1에서는 이 문제를 multiple parallel TCP connection을 사용하여 해결했습니다.
  • 병렬적으로 연결을 함으로써 비디오 객체와 매우 작은 객체를 동시에 병렬로 전송하고, 브라우저는 이를 빨리 렌더링 하게 되며 이는 유저가 인식하는 딜레이를 줄여줍니다.
  • 다음 챕터에서 배우는 TCP congestion control은 single persistent TCP connection을 사용할 때 보다 mutliple parallel TCP connection을 통해 의도치 않은 이익을 얻게 됩니다.
  • 간단히 말해서 TCP congestion control은 각 TCP connection마다 링크 자원을 공정하게 나누어 가지도록 합니다.
  • n개의 연결이 있다면, 각 연결이 l/n만큼 자원을 가지도록 합니다.
  • 근데 여기서 문제는 웹 브라우저가 일부로 많은 양의 multiple parallel TCP connection을 열어 링크의 많은 부분을 차지하는 부정행위를 저지를 수 있다는 점입니다.
  • 따라서 HTTP/1.1을 사용하는 브라우저는 더 많은 양의 TCP connection을 만들어서 HOL Blocking을 피할 뿐만 아니라, bandwidth를 더 많이 차지하는 것도 가능하게 되었습니다.

3. HTTP/2 Framing

 

 

  • HOL Blocking을 해결하는 HTTP/2의 해결책은 메시지를 small frame으로 분할하고, 요청/응답을 동일한 TCP connection을 통해 교차하여 보내는 것입니다.
    • 이를 이해하기 위해서 예시를 들어보자면, 9개의 객체가 있고 1개의 객체는 매우 큰 객체라고 가정해 봅시다.
    • 따라서 서버는 9개의 요청을 받게 되고, 서버는 이에 상응하는 9개의 응답을 보내야 합니다.
    • 모든 프레임이 같은 길이로 고정되어 있고, 비디오는 1000개의 프레임, 나머지 다른 객체는 2개의 프레임으로 구성되어 있다고 가정해 봅시다.
    • 이때 비디오의 첫 번째 프레임을 응답한 뒤, 나머지 다른 객체의 첫 번째 프레임을 전송합니다.
    • 이후 비디오의 두 번째 프레임을 응답하고, 나머지 다른 객체의 마지막 프레임을 전송합니다.
    • 따라서 작은 객체들은 총 18개의 프레임이 전송되어야 모두 전송이 되고, 이후에는 비디오만 전송됩니다.

 

  • Framing 방식을 통해 HTTP/2는 유저가 인지하는 딜레이 시간은 확연히 줄어들었습니다.
  • HTTP 메시지를 프레임 단위로 나누어서 쪼개고, 이를 반대편 엔드 시스템에서 재결합하는 능력은 HTTP/2의 가장 중요한 향상입니다.

참고

 

 

경북대학교 컴퓨터학부 COMP0414-001 컴퓨터 망 수업

Computer Networking: A Top Down Approach / James F. Kurose, Keith W. Ross 저 / PEARSON / 2021년

Chat GPT, Bing AI


대략적인 HTTP는 여기까지입니다.

다음 글에서는 DNS에 대해 알아보겠습니다.

 

2023.04.14 - [Computer Science/네트워크] - [네트워크] DNS

 

[네트워크] DNS

앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04.08 - [Computer Science/네트워크] - [네트워크] Application-Layer Protocols [네트워크] Application-Layer Protocols 앞의 글을 읽으시면 이해에 도움이 됩니다. 2023.04

hi-guten-tag.tistory.com

감사합니다.

지적 환영합니다.

'Computer Science > 네트워크' 카테고리의 다른 글

[네트워크] DNS - Distributed, Hierarchical architecture  (0) 2023.04.14
[네트워크] DNS  (0) 2023.04.14
[네트워크] Web Caches  (0) 2023.04.13
[네트워크] Cookie  (2) 2023.04.13
[네트워크] HTTP Response Message  (0) 2023.04.09