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