User Datagram Protocol (UDP) är ett förbindelselöst protokoll i transportskiktet för att skicka datagram över ett IP-nätverk.
Med förbindelselöst (eng. stateless eller connectionless) menas att ingen session upprättas mellan sändare och mottagare av protokollet i sig. Härvid kan inte sändare (på UDP-nivå) garantera att mottagaren får paketet. Mottagaren kan heller inte veta att den fått alla paket, eller att den fått paketen i rätt ordning. Jämför med TCP som är ett förbindelseorienterat (en.stateful eller connection oriented) protokoll. Således bidrar alltså UDP, till skillnad mot TCP, inte i större utsträckning med några funktioner mellan nätverksskiktet och applikationsskiktet förutom portnummer och lite enklare undersökning på mottagarsidan av eventuella fel (error checking) på segmentet, vilket sker genom undersökning av kontrollsumman. Om mottagaren (på UDP-nivå) upptäcker ett trasigt UDP-segment kastas vanligtvis segmentet bort eller skickas vidare till applikationsskiktet med en varning. Mottagaren begär alltså i detta fall inte en återsändning av segmentet vilket hade varit fallet i TCP. Återsändning kan begäras av det program i applikationsskiktet som utnyttjar UDP.
Den som skapar ett protokoll som bygger på UDP måste skilt sköta om att hantera eventuella sessioner och försenade eller borttappade paket, i den mån sådan hantering behövs. UDP lämpar sig för tillämpningar med krav på låg latens och där ett förlorat paket eller omkastad ordning spelar mindre roll. Exempel på sådana tillämpningar är IP-telefoni, P2P-nätverk och datorspel. Protokollet kan också användas då sessionshanteringen i TCP inte räcker och hur som helst måste hanteras på en högre nivå.
UDP kan liknas vid en postförsändelse. Ett brev läggs på postlådan, posten levererar det men man kan inte vara säker på om brevet är levererat. Det kan komma bort på vägen och man får ingen indikering om att det har kommit fram till mottagaren. Innehållet i brevet är skickat men man kan inte vara säker på att mottagaren har mottagit informationen.