HTTP와 TCP

최승혁·2022년 5월 14일
0

개요

네트워크를 통해 데이터를 주고 받는 행위는 인터넷을 이용하는 유저라면 당연히 겪어보았을 것이다.

특히, 네트워크 관점에서 데이터를 주고 받는 방식은 크게 2가지가 있다. HTTP 통신과 Socket을 통한 TCP 방식이다.

많은 사람들은 이 두 방식의 차이점을 잘 모르거나, 헷갈려 한다. 어떤 때에 어느 방식이 유용한지, 각 통신은 어떤 특징이 있는지 알아보자.

OSI 7 계층

두 통신에 대해 이해하려면 OSI 7계층의 관점에서 볼 필요가 있다.

왜냐하면 HTTP 통신과 TCP 방식은 OSI 4계층 관점에서는 같은 방식이면서도 7계층에서는 다른 방식이기 때문이다.

네트워크에서는 데이터를 전송하기 위해, 데이터에 헤더를 붙인 패킷을 이용한다.

패킷이란. 유저가 데이터를 전송하려 할 때 전송하는 데이터에 각 계층의 헤더가 붙어서 생긴 네트워크 전송 데이터이다.

이러한 헤더가 붙는 이유는 각 계층에서 맡은 역할에 따라 데이터를 정제하기 위해서이다.

예를 들어, 표현 계층에서는 데이터의 표현 방식에 대한 역할을 맡고있다. 따라서 데이터의 압축이나, 암호화/복호화 등의 작업을 헤더에 맞게 한다. (이러한 데이터의 규약을 프로토콜이라 한다.)

TCP 통신은 4계층에서 구현된 데이터 전송 프로토콜이다. 그리고 HTTP는 7계층에서 구현된 데이터 전송 프로토콜인데, TCP 기능 위에 구현된 것이다.

즉, 7계층의 패킷화 과정에서는 HTTP 헤더가 사용되고, 4계층에서는 TCP 헤더가 사용되는 것이다.

그래서 4계층의 관점에서는 TCP와 HTTP는 같은 프로토콜인 것이고, 7계층의 관점에서는 다른 프로토콜인 것이다.

TCP 특징

HTTP와 TCP는 결국 4계층에서 같은 헤더를 사용하게 된다. 이런 TCP의 통신은 어떤 특징을 가질까?

  • 연결지향적: TCP 통신은 종단간 두 호스트가 연결 상태를 유지하는 특징이 있다.
  • 3 way hanshaking: 3 way handshake는 TCP/IP 프로토콜을 이용해 통신을 하는 응용 프로그램이 데이터를 안전하고 정확하게 전송하기 위해 상대 컴퓨터와 사전에 세션을 수립하는 과정이다.
  • 순서 번호: 전송된 데이터가 순서대로 도착하지 않았을 경우, 데이터의 순서가 잘못되어 데이터 변형의 우려가 있다. 이를 방지하기 위해 전송되는 각 데이터에 순서 번호를 붙인다.

Socket 통신


통화 방식과 유사한 Socket 통신

그렇다면, TCP 통신은 어떤 방식으로 7계층에서 패킷이 생성될까? 바로 운영체제에서 제공하는 Socket의 헤더를 이용하여 패킷을 생성하게 된다.

Socket 통신의 특징은 두 호스트가 연결을 항상 유지하고 있고(stateful), 양방향으로 통신을 한다는 특징이 있다. 그렇기 때문에 실시간 통신이 필요한 경우에 자주 사용된다.

예를 들어, 스트리밍 서비스에서 동영상을 제공하는 호스트와 댓글을 쓰려는 호스트 모두 실시간으로 데이터를 주고 받기 때문에 연결이 항상 유지되고, 양방향에서 데이터를 전송할 수 있다.

HTTP 통신


문자 방식과 유사한 HTTP 통신

반면 HTTP 통신은 Socket 통신과는 다르게 두 호스트 간의 연결을 유지하지 않는다. 즉, 호스트의 요청에 다른 호스트가 응답을 한 후 연결을 종료하게 된다. (stateless)

이를 사용하는 예로는 웹이 있다. 웹의 경우, 유저가 url을 통해 웹사이트에 접근하면 서버는 데이터를 전송해 웹을 뿌려준다.

이후 웹과 유저의 네트워크가 연결된 상태가 아니라 연결은 종료된 상태이다.

그렇기 때문에, HTTP 통신의 특징은 다음과 같다.

  • 호스트의 요청에 다른 호스트가 응답하는 단방향 통신이다.
  • 요청을 한 호스트가 응답을 받은 후에는 연결이 종료되는 stateless 연결 방식이다.

결론

OSI 계층에서 4계층은 데이터를 전송하는 역할을 담당한다. 그래서 TCP를 이용하는 Socket 방식과 HTTP 모두 4계층의 관점에서는 같은 방식의 데이터 전송 프로토콜이다.

하지만 7계층인 응용 계층의 역할은 유저들에게 상황에 알맞은 방식의 네트워크 연결을 제공한다.

스트리밍이나 게임과 같이 실시간 데이터 송수신이 필요한 때는 양방향 연결, 웹과 같은 빠른 데이터 송수신이 필요할 때는 서버-클라이언트 방식의 단방향 연결이 필요하다.

이와 같은 상황에 맞춰, Socket 통신과 HTTP 통신은 유저에게 편리한 네트워크 통신을 제공한다.

profile
그냥 기록하는 블로그

0개의 댓글