UDP (User Datagram Protocol) är ett nätverksprotokoll för transportlager som ger ett snabbt och effektivt sätt att överföra data. Det ger inte alltid en perfekt överföring, men när tiden är avgörande, är det vanligtvis det protokoll som väljs.
UDP-översikt | Användardatagramprotokoll
UDP är ett anslutningslöst transportnätverksprotokoll. Som sådan upprättar den inte en “handskakning”-anslutning mellan sändaren och mottagaren innan data överförs. Ändå, i kombination med IP, möjliggör UDP/IP-sviten kommunikation mellan två enheter över ett nätverk.
UDP fungerar genom att ta emot data från applikationslagret och dela upp det i mindre paket. Var och en av dessa har en UDP-rubrik kopplad till sig med informationsfält om saker som källan och destinationsporten samt en kontrollsumma.
Källporten identifierar applikationen som skickar data och destinationsporten identifierar applikationen på den mottagande enheten. Det finns också ett längdfält som innehåller den totala längden på UDP-huvudet plus data eller nyttolast. Slutligen är kontrollsumman valfri och används för minimal felhantering.
På nätverkslagret samlar IP paketen och ansvarar för att adressera och dirigera dem över nätverket till deras destination.
Ur teknisk synvinkel är UDP “otillförlitlig” av flera skäl, men mest för att det inte garanterar paketleverans. Istället skickar den data utan att bekräfta om den kommit fram till destinationen. Detta gör det snabbt, men ofullkomligt.
I praktiken är UDP lämplig för applikationer som kräver låg latens och kan tolerera en viss grad av paketförlust. Det används oftast för VoIP-samtal, live-ljud- eller videostreaming och onlinespel. Alla dessa aktiviteter kräver ett stadigt dataflöde som rör sig så snabbt som möjligt.
UDP stöder även multicasting, vilket är när data överförs till flera mottagare från en enda källa. Detta är möjligt eftersom UDP möjliggör paketväxling. I det här fallet använder varje paket en annan väg för att komma till destinationen.
Fördelar med UDP
UDP:s så kallade opålitlighet är användbar i vissa scenarier på grund av de åtföljande fördelarna eller avvägningarna.
- Låg latens: UDP är mindre utsatt för förseningar eftersom det inte behöver upprätta en anslutning eller ta emot en bekräftelse för att starta eller fortsätta sända data.
- Enkelhet och effektivitet: UDP har lätta overhead på grund av sin lilla rubrikstorlek, bristen på handskakning och avsaknaden av extra funktioner som överbelastningskontroll – vilket innebär att det inte kräver mycket resurser eller minne för bearbetning.
- Multicasting: UDP stöder paketväxling, där varje paket hanteras oberoende och använder en annan väg för att nå sin destination. Detta är användbart i en-till-många-kommunikationssändningar eftersom vilken mottagare som helst kan koppla från utan att påverka de andra.
Nackdelar med UDP
UDP har inte många funktioner, så det har några nackdelar.
- Paketförlust: Eftersom UDP inte garanterar paketleverans, vet den inte ens om de anländer till destinationen. Därför, om paket går förlorade eller korrupta, kommer UDP inte att återsända dem.
- Ingen sekvensering: Det finns inga sekvensnummer i UDP-huvudet. Detta innebär att paket kan ha oavsiktliga dubbletter och komma ur funktion.
- Ingen trängselkontroll: Utan överbelastningskontroll kommer UDP att överföra data så snabbt som möjligt, oavsett tillståndet i nätverket. I de fall mottagaren inte kan hantera de inkommande paketen kan den bli överväldigad.
- Begränsad kontrollsumma: UDP-kontrollsumman är valfri, vilket innebär att den kan upptäcka fel i enskilda paket, men den kan inte begära omsändning. Istället för att åtgärda fel kasseras korrupta paket och informationen går förlorad.
Även om snabbare kan ses som bättre, finns det vissa scenarier och applikationer där du inte skulle vilja använda UDP – som att skicka e-postmeddelanden, till exempel. Om du skickar ett e-postmeddelande med UDP är det möjligt att mottagaren får ett ofullständigt meddelande. Dessutom, eftersom paketen inte har några sekvensnummer för att hålla dem i ordning, kan meddelandet komma in förvrängt, bilagor kan försvinna och vissa delar av e-postmeddelandet kan dupliceras.
Vad händer om du behöver perfekt transmission?
UDP tillhandahåller den bästa tjänsten – vilket betyder att den skickar data och hoppas på det bästa. Vill du ha en felfri överföring så är TCP (Transmission Control Protocol) det perfekta alternativet.
TCP är ett anslutningsorienterat transportprotokoll som ger så kallad tillförlitlig dataöverföring från en applikation till en annan. Den upprättar förbindelser via ett trestegs handslag mellan sändare och mottagare innan data kan överföras.
Så här fungerar det:
Avsändaren begär en anslutning genom att skicka ett SYN-paket (synkronisering) till mottagaren. Mottagaren svarar sedan med ett ACK-paket som bekräftar begäran och en egen SYN-begäran. Slutligen svarar avsändaren med ett ACK för att slutföra anslutningen.
Under överföringen bekräftar TCP leveransen av varje datapaket genom att få ett ACK från mottagaren. Om avsändaren inte får ett ACK, återsänds de förlorade paketen. TCP använder också sekvensnummer (som finns i SYN-paketen) så att mottagaren kan återsammansätta paket i rätt ordning oavsett hur de anländer. TCP kan också kassera alla dubbletter av paket som den stöter på.
TCP implementerar också flödes- och överbelastningskontroll, vilket innebär att det kan strypa överföringshastigheten baserat på nätverkets tillstånd eller mottagarens kapacitet. TCP kan inte bara sakta ner överföringshastigheten om mottagaren blir överväldigad av paket, utan det kan också öka hastigheten när det behövs.
Till skillnad från UDP är TCP:s användning av en kontrollsumma obligatorisk, och detta säkerställer felfri paketleverans. Denna process startar när avsändaren beräknar en kontrollsumma och lägger till den i TCP-huvudet. Därefter gör mottagaren samma beräkning och kontrollerar om båda värdena matchar. Om det inte stämmer överens kasserar mottagaren paketet och begär omsändning.
En annan viktig skillnad för TCP är att den tillhandahåller kryptering och autentisering, vilket gör dess överföringar säkrare än UDP – som är benägna att avlyssna och obehörig åtkomst.
Varför inte använda TCP hela tiden?
TCP har fler funktioner än UDP, men det kan inte användas för enkel och realtidskommunikation.
En DNS-sökning är till exempel en serverbegäran som bara kräver två paket med UDP – skicka och svara. Under tiden, med TCP, skulle samma överföring involvera 11 paket. (Tre för handskakningen mellan klienten och servern, fyra för DNS-begäran som inkluderar ACKs utöver sändnings- och svarspaketen, och fyra till för att stänga anslutningen.)
På grund av dessa tyngre överföringar kan användning av TCP för realtidskommunikation (som livestreaming och VoIP-samtal) orsaka onaturliga förseningar och störningar. Tänk på det så här: du skulle inte starta om ett samtal varje gång det var en liten pip i ljudet. Istället fortsätter du med konversationen eftersom livesändningar som det kan hantera en viss grad av paketförlust.
TCP är inte heller idealiskt för multicasting eftersom det måste ansluta till varje mottagare individuellt via sitt eget handslag. Föreställ dig att du närmar dig alla 200 personer i ett auditorium och frågar varje person om de vill höra presentationen du ska hålla. Med UDP kan du bara spränga den genom en mikrofon utan att se ut som en galen person.
UDP kontra TCP sammanfattning
TCP:s många funktioner gör den mer tillförlitlig än UDP, men den stora kompromissen är hastigheten. Som sådan är TCP bäst lämpad för applikationer och aktiviteter där noggrannhet är högsta prioritet. Exempel på dessa är att skicka e-post, filöverföring och surfa på webben.
Alternativt, om du vill ha UDP:s hastighet och effektivitet med lite mer tillförlitlighet, är det möjligt att lägga till extra protokoll i applikationslagret för att hantera saker som säkerhet och sekvensering — men det kanske inte alltid är värt besväret.
Istället är det vanligtvis bäst om du håller dig till att använda UDP i situationer där paketförlust är obetydlig, till exempel tidskänslig livekommunikation.