HTTP

Moom2n·2024년 4월 13일
0

CS

목록 보기
8/11

HTTP

애플리케이션 계층으로서 웹 서비스 통신에 사용된다.

1. HTTP/1.0

  • 한 연결당 하나의 요청 처리 -> RTT 증가
  • 서버로부터 파일을 가져올 때마다 TCP 의 3-way handshake 계속해서 열어야 함.

cf). RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간이며 패킷 왕복 시간

RTT의 증가를 해결하기 위한 방법

  1. 이미지 스플리팅 : 많은 이미지를 다운로드받게 되면 과부하가 걸리기 때문에 많은 이미지가 합쳐 있는 하나의 이미지를 다운로드받고, 이를 기반으로 background-image 의 position 을 이용하여 이미지를 표기하는 방법
  2. 코드 압축 : 코드를 압축해서 개행 문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법
  3. 이미지 Base64 인코딩 : 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법

2. HTTP/1.1

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

HOL Blocking

네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상

무거운 헤더 구조

HTTP/1.0의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠다.

3. HTTP/2

SPDY 프로콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원

멀티플렉싱

  • 여러개의 스트림을 사용하여 송수신함.
  • 단일 연결을 사용하여 병렬ㄹ로 여러 요청을 받을 수 있고 응답을 줄 수 있다.
  • HOL Blocking 해결 가능

헤더 압축

  • 허프만 코딩 : 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트 수를 사용하여 표현하고, 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄인다.
  • 허프만 코딩 압축 알고리즘을 사용하는 HPACK 형식을 가짐

서버 푸시

  • 클라이언트 요청없이 서버가 바로 리소스를 푸시할 수 있다.

3. HTTPS

  • HTTP/2 는 HTTPS 위에서 동작한다.
  • 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 잇는 HTTP 요청

SSL/TLS

전송 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 SSL/TLS 를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 합니다.
Handshake 를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유한다.

HTTPS 구축 방법

  1. 직접 CA에서 구매한 인증키를 기반으로 서비스 구축
  2. 서버 앞단의 HTTPS를 제공하는 로드밸런서를 둔다.
  3. 서버 앞단에 HTTPS를 제공하는 CDN을 둔다.

4. HTTP/3

TCP 위에서 돌아가는 HTTP/2 와는 달리 QUIC 이라는 계층 위에서 돌아가며 TCP 기반이 아닌 UDP 기반으로 돌아간다.

초기 연결 설정 시 지연 시간 감소

  • QUIC 는 TCP를 사용하지 않기 때문에 통신을 시작할 때 번거로운 3-way handshake 과정을 거치지 않아도 된다.
  • 첫 연결 설정에 1-RTT 만 소요된다. 클라이언트가 서버에 어떤 신호를 한번 주고, 서버도 거기에 응답하기만 하면 바로 본 통신을 시작할 수 있다.
  • 순방향 오류 수정 메커니즘으로 전송한 패킷이 손실되었다면 수신 측에서 에러를 검출하고 수정하는 방식을 가지고 있으며, 열악한 네트워크 환경에서도 낮은 패킷 손실률이 된다.

0개의 댓글