네트워크 - 왜 신뢰성있는 TCP를 두고 UDP를 사용하는걸까요?

업데이트:

UDP를 사용하는 이유

TCP와 UDP

우리는 통신을 할 때 주로 TCP 프로토콜을 사용합니다. TCP연결형 서비스를 지원하는 전송계층 프로토콜로, 신뢰성 있는 데이터 전달과 흐름제어 및 혼잡제어 등을 제공합니다. 바로 이러한 높은 신뢰성 때문에 인터넷 환경의 기본이 되었고 현재 많은 사람들이 사용하고 있습니다.

UDP비연결형 서비스를 지원하는 전송계층 프로토콜입니다. 즉, 인터넷상에서 서로 데이터를 주고받을 때, 데이터를 보낸다는 신호나 받는다는 신호의 절차를 거치치 않고, 보내는 쪽에서 일방적으로 데이터를 전송합니다. 따라서 UDP는 신뢰성을 보장하지 않습니다. 설명만 보아서는 UDP는 사용 이유가 없어 보입니다. 그러면 UDP가 어디에 사용되는지, 왜 사용되는지 알아보도록 하겠습니다.


UDP

UDP는 실제로 멀티미디어 스트리밍 애플리케이션, 인터넷 전화 애플리케이션과 같은 실시간으로 데이터가 오고 가는 서비스에서 많이 사용됩니다. 또한 온라인 게임에서도 UDP가 TCP 대신 많이 사용됩니다. 그럼 왜 신뢰성 있는 TCP를 사용하지 UDP를 사용할까요? 그 이유를 알기 위해선 TCP 프로토콜에서 어떻게 통신이 이루어지는지 알아야 합니다.

TCP 방식의 장단점

TCP는 우선 Handshake 방식으로 데이터를 송/수신합니다. 예를 들어, TCP에서는 송신자가 데이터를 수신자에게 전송했을 경우, 항상 수신자가 데이터를 제대로 수신했는지 확인해야합니다. 또한 여기에서 에러가 발생하지는 않았는지, 그리고 수신자의 수신 속도에 비해 송신하는 데이터의 전송 속도가 너무 빠르지는 않는지(흐름 제어), 네트워크가 혼잡하지는 않는지(혼잡제어) 확인을 합니다. 이러한 서비스를 제공하기 때문에 TCP는 높은 신뢰성을 보장할 수 있습니다.

하지만 이러한 TCP 프로토콜의 처리방식은 높은 오버헤드를 가질 수 있습니다. 전송하는 데이터의 헤더 사이즈도 커질 뿐만 아니라, 만약 전송이 되지 않으면 다시 재전송 해야 하는 추가적인 동작이 필요합니다. 이러한 신뢰성 있는 데이터 송/수신 방식에서 신뢰성 보장을 줄이고 오버헤드를 감소시켜 성능을 향상시킨 것이 바로 UDP 통신 프로토콜입니다.


UDP 사용 이유

이전 단락의 마지막 문장에서 보았듯이, UDP 통신 프로토콜은 신뢰성을 보장하지는 않지만 TCP에 비하여 빠른 전송 속도를 제공합니다. UDP는 비연결을 지향하기 때문에 데이터를 재전송할 필요도 DJQTRH, 흐름 제어나 에러 체크도 항상 필요로 하지 않습니다. 그로 인하여 전송에 필요한 헤더 사이즈도 줄어들게 되고 결과적으로 데이터 송/수신 과정이 매우 빨라집니다. 이러한 이유들 때문에 신뢰성 보장보다 연속성과 성능이 더욱 중요시되는 서비스에서는 바로 UDP가 사용되는 것입니다.


UDP 사용 분야

처음에 언급했듯이, 실시간으로 데이터를 송/수신해야 하는 서비스에서는 주로 UDP를 사용합니다. 실제로 UDP를 사용해야하는 분야의 예시는 다음과 같습니다.

  • 인터넷 전화는 전송이 실패하면 재전송을 위한 지연시간이 소요됩니다. 따라서 송신자와 수신자 간의 싱크가 맞지 않게 되어 원활한 상호간의 의사 전달이 불가능합니다.
  • 온라인 게임은 단 1초의 지연시간이 발생하여도 실제로 서비스 이용자에게 굉장한 불쾌감을 줍니다. 또한 이러한 지연이 점점 커지게 되면 계속해서 다시 렌더링을 해주어야 하며 올바른 연결이 이루어지지 않을 수 있습니다.
  • 멀티미디어 스트리밍 또한 싱크가 맞지 않음으로 인해서 많은 문제점이 발생할 수 있고 전송이 원활하게 되지 않으면 연속적인 재생 서비스를 제공받지 못할 수 있습니다.

위에서 설명한 이러한 서비스들 이외에도 많은 곳에 UDP 프로토콜이 사용되고 있습니다. 실제로 성능과 연속성이 중요하면서, 별로 중요하지 않은 데이터 손실은 감안할 수 있는 서비스를 또 다른 예로 들 수 있습니다.

댓글남기기