GitHub

https://github.com/Choidongjun0830

CS

2.5 HTTP

gogi masidda 2024. 9. 7. 16:20

'면접을 위한 CS 전공지식 노트' 책을 보며 공부한 내용입니다.

  • HTTP/1.0
    • 기본적으로 한 연결 당 하나의 요청을 처리한다. 
    • 요청 때마다 3-way handshake를 계속 해야함 => RTT 증가
    • RTT 증가 해결 방법
      • 이미지 스플리팅: 많은 이미지가 합쳐져 있는 하나의 이미지를 다운 받고, 이를 기반으로 background-image의 position을 이용
      • 코드 압축: 코드를 압축해서 개행 문자와 빈칸을 제거하여 코드의 크기를 최소화
      • 이미지 Base64 인코딩: 이미지 파일을 64진법으로 이루어진 문자열로 인코딩
  • HTTP/1.1
    • HTTP/1.0에서 발전.
    • 매번 TCP 연결이 아니라 한번 TCP를 초기화한 이후에 keep-alive 옵션으로 여러개 파일을 송수신 가능 => 3-way handshake를 매번 할 필요가 없음
    • 하지만, HOL Blocking (Head of Line Blocking)이 발생함 => 대기시간 증가
    • HTTP/1.1의 헤더에는 쿠키 등 많은 메타 데이터가 들어있고 압축이 불가능해서 무거움.
  • HTTP/2
    • HTTP/1.x보다 지연 시간을 줄이고, 응답 시간을 더 빠르게 가능
    • 멀티 플렉싱, 헤더 압축, 서버 푸시, 요청의 우선 순위 처리를 지원함.
    • 멀티 플렉싱: 여러개의 스트림을 사용해서 송수신을 함. 특정 스트림의 패킷이 손실되었다고 하더라도, 해당 스트림에만 영향을 미침. 나머지는 잘 동작함.
    • 헤더 압축: HTTP/1.x에는 헤더가 크다는 문제점을 헤더 압축으로 해결함.
    • 서버 푸시: HTTP/1.1에는 클라이언트가 서버에 요청을 해야 서버가 요청한 리소스를 전달해주었는데, HTTP/2에서는 클라이언트 요청 없이도 서버가 리소스를 푸시 가능함.
  • HTTPS
    • HTTP/2/는 HTTPS 위에서 동작함.
    • HTTPS는 Application 계층과 Transport 계층 사이에 신뢰 계층인 SSL/TLS를 넣어 신뢰할 수 있는 HTTP 요청을 말한다. => 통신을 암호화함.
    • SSL/TLS(Transport Layer Security): Transport 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제 3자가 메시지를 도청하거나 변조하지 못하도록 한다. 
      • 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 매커니즘, 키 교환 알고리즘, 해싱 알고리즘이 사용됨.
        • 보안 세션: 보안이 시작되고 끝나는 동안 유지됨. handshake로 보안 세션이 생성됨.
        • 인증 매커니즘: CA에서 발급한 인증서를 기반으로 이루어진다. CA에서 발급한 인증서는 안전한 연결을 시작하는데 있어 필요한 공개키를 클라이언트에 제공하고, 사용자가 접속한 서버가 안전한 서버임을 보장한다. 
        • tls handshake
  • HTTPS 구축 방법
    • 직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스 구축
    • 서버 앞단에 HTTPS를 제공하는 로드밸런서 두기
    • 서버 앞단에 HTTPS를 제공하는 CDN 두기
  • HTTP/3
    • TCP 위에서 돌아가는 HTTP/2와는 달리 HTTP/3는 QUIC 계층 위에서 돌아감.
    • TCP가 아닌 UDP 기반으로 돌아감.
    • 또한 멀티 플렉싱을 가지고 있으며, 초기 연결 설정 시작시 지연 시간이 감소됨.
      • 초기 연결 설정 시작시 지연 시간이 감소
        • QUIC은 TCP를 사용하지 않아서 3-way handshake가 없다. 1-RTT만 소요됨.
        • 클라이언트가 서버에 어떤 신호를 주고, 서버가 그것에 응답하기만 하면 바로 통신 시작이 가능함.
728x90

'CS' 카테고리의 다른 글

3.2 메모리  (4) 2024.09.15
3.1 운영체제와 컴퓨터  (0) 2024.09.12
2.4 IP 주소  (0) 2024.09.06
2.3 네트워크 기기  (0) 2024.09.06
2.2 TCP/IP 4계층 모델  (2) 2024.09.04