네트워크

[네트워크] UDP란?

취업 드가자잇 2024. 4. 7. 19:20

 

이전 글에서 HTTP 3.0은 UDP기반의 QUIC 프로토콜을 사용한다고 했다. 그리고 TCP통신에 대해서 다루면서도 TCP는 높은 신뢰성을 보장하지만 네트워크 지연이 발생할 수 있고, 구현이 더 어렵다는 단점이 있다고 했다. 이러한 TCP와는 대조적인 녀석이 있는데 이게 이번 글에서 다뤄볼 UDP이다. 

 

UDP

UDP또한 TCP와 마찬가지로 데이터를 세그먼트 단위로 전송한다는 측면에서는 같지만 그것 이외에는 상당 부분이 다르다

UDP의 특징은 다음과 같다

  1. 비연결 지향 (Connectionless)
    • UDP는 연결을 설정하지 않고 데이터를 전송하는 비연결 지향적인 프로토콜
  2. 신뢰성 없는 전송
    • 오류 검출은 제공되지만, 재전송이나 순서 보장은 지원하지 않는다
  3. 단순하고 경량
    • 연결 설정 및 유지에 필요한 오버헤드가 적다
  4. 높은 성능:
    • 연결 설정과 재전송 등의 기능이 없어서 빠른 전송이 가능하다

장점

  • 낮은 지연 시간: 연결 설정이 없고 간단한 헤더 구조를 가지고 있어 지연 시간이 낮다
  • 높은 성능: 오버헤드가 적어 빠른 데이터 전송이 가능하다

종합적으로, UDP는 TCP와 달리 별도의 연결 설정(ex. 3way handshake)도 필요하지 않으며 패킷을 전송할때 잘 보내기만 할뿐, 패킷이 제대로 보내졌는지, 어디 빠진 건 없는지는 알빠 아니라는 것이다.

이는 단점이지만 동시에 UDP의 장점이기도 하다.

왜냐하면 UDP는 별도의 연결 설정없이 그저 데이터를 보내는데 초점을 맞추기 때문에 TCP에 비해 훨씬 단순하며, 빠른 전송이 가능하기 때문이다.

즉, TCP와 UDP는 각각 장단점이 있기에 사용되는 맥락이 더 중요하다고 필자는 생각한다

 

UDP, TCP의 사용 예시

통신의 신뢰성을 보장하는 TCP는 그럼 어디에 사용될 수 있을까?

 

1. 웹 브라우징

대표적으로 웹 브라우저와 웹 서버 간의 통신에서 TCP는 HTTP 또는 HTTPS 요청과 응답을 전송하는 데 사용된다. 사용자가 웹사이트에 접속할 때, 웹 브라우저는 웹 서버에 TCP 연결을 통해 페이지 데이터, 이미지, 스타일시트 등을 요청하고, 서버는 이러한 요청에 응답하여 필요한 리소스를 전송한다. TCP를 이용함으로서 사용자에게 원활하고 신뢰성 있는 웹 서핑 경험을 제공하는 것이다.

2. 이메일 전송

또 다른 예시로 이메일 전송과 이메일 수신에 사용된다. 우리가 이메일을 보내거나 받을 때, 전송 과정에서 메시지가 손실되면 안되기에 TCP를 이용하여 메시지가 손실되지 않고 우리가 원하는 온전한 형태로 올바른 순서로 도착하도록 보장하는 것이다.

 

그렇다면 UDP는 어디에 사용될까?

 

1. 게임 서버

빠른, 실시간 통신이라고 하면 필자는 온라인 게임, 그 중에서 FPS게임이 가장 먼저 생각난다. 수 많은 유저가 정신없이 총질을 주고받는 것도 결국은 다 데이터 투성이기에 이러한 게임에는 빠르고 지연을 최소화할 수 있는 UDP방식이 어울릴것이다.

그리고 이에 관해 재밌는 예를 하나 소개해주고자 한다.

예를 들어, 좋지 못한 네트워크 환경에서 우리가 FPS게임을 할때, 상대방이 순간이동하거나, 난 상대가 안보이는데 상대방이 나를 먼저 발견했다거나 하는 문제를 겪어본적이 있을 것이다.

이런 것은 빠르고 가벼운 UDP방식을 사용하기 때문에 중간에 패킷이 소실되거나 뒤죽박죽이 되는 경우가 있기 때문이다. 

이런 단점을 보완하기 위해 데이터에 순서를 적거나 현재 시간을 적엇 코딩하기도 한다는데 그 이상은 잘 모르겠다...(공부할 거 넘 많)

그렇기에 여러분들의 잘못이라기보단 서버와 네트워크의 문제일 가능성이 높다 (물론 에임이슈, 및 숙련도 이슈 때문일수도 있지만...껄껄)

이는 유투브 채널 '코딩애플'님의 영상에 참조했다

내용이 상당히 흥미로우니 시간나면 한번 쯤 봐보시실 권장한다. 

https://youtu.be/YHswt4VCeJs?si=1tAte3pl8h_EzZiK

 

2. 실시간 스트리밍 

또 다른 빠른, 실시간 통신의 대표적인 예시는 실시간 스트리밍이 있다. UDP는 지연시간이 낮고 데이터를 가능한 빠르게 전송할 수 있기에 스트리밍에 사용시 지연시간을 최소화할 수 있다. 또한, TCP에 비해 전송의 신뢰성을 보장하지는 않지만 이또한 실시간 스트리밍에서는 큰 단점이 되지 않을 수 있다. 예를 들어, 비디오 스트리밍 중 일부 패킷이 손실되더라도, 재전송을 기다리는 것보다는 다음 패킷을 계속 전송하여 전체 스트림의 흐름을 유지하는 것이 사용자의 경험 측면에서는 더 좋을 수 있다. 또한, UDP는 비연결 지향적이고, 별도의 연결 설정이 필요없기에 서버가 동시에 많은 클라이언트에게 데이터를 전송할 때 관리하기 더 용이할것이다. 그런 측면에서 UDP는 다수의 사용자에게 동시에 스트리밍 서비스를 제공하는데 적합할 수 있다.

 

여담) 공부를 하며 느끼는 것은 완벽한 기술은 없는 것 같다는 것이다. 기술은 각각 장단점이 있으며 그러한 기술을 어떠한 맥락에서 적절히 사용할지에 대해 고민하는 것이 개발자의 핵심 역량 중 하나인 것 같다고 느낀다

 

 

넷플릭스는 UDP를 사용할까? (참고)

https://www.geeksforgeeks.org/why-does-netflix-use-tcp-but-not-udp-for-streaming-video/