UDP란
먼저 알아야 할 것 : 다중화와 역다중화
다중화는 데이터를 보내기 전에 모으는 것
역다중화는 데이터를 받아서 나눠서 애플리케이션에서 필요한 적절한 곳에 보내는 것.
한 컴퓨터에서 다른 컴퓨터로 데이터를 보낸다고 생각해보자.
트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않고 중간 통로인 소켓에게 전달하고, 받는다.
트랜스포트 계층은 애플리케이션에서 데이터를 받고 이 데이터를 조각조각 내서 세그먼트로 만들고 각 세그먼트에 헤더정보를 넣는다.
이 세그먼트들을 네트워크 계층으로 캡슐화 되서 전달된다.
이렇게 캡슐화해서 네트워크 계층으로 전달하는 과정을 '다중화' 라고 한다.
이제 네트워크 계층에서 이 데이터들을 받는 쪽 호스트로 보낸다.
여기서 보내는 데이터에는 출발지 포트번호, 목적지 포트번호, 보내고자 하는 데이터, 기타 헤더정보가 포함되어있는 상태 (TCP 의 경우 출발지,목적지 IP주소까지 포함됨)
이 세그먼트들 내부를 보면 소켓을 식별할 수 있도록 특정 필드를 가지고 있는데 이게 포트번호이다.
트랜스포트 계층 세그먼트를 포트번호와 헤더를 보고 적절한 소켓에 전달하는데 이 과정이 '역다중화' 이다.
UDP 프로토콜
등장 배경
IP같은 경우에는 host-host간의 연결만을 지원한다. 같은 IP를 사용하는 서버에서 음악이나 노래 등 여러 애플리케이션이 동작하게 된다면 메시지를 어디로 보내야 할 지 모른다. 그것을 해결하기 위해 PORT란 개념을 추가
UDP 특징
- 전송 계층의 통신 프로토콜의 하나 (TCP에 대비됨)
- 신뢰성이 낮은 프로토콜로써 완전성을 보증하지 않으나,
- 가상회선을 굳이 확립할 필요가 없고 유연하며 효율적 응용의 데이타 전송에 사용
- UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작한다.
- UDP는 다중화와 역다중화 기능과 간단한 오류 검사 기능을 제외하면 IP에 아무것도 추가하지 않음
1. 비연결성이고, 신뢰성이 없으며, 순서화되지 않은 Datagram 서비스 제공
- 메세지가 제대로 도착했는지 확인하지 않음 (확인응답 없음)
- 수신된 메세지의 순서를 맞추지 않음 (순서제어 없음)
- 흐름 제어를 위한 피드백을 제공하지 않음 (흐름제어 없음)
- checkSum 필드를 통한 최소한의 오류 검출을 제외한 특별한 오류 검출 및 제어 없음 (오류제어 거의 없음)
- UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
- 데이터그램단위로 전송
- 전송계층용 프로토콜 (논리적인 가상회선 연결이 필요없음)
- 비연결접속상태 하에서 통신 (연결 설정과 연결 상태가 없다.)
연결 자체가 없으므로 서버 소켓과 클라이언트 소켓의 구분이 없다.
소켓 대신 IP 기반으로 데이터 전송
서버와 클라이언트는 1대1 , 1대N, N대M 등으로 연결될 수 있다.
흐름제어가 없어서 패킷이 제대로 전송되었는지 오류가 없는지 확인 불가
2. 실시간 응용 및 멀티캐스팅 가능
- 빠른 요청과 응답이 필요한 실시간 응용에 적합
- 여러 다수 지점에 전송 가능
장점
TCP에 비해 속도가 빠르며 네트워크 부하가 적다
애플리케이션 레벨에서 사용자가 최적화할 수 있다. 포트를 이용해 타켓 애플리케이션에 전달 가능하다.
단점
신뢰성 있는 데이터의 전송을 보장하지는 못한다.
사용
신뢰성 보다 연속성이 중요한 서비스(실시간 서비스)에 사용된다.
TCP와 UDP 비교