CS기초지식 - HTTP

KIM HYUNMIN·2024년 9월 2일

CS 기초지식

목록 보기
4/13
  1. HTTP
    1-1) HTTP/1.0
    1-2) HTTP/1.1
    1-3) HTTP/2
    1-4) HTTP/3
    1-5) HTTPS

1-1) HTTP/1.0

: HTML 문서만 날리는 HTTP/0.9와 다르게 다양한 파일(css,image 등)을 받을 수 있도록 설계됨

단전
: 매번 새로운 연결로 성능 저하

  • 하나의 데이터를 받을 때 마다 서버 측에서 연결을 끊음
  • 요청 컨텐츠마다 TCP 세션을 맺어야 함

서버 부하 비용 상승

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

HTTP 1.0 환경에서는 하나의 IP에 여러 개의 도메인을 운영할 수 없다.
HTTP 1.0은 기본적으로 Connection 당 하나의 요청을 처리할 수 있다. 그렇기 때문에 동시 전송은 불가능하고 하나의 요청에 대한 응답이 온 후 다음 요청을 처리한다.

HTTP/1.0에서 RTT 감소를 위해 이미지 스플리팅,코드 압축,base64인코딩 등 시행한다.

1-2) HTTP/1.1

: HTTP/1.0의 단점을 해결하기 위해 발전한 버전이다. keep-alive 옵션으로 여러번 송수신할 수 있게 바뀌었다. 처음 TCP 연결 후 지정한 timeout 동안 연결을 지속한다.
또한 파이프라이닝 기능이 지원된다.

--파이프라이닝: 보통 파이프라이닝과 대조되는 것이 stop and wait 방식이다. stop and wait 방식은 송신자가 요청을 보내면 응답을 받아야지만 다음 요청을 보낼수 있는 방식이다. 하지만 파이프라이닝 기능은 송신자가 응답을 받지 않아도 요청을 보낼 수 있는 것을 말한다.

HTTP/1.1에서 클라이언트와 서버간의 커넥션을 유지하게 됐으므로 파이프라이닝을 통해 더 효율적인 통신이 가능해졌다.
하지만 문서 안에 포함된 다수의 리소스를 처리하려면 요청할 리소스 개수에 비례해 대기시간이 길어지는 단점이 있다.

1-3) HTTP/2.0

2015년에 출시 됬고 HTTP/1과 가장 큰 차이점은 멀티플렉싱을 사용한다는 점이다. 즉 여러 리소스를 한번에 요청할수 있게 됬고, 중복 헤더 제거와 헤더 압축을 이요해 패킷 크기가 매우 작아졌다.

멀티플랙싱이란?

  • 하나의 통신 채널로 여러개의 데이터를 동시에 보내는 것이다.
  • 여러 애플리케이션들이 전송계층으로 메세지를 전달하면 전송계층 에서는 헤더를 붙여서 캡슐화하고 네트워크 계층으로 일렬로 내려보낸다.

디멀티플랙싱이란?

  • 수신 측 네트워크계층에서 전송계층으로 일렬로 올라온 데이터들을 헤더정보를 보고 알맞은 각 애플리케이션 소켓으로 전달하는 것이다.

HOL Blocking 이란?
예를 들어 클라이언트가 서버에 메인화면 GET 요청을 했다. 메인화면을 나타내기 위해 HTML 3개 CSS 2개 js 2개의 리소스가 필요하다고 가정했을때

HTTP/1 로 돌아가서 설명을 하면 HTML 3개 요청 후 응답을 받을 때까지 기다리고, CSS 요청 후 또 기다리고 JS 요청 후 기다려서 모든 리소스를 받는 작업을 수행했다. 이러한 이유로 지연이 되는 것을 HOL Blocking이라고 한다.

HOL Blocking 이란 같은 큐에 있는 데이터중 첫 번째 데이터의 처리 시간이 길수록 뒤의 데이터 지연 시간이 길어져 성능이 저하되는 현상이다.

이러한 문제를 HTTP/2 는 멀티플렉싱 기능 덕분에 HTML,CSS,JS 를 한꺼번에 요청하고 한꺼번에 응답을 받고 또 Server Push라는 요청하지 않은 리소스를 서버가 자체적으로 전달하는 기능을 제공 하여 성능을 개선 했다.

1-4) HTTP/3

: TCP 기반 통신인 HTTP/2는 hand-shaking을 수행해야 하는 고질적인 문제가 있었는데 이런 연결 시간으로 딜레이 되는 시간을 줄이기 위해 HTTP/3 은 UDP 기반인 QUIC 프로토콜을 사용하여 통신한다.

  • http/2 의 장점이었던 멀티 플렉싱 기능을 가지고 있으며 3-웨이 핸드셰이크 과정을 거치지 않아도 된다 따라서 1-RTT만 소요된다.

1-5) HTTPS

: 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. 이를 통해 통신을 암호화 할수 있다.

HTTPS 구축방법
1) CA에서 구매한 인증키를 기반으로 HTTPS 서비스 구축
2) 서버 앞단의 HTTPS를 제공하는 로드밸런서 두기
3) 서버 앞단단에 HTTPS를 제공하는 CDN을 둬서 구축

사이퍼 수트 각 항목들

키교환 알고리즘 : Server와 Client간 Key를 교환할 방식을 선정하는 것입니다.
인증 알고리즘 : Server와 Client간 교환한 인증서를 확인하는 알고리즘입니다.
대칭 암호 알고리즘 : 실제 데이터를 암호화 하는 알고리즘입니다.
블록 암호 운용 방식 : 데이터를 암호화 할때 한꺼번에 암호화 하는 것이 아니라 블록 단위로 암호화 하게 되는데, 블록된 암호화 패킷을 조합하여 데이터를 추측 하는 것을 방지하기 위한 방식입니다.
해시 알고리즘 : 서로 상대방이 암호화 한것이 맞는지 확인하기 위한 알고리즘

TLS 프로토콜을 사용하며, 키교환 방식은 ECDHE, 인증알고리즘은 RSA, 대칭알고리즘으로 AES를 사용하며 암호키 길이는 256비트, 블록암호운용모드는 GCM이고 HMAC용 해시 알고리즘은 SHA-384를 사용한다는 것입니다.

profile
Linux,Window,Network,docker,kubernets

0개의 댓글