검수요청.png검수요청.png

UDP

위키원
이동: 둘러보기, 검색

UDP(유디피)는 "User Datagram Protocol"의 약자로서, 인터넷을 통해 데이터를 보낼 수 있는 표준 통신 프로토콜이다. 한국어로 번역하면, 사용자 데이터 그램 프로토콜이다. TCP가 전화와 비슷하다면, UDP는 일방적으로 보내는 소포와 비슷하다.

개요

TCP/IP 프로토콜 중 전송 계층의 통신 프로토콜의 하나이다. 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현되었다. 신뢰성이 낮은 프로토콜로, 완전성을 보장하지 않지만, 가상회선을 굳이 확립할 필요가 없고, 유연하며, 효율적인 응용의 데이터 전송에 적합하다. TCP는 데이터 신뢰성을 보장하기 위한 방식으로, 누락된 데이터를 모두 받기 위한 메커니즘으로 정의되어있다. 하지만 실시간 스트리밍 서비스에서는 걸림돌이 된다. 전체 영상에서 데이터 하나를 받지 못한 거로 인해 버퍼링으로 재생이 중단되고, 혼잡 제어를 위해 보내는 양도 조절하기 때문에 영상 데이터의 퀄리티에 문제가 생긴다. 이 문제를 해결하기 위해 UDP를 사용한다.[1][2]

특징

수신 측에 제대로 도착했는지 확인 여부가 보장되지 않아 비신뢰성 서비스이고, 빠른 요청과 응답이 필요한 실시간 응용에 적합하고, 전송속도에 제한이 없다. TCP처럼 16비트의 포트 번호를 사용하지만, 헤더는 고정크기의 8바이트만 사용하여 단순하다. 즉, 헤더 처리에 많은 시간과 노력을 요구하지 않는다.[3][4] 소켓 대신 IP를 기반으로 데이터를 전송하고, 1대 1, 1대 N, N대 M 등으로 연결될 수 있다. 즉, 멀티캐스팅이 가능하다. 데이터 그램 단위로 전송되며, 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.[5]

비연결성

UDP에 의해 보내진 각 사용자의 데이터 그램은 서로 독립적이다. 동일한 발신지 프로그램으로부터 동일한 목적지 프로그램으로 전송되어도 서로 다른 데이터 그램 사이에는 연관 관계가 없다. 사용자 데이터 그램에는 번호가 붙지 않고, 연결 설정과 연결 종료 과정이 없다. TCP처럼 핸드셰이킹(Handshaking) 과정이 없음으로 논리적인 가상 회선 연결이 필요 없다.[6][7]

흐름 제어와 오류 제어

UDP는 흐름 제어도 없고, 윈도 메커니즘도 없기 때문에, 수신 측에서 들어오는 메시지로 인해 오버플로우가 발생할 수 있다. 또한, UDP에는 검사 합을 제외하고 오류 제어 메커니즘이 없다. 즉, 메시지가 중복되거나 없어지면 송신자 측에서는 알 수 없다는 의미다. 수신자가 체크섬(Checksum)을 사용하여 오류가 있음을 발견할 경우, 사용자 데이터 그램은 폐기된다.[7]

캡슐화와 역 캡슐화

UDP를 통해 프로세스가 보낼 메시지가 있으면, 메시지와 한 쌍의 소켓 주소, 데이터의 길이를 보낸다. UDP는 데이터를 받은 후, 헤더를 추가하고, 소켓 주소들과 사용자 데이터 그램을 IP로 보낸다. IP는 자신의 헤더를 추가하는데, 이 헤더에서 프로토콜 필드(Protocol Field)의 값을 17로 설정하여 데이터가 UDP로부터 왔음을 알린다. 이후 데이터 링크 계층과 물리 계층을 거쳐 원격 시스템으로 보낸다. 이 과정을 캡슐화(Encapsulation) 라고 한다. 메시지가 목적지 호스트에 도착하면, 물리 계층과 데이터 링크 계층은 헤더와 트레일러들을 없앤 후, 데이터를 IP로 보낸다. IP 소프트웨어는 IP 단계의 검사를 수행하고, 오류가 없으면, 헤더를 없앤다. 그 후 송신자와 수신자의 IP 주소와 함께 사용자 데이터 그램을 UDP로 보낸다. UDP는 검사 합을 사용하여 사용자 데이터 그램 전체를 검사하고, 오류가 없으면, 헤더를 없애고, 송신자 소켓 주소와 함께 응용 데이터를 프로세스에 전달한다. 수신된 메시지에 대해 응답을 보낼 필요가 있으면, 송신자 소켓 주소를 프로세스에 전달한다. 이 과정을 역 캡슐화(Decapsulation)라고 한다.[7]

다중화와 역다중화

송신자 측에서 사용자 데이터 그램을 보내려고 하는 프로세스가 여러 개 있더라도 UDP는 하나만 있다. 이것이 다대일 관계이다. 포트 번호가 다른 프로세스들로부터 메시지를 수신하면, UDP는 헤더를 추가하고, IP로 사용자 데이터 그램을 보낸다. 수신자 측에서 사용자 데이터 그램을 받으려는 프로세스가 여러 개라도, UDP는 하나만 있다. 이것을 일대다 관계라고 한다. UDP는 IP로부터 사용자 데이터 그램을 받아 오류를 점검하고, 헤더를 없앤 다음 포트 번호에 따라 각 메시지를 적절한 프로세스로 보낸다.[7]

큐잉

클라이언트에서 프로세스가 시작될 때, 프로세스는 운영체제에 포트 번호를 요청한다. 구현에 따라 각 프로세스에 연계된 입력과 출력 가 같이 생성되기도 하고, 입력 큐만 생성되기도 한다. 프로세스가 여러 프로세스와 통신하기를 원해도, 하나의 포트 번호만을 배정받고, 결과적으로 하나의 입력 큐와 출력 큐를 받는다. 대부분 클라이언트가 획득한 큐는 임시 포트 번호로 식별되고, 프로세스가 수행되는 동안 큐도 동작하며, 프로세스가 종료되면 큐는 제거된다. 클라이언트의 출력 큐에는 오버플로우가 발생할 수 있다. 오버플로우가 발생하면 운영체제는 클라이언트 프로세스에 기다리기를 요청한다. 메시지가 클라이언트에 도착하면 UDP는 사용자 데이터 그램에 지정된 포트 번호에 대한 입력 큐가 생성되었는지 점검한다. 큐가 있으면 UDP는 수신된 사용자 데이터 그램을 큐의 끝에 추가한다. 큐가 없으면 사용자 데이터 그램을 폐기하고, 인터넷 제어 메시지 프로토콜(ICMP)에 "포트 도달불가(port unreachable)" 메시지를 서버로 보낼 것을 요청한다. 서버에 메시지가 도착하면 UDP는 사용자 데이터 그램의 목적지 포트 번호 필드에 지정된 포트 번호를 위한 입력 큐가 생성되었는지 점검한다. 큐가 있으면 UDP는 수신된 사용자 데이터 그램을 끝에 추가한다. 입력 큐가 없거나 오버플로우가 발생하면 UDP는 사용자 데이터 그램을 폐기한다. 그리고 인터넷 제어 메시지 프로토콜(ICMP)에 "포트 도달불가" 메시지를 클라이언트에 보낼 것을 요청한다.[7]

프로토콜 헤더 구조

소스 포트(Source Port)는 메시지를 보내는 측에서 통신을 위해 사용하는 포트 번호이고, 목적지 포트(Destination Port)는 목적지 포트 번호 즉, 메시지를 받는 측의 통신 포트 번호이다. 전체 길이(Total Length)는 헤더와 데이터를 합한 사용자 데이터 그램의 전체 길이를 정의한다. UDP 데이터 그램의 헤더인 8바이트부터 65507바이트 사이의 값이 된다. 체크섬(Checksum)은 헤더와 데이터를 모두 포함한 사용자 데이터 그램 전체에 대해 오류를 탐지하기 위해 사용된다.[7] 의사 헤더(Pseudo Header)는 IP 헤더와 UDP 헤더로부터 선택된 필드들로 구성된다. IP 헤더에서 참조되는 것은 소스(Source), 목적지 주소(Destination Address), 프로토콜(Protocol)이다. UDP 헤더에서 참조되는 것은 UDP 길이(UDP Length)이다. 8비트는 0으로 채워지고, Optional Pad는 32비트를 채우지 못하면, 0으로 빈 공간을 채운다. 이 헤더는 실제로 목적지로 전송되지 않고, UDP 체크섬 계산을 보조하기 위해 논리적으로 구성된 것이다.[8]

UDP 기반 프로토콜

RTP

실시간 전송 프로토콜(Real-time Transport Protocol)의 약자로, 인터넷상에서 다수의 종단 간에 비디오나 오디오 패킷의 실시간 전송을 지원하기 위해 표준화된 실시간 통신용 프로토콜이다. 주로 인터넷 방송이나 인터넷 영상회의 등에 사용된다. RTP는 데이터의 실시간 전달과 멀티캐스팅에 이용되는데, 특히 실시간 통신에 필수적인 시간 정보와 매체의 동기화 기능을 제공한다. 각 실시간 응용 프로그램이 라이브러리 형태로 구현되어 제공되며, 직접 RTP를 호출하여 이용한다. 또한, 2개의 프로토콜이 함께 사용된다. 기본적으로 RTP는 RTCP와 함께 사용된다. RTCP는 RTP 별도의 제어용 프로토콜이다. RTP 패킷 스트림 내에 포함되어 주기적으로 모든 세션 참가자들에게 전송함으로써 네트워크 회선 상에 전송지연과 대역폭 변화 등 상태 정보를 상위계층에 알려준다. RTP는 UDP에서 지원하지 못하는 기능들을 제공하는데, 시간 정보를 제공하고, 정보 매체의 동기화 기능이 있고, 각 프레임의 경계를 구분한다.[9]

HTTP/3

HTTP(Hyper Text Transfer Protocol)의 3번째 프로토콜이다. HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다. 클라이언트인 웹 브라우저가 이 프로토콜을 통해 서버로부터 웹 페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 되고, 이 정보가 출력 장치를 통해 사용자에게 나타나는 것이다. HTTP/3은 처음에는 HTTP-over-QUIC 이라는 이름을 가지고 있었다. 즉, QUIC 프로토콜 위에서 돌아가는 HTTP이다. 퀵(QUIC; Quick UDP Internet Connection)은 UDP를 사용하여 인터넷 연결을 하는 프로토콜이다.[10]

TFTP

UDP 상에서 이루어지는 간단한 파일 전송 프로토콜(Trivial File Transport Protocol)로, 클라이언트와 서버 간에 파일전송프로토콜(FTP)같이 복잡한 상호 동작이 필요하지 않은 응용에 많이 사용된다. 단순한 파일 전송 기능만 제공하고, 인증 기능은 제공하지 않는다. 또한, 사용자 이름 및 비밀번호 확인 없이 파일을 전송한다. 프로그램이 간결하고 규모가 작으며, 에러 제어 및 흐름 제어 방식으로는 정지 그리고 대기(Stop and Wait) 방식이 사용된다.[11] TFTP와 달리 파일전송프로토콜(FTP)은 TCP를 사용하여 신뢰성이 있고, 연결 지향적이다.[12]

TCP

전송 제어 프로토콜(Transmission Control Protocol)이다. 일대일 연결을 통해 안전하게 데이터를 교환한다.

비교

TCP는 연결지향형 프로토콜이고, UDP는 비 연결지향형 프로토콜이다. 패킷 교환방식에서 TCP는 가상회선 방식을 이용하지만, UDP는 데이터 그램 방식을 이용한다. 전송 순서를 보장해주는 TCP와 달리, UDP는 전송 순서가 바뀔 수 있다. 또한, TCP는 일대일 통신을 하고, 수신 여부를 확인하지만, UDP는 일대일, 다대일 다대다 통신을 하며, 수신 여부를 확인하지 않는다. 신뢰성은 TCP가 UDP보다 더 높지만, 속도는 UDP가 TCP보다 빠르다. TCP는 사용자의 요청이 있으면, 데이터 확인 및 전송, 재전송이 가능하다. 하지만 UDP는 수신 확인을 하지 않고, 손실된 데이터를 다시 전송하지 않는다. TCP와 UDP 모두 오류를 검사할 수 있지만, TCP만 흐름 제어와 정체를 모두 가지고 있어 오류를 수정할 수 있다. 따라서 신뢰성이 요구되는 애플리케이션에서는 TCP를 사용하고, 간단한 데이터를 빠른 속도로 전송하고자 하는 애플리케이션에는 UDP를 사용한다.[1][5][13]

응용

도메인 네임 시스템

DNS(Domain Name System) 라 불리는 도메인 네임 시스템은 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 반대의 변환을 수행할 수 있게 한다.[14] DNS 질의를 생성할 때, 질의 메시지를 작성하고 UDP에게 메시지를 넘긴다. 목적지 측에서 동작하는 UDP와 송신 측의 UDP는 핸드셰이킹(Handshaking)을 수행하지 않고, 메시지에 헤더 필드만 추가하여 최종 세그먼트를 네트워크 계층에 보낸다. 네트워크 계층은 UDP 세그먼트를 데이터 그램으로 캡슐화하고, 네임 서버에 데이터 그램을 송신한다. 이때 질의하는 호스트에서의 DNS 애플리케이션은 질의에 대한 응답을 기다린다. 만약 질의 호스트가 응답을 수신하지 못하면, 질의를 다른 네임 서버로 송신하거나 요청한 애플리케이션으로 응답할 수 없다고 통보한다.[15]

실시간 스트림 영상

스트림 영상은 긴 파일로 간주하고, 여러 개의 작은 부분으로 나누어져 각각 실시간으로 전송 또는 방송된다. 전송 계층이 손실되거나 훼손된 프레임을 재전송하게 되면, 전체 전송의 동기가 맞지 않게 되어, 시청자는 갑자기 빈 화면만 보게 될 것이고, 두 번째 전송이 도착하기 전까지 기다려야 한다. 즉, 지연에 민감하다. 하지만 화면 각각의 조그만 부분이 하나의 단일 사용자 데이터 그램으로 전송된다면, 수신 UDP는 훼손되거나 손실된 패킷을 무시하고 나머지 응용 프로그램으로 전달한다. 화면의 일부분이 아주 잠깐 공백이 되겠지만, 시청자들의 대부분은 알지 못한다. 즉, 손실에 둔감하다.[16]

VoIP

음성 인터넷 프로토콜(Voice over IP)의 약자로, 전화를 인터넷을 통해 사용할 수 있게 하는 기술이다. 음성신호를 압축하여 디지털 신호로 바꾸고, 이를 패킷 형태로 나누어 IP 기반 망을 통해서 전달하는 기술이다. VoIP는 인터넷과 다른 망과의 신호 및 음성 등 미디어 변환 등의 역할을 하는 게이트웨이와 서비스 관리, 게이트웨이와 단말기 등의 관리 및 호 인증 등을 하는 게이트 키퍼, IP 폰, IP 전화기, 소프트 폰 등의 VoIP 단말로 이루어져 있다. VoIP는 트래픽을 감소시키고, 패킷 기반의 음성 교환을 한다. 또한, 지능형 정보처리와 응용 서비스 다양화 등의 특징이 있다.[17]

각주

  1. 1.0 1.1 hidaehyunlee, 〈TCP와 UDP 차이를 자세히 알아보자〉, 《velog》, 2020-05-07
  2. (Network) IP, UDP, TCP란 무엇인가?〉, 《깃허브》, 2018-06-02
  3. UDP User Datagram Protocol〉, 《정보통신기술용어해설》
  4. TCP, UDP〉, 《티스토리》, 2016-11-06
  5. 5.0 5.1 망나니개발자, 〈(TCP/UDP) TCP와 UDP의 특징과 차이〉, 《티스토리》, 2017-11-05
  6. Steven, 〈(이해하기)TCP와 UDP(TCP vs UDP)〉, 《STEVEN J. LEE》, 2020-06-29
  7. 7.0 7.1 7.2 7.3 7.4 7.5 조이스 St.Joyce.Dev, 〈(프로토콜) UDP Header / UDP 동작〉, 《티스토리》, 2018-10-30
  8. UDP(User Datagram Protocol)란? (기본 개념과 설명)〉, 《티스토리》, 2018-11-26
  9. RTP Real-time Transport Protocol, Realtime Transport Protocol 실시간 전송 프로토콜, 실시간 수송 프로토콜〉, 《정보통신기술용어해설》
  10. HTTP/3는 왜 UDP를 선택한 것일까?〉, 《깃허브》, 2019-10-08
  11. TFTP, tftp Trivial File Transfer Protocol〉, 《정보통신기술용어해설》
  12. TFTP와 FTP 차이점〉, 《티스토리》, 2020-09-28
  13. TCP와 UDP의 차이점〉, 《Gadget-info.com》
  14. 도메인 네임 시스템〉, 《위키백과》
  15. 3.3 비연결형 트랜스포트 : UDP〉, 《티스토리》, 2016-03-21
  16. 전송층 인터넷 프로토콜, UDP, TCP〉, 《김땡땡‘s blog》, 2018-12-10
  17. VoIP Voice over IP, Voice over Internet Protocol, Internet Telephony 인터넷 텔레포니〉, 《정보통신기술용어해설》

참고자료

같이 보기


  검수요청.png검수요청.png 이 UDP 문서는 인터넷에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.