본문 바로가기

PROGRAMMING/전산학 기초

UDP(User Datagram Protocol) 파헤치기

저번 포스팅에서 TCP를 알아보았다면 이번에는 UDP를 알아볼까 한다.

 

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)

: 인터넷 상에서 서로 정보를 주고 받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. 송신자는 수신자가 데이터를 받았는지 받지 않았는지 확인할 수 없고, 또한 확인할 필요도 없도록 만들어진 프로토콜이다.

 

* Datagram(데이터그램)

: 발신지와 수신지 컴퓨터 그리고 전송 네트워크 사이에서 이전의 데이터 교환과 관계없이 발신지로부터 수신지 컴퓨터로 배달되어지는 충분한 정보를 갖는 독립적인 데이터 실체.

이는 인터넷이 운반해야 할 메세지 단위인 패킷이라 봐도 무방하다.

 

 

UDP의 비신뢰성(unreliable)

: TCP는 메세지가 잘 보내졌는지 확인할 수 있지만 UDP는 이러한 어떠한 장치도 가지고 있지 않다. 따라서 UDP로 전송된 패킷은 순서가 뒤바뀔수도 있으며, 중간에 패킷이 손실될 수도 있다. 프로토콜 차원에서 패킷의 순서가 뒤바뀌었는지, 패킷이 손실되었는지 알 수 있는 방법은 없다. 이렇듯 UDP는 단순히 데이타그램 위주의 통신을 하기 때문에 데이타그램 지향 프로토콜이라고 불리우기도 한다.

 

UDP의 용도

첫번째, 음성 및 비디오를 위한 실시간 스트리밍 서비스이다. 음성서비스를 TCP로 할 경우의 문제점은 중간에 패킷이 빠질 경우 음성서비스가 중단된다는 점이다. 즉, 전화를 하다가 잡음이 생기면 바로 전화가 끊어져버리는 것과 마찬가지다. 따라서 통신 품질보다는 통신의 연속성이 더욱 중요시되는 곳에 유용하게 사용될 수 있다. (하지만 TCP로도 UDP처럼 구현할 수 있고 상당수의 서비스가 TCP로 서비스된다고 한다^^; 단순 특징을 설명한 것이다.)

 

두번째, 상당히 많은 패킷이 오고 가면서 별로 중요하지 않은 몇개의 데이터 손실 정도는 눈 감아줄 수 있는 곳에 사용된다. 예시로 starcraft의 배틀넷 서비스를 들 수 있다. 배틀넷은 수많은 유저가 접속해서 사용하는데 서비스의 모든 부분에 TCP를 사용하기엔 좀 느린 감이 있다. 그리고 게임을 할 때 서로 교환되는 수많은 패킷은 중요한 데이터가 아니기도 하고 게임의 흐름이 끊기면 안되기 대문에 UDP로 처리하는 것이 더 유리하다.

 

이 밖에도 UDP를 통신 프로토콜로 사용하는 서비스에는 DNS, SNMP, RIP 등이 있다.

 

* DNS(Domain Name System, 도메인 네임 시스템)

: 호스트의 도메인 이름을 호스트의 네트워크 주소로 바꾸거나 그 반대의 변환을 수행할 수 있도록 하기 위해 개발되었다. 특정 컴퓨터의 주소를 찾기 위해 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 식별 번호로 변환해준다.

 

* SNMP(Simple Network Management Protocol, 간이 망 관리 프로토콜)

: 네트워크 상의 각 호스트에서 정기적으로 여러가지 정보를 자동적으로 수집하여 네트워크 관리를 하기 위한 프로토콜로 UDP 상에 정의된 응용 계층 표준 프로토콜이다.

 

* RIP(Routing Information Protocol, 라우팅 정보 규약)

: UDP/IP 상에서 동작하는 라우팅 규약으로 경유하는 라우터의 대수에 따라 최단 경로를 동적으로 결정하는 거리 벡터 알고리즘을 사용한다.

 

* Router(라우터)

: 서로 다른 네트워크를 연결하여 정보를 주고 받을 때 송신 정보에 담긴 수신처의 주소를 읽고 가장 적절한 통신 통로를 이용하여 다른 통신망으로 전송하는 장치.

 

 

TCP와 UDP의 비교

 

 

 TCP

(Transmission Control Protocol)

 UDP

(User Datagram Protocol)

연결 지향 

연결 지향

(TCP 3 Way Handshake 사용) 

비연결 지향 

 전송 속도 & 쓰임

UDP에 비해 느림

(시간에 비결정적인 케이스에 사용) 

빠름

(게임, 데이터의 빠른 전송이 필요한 곳, 한 번에 작은 양의 데이터를 전송하는 애플리케이션에 사용) 

 에러 체크 & 신뢰성

에러 체크함

(송신처에서 보낸 그대로의 데이터를 수신 가능함)

에러 체크 안 함

(송신처에서 보낸 데이터의 완전한 수신을 보장하지 않음)

 헤더 사이즈

20 바이트

8 바이트

 사용되는 포트

 HTTP, HTTPs, FTP, SMTP 등

DNS, TFTP, SNMP, RIP 등 

 흐름 제어

흐름제어 함 

흐름제어를 위한 옵션이 따로 없음 

출처 : 1(http://qhanq.egloos.com/5052858)

 


 

사실 TCP/IP라는 용어만 많이 들어서 UDP라는 용어가 있다는 것을 이번 기회에 처음 알았다. 한 프로그램에 프로토콜을 굳이 통일하지 않아도 된다면 각자의 용도에 맞게 쓰이면 더 효율적인 프로그램이 되겠지. 그런데 개념을 찾다보면 예전엔 UDP로 처리했지만 현재는 TCP로 처리하고 있는 몇몇 개념이 있는 듯 하다. UDP가 점점 쓰이지 않는 추세인가?...이 점이 의문이다.

 

[참조]

 

UDP에 관한 더 자세한 원문을 보려면?

- UDP 소켓 프로그래밍