1. Innledning
Skrevet av Elena Falkenberg Nordmark og Erlend Tobiassen
UDP, User Datagram Protocol, er en sluttpunkt-til-sluttpunkt protokoll som hører til i transportlaget. Den legger til rette for sending av meldinger, eller mer spesifikt: datagram, til andre tjenere på et IP-nettverk. UDP ble laget som ett alternativ til TCP når TCP/IP ble separert ut i to lag. UDP var ment som et veldig enkelt alternativ til TCP.
Protokollen ble formelt definert i 1980 i RFC 768.
Andre bestemmelser som er relevante for UDP er:
- RFC 2460 – Internet Protocol, Version 6 (IPv6) Specification*
- RFC 2675 – IPv6 Jumbograms
- RFC 4113 – Management Information Base for the UDP
- RFC 5405 – Unicast UDP Usage Guidelines for Application Designers
* Denne bestemmelsen er egentlig for IPv6, men på grunn av psudo-headeren som skal inkluderes i utregninga av checksum påvirker RFC 2675 også UDP.
2. Ønsket funksjonalitet
2.1 Forsinkelsessensitive applikasjoner
I motsettning til TCP gir UDP ingen garantier for at pakker blir levert, ved at om de ikke kommer frem, blir de ikke gjensendt. Dette er ideelt for strømming, da ting gjerne er live, gir det ikke mening å gjensende tapte pakker. Hvis man skulle gjensendt de ville de sannsynligvis ikke være nødvendige lenger.
2.2 Applikasjoner som ønsker finkontroll
Enkelte applikasjoner ønsker å selv ha all kontroll over bekreftelse, gjensending og timeout av pakker. Dette er gjengående i for eksempel multiplayer-spill, der egne system blir tatt i bruk for å holde et konsistent syn på spillverden. Siden UDP overlater gjensending til applikasjonen, vil det ikke forstyrre applikasjonens system.
2.3 Applikasjoner med kort levetetid
For å spare tid er det enkelt å bruke UDP når vi skal bruke applikasjoner med kort levetid, for eksempel DNS. Til forskjell fra TCP der man måtte ha opprettet et "handshake" og andre kontrollmekanismer, vil UDP ikke ha noen unødvendig overhead.
Eksempel på UDP DNS oppslag:
246 bytes totalt (payload + UDP-headers)
Eksempel på TCP DNS oppslag:
1.4 kB totalt (payload + TCP-headers)
3. Virkemåte
3.1 Pakke-header
Pakke-headeren er første delen av UDP-pakken. Den er alltid 8 bytes lang og inneholder 4 felt, hvorav 2 er valgfrie.
Bit | 0 15 | 16 31 | 32 47 | 48 63 |
---|---|---|---|---|
Source port | Destination port | Length | Checksum |
3.2 Source port
Dette feltet kan spesifisere et portnummer hos senderen av pakken, og er valgfritt. Når det ikke er i bruk skal verdien være 0.
3.3 Destination port
Dette feltet angir portnummeret på tjeneren som mottar pakken.
3.4 Length
Feltet spesifiserer lengden i bytes på pakken, inklusivt pakke-headeren og selve payload-en. Siden pakke-headeren alltid er 8 bytes, vil det si at 8 er minsteverdien til feltet. Siden feltet er 16-bits og beskriver lengden på pakken, er det en teoretisk øvre grense på størrelsen til en UDP melding – nemlig 64 KiB minus 1 byte –.
RFC 2675 spesifiserer en måte å sende pakker opp til 4 GiB minus 1 byte i størrelse, kalt IPv6 jumbograms. Men siden maksimumlengden til en UDP-pakke er mye mindre enn dette, blir det spesifisert i RFC 2675 at hvis length-feltet er 0, så er størrelsen på UDP-pakken 64 KiB eller større. Dette betyr at UDP-pakker kan tas i bruk med jumbograms.
3.5 Checksum
Checksum-feltet er brukt til å sjekke at all informasjon i UDP-pakken er tilstede og ikke har blitt korrupt. Dette feltet er valgfritt for IPv4, men obligatorisk for IPv6. Hvis ubrukt, skal verdien være 0.
Checksum fungerer ved å utføre en matematisk operasjon på alle bytes i psudo-headeren, UDP-headeren og payloaen. Hvordan checksummen kan verifiseres og regnes ut står nærmere i neste kapittel.
3.6 Payload
Payload-feltet er selve innholdet som skal transporteres med UDP, størrelsen på payload-feltet i bytes er lik length-feltet sin verdi minus størrelsen på pakke-headeren.
Unntaket på denne regelen er da hvis length-feltet er lik 0, som nevnt over er da størrelsen hva som helst over eller lik 64 KiB.
4. Referanser
Når man i den løpende teksten omtaler standarder, organisasjoner eller annet skal dette refereres. Referanselisten føres her (ikke URL i den løpende teksten)
User Datagram Protocol (Wikipedia)
RFC768 (x)
Purpose of pseudo header in TCP checksum (postel)
UDP, User Datagram Protocol (networksorcery)