HTTP 1.0
- Non-persistent: 데이터를 주고받을 때마다 TCP 연결을 새로 수립해야 한다.
- Non-pipelining: 하나의 요청을 보내고 해당 요청에 대한 응답을 받아야지만 다음 요청을 진행할 수 있다.
HTTP 1.1
- Persistent: 데이터를 주고 받는동안 TCP 세션이 유지된다.
→ 기존 연결을 재사용하여 오버헤드를 줄이고 response time 단축- Pipelining : 응답을 기다리지 않고 여러 요청을 병렬로 보낼 수 있다.
→ Throughput↑
한계
- HOL 발생: 브라우저에서 허용되는 병렬 요청 수가 모두 사용되어, 후속 요청이 이전 요청이 완료될 때까지 대기해야 하는 상황이 발생할 수 있다.
- 같은 큐에 있는 패킷이 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
- 사용자가 여러 요청을 연속으로 보낸 경우, 브라우저에서 병렬로 처리 가능한 요청 수가 제한되어 있다.
- 첫 번째 요청이 완료되기 전에 다른 요청들은 대기해야 한다.
- 나머지 요청들은 비교적 빠르게 응답이 가능한 상태에도 불구하고 첫 번째 요청의 응답을 기다려야 하며, 이로 인해 웹 페이지 로딩 성능이 저하될 수 있다.
- HTTP 1.0의 경우 요청마다 connection 해야하므로 RTT 증가
- 무거운 헤더: 사용자가 웹 페이지를 방문할 때 많은 HTTP 요청이 발생하며, 이로 인해 중복된 헤더 값과 각 도메인에 설정된 쿠키 정보가 매 요청마다 헤더에 다시 전송된다.
이로 인해 불필요한 중복 데이터 값이 전송되며, 경우에 따라 데이터 양보다 헤더의 크기가 더 큰 경우가 발생할 수 있다.
→ 웹 페이지에서 여러 이미지, 스타일시트, 스크립트 파일 등을 로딩하는 경우, 각 요청마다 중복된 헤더 데이터(Accept-Encoding, Cookie)가 함께 전송된다.
해결방법
- 오브젝트들을 프레임 단위로 쪼개어(Framing) 번갈아가며 수행 함으로써 해결
- Binary 인코딩: HTTP/2는 텍스트 형태로 전달되는 HTTP 메시지가 아닌 binary 형태로 인코딩되어 전송된다.
이로써 송수신 데이터량이 감소하고 효율적으로 통신이 가능해졌다.
→ 10바이트만 있으면 1024개의 정보를 표현할 수 있다.
→ 헤더도 이진 표현을 통해 압축
- 우선순위 지정: HTTP/2는 요청하는 객체의 우선순위를 지정할 수 있다.
- Push 기능: HTTP/2에서는 서버가 클라이언트의 요청 없이 연관된 객체를 함께 클라이언트에게 전송할 수 있는 기능을 제공한다.
→ Pull방식에서 Push 방식으로 변경
→ 클라이언트가 HTML 문서를 받고 나서 필요한 리소스를 다시 요청하는 번거로움을 줄여주며, 웹 페이지 로딩을 빠르게 만드는 기술이다.
한계
- 여전히 TCP 연결을 사용하므로, 연결 수립 및 해제를 위한 handshaking 과정에서 Response time이 증가 할 수 있다.
- TCP는 신뢰성 있는 프로토콜로 알려져 있지만, 패킷이 유실되거나 오류가 발생할 경우 재전송 기법을 사용한다.
이로 인해 패킷 지연이 발생할 수 있으며, 이러한 지연은 HOL을 유발할 수 있다.
- 흐름제어 및 혼잡제어: UDP는 흐름제어와 혼잡제어를 지원하지 않아 데이터 전송에 제한이 없으며 이로 인해 네트워크 혼잡 상황에서 데이터 손실이 발생할 수 있다.
QUIC는 흐름제어 및 혼잡제어 기능을 통해 데이터의 안정적인 전송을 보장하며 네트워크 혼잡을 최소화한다.- 보안 및 제어 개선: QUIC은 보안 측면에서도 개선되어 있으며, TLS(Transport Layer Security) 프로토콜과 함께 사용된다.
- Zero Round-Trip Time (0-RTT): 이전 연결에서 이미 확인한 정보를 재사용하여 연결을 빠르게 설정할 수 있다.
전자 우편을 주고받을 때 사용되는 프로토콜로써, 신뢰성 있는 송수신을 위해 TCP를 사용하며 port 25를 사용한다.
3가지 구성요소
- User agents: 사용자가 이메일을 작성하고 받는 인터페이스 역할
→ Microsoft Outlook, Apple Mail- Mail servers: 전자 우편 메시지를 저장, 라우팅, 전송하는 역할
- mailbox: 메일 서버에서 각 사용자별로 관리되는 메일함
- message queue: 발송되어야 하는 메시지들을 저장하고 관리하는 대기열
- SMTP(Simple Mail Transfer Protocol): 메일 서버 간에 전자 우편을 송수신하기 위한 표준 프로토콜
- 유저 A가 user agent를 통해 메일을 작성한다.
- A의 user agent가 메일 서버로 메일을 전송한다.
→ message queue로 들어가게 된다.- A쪽 메일서버와 B쪽 메일서버와 TCP Handshaking을 통해 연결을 성립하고 메일이 전달 된다.
→ Push 방식- B의 mailbox에 메일이 저장된다.
- B는 user agent트를 사용하여 B의 mailbox에 접근하여 수신한 메일을 확인할 수 있다.
→ 메일의 전송에는 SMTP가 사용되며, 저장된 메일을 읽는 것은 IMAP을 주로 사용
정말 유용합니다 덕분에 학습하는데 많이 도움이 되었습니다