2021. 5. 10. 16:37ㆍCS 스터디
1. UDP 란?
User Datagram Protocol의 약자다. 데이터를 데이터그램 단위로 처리하며 UDP는 비연결형, 신뢰성 없는 전송 프로토콜이다.
OSI 7 계층에서 4 계층인 전송 계층에 해당하는 프로토콜이며 TCP , UDP가 연결형 통신, 비연결형 통신의 대표적인 프로토콜이다.
TCP는 신뢰성 있는 통신을 위해 패킷 손실, 패킷 순서 뒤바뀜, 네트워크 혼잡, 수신자가 overload 되는 등의 상황에 대하여 흐름 제어, 오류 제어, 혼잡 제어 등의 알고리즘을 사용한다.
그러나 UDP는 TCP의 기능이 없다. 즉 3 계층인 IP 가 제공하는 수준이 간단한 IP의 상위 계층 프로토콜이다. 따라서 TCP와는 다르게 에러가 생길 수도 있고 재전송이나 순서가 뒤바뀔 수도 있다.
그럼 UDP를 도대체 왜 쓰는가? -> 결정적으로 TCP에 비해서 데이터 전송의 신속성 때문이다. 실시간 스트리밍과 같은 방송 시스템이나 온라인 게임에 주로 사용된다. 네트워크 환경이 좋지 않을 경우 방송이 버퍼링 걸리거나 게임이 끊기는 이유는 UDP 통신이 데이터는 신속하게 보내지만 데이터가 완벽하게 전달되지 못하여 끊기거나 버퍼링이 생기는 것이다.
2. UDP 가 왜 필요한가?
먼저 3계층의 IP는 Host to Host(장치 to 장치) 만을 지원한다. 장치에서 장치로 이동하는 것은 논리 주소인 IP로 해결되지만 하나의 장비 안에서 수많은 프로그램이 통신하려면 IP로 한계가 있다.
이를 위해 포트 번호라는 것이 TCP, UDP에 존재한다. IP 주소를 통해 목적지 호스트(컴퓨터, 노트북, 휴대폰 등등)로 왔다고 한다면, 여기서 이 호스트 안에 있는 여러 프로그램(애플리케이션) 중 하나로 가야 하는데 이때 필요한 것이 포트 번호인 것이다. 즉 UDP는 1 : N 통신일때 쓰는 것이다. (TCP는 1:1 통신)
포트 번호는 0~65535번 까지 사용할 수 있고 0~1023번은 Well-known ports , 1024번부터 49151번은 Registered ports , 나머지는 Dynamic ports라고 부른다.
또한 IP에서는 오류가 발생하면 ICMP라고 해서 인터넷 제어 메시지 프로토콜이 운영체제로 오류 메시지를 보내주긴 하지만 해결할 수가 없기에 이보다 상위 계층 프로토콜인 TCP , UDP가 필요한 것이다.
3. TCP 와 UDP의 차이
TCP는 데이터 손실, 중복, 순서 뒤바뀜 현상을 보정하기 위해 흐름 제어, 오류 제어, 혼잡 제어 등의 알고리즘을 사용한다.
UDP는 TCP와 다르게 에러가 날 수도 있고 재전송이나 순서가 뒤바뀔 수도 있고 이 경우 애플리케이션 내부에서 따로 처리해줘야 하는 번거로움이 있다. 그래서 데이터 누락되어도 상관없는 음악, 동영상 스트리밍 서비스에 사용되는 것.
4. UDP 헤더


- Source Port / Destination Port (송신 포트 , 수신 포트)
è 송수신 프로세스에 할당된 네트워크 포트 번호. 호스트에서 실행되는 프로세스를 구분할 때 쓴다. (호스트는 IP 주소로 구분함)
- Length (길이)
è 프로토콜 헤더를 포함해서 전체 UDP 데이터그램의 크기를 의미한다. 단위는 바이트이고 UDP 헤더가 8바이트이므로 최소 8임.
- Checksum
è 수신자가 데이터그램이 변형 오류를 감지할 수 있도록 해준다. 아주 단순한 오류 검출 기능으로 수신자는 체크섬 값이 오류가 있다면 해당 데이터그램을 버린다. 다만 이것은 선택적 기능이므로 송신자가 체크섬 계산을 안 했으면 필드 값이 0이고 이경우 수신자는 오류 검출을 하지 않는다.
5. DNS와 UDP
DNS는
즉, www.naver.com이라는 도메인은 사람이 기억하기 쉽게 만든 이름이지만 실제로 인터넷 통신에서 이 주소를 찾아가려면 124.209.222.131과 같은 IP 주소로 변환해야 하는데 이게 바로 DNS가 하는 일이다.
이때 이름 해석을 할 때 데이터가 작은 것부터 하는 것이 원칙으로 데이터 송신/수신이 모두 UDP 하나의 패킷에서 처리 가능하도록 설계되어 있다. TCP는 데이터 송신하고 받기 위해 프로토콜 오버헤드가 너무 크기 때문에 UDP를 쓰는 것이 효율적이다.
'CS 스터디' 카테고리의 다른 글
| [CS : 네트워크] Blocking I/O & Non-Blocking I/O, Synchronous & Asynchronous (0) | 2021.05.20 |
|---|---|
| [CS : 네트워크] Load Balancing (0) | 2021.05.20 |
| [CS : 네크워크] HTTP & HTTPS (0) | 2021.05.10 |
| [CS : 네트워크] 대칭키 & 공개키 (0) | 2021.05.10 |
| [CS : 네트워크] OSI 7계층 (0) | 2021.05.06 |