Welke optie karakteriseert het UDP-protocol correct. Wat betekenen TCP en UDP? Waar u alle netwerkinstellingen kunt zien

Transportlaagprotocollen, de volgende in de hiërarchie na IP, worden gebruikt om gegevens over te dragen tussen applicatieprocessen die op netwerkknooppunten draaien. Een datapakket dat via internet van de ene computer naar de andere wordt ontvangen, moet worden overgedragen naar een verwerkingsproces, en wel voor een specifiek doel. De transportlaag neemt hiervoor de verantwoordelijkheid. Op dit niveau zijn er twee hoofdprotocollen: TCP en UDP.

Wat betekenen TCP en UDP?

TCPtransportprotocol gegevensoverdracht in TCP/IP-netwerken, waarbij vooraf een verbinding met het netwerk tot stand wordt gebracht.
UDP– een transportprotocol dat datagramberichten verzendt zonder dat er een verbinding met een IP-netwerk tot stand hoeft te worden gebracht.

Verschil tussen TCP- en UDP-protocollen

Het verschil tussen de TCP- en UDP-protocollen is de zogenaamde “afleveringsgarantie”. TCP vereist een antwoord van de client aan wie het datapakket is afgeleverd, een bevestiging van de aflevering, en hiervoor heeft het een vooraf tot stand gebrachte verbinding nodig. Ook TCP-protocol wordt als betrouwbaar beschouwd, terwijl UDP zelfs de naam ‘onbetrouwbaar datagramprotocol’ heeft gekregen. TCP elimineert gegevensverlies, duplicatie en vermenging van pakketten en vertragingen. UDP maakt dit allemaal mogelijk en vereist geen verbinding om te werken. Processen die data ontvangen via UDP moeten het doen met wat ze ontvangen, zelfs met verliezen. TCP controleert de congestie van de verbinding, UDP controleert niets anders dan de integriteit van de ontvangen datagrammen.
Aan de andere kant levert UDP, vanwege deze willekeur en gebrek aan controle, datapakketten (datagrammen) veel sneller af, dus voor toepassingen die zijn ontworpen voor hoge bandbreedte en snelle uitwisseling UDP kan als het optimale protocol worden beschouwd. Hiertoe behoren netwerk- en browsergames, maar ook streaming videokijkprogramma's en toepassingen voor videocommunicatie (of spraak): het verlies van een pakket, geheel of gedeeltelijk, verandert niets, het is niet nodig om het verzoek te herhalen, maar de downloaden gaat veel sneller. Het TCP-protocol, dat betrouwbaarder is, wordt zelfs met succes gebruikt mailprogramma's, waardoor u niet alleen het verkeer kunt controleren, maar ook de lengte van het bericht en de snelheid van de verkeersuitwisseling.

TheDifference.ru heeft vastgesteld dat het verschil tussen TCP en UDP als volgt is:

TCP garandeert de levering van datapakketten in ongewijzigde vorm, volgorde en zonder verlies, UDP garandeert niets.
TCP vereist vooraf verbinding tot stand gebracht, UDP-verbinding is niet vereist.
UDP biedt meer hoge snelheid dataoverdracht.
TCP is betrouwbaarder en regelt het gegevensuitwisselingsproces.
UDP heeft de voorkeur voor programma's die worden afgespeeld video streamen, videofonie en telefonie, netwerkspellen.

Ik vind de hele serie artikelen erg leuk, en ik heb mezelf altijd al als vertaler willen uitproberen. Misschien lijkt het artikel te voor de hand liggend voor ervaren ontwikkelaars, maar het lijkt mij dat het in ieder geval nuttig zal zijn.

Hallo, mijn naam is Glenn Fiedler en ik heet je welkom bij het eerste artikel in mijn online boek, Netwerkprogrammering voor game-ontwikkelaars.

In dit artikel beginnen we met de meest elementaire aspecten van netwerkprogrammering: het ontvangen en verzenden van gegevens via het netwerk. Het ontvangen en verzenden van gegevens is het belangrijkste en meest eenvoudig onderdeel uit het hele scala aan taken waarmee netwerkprogrammeurs te maken hebben, maar het is vaak moeilijk om te bepalen welke weg het beste is. Besteed voldoende aandacht aan dit onderdeel - als je met een misverstand blijft zitten, kan dit later ernstige gevolgen hebben voor je multiplayer-game!

Je hebt waarschijnlijk al iets gehoord over sockets, en je weet misschien dat er twee hoofdtypen zijn: TCP en UDP. Het eerste dat u moet beslissen bij het ontwikkelen van een multiplayergame, is welk type sockets u wilt gebruiken: TCP, UDP of beide?

De keuze voor het sockettype hangt volledig af van het genre van de game die je ontwikkelt. In deze serie artikelen ga ik ervan uit dat je een actiespel schrijft, zoals Halo, Battlefield 1942, Quake, Unreal, CounterStrike, Team Fortress, enz.

Nu zullen we de eigenschappen van elk type stopcontact nader bekijken (rekening houdend met het feit dat we een actiespel aan het ontwikkelen zijn), en wat dieper ingaan op de details van hoe internet werkt. Na gedetailleerde beoordeling de juiste optie zal duidelijk worden!

TCP staat voor ‘transmission control protocol’ en IP staat voor ‘internetprotocol’. Samen ondersteunen ze bijna alles wat u online doet, van surfen op het web tot IRC en e-mailcommunicatie - allemaal draaiend op TCP/IP.

Als u ooit TCP-sockets heeft gebruikt, moet u weten dat TCP een protocol is dat gebruik maakt van het principe van een betrouwbare verbinding. Dit betekent dat u een verbinding tot stand brengt tussen twee computers en vervolgens gegevens tussen deze computers verzendt, net alsof u informatie naar een bestand op de ene computer schrijft en deze uit hetzelfde bestand op een andere computer leest.

In dit geval wordt de verbinding als betrouwbaar en consistent beschouwd, dat wil zeggen dat alle informatie die u verzendt gegarandeerd de ontvanger bereikt in dezelfde volgorde als waarin deze is verzonden. Ook TCP-verbinding kan worden beschouwd als een continue stroom gegevens; het protocol zorgt er zelf voor dat de gegevens in pakketten worden opgedeeld en over het netwerk worden verzonden.

Nog een keer - alles is zo simpel als reguliere entree of uit een bestand lezen. Elementaire Watson!

Maar dit gebruiksgemak is compleet anders dan wat er feitelijk "onder de motorkap" gebeurt, op een lager niveau: het IP-protocolniveau.

Op dit niveau bestaat er geen concept van verbinding; in plaats daarvan worden individuele pakketten van de ene computer naar de andere verzonden. Je kunt dit proces zien als het doorgeven van een briefje van de ene persoon aan de andere in een kamer vol mensen: uiteindelijk komt het briefje bij de juiste persoon terecht, maar gaat het tegelijkertijd door vele handen.

Er is echter geen garantie dat het briefje de geadresseerde zal bereiken. De afzender stuurt eenvoudigweg een briefje in de hoop dat het aankomt, maar weet niet eens of het bericht is aangekomen of niet - totdat de ontvanger besluit terug te schrijven.
Uiteraard is alles in werkelijkheid iets ingewikkelder, omdat de verzendende computer niet de exacte volgorde kent van de computers op het netwerk waarlangs het pakket moet worden verzonden, zodat het zo snel mogelijk aankomt. Soms verzendt IP meerdere kopieën van hetzelfde pakket, die verschillende routes kunnen volgen om de bestemming te bereiken - en waarschijnlijk op verschillende tijdstippen aankomen.

Wat als we informatie tussen computers willen overbrengen, niet in de stijl van het lezen/schrijven van bestanden, maar door het direct verzenden en ontvangen van individuele pakketten?

Welnu, we kunnen dit doen met behulp van UDP. UDP staat voor “user datagram protocol” en het draait bovenop IP (zoals TCP), maar in plaats van een hoop functionaliteit toe te voegen is het slechts een kleine toevoeging aan IP.

Met behulp van UDP kunnen we een pakket naar een specifiek IP-adres (bijvoorbeeld 112.140.20.10) en poort (bijvoorbeeld 52423) sturen, en het wordt van computer naar computer verzonden totdat het zijn bestemming bereikt (of verloren raakt onderweg). manier).

Tegelijkertijd zitten we aan de ontvangerkant gewoon te wachten, luisterend naar een bepaalde poort (in ons geval 52423), en als er een pakketje van iemand binnenkomt (onthoud dat er geen verbindingen worden gebruikt), krijgen we hierover een melding met het adres en de poort van de verzendende computer, de pakketgrootte, en daarna kunnen we de gegevens uit dit pakket lezen.

Het UDP-protocol garandeert geen gegevenslevering. In de praktijk komen de meeste pakketten uiteraard wel aan, maar er is altijd een verlies van ongeveer 1-5%, en soms zijn er perioden waarin pakketten helemaal niet aankomen (onthoud dat er tussen de afzender en de ontvanger mogelijk duizenden computers zijn, waarvan er één kan uitvallen of kapot gaat).

UDP garandeert ook niet de volgorde waarin pakketten worden afgeleverd. U kunt vijf pakketten in de juiste volgorde verzenden - 1, 2, 3, 4, 5 - maar het kan zijn dat ze in een geheel andere volgorde aankomen - bijvoorbeeld 3, 1, 2, 5, 4. Ook in de praktijk zullen ze hoogstwaarschijnlijk komen meestal in de juiste volgorde aan, maar daar kun je niet op vertrouwen!

Hoewel UDP niet veel toevoegt aan IP, garandeert het ten slotte wel één ding. Als u een pakket doorstuurt, komt het geheel of helemaal niet aan. Als u dus een pakket van 256 bytes naar een andere computer verzendt, kan deze niet alleen de eerste 100 bytes van het pakket ontvangen; hij moet alle 256 bytes ontvangen. Dit is eigenlijk het enige dat het UDP-protocol garandeert: al het andere valt op uw schouders.

We moeten dus beslissen: moeten we TCP- of UDP-sockets gebruiken? Laten we eens kijken naar hun eigenschappen:

  • Maakt gebruik van het verbindingsprincipe
  • Garandeert levering en doorlooptijd
  • Splitst informatie automatisch op in pakketten
  • Zorgt ervoor dat data niet te intensief wordt verzonden (data flow control)
  • Gemakkelijk te gebruiken - zoals schrijven/lezen vanuit een bestand
UDP:
  • Maakt geen gebruik van het verbindingsprincipe - u zult het handmatig moeten implementeren
  • Garandeert niet de levering en volgorde van levering van pakketten - ze kunnen in de verkeerde volgorde aankomen, met duplicaten, of helemaal niet aankomen!
  • U moet de gegevens handmatig in pakketten splitsen en deze verzenden
  • Je moet oppassen dat je de gegevens niet te intensief verzendt
  • Als een pakket verloren gaat, moet u het op de een of andere manier volgen en, indien nodig, opnieuw verzenden
Met zo'n lijst lijkt de oplossing voor de hand te liggen: TCP implementeert alle functionaliteit die we nodig hebben en is gemakkelijker te gebruiken, terwijl het gebruik van UDP aambeien belooft dat alles handmatig, helemaal opnieuw, wordt geschreven. Dus we gebruiken TCP, toch?

Maar nee.

TCP gebruiken is waarschijnlijk ergste fout, wat kan worden bereikt bij het ontwikkelen van een multiplayergame. Om te begrijpen waarom, laten we eens kijken naar wat TCP zo gemakkelijk te gebruiken maakt!

Hoe TCP werkt
TCP en UDP werken beide bovenop IP, maar in werkelijkheid zijn ze totaal verschillend. UDP gedraagt ​​zich vrijwel hetzelfde als IP, terwijl TCP de gebruiker wegneemt van alle pakketproblemen, waardoor de interactie lijkt op het lezen/schrijven naar een bestand.

Dus hoe doet hij het?

Ten eerste maakt TCP gebruik van een datastroomabstractie: u kunt eenvoudigweg bytes aan gegevens naar die stroom schrijven, en TCP zorgt ervoor dat deze op zijn bestemming terechtkomt. Omdat IP gegevens in pakketten verzendt en TCP bovenop IP draait, moet TCP de invoerstroom van de gebruiker opsplitsen in afzonderlijke pakketten. Binnen TCP verzamelt een bepaalde logica dus gegevens in een wachtrij, en als er genoeg zijn, vormt het een pakket en stuurt het naar de bestemming.

Dit gedrag kan een probleem zijn voor ons multiplayerspel als we zeer kleine pakketten moeten overbrengen. Het kan gebeuren dat TCP besluit onze gegevens niet te verzenden voordat deze voldoende zijn verzameld om een ​​pakket van een bepaalde grootte te vormen (bijvoorbeeld meer dan honderd bytes). En dit - een groot probleem, omdat het nodig is om gegevens van de client (toetsaanslagen van de speler) zo snel mogelijk naar de server over te brengen, en als er vertragingen optreden als gevolg van gegevensbuffering door het protocol, zal het spel niet het meest plezierig zijn voor de speler op de kant van de cliënt. In dit geval zal het updaten van spelobjecten met vertraging en zelden plaatsvinden, terwijl we objecten op tijd en vaak moeten updaten.

TCP heeft een optie om dit op te lossen - "TCP_NODELAY". Het vertelt het protocol niet te wachten tot de gegevens zich in de verzendwachtrij hebben verzameld, maar deze onmiddellijk te verzenden.

Helaas heeft TCP, zelfs als deze optie is geïnstalleerd, veel problemen bij gebruik online spelletjes.

De wortel van alle problemen ligt in de manier waarop TCP omgaat met verloren of niet in orde zijnde pakketten, waardoor de illusie ontstaat van een betrouwbare en consistente verbinding.

Hoe TCP de betrouwbaarheid van verbindingen garandeert
Bij TCP-transmissie breekt de datastroom op in individuele pakketten, verzendt deze over het netwerk met behulp van het onbetrouwbare IP-protocol en reconstrueert ze vervolgens vanaf de ontvangende computer ontvangen pakketten originele stroom.

Maar wat gebeurt er als een van de pakketten niet aankomt? Of als de pakketten niet in de juiste volgorde aankomen, of met duplicaten?

Zonder al te veel in detail te treden TCP-werking(en dit is echt een heel complex onderwerp - je kunt het lezen in TCP/IP Illustrated), het proces ziet er als volgt uit: TCP verzendt een pakket, stelt vast dat het pakket niet is aangekomen en verzendt hetzelfde pakket opnieuw naar de ontvanger. Dubbele pakketten worden geëlimineerd aan de kant van de ontvanger, en pakketten die in de verkeerde volgorde aankomen, worden opnieuw gerangschikt, zodat alles is zoals het zou moeten zijn: betrouwbaar en in orde.

Het probleem is dat wanneer TCP de datastroom op deze manier ‘synchroniseert’ en een pakket verloren gaat, de transmissie stopt totdat het verloren pakket opnieuw wordt verzonden (en ontvangen door de bestemming). Als er tijdens het wachten nieuwe gegevens binnenkomen, worden deze in de wachtrij geplaatst en kunt u deze pas lezen als het verloren pakket arriveert. Hoe lang duurt het om een ​​pakket opnieuw te verzenden? Het duurt minimaal de retourtijd van het pakket (wanneer TCP bepaalt welk pakket opnieuw moet worden verzonden), plus de tijd om het verloren pakket opnieuw af te leveren. Dus als de ping tussen computers 125 ms is, heruitzending Het pakket duurt ongeveer een vijfde van een seconde, en in het ergste geval zelfs een halve seconde (stel je voor dat het nieuw verzonden pakket plotseling ook verloren gaat). Veselukha!

Waarom je TCP nooit zou moeten gebruiken voor multiplayer-spellen
Het probleem met het gebruik van TCP in online games is dat, in tegenstelling tot browsers, E-mail en andere toepassingen zijn games afhankelijk van realtime interactie. Voor veel aspecten van het spel, zoals de door de gebruiker ingedrukte toetsen en de positie van de spelers in het spel, maakt het niet uit wat er een seconde geleden is gebeurd, maar alleen de meest actuele status spel wereld.

Laten we eens kijken naar een eenvoudig voorbeeld van een multiplayergame, zoals een 3D-shooter. Het netwerkgedeelte van het spel is heel eenvoudig opgebouwd: bij elke iteratie van de spelcyclus stuurt de client een beschrijving van alle acties van de speler naar de server (ingedrukte toetsen, muispositie, enz.), en bij elke iteratie verwerkt de server deze gegevens , werkt het model van de spelwereld bij en stuurt de huidige terug naar de clientposities van wereldobjecten, zodat het een nieuw frame voor de speler tekent.

Dus als in ons spel een pakket verloren gaat terwijl het via het netwerk wordt verzonden, stopt het spel en wacht totdat het pakket opnieuw wordt afgeleverd. Aan de clientzijde bevriezen spelobjecten en aan de server kunnen spelers ook niet bewegen of schieten omdat de server geen nieuwe pakketten kan accepteren. Wanneer het verloren pakket uiteindelijk arriveert, bevat het verouderde informatie die niet langer relevant is. Bovendien arriveren hierna ook al die pakketten die zich tijdens de wachttijd in de wachtrij hebben verzameld, en ze moeten allemaal in één iteratie van de lus worden verwerkt. Volledige verwarring!

Helaas is er geen manier om dit gedrag van TCP te veranderen, en dat is ook niet nodig, aangezien dit de betekenis van TCP is. Dit is een noodzaak om van datatransmissie via internet een betrouwbare en consistente datastroom te maken.
Maar we hebben geen betrouwbare en consistente datastroom nodig.

We hebben de gegevens nodig om zo snel mogelijk van de client naar de server te komen, en we willen niet wachten tot de gegevens opnieuw worden verzonden.
Dit is de reden waarom je TCP nooit moet gebruiken voor multiplayer-spellen.

Maar wacht! Waarom kan ik UDP en TCP niet samen gebruiken?

Voor real-time gamegegevens, zoals klikken van gebruikers en de staat van de gamewereld, zijn alleen de meest actuele gegevens belangrijk, maar voor andere soorten gegevens, zoals reeksen opdrachten die van de ene computer naar de andere worden verzonden, is de betrouwbaarheid en consistentie van het kanaal kan heel belangrijk zijn.

Natuurlijk is het verleidelijk om UDP te gebruiken voor gebruikersinvoer en wereldstatusgegevens, en TCP voor gegevens waarvan gegarandeerd moet worden dat ze worden afgeleverd. Je denkt misschien zelfs dat je meerdere ‘threads’ met opdrachten kunt maken, bijvoorbeeld één voor laadniveaus en een andere voor AI-opdrachten. Je denkt: "Ik heb geen AI-teams nodig die in de rij staan ​​te wachten als het datapakket om een ​​niveau te laden verloren gaat, omdat ze totaal niets met elkaar te maken hebben!" IN in dit geval je hebt gelijk en je kunt besluiten om te creëren door TCP-socket voor elke opdrachtstroom.

Op het eerste gezicht dit goed idee. Maar het probleem is dat, aangezien TCP en UDP beide bovenop IP draaien, de pakketten van beide protocollen elkaar zullen beïnvloeden - al op IP-niveau. Hoe dit effect zich precies zal manifesteren is een zeer complexe vraag, en houdt verband met de betrouwbaarheidsmechanismen in TCP. Maar houd er in ieder geval rekening mee dat het gebruik van TCP meestal leidt tot meer UDP-pakketverlies. Als je hier meer over wilt weten, kun je lezen

Transportlaagprotocollen, de volgende in de hiërarchie na IP, worden gebruikt om gegevens over te dragen tussen applicatieprocessen die op netwerkknooppunten draaien. Een datapakket dat via internet van de ene computer naar de andere wordt ontvangen, moet worden overgedragen naar een verwerkingsproces, en wel voor een specifiek doel. De transportlaag neemt hiervoor de verantwoordelijkheid. Er zijn twee hoofdprotocollen op deze laag: TCP en UDP.

Definitie

TCP— transportprotocol voor gegevensoverdracht in TCP/IP-netwerken, dat voorlopig een verbinding met het netwerk tot stand brengt.

UDP- een transportprotocol dat datagramberichten verzendt zonder dat er een verbinding op een IP-netwerk tot stand hoeft te worden gebracht.

Vergelijking

Het verschil tussen de TCP- en UDP-protocollen is de zogenaamde “afleveringsgarantie”. TCP vereist een antwoord van de client aan wie het datapakket is afgeleverd, een bevestiging van de aflevering, en hiervoor heeft het een vooraf tot stand gebrachte verbinding nodig. Ook wordt het TCP-protocol als betrouwbaar beschouwd, terwijl UDP zelfs de naam ‘onbetrouwbaar datagramprotocol’ heeft gekregen. TCP elimineert gegevensverlies, duplicatie en vermenging van pakketten en vertragingen. UDP maakt dit allemaal mogelijk en vereist geen verbinding om te werken. Processen die data ontvangen via UDP moeten het doen met wat ze ontvangen, zelfs met verliezen. TCP controleert de congestie van de verbinding, UDP controleert niets anders dan de integriteit van de ontvangen datagrammen.

Aan de andere kant levert UDP, vanwege een dergelijke willekeur en gebrek aan controle, datapakketten (datagrammen) veel sneller af. Voor toepassingen die zijn ontworpen voor hoge doorvoer en snelle uitwisseling, kan UDP daarom als het optimale protocol worden beschouwd. Hiertoe behoren netwerk- en browsergames, maar ook streaming videokijkprogramma's en toepassingen voor videocommunicatie (of spraak): het verlies van een pakket, geheel of gedeeltelijk, verandert niets, het is niet nodig om het verzoek te herhalen, maar de downloaden gaat veel sneller. Het TCP-protocol, dat betrouwbaarder is, wordt zelfs met succes gebruikt in e-mailprogramma's, waardoor u niet alleen het verkeer kunt controleren, maar ook de lengte van het bericht en de snelheid van de verkeersuitwisseling.

Conclusie website

  1. TCP garandeert de levering van datapakketten in ongewijzigde vorm, volgorde en zonder verlies, UDP garandeert niets.
  2. TCP vereist een vooraf tot stand gebrachte verbinding, UDP vereist geen verbinding.
  3. UDP biedt hogere gegevensoverdrachtsnelheden.
  4. TCP is betrouwbaarder en regelt het gegevensuitwisselingsproces.
  5. UDP heeft de voorkeur voor programma's die streaming video, videofonie en telefonie en netwerkgames afspelen.

UDP-protocol

Gebruikersdatagramprotocol (UDP) is een eenvoudig, verbindingsloos, datagram-georiënteerd protocol dat snelle, maar niet noodzakelijkerwijs betrouwbare, transportservice biedt. Het ondersteunt één-op-veel-interacties en wordt daarom vaak gebruikt voor broadcast- en multicast-datagramtransmissie.

Internet Protocol (IP) is het belangrijkste protocol van internet. Transmission Control Protocol (TCP) en UDP zijn transportlaagprotocollen die bovenop een onderliggend protocol zijn gebouwd.

TCP/IP is een reeks protocollen, ook wel de Internet Protocol Suite genoemd, bestaande uit vier lagen. Houd er rekening mee dat TCP/IP niet slechts één protocol is, maar een familie of reeks protocollen die bestaat uit andere protocollen op een lager niveau, zoals IP, TCP en UDP. UDP bevindt zich op de transportlaag bovenop IP (protocol netwerklaag). De transportlaag zorgt voor communicatie tussen netwerken via gateways. Het gebruikt IP-adressen om datapakketten via internet of een ander netwerk te verzenden met behulp van verschillende apparaatstuurprogramma's.

Voordat je gaat studeren UDP-werk Laten we eens kijken naar de basisterminologie die u goed moet kennen. Hieronder zullen we kort de belangrijkste termen definiëren die verband houden met UDP:

Pakketjes

Bij gegevensoverdracht is een pakket een reeks binaire cijfers, die gegevens- en besturingssignalen vertegenwoordigt die via de host worden verzonden en geschakeld. In het pakket bevindt deze informatie zich in een speciaal formaat.

Datagrammen

Een datagram is een enkel, onafhankelijk gegevenspakket dat voldoende informatie bevat om van bron naar bestemming te reizen, zodat er geen extra verkeer nodig is tussen de bron, de bestemming en het transportnetwerk.

MTU (maximale transmissie-eenheid)

MTU kenmerkt link laag en correspondeert Maximaal nummer bytes die in één pakket kunnen worden verzonden. Met andere woorden: de MTU is het grootste pakket dat een bepaalde netwerkomgeving kan vervoeren. Ethernet heeft bijvoorbeeld een vaste MTU van 1500 bytes. Als bij UDP de datagramgrootte groter is dan de MTU, voert het IP-protocol fragmentatie uit door het datagram in kleinere stukken (fragmenten) op te delen, zodat elk fragment kleiner is dan de MTU.

Poorten

Om binnenkomende gegevens te matchen met een specifiek proces dat op een computer draait, maakt UDP gebruik van poorten. UDP stuurt het pakket door naar de juiste locatie met behulp van het poortnummer dat is opgegeven in de UDP-header van het datagram. Poorten worden weergegeven door 16-bits getallen en krijgen daarom waarden variërend van 0 tot 65.535. Poorten, ook wel logische verbindingseindpunten genoemd, zijn onderverdeeld in drie categorieën:

    Prima beroemde havens- van 0 tot 1023

    Geregistreerde poorten - van 1024 tot 49151

    Dynamische/privépoorten - 49152 tot 65535

Houd er rekening mee dat UDP-poorten op elk moment meer dan één bericht kunnen ontvangen. In sommige gevallen kunnen TCP- en UDP-services dezelfde poortnummers gebruiken, zoals 7 (Echo) of 23 (Telnet).

UDP gebruikt de volgende bekende poorten:

De lijst met UDP- en TCP-poorten wordt onderhouden door de IANA (Internet Assigned Numbers Authority).

IP-adressen

Een IP-datagram bestaat uit 32-bits bron- en bestemmings-IP-adressen. Het doel-IP-adres specificeert het eindpunt voor het UDP-datagram en het bron-IP-adres wordt gebruikt om informatie te verkrijgen over wie het bericht heeft verzonden. Op de bestemming worden pakketten gefilterd en pakketten waarvan de bronadressen niet in de geldige set adressen zijn opgenomen, worden weggegooid zonder kennisgeving aan de afzender.

Een unicast IP-adres identificeert op unieke wijze een host op een netwerk, terwijl een multicast IP-adres een specifieke groep adressen op een netwerk identificeert. Broadcast IP-adressen worden door alle hosts ontvangen en verwerkt lokaal netwerk of een specifiek subnet.

TTL

Met de time-to-live- of TTL-waarde (time-to-live) kunt u een bovengrens instellen voor het aantal routers waar een datagram doorheen kan. De TTL-waarde voorkomt dat pakketten bereiken eindeloze lussen. Het wordt geïnitialiseerd door de afzender en met één verlaagd door elke router die het datagram verwerkt. Wanneer de TTL-waarde nul wordt, wordt het datagram weggegooid.

Groepsmailing

Multicast is een open, op standaarden gebaseerde methode om identieke informatie tegelijkertijd naar meerdere gebruikers te distribueren. Multicast is het belangrijkste kenmerk van het UDP-protocol; dit is niet mogelijk met het TCP-protocol. Multicast maakt één-op-veel-interactie mogelijk, waardoor bijvoorbeeld gebruiksmogelijkheden worden geboden zoals het verzenden van nieuws en e-mail naar meerdere ontvangers, internetradio of realtime demoprogramma's. Multicast belast het netwerk niet zo zwaar als uitzendingen, omdat de gegevens naar meerdere gebruikers tegelijk worden verzonden:

Hoe UDP werkt

Wanneer een op UDP gebaseerde toepassing gegevens naar een andere host op het netwerk verzendt, voegt UDP hieraan een 8-bits header toe die de bestemmings- en bronpoortnummers, de totale lengte van de gegevens en een controlesom bevat. IP voegt zijn header toe bovenop het UDP-datagram en vormt een IP-datagram:

De vorige afbeelding geeft aan dat de totale lengte van de UDP-header acht bytes bedraagt. In theorie maximumgrootte Een IP-datagram is 65.535 bytes. Met 20 bytes IP-header en 8 bytes UDP-header kan de lengte van de gebruikersgegevens maximaal 65.507 bytes bedragen. De meeste programma's werken echter met gegevens kleinere maat. Voor de meeste toepassingen is de standaardlengte dus ongeveer 8192 bytes, aangezien dit de hoeveelheid gegevens is die door het netwerk wordt gelezen en geschreven. bestandssysteem(NFS). U kunt de grootte van de invoer- en uitvoerbuffers instellen.

De controlesom is nodig om te controleren of de gegevens correct op de bestemming zijn afgeleverd of beschadigd zijn. Het omvat zowel de UDP-header als de gegevens. Een vulbyte wordt gebruikt als het totale aantal bytes in het datagram oneven is. Indien ontvangen controlesom gelijk is aan nul, detecteert de ontvanger een checksum-fout en gooit het datagram weg. Hoewel een controlesom een ​​optionele functie is, wordt het altijd aanbevolen om deze op te nemen.

In de volgende stap voegt de IP-laag 20 bytes header toe die de TTL, bron- en bestemmings-IP-adressen en andere informatie bevatten. Deze actie wordt IP-inkapseling genoemd.

Zoals eerder vermeld is de maximale pakketgrootte 65.507 bytes. Als het pakket groter is dan de standaard MTU-grootte, waarna de IP-laag het pakket in segmenten opsplitst. Deze segmenten worden fragmenten genoemd en het proces waarbij gegevens in segmenten worden opgedeeld, wordt ook wel fragmenten genoemd fragmentatie. De IP-header bevat alle fragmentinformatie.

Wanneer de verzendende applicatie een datagram op het netwerk "gooit", wordt het gerouteerd naar het bestemmings-IP-adres dat is opgegeven in de IP-header. Wanneer u door een router gaat, wordt de TTL-waarde (time to live) in de IP-header met één verminderd.

Wanneer een datagram op een bepaalde bestemming en poort aankomt, controleert de IP-laag de header om te zien of het datagram gefragmenteerd is. Als dat zo is, wordt het datagram samengesteld volgens de informatie in de header. Eindelijk applicatielaag haalt de gefilterde gegevens op door de header te verwijderen.

Nadelen van UDP

Vergeleken met TCP heeft UDP de volgende nadelen:

    Geen bevestigingssignalen. Voordat een UDP-pakket wordt verzonden, wisselt de verzendende kant geen handshake-signalen uit met de ontvangende kant. Daarom kan de afzender op geen enkele manier weten of het datagram het bestemmingssysteem heeft bereikt. Als gevolg hiervan kan UDP niet garanderen dat de gegevens daadwerkelijk op de bestemming worden afgeleverd (bijvoorbeeld als het eindsysteem of netwerk uitvalt).

    TCP is daarentegen verbindingsgericht en maakt communicatie mogelijk tussen op het netwerk aangesloten hosts met behulp van pakketten. TCP gebruikt handshakes om te verifiëren dat gegevens succesvol zijn getransporteerd.

    Sessies gebruiken. Het verbindingsgerichte karakter van TCP wordt ondersteund door sessies tussen hosts. TCP gebruikt een sessie-ID om verbindingen tussen twee hosts bij te houden. UDP biedt geen sessieondersteuning vanwege het verbindingsloze karakter ervan.

    Betrouwbaarheid. UDP garandeert niet dat slechts één kopie van de gegevens bij de ontvanger wordt afgeleverd. Versturen definitieve systeem grote hoeveelheid gegevens, UDP verdeelt deze in kleine delen. UDP garandeert niet dat deze onderdelen op hun bestemming worden afgeleverd in dezelfde volgorde als waarin ze bij de bron zijn gemaakt. Integendeel, TCP gebruikt poortnummers samen met serienummers en bevestigingen die regelmatig worden verzonden om een ​​ordelijke levering van gegevens te garanderen.

    Veiligheid. TCP is veiliger dan UDP. In veel organisaties laten firewalls en routers geen UDP-pakketten door. Dit komt omdat hackers misbruik kunnen maken UDP-poorten zonder expliciete verbanden te leggen.

    Stroomcontrole. UDP heeft geen stroomcontrole en als gevolg daarvan kan een slecht ontworpen UDP-applicatie een aanzienlijk deel van de data vastleggen bandbreedte netwerken.

Voordelen van UDP

Vergeleken met TCP heeft UDP de volgende voordelen:

    Geen verbinding tot stand gebracht. UDP is een verbindingsloos protocol, dus het elimineert de overhead die gepaard gaat met het tot stand brengen van verbindingen. Omdat UDP geen gebruik maakt van handshakes, worden ook verbindingsvertragingen vermeden. Dit is de reden waarom DNS de voorkeur geeft aan UDP boven TCP. DNS zou veel langzamer zijn als het over TCP zou lopen.

    Snelheid. UDP is sneller dan TCP. Om deze reden geven veel applicaties de voorkeur aan UDP boven TCP. Dezelfde kenmerken die TCP robuuster maken (zoals handshake-signalen) vertragen het ook.

    Topologische diversiteit. UDP ondersteunt één-op-één- en één-op-veel-communicatie, terwijl TCP alleen één-op-één-communicatie ondersteunt.

    Algemene kosten. Werken met TCP betekent meer overhead, de overhead die UDP met zich meebrengt is aanzienlijk lager. TCP gebruikt aanzienlijk meer bronnen vergeleken met UDP besturingssysteem, en als gevolg daarvan wordt UDP veel gebruikt in omgevingen waar servers veel clients tegelijk bedienen.

    Grootte van de kop. Voor elk pakket is de UDP-header slechts acht bytes lang, terwijl TCP headers van 20 bytes heeft, waardoor UDP minder netwerkbandbreedte verbruikt.