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

UDP

해시넷
dlensk99 (토론 | 기여)님의 2021년 2월 5일 (금) 11:28 판
이동: 둘러보기, 검색

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

흐름제어와 오류제어

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

캡슐화와 역 캡슐화

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

다중화와 역 다중화

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

큐잉

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

프로토콜 헤더 구조

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

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][9]

활용 사례

도메인 네임 시스템

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

실시간 스트림 영상

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


각주

  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. 6.0 6.1 6.2 6.3 6.4 6.5 조이스 St.Joyce.Dev, 〈(프로토콜) UDP Header / UDP 동작〉, 《티스토리》, 2018-10-30
  7. Steven, 〈(이해하기)TCP와 UDP(TCP vs UDP)〉, 《STEVEN J. LEE》, 2020-06-29
  8. UDP(User Datagram Protocol)란? (기본 개념과 설명)〉, 《티스토리》, 2018-11-26
  9. TCP와 UDP의 차이점〉, 《Gadget-info.com》
  10. 도메인 네임 시스템〉, 《위키백과》
  11. 3.3 비연결형 트랜스포트 : UDP〉, 《티스토리》, 2016-03-21
  12. 전송층 인터넷 프로토콜, UDP, TCP〉, 《김땡땡‘s blog》, 2018-12-10

참고자료

같이 보기


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