UDP는 트랜스포트 계층 프로토콜이 할 수 있는 최소 기능으로 동작합니다.
1. 다중화/역다중화
2. 간단한 오류검사
이 두개 외에는 IP에 아무것도 추가하지 않습니다.
UDP는 핸드셰이크를 사용하지 않아서 비연결형이라고 합니다.
DNS는 UDP의 전형적인 예시입니다.
app계층의 프로세스로부터 메시지를 받고 다중화/역다중화 서비스에 필요한 출발지 포트 번호 필드와 목적지 포트 번호 필드를 첨부합니다.
출발지 호스트 IP 주소 , 목적지 호스트 IP 주소를 추가한 후에 네트워크 계층으로 넘깁니다.
네트워크 계층은 받은 segments를 IP 데이터그램으로 캡슐화하고,
segments를 수신 호스트에게 전달합니다.
segments가 수신 호스트에 도착한다면,
UDP는 세그먼트의 데이터를 해당하는 app계층의 프로세스로 전달하기 위해 목적지 포트 번호를 사용합니다.
무슨 데이터를 언제 보낼지에 대해서 애플리케이션 레벨에서 더 정교한 제어가 가능합니다.
애플리케이션 프로세스가 데이터를 UDP에 전달하자마자 UDP는 데이터를 UDP 세그먼트로 만들고, 그 세그먼트를 즉시 네트워크 계층으로 전달합니다.
( 저도 잘 와닿지는 않아서 예시를 찾으면 추가해 보겠습니다)
TCP는 데이터 전송을 시작하기 전에 세 방향 핸드셰이크(three-way handshake)
를 사용합니다.
반면에 UDP는 공식적인 사전준비 없이 전송합니다.
따라서 연결을 설정하기 위한 어떠한 지연도 없습니다.
이것이 DNS가 TCP가 아닌 UDP를 사용하는 이유입니다.
DNS가 TCP를 사용했다면 매우 느려질 것입니다.
TCP는 수신버퍼,송신버퍼,혼잡 제어 파라미터, 순서 번호, 확인은답 번호 등등을 알아야 하므로 연결상태를 유지하며 이러한 상태 정보들을 기록합니다.
반면에 UDP는 어떤 것도 기록하지 않습니다.
TCP는 세그먼트마다 20바이트의 헤더 오버헤드를 갖는데에 반해
UDP는 단지 8바이트의 오버헤드를 갖습니다.
UDP 체크섬은 오류검출을 위해 존재합니다.
즉, 세그먼트가 출발지에서 목적지로 도달했을 때 UDP세그먼트 안의 비트에 대한 변경사항이 있는지 검사하는 것입니다.
출발지와 목적지 사이의 모든 링크가 오류 검사를 제공한다는 보장이 없기 때문입니다.
세그먼트들이 정확하게 전송이 되어도 라우터에 저장될 때 비트오류가 발생할 수 있기 때문에 필요합니다.
TCP에 대해 자세하게 볼텐데 그 전에 신뢰적인 데이터 전송의 원리
를 먼저 아는 것이 TCP를 이해하는데에 도움이 된다고 해서 신뢰적인 데이터 전송의 원리
먼저 정리해 보겠습니다!
많은 도움이 되었습니다, 감사합니다.