저번 포스팅에서 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가 점점 쓰이지 않는 추세인가?...이 점이 의문이다.
'PROGRAMMING > 전산학 기초' 카테고리의 다른 글
바이트순서(byte order) 그리고 빅엔디안(Big-endian)과 리틀엔디안(Little-endian) (0) | 2014.04.11 |
---|---|
TCP(Transmission Control Protocol) 파헤치기 (126) | 2014.03.25 |
IP, subnet, gateway, DNS_기본 용어 정리 (126) | 2013.08.06 |