HTTP는 TCP를 기반으로 동작한다.
그런데 TCP는 연결지향적이고, HTTP의 특징은 비연결성이라고 .. ?..!!
🫧 TCP의 연결 지향
TCP는 3-way handshake를 통해 연결을 설정한 후, 신뢰성 있는 데이터를 전송하는 프로토콜이다.
- 따라서
TCP연결이 유지되는 동안 데이터가 안정적으로 주고받을 수 있다.
🫧 HTTP의 비연결성
HTTP는 기본적으로 요청(Request)-응답(Response) 모델을 따르는 프로토콜로,
각 요청이 독립적이다.
- 따라서 클라이언트가 서버에 요청을 보내고 응답을 받으면 연결이 해제된다. - 비연결성 프로토콜
📍 TCP는 연결을 유지하는데, HTTP는 왜 연결을 해제하는가?
- 웹에서 여러 사용자가 동시에 서버에 접속하기 때문에,
모든 연결을 유지하면 서버 부하가 심해지기 때문에 요청-응답이 끝나면 바로 연결을 끊는다.
🫧 HTTP 요청마다 TCP 연결을 새로 맺어야 할까?
HTTP/1.0에서는 요청마다 TCP연결을 새로 맺었으나,
매 요청마다 3-way handshake가 반복되어 속도가 느려지는 단점이 있다.
- 이를 개선하기 위해 HTTP/1.1의
Keep-Alive와 이후에 나온 HTTP/2, HTTP/3가 등장했다.
📍 Connection: Keep-Alive
HTTP/1.1부터는 기본적으로 TCP 연결을 유지할 수 있다. - Keep Alive
- 클라이언트가 여러 개의 요청을 보낼 경우, 같은 TCP 연결을 재사용해서 성능을 개선한다.
- 그러나 여전히 요청은 개별적으로 처리되고,
클라이언트가 요청을 안하면 일정시간 이후 연결이 해제된다.
📍 HTTP/2와 HTTP/3
HTTP/2는 멀티플렉싱(Multiplexing) 기능을 추가해,
하나의 TCP 연결에서 여러 개의 요청을 동시에 처리할 수 있다.
HTTP/3은 TCP 대신 QUIC(UDP 기반 프로토콜)을 사용해 더 빠르게 데이터를 주고 받는다.
🫧 정리
TCP는 연결을 유지하는 연결지향적 프로토콜
HTTP는 TCP 위에서 동작하지만,
기본적으로 요청-응답 단위로 연결을 끊는 비연결성 프로토콜
- HTTP/1.1 부터
Keep-Alive 기능이 추가되어 TCP 연결을 유지할 수 있지만,
개별 요청은 여전히 독립적
- HTTP/2, HTTP/3에서는 멀티플렉싱과
QUIC를 활용하여 더 효율적인 연결 관리가 가능
ref
https://easy-code-yo.tistory.com/80