HTTP/1.1, HTTP/2, QUIC

hjoonยท2021๋…„ 7์›” 20์ผ
0
post-thumbnail

โœ… Overview

HTTP
์›น ์ƒ์—์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ

  • ํ†ต์‹ ์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ ์ „์†ก๊ณ„์ธต์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค.
  • ์ด๋ก ์ƒ HTTPํ”„๋กœํ† ์ฝœ์€ ์‹ ๋ขฐ์„ฑ๋งŒ ๋ณด์žฅํ•ด์ฃผ๋ฉด ์ „์†ก ๊ณ„์ธต์˜ ํ”„๋กœํ† ์ฝœ๋กœ TCP, UDP๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ƒ๊ด€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

๋Œ€์—ญํญ ๋ณด๋‹ค๋Š” ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์ด ์„ฑ๋Šฅํ–ฅ์ƒ์— ๋” ์ค‘์š”ํ•˜๋‹ค.


โœ… TCP & UDP

HTTP์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ธฐ ์•ž์„œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ธ TCP, UDP์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

๐Ÿ‘ TCP

TCP
3 way handshake๋ฅผ ํ†ตํ•ด ์‹ ๋ขฐ์„ฑ์žˆ๋Š” connection์„ ์ˆ˜๋ฆฝํ•œ๋‹ค.

  • ๐Ÿ“Œ 3 way handshake
    • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ƒํ˜ธ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋‹ค๋Š” ํ•ฉ์˜๋ฅผ ํ•˜๋Š” ๊ณผ์ •
  • 3 way handshake๋ฅผ ํ†ตํ•ด connection์„ ์ˆ˜๋ฆฝํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” data๋ฅผ ์ „์†กํ•˜๊ณ  ์„œ๋ฒ„๋Š” ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ์˜๋ฏธ๋กœ ack ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค.
    • ์‹ ๋ขฐ์„ฑ ๊ตฌ์ถ•์— ์‹ ๊ฒฝ์„ ๋งŽ์ด ์“ด ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

๐Ÿ‘ UDP

UDP
๋ฐ›๋Š” ์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ๋ฐ›๊ณ  ์žˆ๋Š”์ง€์กฐ์ฐจ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋‹ค.


โœ… HTTP

HTTP/0.9 ~ HTTP/2.0์€ ์ „์†ก ๊ณ„์ธต์˜ TCP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ‘ HTTP/0.9

HTTP/0.9
์›๋ผ์ธ ํ”„๋กœํ† ์ฝœ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

  • ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค

๐Ÿ‘ HTTP/1.0

HTTP/1.0

  • ๐Ÿ“ข ํ—ค๋”๊ฐ€ ์ƒ๊ฒผ๋‹ค.
    • ์‘๋‹ต ๋ฉ”์‹œ์ง€, ์ƒํƒœ ์ฝ”๋“œ
    • Content-Type์ด ์ƒ๊น€ ๐Ÿ‘‰ html ์ด์™ธ์˜ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ํŒŒ์ผ๋„ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง
  • ๐Ÿ“ข ํ•˜๋‚˜์˜ connection์—์„œ 1๊ฐœ์˜ ์š”์ฒญ๊ณผ 1๊ฐœ์˜ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ connection์„ ์ƒ์„ฑํ•˜๊ณ  ๋Š๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ–ˆ๋‹ค.
      ๐Ÿ‘‰ ์ค‘๋ณต connection ์ˆ˜๋ฆฝ ๊ณผ์ •์œผ๋กœ ์ธํ•œ ๋ ˆ์ดํ„ด์‹œ ๋ฐœ์ƒ (์„ฑ๋Šฅ ์ €ํ•˜)
      ๐Ÿ‘‰ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋น„์šฉ ์ฆ๊ฐ€

โœ TCP์˜ Slow Start

์ฒ˜์Œ ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฆฝ๋œ tcp connection์ด ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์— ์ œํ•œ์„ ๋‘๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ํ•˜๋ฉด์„œ ํ•œ ๋ฒˆ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ด๋‹ค.

  • ํ˜ผ์žก(Congestion)์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ TCP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค.
  • Slow Start์„ ํ†ตํ•ด ํ˜ผ์žกํ•œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ท ์†์‹ค์„ ์ตœ์†Œํ™”ํ•˜๋ฉฐ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง.
  • ๐Ÿ“ข Slow Start์œผ๋กœ ์ธํ•ด ์—ฐ๊ฒฐ ์ดˆ๊ธฐ์— ๋ ˆ์ดํ„ด์‹œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    ๐Ÿ‘‰ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด tcp connection์„ ์žฌํ™œ์šฉํ•˜๋Š” keep alive ํ—ค๋”๋ฅผ ์‚ฌ์šฉ

โœ HTTP/1.0์˜ Keep Alive ํ—ค๋”

tcp connection์„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ๋Š์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์„ ๊ณ„์† ์œ ์ง€ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด tcp connection ์žฌํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
    • handshake ๋ฌธ์ œ, ๋Š๋ฆฐ ์—ฐ๊ฒฐ ๋ฌธ์ œ
  • ๐Ÿ“ข ํ•˜์ง€๋งŒ, HTTP/1.0์˜ ํ‘œ์ค€์ด ์•„๋‹ˆ๋ฏ€๋กœ ํ‘œ์ค€ ๋ฒค๋”์‚ฌ๋งˆ๋‹ค ์ง€์›์—ฌ๋ถ€๊ฐ€ ๋‹ฌ๋ž๋‹ค. (์™„๋ฒฝํ•œ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์ด ์•„๋‹˜)
    ๐Ÿ‘‰ dumb proxy ๋ฌธ์ œ ๋ฐœ์ƒ

๐Ÿ‘ HTTP/1.1

HTTP/1.1
HTTP/1.0์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ์œ„ํ•ด์„œ keep alive ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Persistent Connection ๊ฐœ๋…์„ ๋„์ž…ํ•˜์˜€๋‹ค.

  • ๐Ÿ“Œ Persistent Connection
    • ์ง€์ •ํ•œ timeout ์‹œ๊ฐ„๋™์•ˆ connection์„ ๋‹ซ์ง€ ์•Š๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • ํ•˜๋‚˜์˜ connection์„ ์—ด์–ด ๋‘๋ฉด, ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ํ•˜๋‚˜์˜ connection ์•ˆ์—์„œ ์ด๋ค„์ง„๋‹ค.
      ๐Ÿ‘‰ tcp connection์„ ์žฌํ™œ์šฉํ•˜๋Š” ์ด์ ์„ ๊ฐ€์ง€๊ณ  3 way handshake ๋น„์šฉ์„ ๊ฐ์†Œ์‹œ์ผœ HTTP/1.0๋ฒ„์ „๋ณด๋‹ค ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค์—ˆ๋‹ค.

โœ Pipelining

Pipelining
HTTP์˜ ํŠน์„ฑ์ƒ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ›์€ ์š”์ฒญ์„ FIFO ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ (์ˆœ์„œ๋Œ€๋กœ ์‘๋‹ตํ•˜์—ฌ) ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋Š” ๋‹จ์ ์ด ์ƒ๊ธด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Pipelining ๊ฐœ๋…์ด ๋„์ž…๋˜์—ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ์„œ ๋ฐ›์€ ์š”์ฒญ ์ˆœ์„œ๋Œ€๋กœ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ๋‹ค.
    (AB ์ˆœ์„œ๋กœ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ, B์˜ ์ž‘์—…์ด ๋จผ์ € ์™„๋ฃŒ๋˜์–ด๋„ ์‘๋‹ต ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๊ธฐ์œ„ํ•ด A์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€ B์˜ ์ž‘์—…์„ ์‘๋‹ตํ•  ์ˆ˜ ์—†๋‹ค.)

๐Ÿ“ข Pipelining์˜ ๋ฌธ์ œ์ 

  • ๐Ÿ“Œ Head of Line Blocking ๋ฌธ์ œ์ 
    • 1๋ฒˆ์งธ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋งค์šฐ ๊ธธ์–ด์ง€๋ฉด 2,3๋ฒˆ์งธ ์š”์ฒญ์€ ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค.
  • ๐Ÿ“Œ Header ๊ตฌ์กฐ์˜ ์ค‘๋ณต ๋ฌธ์ œ์ 
    • ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์กŒ๋‹ค..

๐Ÿ“ข Multiplexing ํ‰๋‚ด

์ด๋กœ ์ธํ•ด Pipelining ์ด ์•„๋‹Œ tcp connection์„ ์—ฌ๋Ÿฌ๊ฐœ(6๊ฐœ) ์ƒ์„ฑํ•˜์—ฌ Multiplexing์„ ํ‰๋‚ด๋‚ด๋Š” ๋ฐฉ์‹์„ ๊ณ ์•ˆํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ๐Ÿ‘‰ ํ•˜์ง€๋งŒ ๋‹ค์ˆ˜์˜ connection์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. (๋Œ€์—ญํญ ๊ฒฝ์Ÿ ์‹ฌํ™”)
  • ๐Ÿ“Œ Multiplexing
    • Pipelining๊ณผ ๋‹ค๋ฅด๊ฒŒ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ˆœ์„œ์— ๊ตฌํ•ด๋ฐ›์ง€ ์•Š๊ณ  ๋ณ‘๋ ฌ์  ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์ด๋‹ค.
    • ๋‹จ์ผ tcp connection ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์„ž์ด์ง€ ์•Š๊ฒŒ ๋ณด๋‚ด๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

๐Ÿ‘ HTTP/2.0

HTTP/2.0
๊ธฐ์กด HTTP/1.X ๋ฒ„์ „์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ดˆ์ ์„ ๋งž์ถ˜ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

  • ํ‘œ์ค€์˜ ๋Œ€์ฒด๊ฐ€ ์•„๋‹Œ ํ™•์žฅ ๊ฐœ๋…์ด๋‹ค.
  • 2015๋…„๋„์— ๋“ฑ์žฅํ•˜์—ฌ ๋„ค์ด๋ฒ„, ํŽ˜์ด์Šค๋ถ, ์ธ์Šคํƒ€๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

โœ HTTP/2.0์˜ ํŠน์ง•

๐Ÿ“ข #1) HTTP ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฐฉ์‹ ๋ณ€ํ™”

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋ ˆ์ด๋ฐ ๊ณ„์ธต์ด ์ƒ๊น€

  • ๋ฉ”์‹œ์ง€๋ฅผ frame ๋‹จ์œ„๋กœ 2๊ฐœ ๋ถ„ํ• 
  • ์ด 2๊ฐœ์˜ frame์„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ
    ๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ, ์ „์†ก์†๋„ ํ–ฅ์ƒ ๋ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ connection ์†์— stream (๋ฐ์ดํ„ฐ ์–‘๋ฐฉํ–ฅ ํ๋ฆ„) ์•ˆ์— frame๋“ค๋กœ ์ด๋ค„์ง„ ์š”์ฒญ, ์‘๋‹ต ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋œ๋‹ค.

  • ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์— ํŠน๋ณ„ํ•œ ์‹๋ณ„์ž๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด HTTP/2.0 ์—์„œ ์ง„์ •ํ•œ Multiplexing์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ frame ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ ธ ๋ฉ”์‹œ์ง€๊ฐ„์˜ ์ˆœ์„œ๊ฐ€ ์‚ฌ๋ผ์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ๋จผ์ € ๋„์ฐฉํ•œ frame๋ถ€ํ„ฐ ์กฐ๋ฆฝ๋˜์–ด ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ˆœ์„œ๊ฐ€ ๋ฌด์˜๋ฏธํ•ด์กŒ๋‹ค
    ๐Ÿ‘‰ ์ด๋ฅผ ํ†ตํ•ด Head of Line Blocking ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

๐Ÿ“Œ TCP Head of Line Blocking ํ˜„์ƒ

๋„คํŠธ์›Œํฌ์—์„œ ๊ฐ™์€ ํ์— ์žˆ๋Š” ํŒจํ‚ท์ด ์ฒซ๋ฒˆ์งธ ํŒจํ‚ท์— ์˜ํ•ด ์ง€์—ฐ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜ ํ˜„์ƒ์ด๋‹ค.

  • tcp ํ”„๋กœํ† ์ฝœ ์ž์ฒด์— ์กด์žฌํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค.
  • ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 
    • tcp ๋Š” ์•ˆ์ „์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์ง€ํ–ฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†์‹ค๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์†ก์‹ ํ•ด์•ผํ•œ๋‹ค.
      ํ•˜์ง€๋งŒ ๊ทธ ๋’ค ์ˆœ์„œ์˜ ๋ฐ์ดํ„ฐ๋Š” ์•ž ๋ฐ์ดํ„ฐ์˜ ์žฌ์†ก์‹  ์ „๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“ข #2) Stream Prioritization

๋จผ์ € ์ „์†กํ•˜๊ณ  ์‹ถ์€ stream์— ๊ฐ€์ค‘์น˜๋ฅผ ๋‘์–ด ๋ฆฌ์†Œ์Šค์˜ ์ „์†ก ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ข #3) Server Push

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์€ ํŒŒ์ผ์„ ์•Œ์•„์„œ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ค€๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ html ํŒŒ์ผ๋งŒ ์š”์ฒญํ–ˆ์ง€๋งŒ, ์„œ๋ฒ„๋Š” js, cssํŒŒ์ผ๊นŒ์ง€ ์‘๋‹ตํ•ด์ค€๋‹ค.

๐Ÿ“ข #4) Header Compression

ํ—ค๋”์˜ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์ด ๊ฐ์†Œ ๋˜์—ˆ๋‹ค.

  • ๐Ÿ“Œ static dynamic table ๊ฐœ๋…
    • ์ค‘๋ณต๋œ ์ •๋ณด๋Š” table์˜ index๋งŒ ๋‚จ๊ธฐ๊ณ  ์ค‘๋ณต๋˜์ง€ ์•Š์€ ์ •๋ณด๋Š” Huffmann ์ธ์ฝ”๋”ฉ์„ ํ•˜์—ฌ ํ—ค๋”๋ฅผ ์••์ถ•ํ•˜์˜€๋‹ค.
      ๐Ÿ‘‰ ํ—ค๋” ํฌ๊ธฐ๊ฐ€ 85% ๊ฐ์†Œํ•˜๊ณ  ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ๊ฐ„์ด HTTP/1.X๋ฒ„์ „๋ณด๋‹ค ๋ˆˆ์— ๋„๊ฒŒ ๊ฐ์†Œํ•˜์˜€๋‹ค.

โœ… QUIC


๊ตฌ๊ธ€์—์„œ ๋งŒ๋“  ์ „์†ก ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ๋กœ udp๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‘๊ณ  ์žˆ๋‹ค.

โœ udp๋ฅผ ํƒํ•œ ์ด์œ 

tcp๋Š” ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•˜์ง€๋งŒ, ๊ธฐ๋Šฅ์ด๋‚˜ ๊ตฌ์กฐ๊ฐ€ ์ด๋ฏธ ๊ฐ€๋“ ์ฐจ์žˆ๊ธฐ์—, ๊ทธ ์ƒํƒœ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ง€์—ฐ์„ ์ค„์ด๊ธฐ ํž˜๋“  ๊ตฌ์กฐ์ด๋‹ค.

udp๋Š” tcp์— ๋น„ํ•ด ๋ณ„๋„ ๊ธฐ๋Šฅ์ด ์—†๋‹ค

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์—ฌ์ง€๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค.
  • ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ tcp์˜ ์ง€์—ฐ์„ ์ค„์ด๋ฉด์„œ ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” quic ํ”„๋กœํ† ์ฝœ์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.
    • ๊ตฌ๊ธ€์€ ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹ ๋ขฐ์„ฑ ๊ธฐ๋Šฅ์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์— ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

โœ quic์˜ ์ด์ 

๐Ÿ“ข #1) ๋ฐ์ดํ„ฐ ์ „์†ก ์†๋„ ํ–ฅ์ƒ

์ฒซ connection ์„ค์ •์—์„œ ํ•„์š”ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ™์ด ์ „์†กํ•˜์—ฌ connection ์„ฑ๊ณต์‹œ, ์„ค์ •์„ ์บ์‹ฑํ•˜์—ฌ ๋‹ค์Œ connection๋•Œ handshake ์—†์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

  • ๐Ÿ“Œ Connection UUID
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ Connection UUID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด connection์„ ์žฌ์ˆ˜๋ฆฝํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค.
    • ip๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ wifi์—์„œ LTE๋กœ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๊ธฐ์กด์˜ connection์ด ๊ณ„์† ์œ ์ง€๋œ๋‹ค.

๐Ÿ“ข #2) ๋ณด์•ˆ ์ธก๋ฉด ๊ฐ•ํ™”

  • TLS
    ๐Ÿ‘‰ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ํ”„๋กœํ† ์ฝœ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ๋˜์–ด์žˆ๋‹ค
  • Source Address Token ์„ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐœ๊ธ‰
    ๐Ÿ‘‰ IP Spoofing / Replay Attack์„ ๋ฐฉ์ง€

๐Ÿ“ข #3) ํ–ฅ์ƒ๋œ Multiplexing

  • tcp ๋ฅผ ์ด์šฉํ•œ http/2.0 stream์€ ํ•˜๋‚˜์˜ tcp chain์—์„œ ๋ฐ์ดํ„ฐ๋“ค์ด ์—ฎ์ธ ์ƒํƒœ์—์„œ ์ „์†ก์ด ๋œ๋‹ค
  • quic์„ ์ด์šฉํ•œ http/3.0 stream์€ ํ•˜๋‚˜์˜ connection ์•ˆ์˜ ๋…๋ฆฝ stream์œผ๋กœ ์ธํ•ด Multiplexing์ด ํ–ฅ์ƒ๋˜์—ˆ๋‹ค.
    ๐Ÿ‘‰ ํ•˜๋‚˜์˜ stream์—์„œ ๋ณ‘๋ชฉํ˜„์ƒ์ด ์ƒ๊ธฐ๋”๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ stream๋งŒ ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ stream์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.
    ๐Ÿ‘‰์ด๋ฅผ ํ†ตํ•ด head of line blocking ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋ ˆ์ดํ„ด์‹œ๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅํ–ฅ์ƒ์„ ์ด๋ค„๋‚ด์—ˆ๋‹ค.

๐Ÿ‘ HTTP/3.0

2018๋…„ 10์›”์— quic ํ”„๋กœํ† ์ฝœ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ HTTP/3.0 ๋ฒ„์ „์ด ๋‚˜์™”๋‹ค.

  • ๊ตฌ๊ธ€, ์œ ํˆฌ๋ธŒ๋Š” ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ด๋‹ค.

โœ… ์ •๋ฆฌ


0๊ฐœ์˜ ๋Œ“๊ธ€