본문 바로가기

CS

2.5 HTTP (1)

2.5.1 HTTP/1.0

  • HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되어있다. 이는 RTT 증가를 불러옴
  • RTT 증가
    • 서버로부터 파일을 가져올 때마다 TCP의 3-way handshake를 계속해서 열어야 하기 때문에 RTT가 증가하는 단점이 있다.
    • RTT는 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간 (패킷 왕복 시간)

  • RTT의 증가를 해결하기 위한 방법
    • 매번 연결할 때마다 RTT가 증가하여 서버에 부담이 가고 사용자 응답시간이 길어짐
    • 이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩을 사용하곤 함
  • 이미지 스플리팅
    • 많은 이미지를 다운받게 되면 과부하가 걸려 많은 이미지가 합쳐 있는 하나의 이미지를 다운받고 이를 기반으로 background-image의 position을 이용하여 이미지를 표기한다
  • 코드 압축
    • 코드 압축은 코드를 압축하여 개행문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법
  • 이미지 Base64 인코딩
    • 이미지를 64진법으로 이루어진 문자열로 인코딩하는 방법
    • 이 방법은 이미지에 대해 서버에 HTTP 요청을 할 필요가 없지만 문자열로 변환할 경우 37%정도 크기가 더 커지는 단점이 있음

2.5.2 HTTP/1.1

  • 매번 TCP를 연결하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신

 

  • 그림처럼 한 번 TCP 3-way handshake가 발생하면 그다음부터 발생하지 않는다.
  • 그러나 문서 안에 포함된 다수의 리소스를 처리하려면 대기 시간이 개수에 비례해서 길어짐
  • HOL Blocking
    • 네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
  • 무거운 헤더 구조
    • HTTP/1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무겁다.

2.5.3 HTTP/2

  • SPDY 프로토콜에서 파생된 HTTP/1.x보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜
  • 멀티플렉싱
    • 여러 개의 스트림을 사용하여 송수신한다는 것
    • 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미침
    • 스트림: 시간이 지남에 따라 사용할 수 있게 되는 데이터 요소를 가르키는 데이터 흐름
    • HTTP/1.x에서 발생하는 HOL Blocking을 해결할 수 있다.
  • 헤더압축
    • HTTP/1.x에는 큰 헤더라는 문제가 있음
    • HTTP/2에서는 헤더 압축을 써서 해결하는데, 허프만 코딩 압축 알고리즘을 사용하는 HPACK 압축 형식을 가진다
    • 허프만 코딩
      • 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용
      • 빈도가 낮은 정보는 비트 수를 많이 사용하여 전체 필요한 비트양을 줄이는 원리
  • 서버 푸시
    • HTTP/1.1에서는 클라이언트가 서버에 요청을 해야 파일을 다운로드 받을 수 있지만 HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.

 

'CS' 카테고리의 다른 글

3.1 운영체제와 컴퓨터  (0) 2022.08.31
2.5 HTTP (2)  (0) 2022.08.29
2.4 IP 주소  (0) 2022.08.27
2.3 네트워크 기기  (0) 2022.08.26
2.2 TCP/IP 4계층 모델 (2)  (0) 2022.08.24