[Network] UDP(User Datagram Protocol)

Hoeon·2024년 7월 15일

0. 배경

0.1 전송 계층

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

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

0.2 전송 계층의 필요성

전송계층이 없다면?

  1. 데이터의 순차 전송이 원할하지 않다.

  2. 흐름 문제 (Flow)
    원인 : 송수신자간의 데이터 처리 속도 차이
    송신측의 전송량이 수신측의 처리량보다 많은 경우, 처리할 수 있는 데이터량을 초과했을 때 손실될 수 있기 때문에 누락하는 문제가 발생.

  3. 혼잡 문제 (Congestion)
    원인 : 네트워크의 데이터 처리속도.
    송신자가 데이터를 전송할 때, 네트워크를 거쳐 수신자에게 전송된다. 이때 데이터가 경유하는 라우터에 따라 네트워크 상태가 달라진다. 만약, 송신자가 과도하게 데이터를 보내면 네트워크가 혼잡해서 제대로된 전송이 불가능

-> 데이터의 손실 발생

0.3 TCP의 등장

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

Connection 연결 (3 way-handshake) - 양방향 통신
데이터의 순차 전송을 보장.
흐름 제어, 혼잡 제어, error detection

TCP 세그먼트 단위로 데이터를 처리한다.
Application단에서 받은 데이터를 잘라서 tcp header+data -> 세그먼트

포트번호로 전송을한다

0.4 TCP의 단점

전송의 신뢰성은 보장하지만, 매번 Connection을 연결해서 시간 손실 발생
패킷을 조금만 손실해도 재전송이 필요하다. 중요한 메일같은 건 이 과정이 장점이 될 수도 있지만, 조금의 손실로도 재전송할땐 비효율


1. UDP

User Datagram Protocol로 전송 계층 프로토콜 중 하나이다. TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜이다.

1.1 UDP 특징

  • 순차전송 x, 흐름제어 x, 혼잡제어 x
  • 비연결형 : connectionless, 3-way handshake 없음. 연결을 끊은채로 단방향으로 통신
  • error detection, 제어기능 없이 checksum에서 에러만 검출한다.
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용 ex)영상 스트리밍
  • User Datagram : UDP의 PDU(protocol data unit)

    세그먼트 = tcp 헤더 + 패킷(data)
    세그먼트를 udp에서는 데이터그램

1.2 UDP Header

UDP는 User Datagram형태로 데이터를 처리한다. Application단에서 데이터가 내려오면 UDP헤더를 추가해서 User Datagram을 만든다. 이때 TCP와 다르게 데이터는 쪼개지 않고 직접 application단에서 쪼개줘야한다.

각 필드의 의미는 다음과 같다.

  • Source Port / Destination Port (송신 포트 / 수신 포트) : 송수신 프로세스에 할당된 네트워크 포트번호이다.
  • Length(길이) : UDP 헤더를 포함한 UDP Datagram의 전체 크기. 단위는 바이트고, UDP 헤더의 크기가 8바이트므로 최솟값은 8이다.
  • Checksum(체크섬) : UDP 헤더와 데이터에 대한 체크섬 값을 제공하여 수신자가 Datagram 변형 오류를 감지할 수 있다.

1.3 UDP의 데이터 전송방식

UDP는 비연결형 서비스를 이용하여 데이터그램을 전송하며, 각 데이터그램은 전송 과정에서 독립적으로 중개되고 데이터그램이 목적지까지 도착할 수 있도록 최선을 다하지만 반드시 목적지에 도착하는 것을 보장하지 않는다.

또한, 슬라이딩 윈도우 프로토콜 같은 흐름 제어 기능도 없어 버퍼 오버플로에 의한 데이터 분실 오류가 발생할 수 있다.

이와 같은 이유로 UDP를 사용해 데이터그램을 전송할 때는 오류 발생 가능성을 항상 염두에 두어야 한다.

오류의 유형은

  • 데이터가 목적지에 도착하지 못하는 데이터그램 분실
  • 데이터그램 도착 순서가 바뀌는 도착 순서 변경

1.4 UDP에서의 데이터그램 분실

그림은 전송 과정에서 데이터그램을 분실하는 오류를 설명한다.

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

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

1.5 UDP에서의 데이터그램 도착 순서 변경

그림은 데이터그램의 전송 순서가 뒤바뀌어 수신 프로세스에 도착한 경우이다.

UDP 는 각 데이터그램을 개별 전송 경로를 선택하여 전송한다.
따라서 그림처럼 1번과 2번 데이터 그램은 아래쪽 경로로, 3번과 4번 데이터그램은 위쪽 경로로 전달될 수 있다. 또한, 각 경로에서 데이터를 얼마나 빠르게 전송할 수 있는지도 예측할 수 없다.
그림에서 위쪽 경로를 선택한 3, 4번 데이터그램이 수신 프로세스에 먼저 도착하여 최종적인 도착 순서가 3, 4, 1, 2번으로 변경되었다.

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

1.6 UDP를 왜 사용할까?

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

➡ 영상 스트리밍, 온라인 게임 환경

참고

업로드중..

profile
프론트엔드 개발자 준비생 •~•

0개의 댓글