어플리케이션 계층 1 - HTTP 알아보기

목차

HTTP는 인터넷에서 클라이언트와 서버가 데이터를 송수신할 때 사용하는 프로토콜이다. HTTP의 몇가지 특징과 동작 과정을 정리해보았다. 특히 개인적으로 헷갈렸던 TCP 소켓과 HTTP의 연결성에 대해 살펴보았다. 그리고 HTTP의 보안 문제에 대해서도 짚고 넘어가보았다.

HTTP 특징

HTTP는 인터넷에서 데이터를 주고 받는 프로토콜로, 몇가지 특징을 정리해보았다.

  1. 클라이언트 - 서버 구조

    • 클라이언트가 요청하면 서버가 응답하는 단방향 통신이다.

    • Request/Response 구조

  2. Connectionless (비연결성)

    • 클라이언트와 서버의 연결을 유지하지 않는다.

    • 클라이언트가 요청하면 서버는 응답을 하고 맺었던 연결을 끊는다.

    • 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우에 효율적이다.

    • 그러나, 연결 성립/해제 과정이 더 비쌀 수도 있다.

    • Keep Alive 옵션으로 일정 기간 연결을 유지할 수 있다.

  3. Stateless

    • 서버가 클라이언트의 상태를 저장하지 않는다.

    • 장점 : 서버에 이전 내용이 저장되어 있는 게 아니라 많은 서버를 운영해도 된다.

    • 단점 : 요청 한번에 필요한 모든 데이터를 보내기에 비효율적이다.

    • 쿠키/세션으로 Stateful하게 사용할 수 도 있다.

HTTP 동작과정

HTTP는 어플리케이션 계층이고, TCP는 전송 계층이다. HTTP는 TCP 기반으로 동작한다. 따라서 연결/해제하는 과정에서 TCP 3/4-way handshake를 한다. TCP 3-way handshake으로 연결을 성립하면, HTTP 메세지를 주고 받고 다시 TCP 4-way handshake으로 연결을 해제한다. HTTP의 동작과정은 다음과 같다.

  1. 사용자가 웹 브라우저에 URL 주소 입력

  2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청

  3. 웹 서버와 TCP 연결 시도

    • 3 way-handshaking

  4. 클라이언트가 서버에게 요청

    • HTTP Request Message

  5. 서버가 클라이언트에게 데이터 응답

    • HTTP Response Message

  6. 서버 클라이언트 간 연결 종료

    • 4way-handshaking

  7. 웹 브라우저가 웹 화면 출력

TCP 소켓 통신 vs HTTP 통신

TCP 소켓과 HTTP 각각 어떻게 동작하는지 정리해보았다.

우선 TCP 소켓 통신은 OSI 계층으로 4계층, 전송 계층 프로토콜로 데이터를 주고 받는다. 즉, 4계층에서 패킷을 생성한다. 클라이언트 혹은 서버가 close를 요청하기 전까지 서로 데이터를 계속 주고 받을 수 있다.

반면 HTTP 통신 시, HTTP 프로토콜은 7계층의 프로토콜로, TCP 계층(4계층)위에서 동작한다. 즉, HTTP는 TCP보다 상위 계층에서 동작한다. 따라서 TCP의 연결 과정(3-way handshake)을 거친다. 이 연결 과정을 거친 뒤, HTTP 프로토콜에 따라 클라이언트와 서버가 데이터를 송수신(Request/Response)한다. OSI 계층으로 7계층, 어플리케이션 계층에서부터 패킷이 생성된다.

이 내용과 함께 헷갈렸던 부분이 TCP는 연결지향 프로토콜인데, HTTP는 비연결성이라는 점이었다.

TCP는 연결지향(connection-oriented), HTTP는 비연결성(connectionless)?

위에서 HTTP는 TCP 계층 위에서 동작한다고 했다. 그런데 TCP는 연결지향인데, HTTP는 비연결적이라는 게 어떤 의미일까?

  • TCP의 연결지향이란

    • UDP와 대비되는 개념이다(UDP는 서버와 연결 성립을 하지 않고, 그냥 클라이언트가 전송함).

    • 클라이언트와 서버의 연결을 성립 후 데이터를 송수신한다는 의미이다.

  • HTTP의 비연결성이란

    • 소켓과 대비되는 개념이다(소켓은 close를 요청 전까지 클라이언트/서버가 데이터를 송수신함).

    • 클라이언트와 서버가 데이터를 한번 송수신(Request/Response)하고 나면 연결을 해제한다.

HTTP의 보안

HTTP는 암호화가 되지 않은 데이터를 주고 받는 프로토콜이다. 따라서 클라이언트와 서버의 통신 과정 중에 다른 누군가에 의해 도청/변조될 수 있다. 이를 방지하기 위해 SSL 을 통해 보안기능을 추가한 프로토콜이 HTTPS이다. HTTPS와 SSL은 다음 장에서 자세히 정리해보았다.

정리하면

  • HTTP의 특징과 동작 과정에 대해 알아보았다.

  • HTTP는 TCP 위에서 동작하는 프로토콜이다. 따라서 TCP의 3-way handshake 과정으로 연결을 먼저 성립하고, HTTP 프로토콜에 따라 데이터를 송수신한다. 이때 HTTP는 클라이언트와 서버가 데이터를 한번 송수신하면 연결을 끊는 비연결적인 프로토콜이다.

  • 단, HTTP 자체는 보안 기능이 없기에, 도청/변조될 수 있다. 따라서 SSL을 통해 보안기능이 있는 HTTPS가 등장하였다.

Reference

위로가기⬆

Last updated