HTTP/1.0
- 하나의 연결 당 하나의 request를 처리함
- RTT의 증가 발생. (3-way-handshake 하나당 두번의 RTT)
💡 RTT
: 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간. 즉, 패킷 왕복 시간을 의미.
RTT 증가를 해결하기 위한 방법
- 이미지 스플리팅
- 많은 이미지를 이어붙혀 하나의 이미지로 다운받는 방법.
- css 의 background-position을 이용하여 이미지를 자른다.
- 코드 압축
- 코드의 개행문자, 빈칸 등을 없애서 코드의 크기를 최소화하는 방법.
- ex) webpack
- 이미지 base64 인코딩
- 이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방법.
- 이미지에 대한 HTTP요청을 줄일 수 있다.
- 아예 이미지 자체를 문서에 저장하기 때문이다.
- 다만, 용량이 37%정도 증가한다.
HTTP/1.1
업그레이드 사항
- HTTP/1.1 의 핵심은 Pipelining 이다.
- 한번에 여러 명령어를 동시에 처리가 가능하다.
- 매번 TCP 연결을 하는것이 아닌, 한 번 TCP 초기화를 한 이후 keep-alive라는 옵션으로 여러개의 파일을 송수신할 수 있게 됨.
💡 keep-alive
: HTTP의 연결옵션 중 하나. HTTP의 persistant한 connection을 유지할 수 있도록 불필요한 HTTP연결 및 해제를 최소화할 수 있다.
단점
- HOL Blocking
- 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하
- 무거운 헤더 구조
- 원래 여러번 걸쳐 처리해야할 HTTP 연결 및 해제를 한번에 처리해야하다보니 담아야할 정보가 많아 헤더가 무거워진다.
- HTTP/1.1 에 비해 쿠키 등 많은 데이터가 들어가있다.
HTTP/2
SPDY 프로토콜에서 파생된 프로토콜이다.
- 오래된 HTTP/1.1 의 단점을 보완
- 항상 https 상에서 동작
- http 헤더 압축
💡 SPDY
: 웹 컨텐츠를 전송할 목적으로 구글이 만든 비표준 개방형 프로토콜.
Multiplexing
- HTTP/2 의 핵심은 Multiplexing 이다.
- 여러개의 스트림을 사용하여 송수신한다.
- 바이너리 프레임의 스트림 전송방식을 통해 응답 순서와 무관하게 데이터를 처리한다.
헤더 압축
- HTTP/1.1 의 헤더가 크다는 단점을 보안.
- 호프만 코딩 압축 알고리즘을 사용.
💡 허프만 코딩
: 문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트수를 사용하여 표현. 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현 ⇒ 전체 데이터의 비트 양을 줄임.
서버 푸시
- 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있다.
- html만 달랑 보내면 html 내 css 파일이나 js파일을 읽을 때 다시 서버에 요청을 해야한다.
- 대신, 서버에서 미리 css나 js파일을 푸시한다면 html로드 속도를 높힐 수 있게 된다.
HTTPS
- HTTP/2 는 HTTPS 위에서 동작한다.
- HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰계층인 SSL/TLS계층을 넣은 요청이다.
- 이를 통해 통신을 암호화 한다.
SSL/TLS
- 전송 계층에서 보안을 제공하는 프로토콜
- client와 server가 통신할 때 제 3자가 메시지를 도청하거나 변조하지 못하도록 막는다.
- 보안세션을 기반으로 동작
- 주요 알고리즘으로 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용됨.
보안 세션
- 보안이 시작되고 끝나는동안 유지되는 세션을 말한다.
- 3-way-handshake 과정을 통해 보안 세션을 생성하고, 이를 통해 상태 정보 등을 공유한다.
- client에서 사이퍼 슈트를 server에 전달하면 server는 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인한다.
- 만약 제공할 수 있다면 server⇒client 로 인증 메커니즘 시작
- 이후 해싱 알고리즘으로 데이터 암호화.
💡 사이퍼 슈트
: 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약. ex) TLS_AES_128_GCM_SHA256 : TLS(프로토콜) + AES_128_GCM(AEAD 사이퍼 모드) + SHA256(해싱 알고리즘)
💡 AEAD
: 데이터 암호화 알고리즘 ex) AES_128_GCM : 128(비트의 키) + AES(블록 암호화 기술) + GCM(암호화 알고리즘)
인증 메커니즘
- CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어짐.
- 안전한 연결을 위해 공개키 를 client에게 제공 ⇒ 신뢰할 수 있는 서버 보장.
- CA는 신뢰성있는 공인 기업만이 참여 가능. ex) 아마존, Comodo, …
💡 CA 발급 과정
: CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 제출해야 함. ⇒ CA의 비밀키(손가락 지문) 등을 기반으로 인증서를 발급.
</aside>
암호화 알고리즘
- ECDHE (Elliptic Curve Diffie-Hellman Ephermeral)
- DHE (Diffe-Hellman Ephermeral)
해싱 알고리즘
- SHA-256
- 어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 반환
- 2^256 만큼의 경우의 수
- 입력 값이 조금만 변동되더라도 반환값이 완전히 달라짐 ⇒ 복호화 불가능.
- SHA-384
SEO in HTTPS
- SEO(Search Engine Optimization) : 웹 사이트를 검색 시 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법.
- 다음의 방법들이 있다.
- 캐노니컬 설정 : link 태그 내 rel=”canonical” 을 추가한다.
- 메타 설정
- 페이지 속도 개선
- 사이트맵 관리
HTTP/3 (QUIC)
- HTTP/3 은 QUIC 프로토콜을 기반으로 동작한다.
- UDP를 기반으로 동작.
- 초기 연결 시 3-way-handshake 과정을 거치지 않음. (1번의 RTT만 소요.)
📚 참고문헌
https://ijbgo.tistory.com/?page=3
https://stackoverflow.com/questions/36517829/what-does-multiplexing-mean-in-http-2
https://blog.chromium.org/2015/04/a-quic-update-on-googles-experimental.html
'CS 스터디' 카테고리의 다른 글
[운영체제] CPU 스케줄링 알고리즘 (1) | 2022.11.26 |
---|---|
[운영체제] 운영체제의 구조 / 컴퓨터의 요소 (0) | 2022.11.26 |
[네트워크] IP 주소 (ARP, 홉바이홉 통신, IP주소 체계, 클래스, DHCP, NET) (4) | 2022.11.12 |
[네트워크] 네트워크 기기 (로드밸런서, 라우터, 스위치, ...) (3) | 2022.11.06 |
[네트워크] TCP/IP 4계층 모델 (0) | 2022.10.29 |