도전하는 린치핀 2024. 7. 17. 01:29

0. 배경

0-1. 전송 계층

전송 계층은 애플리케이션(end point)간 신뢰성 있는 데이터 전송을 담당하는 계층이다.

  • 신뢰성 : 데이터를 순차적이고 안정적인 전달하는 것을 의미
  • 전송 : 포트 번호에 해당하는 프로세스에 (신뢰성 있는)데이터를 전달하는 것을 의미

0-2. 전송 계층의 필요성

전송 계층이 없다면 아래와 같은 여러 문제가 발생하기 때문에 전송 계층은 데이터 송수신에서 필수적이다.

  • 데이터의 순차 전송이 원할하지 않고, 데이터 손실이 발생할 수 있다.
  • 흐름 문제가 발생 (Flow) : 송수신간의 데이터 처리 속도 차이로 인해 발생
    • 송신측의 전송량이 수신측의 처리량보다 많은 경우, 처리할 수 있는 데이터량을 초과했을 때 손실될 수 있기 때문에 누락하는 문제가 발생한다.
  • 혼잡 문제 발생 (Congestion) : 네트워크의 데이터 처리 속도 차이로 인해 발생한다.
    • 송신자가 데이터를 전송할 때, 네트워크를 거쳐 수신자에게 전송된다.
    • 이때, 데이터가 경유하는 라우터에 따라 네트워크 상태가 달라지는데 만약 송신자가 과도하게 데이터를 보내면 네트워크가 혼잡해서 제대로된 데이터 전송이 불가능하다.

 

1. TCP

TCP는 전송 계층 프로토콜 중 하나로 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜이다.

TCP의 연결 및 해제 방식은 아래의 포스팅을 참고하자.

 

[Network] TCP 연결 및 해제 과정 (3 way-handshake & 4 way-handshake)

0. TCPTCP는 전송 계층(Transport Layer)에서 사용되는 프로토콜이다.장치들 사이에 논리적인 접속을 성립(Establish)하기 위하여 연결을 설정높은 신뢰성을 제공하고 연결 지향성 서비스를 제공한다.정

rnclf1005.tistory.com

  • 요약하자면 TCP는 Connection 연결(3 way-handshake)을 통해 양방향 통신을 통해 데이터를 주고 받는다.
  • 또한, 데이터의 순차 전송을 보장하며 흐름 제어, 혼잡 제어가 가능하다.
  • TCP는 세그먼트 단위로 데이터를 전송하고 Application 단에서 받은 데이터를 잘라 tcp header와 data를 합친 것을 세그먼트라 한다.

 

1-1. TCP 단점

  • TCP는 전송된 데이터의 신뢰성을 보장하지만, 매번 Connection을 연결해서 시간 손실이 발생한다.
  • 또한, 패킷을 조금만 손실해도 재전송이 필요해 비효율적일 수 있다.

 

2. UDP(User Datagram)

UDP는 User Datagram Protocol의 약자로 전송 계층 프로토콜 중 하나이다.

UDP는 TCP 보다 신뢰성이 떨어지지만 일반적으로 TCP보다 빠른 프로토콜이다.

2-1. UDP 특징

  • 순차 전송 X / 흐름 제어 X / 혼잡 제어 X
  • 비연결형 : 연결을 끊은 채 단방향으로 통신하는 Connectionless
  • error detection : 제어 기능 없이 checksum에서 데이터의 조작 등 에러만 검출한다.
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용한다. ex) 영상 스트리밍

2-2. UDP의 데이터 전송 방식

 

  • UDP는 비연결형 서비스를 이용하여 데이터그램을 전송한다.
  • 각 데이터그램은 전송 과정에서 독립적으로 중개되고 데이터그램이 목적지까지 도착할 수 있도록 최선을 다하지만 반드시 목적지에 도착하는 것을 보장하지 않는다.
  • 또한, 슬라이딩 윈도우 프로토콜 같은 흐름제어 기법이 없어 버퍼 오버플로에 의한 데이터 분실 오류가 발생할 수 있다.
  • 이러한 이유로 UDP를 사용해 데이터그램을 전송할 때는 오류 발생 가능성을 항상 고려해야 한다.

발생할 수 있는 오류는 1)데이터가 목적지에 도착하지 못하는 데이터그램 분실2)데이터 그램 도착 순서가 바뀌는 도착 순서 변경이 있다.

 

2-3. UDP에서의 데이터그램 분실

 

  • 송신 프로세스가 전송한 데이터그램 네개가 첫번째 라우터에서 두번째 라우터로 전송되는 과정이다.
  • 이때, 3번 데이터그램에 오류가 발생하여 다음 라우터에 도착하지 못한다.
  • UDP는 분실 오류를 복구하는 기능을 수행하지 않으므로, 수신 프로세스에는 1, 2, 4번 데이터그램만 도착한다.
  • UDP에서의 데이터그램 분실 오류는 상위 계층 스스로 데이터 분실을 복구해야 한다.

즉, UDP에서의 데이터그램 분실 오류는 상위 계층 스스로 데이터 분실을 확인하는 기능을 수행하여 복구해야 한다.

 

 

2-4. UDP에서의 데이터그램 도착 순서 변경

  • UDP는 각 데이터그램을 개별 전송 경로를 선택하여 전송한다.
  • 따라서 위의 그림처럼 1, 2번 / 3, 4번 데이터 그램이 나뉘어 전송된다.
  • 또한, 각 경로에서 데이터를 얼마나 빠르게 전송할 수 있는지도 예측할 수 없다.
  • 위의 그림에서 3, 4번이 먼저 도착하여 최종 수신자에게 3, 4, 1, 2 순서로 변경되었다.

즉, 데이터의 순서 번호 기능이 없기 때문에 도착 순서 변경 오류를 해결하려면 UDP를 사용하는 응용 프로그램의 내부에 순서 번호 기능이 구현되어야 한다.

 

2-5. UDP 사용 이유

 

UDP는 TCP보다 신뢰성이 떨어져 일반 응용 프로그래머들 사이에서는 덜 선호되지만 프로토콜을 처리하는 기능이 작아 데이터 처리가 빠르므로 데이터 전송 시간에 민감한 응용 환경에서는 UDP를 사용하는 것이 유리하다.