[F-Lab 모각코 챌린지] 18일차 - HTTP 와 TCP

F-Lab 모각코 챌린지 18일차를 진행하며 정리한 내용입니다 HTTP, HTTPS, 3/4way handshake, Keep-Alive, HTTP2 에 대해 학습 하였으며 해당 내용들을 정리하였습니다

[F-Lab 모각코 챌린지] 18일차 - HTTP 와 TCP

HTTP 특징

  • 비연결성(Connectionless)
    HTTP 요청 후 응답을 받으면 그 연결은 끊어진다
  • 상태없음(Stateless)
    서버에 상태를 저장하지 않는 것을 지향한다. 그로 인해 많은 장점이 있다
    - 확장성: scale-out 이 용이함
    - 결함 격리: 각 요청이 독립적이므로 다른 요청에 영향을 미치지 않음
    - 단순성: 상태 저장을 고려하지 않기 때문에 시스템 설계가 단순해짐
    - 자원 효율성: 서버가 클라이언트 상태를 저장하지 않으므로 메모리 절약
  • 단순함
    요청이 단순한 구조를 가지고 있다.
    - 요청-응답 모델 구조: 직관적이며 이해하기 쉽다
    - 텍스트 기반: 사람이 읽을 수 있기 때문에 디버깅이 쉽다
    - 표준 메소드: 메소드로 행위를 나타낼 수 있으며 학습하기 쉽다
    - 상태 코드: 상태코드로 응답의 결과를 명확하게 표현할 수 있다
    - 자기 설명적(Self-descriptive): 프로토콜 안에 모든 정보를 포함하고 있으며 다른 컨텍스트가 없더라도 쉽게 이해 할 수 있다
    - 표준화
  • 텍스트 기반
    ASCII 코드 기반의 문자로 이루어져 있기 때문에 사람이 읽을 수 있고 디버깅 및 트러블 슈팅이 상대적으로 쉽다
  • 상태 코드
  • 멀티미디어 지원

HTTPS

특징

  • 암호화(Encryption)
    HTTPS 는 데이터를 암호화 하여 전송한다
    데이터가 전송되는 동안 제 3자에 의해 탈취되더라도 비교적 안전하다
  • 데이터 무결성(Data Integrity)
    데이터가 변조되지 않고 그대로 전송됨을 보장
  • 인증(Authentication)
     SSL 인증 메커니즘을 통해 사이트가 안전함이 인증된다

요청 흐름

  1. 클라이언트가 서버로 연결 시도
  2. 서버는 자신의 공개 키를 포함하는 인증서를 클라이언트에게 제공
  3. 서버로부터 받은 인증서를 검증
    (Certificate Authority 기관 서명 확인, 유효기간 만료 확인, 도메인 확인)
  4. 인증서에서 서버의 공개 키를 추출
  5. Pre-master Secret 생성 (Pre-master Secret: 임의의 랜덤값)
  6. Pre-master Secret 를 서버의 공개키로 암호화 하여 서버에게 전송
  7. 클라이언트와 서버가 대칭 키를 생성
    클라이언트: Pre-master secret 을 사용하여 대칭 키를 생성
    서버: 암호화된 Pre-master secret 를 개인키로 복호화 하고 대칭 키를 생성
  8. 통신
    7번에서 만든 대칭 키를 사용하여 데이터를 암호화 하고 복호화 수행

3way handshake

TCP 연결 시 진행되는 연결 프로세스

  1. SYN 패킷 (클라이언트 -> 서버)
    클라이언트가 서버에게 SYN 패킷과 함께
    이 패킷에는 클라이언트 초기 시퀀스 데이터를 포함한다
  2. SYN-ACK 패킷 (서버 -> 클라이언트)
    SYN 패킷 수신 후 연결을 수락한다
    서버는 자신의 시퀀스 번호를 포함한 SYN 패킷과 클라이언트의 SYN 패킷에 대한 응답으로 ACK 패킷을 함께 클라이언트로 보낸다
  3. ACK 패킷 (클라이언트 -> 서버)
    클라이언트는 서버로부터 SYN-ACK 패킷을 수신한다
    서버에게 ACK 패킷을 보내 연결을 완료한다

4way handshake

TCP 연결 해제 시 진행되는 연결 해제 프로세스

아래 설명에서 '초기화하는 측' 은 서버가 될수도 있고 클라이언트가 될 수도 있다.
단, 일반적인 경우에서는 클라이언트 이

  1. FIN 패킷 (송신 측 -> 수신 측)
    연결 종료를 희망하는 쪽에서 FIN 패킷을 송신하여 연결 종료 의사를 표현한다
  2. ACK 패킷 (수신 측 -> 송신 측)
    FIN 패킷을 수신 측에서 ACK(확인) 를 응답한다
    이는 '종료 처리중' 이라는 의미를 가진다
  3. FIN 패킷 (수신 측 -> 송신 측)
    수신 측에서 FIN 패킷을 송신 측으로 보내어 연결 종료가 준비되었음을 표현한다
  4. ACK 패킷 (송신 측 -> 수신 측)
    송신측은 FIN 패킷을 수신하고 마지막으로 ACK 패킷을 수신측으로 보내어 연결 종료에 대한 최종 확인을 수행한다

Keep-Alive

HTTP/1.1 이상에서 사용되는 기능

클라이언트와 서버 사이의 연결을 재사용 함으로서 네트워크 효율성을 향상시킨다

  • 클라이언트와 서버 사이의 TCP 연결을 재사용한다
    HTTP 에서는 기존의 연결을 사용하여 3way handshake 라는 전처리 리소스를 최소화 한다
  • HTTPS 에서도 Keep-Alive 기능이 중요하다.
    SSL/TLS 를 사용하여 암호화된 연결을 설정한다.
    이 과정은 재사용하는 리소스를 감소할 수 있다.

HTTP 헤더에 Connection: keep-alive 를 포함하여 해당 기능을 사용 할 수 있다

HTTP2

웹 성능 향상을 목표로 HTTP/1.1 에서 발전된 프로토콜

특징

  • 다중화(Multiplexing)
    단일 TCP 연결을 통해 여러 요청과 응답을 동시에 전송 할 수 있다
  • 헤더 압축(Header Compression)
    HTTP/2 는 헤더를 압축하여 전송한다.
    이로 인해 데이터 전송량이 줄고 전송 속도가 향상된다
  • 서버 푸시(Server Push)
    서버는 클라이언트의 요청에 대한 응답 외에 추가 리소스를 능동적으로 전송할 수 있다.
    클라이언트가 요청하지 않아도 필요한 리소스를 미리 받을 수 있다
  • 스트림 우선순위(Stream Prioritization)
    리소스 전송 우선순위를 지정 할 수 있다.
    이를 통해 중요한 리소스를 먼저 전송하고 페이지 로드 시간을 개선할 수 있다
  • 암호화(Encryption)
    기본적으로 SSL/TLS 를 사용하여 데이터를 암호화 한다

장점

  1. 성능향상
    다중화, 헤더 압축, 서버 푸시 기능들로 페이지 로드 시간이 단축되고 네트워크 효율성 증가
  2. 보안 강화
    기본적으로 암호화를 사용
  3. 리소스 사용 최적화
    단일 TCP 연결로 여러 요청과 응답을 처리.
    네트워크 리소스 사용이 최적화된다

단점

  1. 복잡성
    HTTP/1.1 에 비해 더 복잡한 프로토콜. 구현과 디버깅이 어려울 수 있다
  2. 암호화 오버헤드
    기본적으로 암호화를 수행해야 하기 때문에 CPU 사용량 증가
  3. 호환성
    일부 레거시 시스템과 장비에서는 HTTP/2 를 지원하지 않을 수 있다