UDP는 Unreliable Connectionless하다. Unreliable하다는 것은 IP와 마찬가지로 Best effort 서비스라는 것이다. 즉, UDP를 사용하는 Segment들은 그냥 있는 그대로의 데이터를 보내기 때문에, 순서에 어긋나게 도착할 수도 있고 도중에 사라질 수도 있다.
또한, Connectionless하기 때문에 데이터를 보내기 전에 Connection을 형성하지 않고, congestion control? 그런 기능은 UDP에서 찾아볼 수 없다.
이런 UDP를 그러면 왜 사용하는걸까? 데이터가 도중에 사라질 수도 있으니까 좋은 게 아닌 것 같은데, 왜 쓰는거지?
예를 들어, 12시 뉴스가 있다고 생각해보자.
뉴스라는 것은 새로운 소식이나 정보를 수요자들에게 전달하는 것을 목적으로 한다. 이때, 11시 뉴스와 12시 뉴스가 있다고 할 때, 11시 뉴스가 리시버 입장에서 도착하지 않고 12시 뉴스만 도착한 상황이 발생할 수 있다.
그러나, 12시인 지금 기준에서는 11시 뉴스는 이미 과거의 정보, 즉 최신 정보가 아니다. 12시 뉴스가 최신 정보이기 때문에 이 뉴스만 취하고 11시 뉴스는 신경쓰지 않아도 된다.
또한, RIP 프로토콜의 경우도 예로 들 수 있다. RIP에서는 Routing Table Entry를 인접 라우터들에게 주기적으로 보내는데, 이 주기적으로 보내는 데이터 중 일부를 못 받아도 어차피 또 Broadcast해줄 것이기 때문에 한번 못 받는다고 큰일이 나진 않는다. 이렇게 주기적으로 보내는 데이터가 있을 때 사용할 수 있다.
아니면 아예 내부적으로 Error control이나 Flow control을 지원하고 있다면 Transport layer에서 이런 오버헤드를 감수하지 않아도 되니까 UDP를 사용해서 간단하게 Transport layer를 구현할 수 있다.
게다가, Connectionless한 방식을 사용하기 때문에 간단한 정보를 얻고자 할 때 사용할 수도 있다. Connection-oriented 방식의 경우 하나의 메시지를 얻기 위해서 여러 오버헤드 메시지가 오고가야 하지만, Connectionless 방식은 Request를 메시지 하나만 보내서 원하는 결과를 얻을 수 있다.
이런 상황들에서 UDP를 사용할 수 있다. Best effor 서비스이기 때문에 TCP에 비해 오버헤드가 굉장히 적다는 장점이 있다. 또한, 제공하는 기능이 적으니까 헤더 길이가 작고 단순하다는 장점도 존재한다.

UDP는 다음과 같은 Segment 구조를 가진다. 앞서 말한 것처럼 굉장히 단순한 구조로 이루어져있다. 여기서 Checksum 필드를 주목해보자.
IPv4에서도 Checksum 필드가 존재했었다. 그러나, IP에서의 Checksum 필드는 에러가 있나 없나를 확인하기 위해 넣어두긴 했지만, 라우터가 이 값을 모두 연산하는 것은 어렵기 때문에 그냥 1만 추가해서 Next hop으로 전달한다고 했다. 즉, IP 단에서는 Checksum으로 에러가 발생해도 알기 어렵다.
이를 보완하기 위해 IPv6에서는 아예 Checksum 필드가 사라지고, Transport layer에서 이 작업을 맡게 되었다. Transport layer가 담당한다는 것은 Segment를 받은 Receiver가 이 Checksum 연산을 수행하는 것이다.
Checksum 필드는 다음 3가지 section을 보고 계산된다.

여기서 pseudo header란 IP 헤더에 있는 정보를 이용하여 만든 헤더이다. 이 Pseudo header는 Checksum 계산을 위해 임시로 만들어진 헤더이기 때문에, 실제로 사용되진 않는다. IP에서의 Checksum은 기능하지 못하기 때문에 Network Layer에서의 에러 검증도 진행해주기 위해 IP 패킷의 헤더를 이용하여 IP 주소도 포함하게 되고, 이 정보를 이용하여 Checksum 연산을 하므로 IP 주소 검증도 같이 가능해진다.
여기서 TL 필드가 Pseudo header에도 있고, Segment Header에도 있다. 이 필드들에 있는 값은 같지만, Pseudo header는 IP 패킷의 헤더를 보고 이 UDP Segment의 길이를 적고, Segment header의 TL은 자기 자신(Segment header)을 보고 길이를 적게 된다.
(IP 패킷의 헤더를 보고 IP Packet + Segment의 길이에서 IP 헤더에 있는 TL값을 빼면 IP Packet 길이 만큼이 빠지니까 UDP Segment의 길이만 남게 된다.)
계산하는 방식 자체는 IP와 동일하다. 16bit를 기준으로 나누어 모든 값을 더하고, 캐리값이 발생하면 Sum 맨 뒤에 1을 더하는 식으로 동작한다. 이렇게 산출된 Sum값을 보수 취하면 Checksum이 구해진다.