UDP : User Datagrams protocol / RFC 768표준안
네트워크 계층 중 Transport에 해당된다.
UDP는 Datagram으로 알려진 단문 메세지를 전달하는데 사용된다.
말 그대로 메세지를 전달하는 일만 하고 혼잡 제어 등의 부가적인 기능은 제공하지 않는다.
추가로 TCP와 달리 연결 설정 단계가 없기 때문에 센더와 리시버간 상호 합의 없이 데이터를 전송한다.
예로 집배원이 우편함에 우편물을 놓고 가는 우편 서비스를 생각하면 편하다.
그렇기 때문에 UDP의 Segment(패킷) 헤더는 매우 간단하다.
source port | destination port |
---|---|
length | checksum |
이러한 UDP는 다음과 같은 특징을 갖는다.
연결 설정을 하지 않는 비연결성이라는 점이 TCP와 가장 큰 차이점이다.
UDP의 장점은 가벼운 세그먼트와 데이터 전송만을 하기에 매우 빠르다는 것이다.
따라서 부가적인 기능이 필요 없고 빠른 속도를 원하는 곳에서 사용이 된다.
대표적으로 다음과 같은 곳에서 사용이 된다.
즉, UDP를 사용하는 이유를 정리하면 다음과 같다.
연결 설정 단계가 없기 때문에 해제 또한 진행하지 않아 딜레이가 없고 송수신간 상태 정보 관리에 대한 부담이 없다. 그리고 segment header의 사이즈가 작고 segment가 버려지면 그냥 버리고 지나가기 때문에 속도가 빠르다.
UDP의 Checksum Field는 segment에서 오류를 찾는 것이 목적이다.
송신자는 segment의 checksum을 계산하고 checksum field에 넣어 보낸다.
수신자는 수신한 segment의 checksum을 계산하고 checksum field의 값과 비교한다.
값이 다르면 전송 과정에서 데이터의 손실 혹은 오류가 발생한 것이다.
하지만 UDP에서는 오류를 발견하여도 그냥 지나간다.
그럼 checksum값은 어떻게 계산하는가?
이렇게 오류를 발견할 수 있지만 매우 낮은 확률로 오류가 발생 했음에도 같은 checksum이 계산되어 발견하지 못하는 경우도 존재한다.
이런 오류까지 발견하고 싶다면 상위층인 Application layer에서 처리해야 한다.
그럼 UDP는 신뢰성을 절대 제공하지 못하는 것 일까?
UDP의 상위층인 Application layer에서 처리를 하면 가능하다.
UDP의 상위층에서 신뢰성을 제공하는 방법은 Application layer에서 데이터의 손실과 오류 등을 수정하여 다시 제공하면 된다.
Application layer에서 신뢰성을 제공하는 방법은 RDT(Reliable Data Transfer)와 Pineline Protocols(슬라이딩 기법)이 있으며, 해당 부분에 대한 내용은 추가적으로 정리할 계획이다.