UDP 통신이란?
- User Datagram Protocol 의 약자로 데이터를 데이터그램 단위로 처리하는 프로토콜이다.
- 비연결형, 신뢰성 없는 전송 프로토콜이다.
- 데이터그램 단위로 쪼개면서 전송을 해야하기 때문에 전송 계층에 속한다.
- 전송 계층에서 사용하는 프로토콜이다.
TCP/UDP 는 왜 나오게 되었는가?
1. IP 의 역할은 Host to Host (장치 to 장치) 만을 지원한다. 장치에서 장치로 이동은 IP 로 해결되지만, 하나의 장비 안에서 수많은 프로그램들이 통신을 할 경우에는 IP 만으로는 한계가 있다.
2. 또한 IP 에서 오류가 발생한다면 ICMP 에서 알려준다. 하지만 ICMP 는 알려주기만 할 뿐, 대처를 못 하기 때문에 IP 보다 위에서 처리를 해줘야 한다.
* ICMP : 인터넷 제어 메시지 프로토콜로 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송받는데 쓰인다.
3. 1번을 해결하기 위하여 포트 번호가 나오게 됐고, 2번을 해결하기 위해 상위 프로토콜인 TCP 와 UDP 가 나오게 되었다.
그렇다면 TCP 와 UDP가 어떻게 오류를 해결하는가?
* TCP
데이터의 분실, 중복, 순서가 뒤바뀜 등을 자동으로 보정해줘서 송수신 데이터의 정확한 전달을 할 수 있도록 해준다.
* UDP
IP 가 제공하는 정도의 수준만을 제공하는 간단한 IP 상위 계층의 프로토콜 이다.
TCP 와는 다르게 에러가 날 수도 있고, 재전송이나 순서가 뒤바뀔 수도 있어서 이 경우 어플리케이션에서 처리하는 번거로움이 존재한다.
UDP 는 왜 사용할까?
- UDP 의 결정적인 장점은 데이터의 신속성이다. 데이터의 처리가 TCP 보다 빠르다.
- 주로 실시간 방송과 온라인 게임에서 사용된다. 네트워크 환경이 안 좋을 때, 끊기는 현상을 생각하면 된다.
* DNS(Domain Name Service) 에서 UDP 를 사용하는 이유
- Request 의 양이 작음 -> UDP Request 에 담길 수 있다.
- 3 way handshaking 으로 연결을 유지할 필요가 없어졌다.(오버헤드 발생)
- Request 에 대한 손실은 응용 계층에서 제어가 가능하다.
- DNS : port 53번
- But, TCP 를 사용할 때가 있다, 크기가 512bytes(UDP 제한) 가 넘을 때, TCP 를 사용해야 한다.
UDP Header
Source port : 시작 포트
Destination port : 도착지 포트
Length : 길이
Checksum : 오류 검출
- 중복 검사의 한 형태로, 오류 정정을 통해 공간이나 시간 속에서 송신된 자료의 무결성을 보호하는 단순한 방법이다.
이렇게 간단하므로, TCP 보다 용량이 가볍고 송신 속도가 빠르게 작동된다.
그러나 확인 응답을 못하므로 TCP 보다 신뢰도가 떨어진다.
UDP 는 비연결성, TCP 는 연결성으로 정의할 수 있다.
DNS 가 UDP 통신 프로토콜을 사용한다.
DNS 는 데이터를 교환하는 경우 UDP 를 사용한다.
이때, TCP 를 사용하게 되면 데이터를 송신할 때까지 세션 확립을 위한 처리를 하고, 송신한 데이터가 수신 되었는지 점검하는 과정이 필요하므로 Protocol overhead 가 UDP 에 비해서 크다.
* DNS 는 응용 계층의 프로토콜 이다.
모든 응용 계층 프로토콜은 TCP, UDP 중 하나의 전송 계층 프로토콜을 사용해야 한다.
(TCP 는 reliable, UDP 는 not reliable 이다.)
DNS 는 reliable 해야할 것 같은데 왜 UDP 를 사용할까?
DNS 가 UDP 를 사용하는 이유
1. TCP 가 3 way handshake 를 사용하는 반면, UDP 는 connection 을 유지할 필요가 없다.
2. DNS request 는 UDP segment 에 꼭 들어갈 정도로 작다.
- DNS query 는 single UDP request 와 서버로부터의 single UDP reply 로 구성되어 있다.
3. UDP 는 not reliable 이나, reliability 는 응용 계층에 추가될 수 있다.(Timeout 추가나, resend 작업을 통해)
DNS 는 UDP 를 53번 포트에서 사용한다.
* 그러나 TCP 를 사용하는 경우 또한 존재한다.
Zone transfer 를 사용해야 하는 경우에는 TCP 를 사용해야 한다.
(Zone transfer : DNS 서버 간의 요청을 주고 받을 때 사용하는 transfer)
만약에 데이터가 512bytes 를 넘거나, 응답을 못 받은 경우 TCP로 한다.
참고 : https://gyoogle.dev/blog/
👨🏻💻 Tech Interview
gyoogle.dev
'이론 > 네트워크' 카테고리의 다른 글
네트워크 - HTTP & HTTPS (0) | 2022.01.29 |
---|---|
네트워크 - 대칭키 & 공개키 (0) | 2022.01.29 |
네트워크 - TCP/IP (흐름제어/혼잡제어) (0) | 2022.01.29 |
네트워크 - TCP 3 & 4 way handshake (0) | 2022.01.29 |
네트워크 - OSI 7계층 (0) | 2022.01.29 |