Vandaag beginnen we met TCP. Eerder in het hoofdstuk over gelaagdheid hebben we een belangrijk punt aangestipt. Op de netwerklaag en lager draait het vooral om verbindingen tussen hosts, wat betekent dat je computer moet weten waar een andere computer zich bevindt om er verbinding mee te kunnen maken. Communicatie in een netwerk is echter vaak interprocescommunicatie in plaats van communicatie tussen machines. Daarom introduceert het TCP-protocol het concept van een poort. Een poort kan slechts door één proces tegelijk worden gebruikt, wat zorgt voor directe communicatie tussen applicatieprocessen die op verschillende hosts draaien.
De taak van de transportlaag is het bieden van directe communicatie tussen applicatieprocessen die op verschillende hosts draaien; daarom wordt het ook wel een end-to-end-protocol genoemd. De transportlaag verbergt de essentiële details van het netwerk, waardoor het applicatieproces de indruk krijgt dat er een logisch end-to-end-communicatiekanaal bestaat tussen de twee entiteiten van de transportlaag.
TCP staat voor Transmission Control Protocol en is een verbindingsgericht protocol. Dit betekent dat voordat een applicatie gegevens naar een andere applicatie kan verzenden, beide processen een handshake moeten uitvoeren. Een handshake is een logisch verbonden proces dat zorgt voor een betrouwbare verzending en een ordelijke ontvangst van gegevens. Tijdens de handshake wordt een verbinding tot stand gebracht tussen de bron- en bestemmingshost door een reeks controlepakketten uit te wisselen en overeenstemming te bereiken over bepaalde parameters en regels om een succesvolle gegevensoverdracht te garanderen.
Wat is TCP? (Mylinking'sNetwerktapEnNetwerkpakketbrokerkan zowel TCP- als UDP-pakketten verwerken)
TCP (Transmission Control Protocol) is een verbindingsgeoriënteerd, betrouwbaar, op bytestromen gebaseerd communicatieprotocol voor de transportlaag.
VerbindingsgerichtVerbindingsgericht betekent dat TCP-communicatie één-op-één is, oftewel punt-tot-punt, end-to-end, in tegenstelling tot UDP, dat berichten naar meerdere hosts tegelijk kan verzenden, waardoor één-op-veel-communicatie niet mogelijk is.
BetrouwbaarDe betrouwbaarheid van TCP zorgt ervoor dat pakketten betrouwbaar bij de ontvanger aankomen, ongeacht veranderingen in de netwerkverbinding. Dit maakt de pakketstructuur van TCP complexer dan die van UDP.
Op byte-stream gebaseerdHet byte-stream-gebaseerde karakter van TCP maakt de verzending van berichten van elke grootte mogelijk en garandeert de berichtvolgorde: zelfs als het vorige bericht niet volledig is ontvangen, en zelfs als de volgende bytes wel zijn ontvangen, zal TCP deze niet aan de applicatielaag doorgeven voor verwerking en zullen dubbele pakketten automatisch worden verwijderd.
Zodra host A en host B een verbinding tot stand hebben gebracht, hoeft de applicatie alleen nog maar de virtuele communicatielijn te gebruiken om gegevens te verzenden en te ontvangen, waardoor de gegevensoverdracht gegarandeerd is. Het TCP-protocol is verantwoordelijk voor taken zoals het tot stand brengen, verbreken en behouden van verbindingen. Het is belangrijk om te benadrukken dat de term 'virtuele lijn' hier alleen verwijst naar het tot stand brengen van een verbinding; de term 'TCP-protocolverbinding' geeft alleen aan dat beide partijen kunnen beginnen met gegevensoverdracht en dat de betrouwbaarheid van de gegevens wordt gewaarborgd. De routerings- en transportknooppunten worden afgehandeld door de netwerkapparaten; het TCP-protocol zelf houdt zich niet bezig met deze details.
Een TCP-verbinding is een full-duplex service, wat betekent dat host A en host B in beide richtingen gegevens kunnen verzenden via een TCP-verbinding. Dat wil zeggen dat gegevens tussen host A en host B in een bidirectionele stroom kunnen worden overgedragen.
TCP slaat gegevens tijdelijk op in de verzendbuffer van de verbinding. Deze verzendbuffer is een van de caches die tijdens de drieweg-handshake worden opgezet. Vervolgens stuurt TCP de gegevens in de verzendcache op het juiste moment naar de ontvangstcache van de bestemmingshost. In de praktijk heeft elke peer een verzendcache en een ontvangstcache, zoals hieronder weergegeven:
De verzendbuffer is een geheugenruimte die door de TCP-implementatie aan de zenderzijde wordt beheerd en die wordt gebruikt om tijdelijk gegevens op te slaan die verzonden moeten worden. Wanneer de drieweg-handshake wordt uitgevoerd om een verbinding tot stand te brengen, wordt de verzendbuffer ingesteld en gebruikt om gegevens op te slaan. De verzendbuffer wordt dynamisch aangepast op basis van netwerkcongestie en feedback van de ontvanger.
Een ontvangstbuffer is een geheugenruimte die door de TCP-implementatie aan de ontvangende kant wordt beheerd en die wordt gebruikt om ontvangen gegevens tijdelijk op te slaan. TCP slaat de ontvangen gegevens op in de ontvangstcache en wacht tot de bovenliggende applicatie deze leest.
Houd er rekening mee dat de grootte van de verzendcache en de ontvangstcache beperkt is. Wanneer de cache vol is, kan TCP bepaalde strategieën toepassen, zoals congestiebeheer en stroombeheer, om een betrouwbare gegevensoverdracht en netwerkstabiliteit te garanderen.
In computernetwerken vindt gegevensoverdracht tussen hosts plaats door middel van segmenten. Maar wat is een pakketsegment precies?
TCP creëert een TCP-segment, of pakketsegment, door de binnenkomende datastroom op te splitsen in stukken en aan elk stuk een TCP-header toe te voegen. Elk segment kan slechts gedurende een beperkte tijd worden verzonden en mag de maximale segmentgrootte (MSS) niet overschrijden. Tijdens de overdracht passeert een pakketsegment de datalinklaag. De datalinklaag heeft een maximale transmissie-eenheid (MTU), dit is de maximale pakketgrootte die door de datalinklaag kan worden verzonden. De maximale transmissie-eenheid is meestal gekoppeld aan de communicatie-interface.
Wat is nu precies het verschil tussen MSS en MTU?
In computernetwerken is de hiërarchische architectuur erg belangrijk omdat deze rekening houdt met de verschillen tussen de verschillende niveaus. Elke laag heeft een andere naam; in de transportlaag worden de gegevens een segment genoemd, en in de netwerklaag een IP-pakket. De Maximum Transmission Unit (MTU) kan daarom worden beschouwd als de maximale IP-pakketgrootte die door de netwerklaag kan worden verzonden, terwijl de Maximum Segment Size (MSS) een concept van de transportlaag is dat verwijst naar de maximale hoeveelheid gegevens die per TCP-pakket kan worden verzonden.
Houd er rekening mee dat wanneer de maximale segmentgrootte (MSS) groter is dan de maximale transmissie-eenheid (MTU), IP-fragmentatie op de netwerklaag zal plaatsvinden en TCP de grotere gegevens niet zal opsplitsen in segmenten die geschikt zijn voor de MTU-grootte. Er zal een gedeelte op de netwerklaag zijn dat specifiek is bedoeld voor de IP-laag.
TCP-pakketsegmentstructuur
Laten we de structuur en inhoud van TCP-headers eens nader bekijken.
VolgnummerEen willekeurig getal dat door de computer wordt gegenereerd bij het tot stand brengen van de TCP-verbinding, wordt als beginwaarde gebruikt. Dit volgnummer wordt via het SYN-pakket naar de ontvanger verzonden. Tijdens de gegevensoverdracht verhoogt de zender het volgnummer op basis van de hoeveelheid verzonden gegevens. De ontvanger beoordeelt de volgorde van de gegevens aan de hand van het ontvangen volgnummer. Als de gegevens niet in de juiste volgorde staan, zal de ontvanger de gegevens opnieuw ordenen om de juiste volgorde te garanderen.
BevestigingsnummerDit is een volgnummer dat in TCP wordt gebruikt om de ontvangst van gegevens te bevestigen. Het geeft het volgnummer aan van de volgende gegevens die de afzender verwacht te ontvangen. In een TCP-verbinding bepaalt de ontvanger welke gegevens succesvol zijn ontvangen op basis van het volgnummer van het ontvangen gegevenspakketsegment. Wanneer de ontvanger de gegevens succesvol heeft ontvangen, stuurt deze een ACK-pakket naar de afzender, dat het bevestigingsnummer bevat. Na ontvangst van het ACK-pakket kan de afzender bevestigen dat de gegevens vóór het bevestigingsnummer succesvol zijn ontvangen.
De besturingsbits van een TCP-segment omvatten het volgende:
ACK-bit: Wanneer deze bit 1 is, betekent dit dat het bevestigingsantwoordveld geldig is. TCP specificeert dat deze bit op 1 moet staan, behalve voor SYN-pakketten wanneer de verbinding voor het eerst tot stand wordt gebracht.
RST-bit: Wanneer deze bit 1 is, geeft dit aan dat er een uitzondering is opgetreden in de TCP-verbinding en dat de verbinding geforceerd moet worden verbroken.
SYN-bit: Wanneer deze bit op 1 staat, betekent dit dat de verbinding tot stand moet worden gebracht en dat de beginwaarde van het volgnummer in het volgnummerveld moet worden ingesteld.
FIN-bit: Wanneer deze bit 1 is, betekent dit dat er in de toekomst geen gegevens meer worden verzonden en dat de verbinding gewenst is.
De diverse functies en kenmerken van TCP worden weerspiegeld in de structuur van TCP-pakketsegmenten.
Wat is UDP? (Mylinking'sNetwerktapEnNetwerkpakketbroker(kan zowel TCP- als UDP-pakketten verwerken)
User Datagram Protocol (UDP) is een verbindingsloos communicatieprotocol. In vergelijking met TCP biedt UDP geen complexe besturingsmechanismen. Het UDP-protocol stelt applicaties in staat om direct ingekapselde IP-pakketten te verzenden zonder een verbinding tot stand te brengen. Wanneer de ontwikkelaar ervoor kiest om UDP in plaats van TCP te gebruiken, communiceert de applicatie rechtstreeks met IP.
De volledige naam van het UDP-protocol is User Datagram Protocol, en de header is slechts acht bytes (64 bits) groot, wat erg compact is. De structuur van de UDP-header is als volgt:
Bestemmings- en vertrekhavensHun belangrijkste doel is aan te geven naar welk proces UDP pakketten moet verzenden.
PakketgrootteHet veld 'packet size' bevat de grootte van de UDP-header plus de grootte van de data.
ControlesomOntworpen om een betrouwbare levering van UDP-headers en -gegevens te garanderen. De rol van de checksum is om te detecteren of er een fout of corruptie is opgetreden tijdens de verzending van een UDP-pakket, om zo de integriteit van de gegevens te waarborgen.
Verschillen tussen TCP en UDP in Mylinking'sNetwerktapEnNetwerkpakketbrokerkan zowel TCP- als UDP-pakketten verwerken
TCP en UDP verschillen op de volgende punten:
VerbindingTCP is een verbindingsgericht transportprotocol dat vereist dat er een verbinding tot stand wordt gebracht voordat gegevens kunnen worden overgedragen. UDP daarentegen vereist geen verbinding en kan gegevens direct overdragen.
ServiceobjectTCP is een één-op-één tweepuntsverbinding, wat betekent dat een verbinding slechts twee eindpunten heeft om met elkaar te communiceren. UDP daarentegen ondersteunt interactieve communicatie van één naar één, één naar veel en veel naar veel, waardoor het met meerdere hosts tegelijk kan communiceren.
BetrouwbaarheidTCP biedt de service van betrouwbare gegevensoverdracht, waarbij wordt gegarandeerd dat de gegevens foutloos, verliesvrij, uniek en op aanvraag aankomen. UDP daarentegen doet zijn best, maar garandeert geen betrouwbare overdracht. Bij UDP kan er tijdens de transmissie sprake zijn van gegevensverlies en andere problemen.
Filebeheersing, doorstromingsbeheersingTCP beschikt over mechanismen voor congestiebeheer en stroombeheer, waarmee de gegevensoverdrachtssnelheid kan worden aangepast aan de netwerkcondities om de veiligheid en stabiliteit van de gegevensoverdracht te waarborgen. UDP beschikt niet over dergelijke mechanismen; zelfs bij een zeer druk netwerk zal de UDP-verzendsnelheid niet worden aangepast.
Koptekst bovenTCP heeft een lange header, doorgaans 20 bytes, die nog langer wordt wanneer optievelden worden gebruikt. UDP daarentegen heeft een vaste header van slechts 8 bytes, waardoor UDP een lagere headeroverhead heeft.

Toepassingsscenario's voor TCP en UDP:
TCP en UDP zijn twee verschillende transportlaagprotocollen en ze verschillen op een aantal punten in toepassingsscenario's.
Omdat TCP een verbindingsgericht protocol is, wordt het voornamelijk gebruikt in situaties waar betrouwbare gegevensoverdracht vereist is. Enkele veelvoorkomende toepassingen zijn:
FTP-bestandsoverdrachtTCP kan ervoor zorgen dat bestanden tijdens de overdracht niet verloren gaan of beschadigd raken.
HTTP/HTTPSTCP waarborgt de integriteit en correctheid van webinhoud.
Omdat UDP een verbindingsloos protocol is, biedt het geen betrouwbaarheidsgarantie, maar het kenmerkt zich wel door efficiëntie en realtime-functionaliteit. UDP is geschikt voor de volgende scenario's:
Verkeer met een laag pakketvolume, zoals DNS (Domain Name System).DNS-query's bestaan meestal uit korte datapakketten, en UDP kan deze sneller verwerken.
Multimediale communicatie, zoals video en audio.Voor multimediatransmissie met hoge realtime-eisen kan UDP een lagere latentie bieden, waardoor gegevens tijdig kunnen worden verzonden.
UitzendcommunicatieUDP ondersteunt één-op-veel- en veel-op-veel-communicatie en kan worden gebruikt voor het verzenden van broadcastberichten.
Samenvatting
Vandaag hebben we het gehad over TCP. TCP is een verbindingsgericht, betrouwbaar, op bytestromen gebaseerd communicatieprotocol voor de transportlaag. Het zorgt voor een betrouwbare verzending en ordelijke ontvangst van gegevens door het tot stand brengen van een verbinding, een handshake en een bevestiging. Het TCP-protocol gebruikt poorten om de communicatie tussen processen te realiseren en biedt directe communicatiediensten voor applicatieprocessen die op verschillende hosts draaien. TCP-verbindingen zijn full-duplex, waardoor gelijktijdige bidirectionele gegevensoverdracht mogelijk is. UDP daarentegen is een verbindingsloos communicatieprotocol dat geen betrouwbaarheidsgaranties biedt en geschikt is voor scenario's met hoge realtime-eisen. TCP en UDP verschillen in verbindingsmodus, serviceobject, betrouwbaarheid, congestiebeheer, stroombeheer en andere aspecten, en hun toepassingsscenario's zijn ook verschillend.
Geplaatst op: 3 december 2024



