글 작성자: 자바니또

개요

우리는 인터넷을 통해 쉽게 데이터를 전송하고 받는다. 또한 실시간으로 영상을 스트리밍 할 수도 있다. 어떻게 데이터를 원하는 서버로 정확히 전송할 수 있고 받을 수 있을까? 이번 포스팅에서는 서버와 클라이언트간의 통신이 어떻게 이루어지는지 강의를 통해 배운 내용을 담고자 한다. 

목차

  • 통신 프로토콜
  • IP : Internet Protocol
  • IP 의 한계
  • TCP : Transmission Control Protocol
  • UDP

통신 프로토콜

우리가 중고시장에서 서로 물건을 주고 받기로 할 때 약속해야 하는 것이 있다. 어디서 어떤 방식으로 물건을 전달하고 대가는 어떻게 지불할 것인지 정해야 한다. 인터넷을 통해 서버와 클라이언트가 데이터를 주고받을 때도 마찬가지다. 데이터를 어디서 보내는 것인지 어디로 보내는 것인지 클라이언트와 서버가 서로 약속을 해야한다. 이것을 Communication Protocol(통신 규약)이라 부른다.

컴퓨터는 데이터를 전송하기 위해 작은 조각으로 나누어 보내야 한다. 이 작은 데이터 조각에 목적지에 도달하기 위한 정보를 덧 붙인 것을 패킷이라 한다. 프로토콜마다 덧 붙이는 정보가 다르며 이 정보가 각 프로토콜의 특징으로 드러난다.

IP : Internet Protocol

클라이언트와 서버, 인터넷

클라이언트와 서버가 데이터를 주고 받기 위해서는 인터넷을 통해 수많은 노드를 거치게 된다. 노드는 IP를 가지는 기계장치는 모두 될 수 있으며 우리의 데스크탑도 노드라고 볼 수 있다. 

IP 패킷 정보

인터넷 프로토콜의 패킷에는 출발지 IP와 목적지 IP가 있다. 이를 통해 노드들을 탐색하며 목적지 IP를 찾아내어 데이터를 전송한다.

IP 의 한계

IP를 이용한 데이터 통신은 다음과 같은 분명한 한계가 있다.

1. 비연결성

  • 상대가 받을 수 있는지 없는지는 확인하지 않는다.
  • 연결되지 않은 상태에서 데이터를 보낸다.

2. 비신뢰성

  • 데이터를 보내고 잘 갔는지 확인하지 않는다.
  • 패킷이 소실되거나 순서대로 도착하지 않을 수 있다. (데이터의 의미가 사라진다.)
    • 노드를 탐색하며 데이터를 전송하는 방법이기 때문에 노드들의 상태에 영향을 받는다. 하나의 데이터에서 나온 여러 패킷들이 같은 경로로 전달되지 않을 수가 있고, 중간에 데이터가 소실될 수도 있다. 

3. 프로그램 구분 불가

  • 보통 하나의 서버에서 여러 프로그램을 구동하는데 IP 주소만으로는 서버까지는 전달 가능해서 그 안에서 어떤 프로그램에게 데이터를 전달해야하는지 알 수 없다. 

TCP : Transmission Controll Protocol

우리가 데이터를 서버로 보낼때 위에서부터 순서대로 계층을 거쳐 보내게 된다. "Hello, world!"라는 메시지를 서버에 보낸다고 하면 다음과 같은 순서로 전달된다.

  1. 프로그램이 "Hello, world!" 메시지를 생성한다. - 애플리케이션 계층
  2. Socket 라이브러리를 사용하여 OS 레이어로 보낸다. - 애플리케이션 계층
  3. OS는 TCP또는 UDP 정보를 생성하여 메시지 데이터에 포함시킨다. - 전송계층
  4. OS는 그 다음 IP 패킷을 생성하여 TCP 데이터를 포함시킨다. - 인터넷 계층
  5. LAN 카드로 인터넷을 통해 통신 - 네트워크 인터페이스 계층

TCP 프로토콜을 사용해서 인터넷계층까지 거쳐서 나온 패킷은 다음과 같은 모양을 하고 있다. 

TCP/IP 패킷 정보

초록색은 TCP정보, 노란색은 IP패킷 정보이다. TCP 정보와 IP 정보를 합쳐서 TCP/IP 패킷이라 부른다. TCP는 전송 제어 프로토콜이라는 의미 그대로 IP로 해결하지 못한 전송을 제어하는 프로토콜이며 다음과 같은 특징을 가진다.

1. 연결지향

  • 3 way handshake 로 클라이언트와 서버가 서로 준비되어있는 것을 확인한 후 데이터를 전송한다.
  • 클라이언트와 서버가 논리적으로 연결되어있다는 것을 보장한다.

2. 데이터 전달 보증

  • 데이터를 전달하고 잘 받았다는 응답을 기다린다. 

3. 순서 보장

  • 패킷 정보에 포함되어있는 순서대로 데이터가 전달되지 않을 시 서버에서 클라이언트에게 순서가 다른 부분부터 다시보내라는 응답을 한다. 

4. 프로그램 구분 가능

  • PORT번호를 통해 같은 IP주소 내에서 대상 프로그램을 식별할 수 있다. 

UDP : User Datagram Protocol

UDP는 IP 프로토콜과 거의 같다. PORT와 체크섬 정도의 데이터만 추가된다. 그렇기 때문에 프로토콜을 커스터마이징 할 때는 TCP 보다는 UDP가 적합하다. 

정리

  • TCP는 안전하고 신뢰할 수 있지만, 이를 위해 데이터의 크기가 커지고 속도가 비교적 느리다.
  • UDP는 안전하지 않지만 단순하고 속도가 빠르다.
  • TCP는 인터넷의 대부분에서 사용되고 있는 프로토콜이다. 그래서 커스터 마이징하기에 제약이 많이 따른다.
  • UDP는 기능이 별로 없어 커스터마이징하기 좋다. 

Reference

'Web' 카테고리의 다른 글

캐시(Cache) ?  (0) 2021.09.10
쿠키(Cookie) ?  (0) 2021.09.04
HTTP ?  (1) 2021.09.04
HTTP와 HTTPS (feat. 대칭키 암호화, 비대칭키 암호화)  (0) 2021.03.10