udp 통신
데이터를 데이터그램 단위로 처리하는 프로토콜이다.
- 비연결형, 신뢰성이 없는 전송 프로토콜중 하나이다.
- 데이터그램 단위로 데이터를 쪼개어 전송한다
- 전송 계층에서 사용하는 프로토콜이다.
데이터그램
독립적인 관계를 지니는 패킷이다.
- udp는 tcp와 다르게 연결을 위해 할당되는 논리적 경로가 없다. 그렇기에 각각의 패킷은 서로 독립적으로 각자 다른 경로로 전송되고, 독립적으로 처리된다.
tcp와 udp는 왜 나오게 되었을까?
IP는 host to host 만 지원하기에, 장치에서 장치로의 이동은 ip로 해결되지만, 하나의 장비 안에서 많은 프로그램들이 통신할 경우 ip만으로 한계가 있다
-> 포트 번호를 통해 이를 해결ip에서 오류가 발생하면 ICMP를 통해 이 오류를 알려준다.
하지만 오류에 대한 대처를 하지 못하기에 IP보다 윗단에서 오류를 처리해야하는 부담이 있다
-> 상위 프로토콜인 TCP와 UDP가 나오게 되었다.
tcp의 오류 해결 방법
데이터의 분실, 중복, 순서 뒤바뀜을 자동으로 보정하여
송수신 데이터의 정확한 전달을 할 수 있도록 해준다.
udp의 오류 해결 방법
ip가 제공하는 정도의 수준만 제공하는 간단한 ip 상위 계층의 프로토콜이다.
tcp와 다르게 에러가 발생할 수 있고, 재전송이나 순서가 뒤바뀔 수 있으므로 어플리케이션 단에서 이를 처리해야하는 부담이 있다.
udp를 왜 사용할까?
udp의 결정적 장점은 데이터의 신속성이다.
- 데이터 처리가 tcp보다 빠르다.
그렇기에 실시간 방송, 온라인 게임에서 사용된다.
(네트워크 환경이 안좋을 경우 끊기는 현상을 생각하면 된다)
udp header
source port : 송신자의 포트
destination port : 수신자의 포트
length : 길이
checksum : 오류 검출에 사용되는 정보
- 이처럼 udp header는 간단하기 때문에 tcp보다 용량이 가볍고 송신속도가 빠르다.
DNS 에서 udp를 사용한다. 그 이유는?
- udp segment에 담을 수 있을 정도로 dns request 의 양이 작다.
- 3 way handshaking을 통해 연결을 유지할 필요가 없다
(만약 이를 통해 유지하게 되면 오버헤드 발생)- udp의 비신뢰성으로 인한 request의 손실이 발생할 수 있지만
request에 대한 손실은 응용계층에서 제어할 수 있다. (timeout 추가 , resend 작업)- 만약 request의 크기가 512바이트보다 커지면 tcp를 사용해야한다.
(udp의 header 제한보다 크기 때문)- dns는 udp를 53번 포트에서 사용한다.
zone transfer
zone transfer를 사용해야하는 경우 dns에서 tcp를 사용해야한다.
- zone transfer : dns서버 간에 요청을 주고받을 때 사용하는 transfer이다.
- 전송 데이터의 크기가 512byte가 넘어갈 경우나, 응답을 받지 못할 경우 이때는 udp가 아닌 tcp를 사용한다.