Vandaag beginnen we met TCP. Eerder in het hoofdstuk over gelaagdheid noemden we een belangrijk punt. Op de netwerklaag en daaronder gaat het meer om host-to-hostverbindingen, 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 intermachinecommunicatie. Daarom introduceert het TCP-protocol het concept van een poort. Een poort kan door slechts één proces worden gebruikt, wat directe communicatie mogelijk maakt tussen applicatieprocessen die op verschillende hosts draaien.
De transportlaag is bedoeld om directe communicatiediensten te bieden tussen applicatieprocessen die op verschillende hosts draaien. Dit staat daarom ook wel bekend als een end-to-end protocol. De transportlaag verbergt de kerndetails van het netwerk, waardoor het applicatieproces kan zien dat er een logisch end-to-end communicatiekanaal is tussen de twee entiteiten op de transportlaag.
TCP staat voor Transmission Control Protocol en staat bekend als een verbindingsgericht protocol. Dit betekent dat voordat de ene applicatie gegevens naar de andere kan verzenden, de twee processen een handshake moeten uitvoeren. Een handshake is een logisch verbonden proces dat zorgt voor een betrouwbare gegevensoverdracht en een ordelijke ontvangst van gegevens. Tijdens de handshake wordt een verbinding tot stand gebracht tussen de bron- en de bestemmingshost door een reeks controlepakketten uit te wisselen en een aantal parameters en regels af te spreken om een succesvolle gegevensoverdracht te garanderen.
Wat is TCP? (Mylinking'sNetwerktapEnNetwerkpakketmakelaarkan zowel TCP- als UDP-pakketten verwerken)
TCP (Transmission Control Protocol) is een verbindingsgericht, betrouwbaar, bytestreamgebaseerd transportlaagcommunicatieprotocol.
Verbindingsgericht:Verbindingsgeoriënteerd betekent dat TCP-communicatie één-op-één is, dat wil zeggen punt-tot-punt-end-to-end-communicatie, in tegenstelling tot UDP, dat berichten naar meerdere hosts tegelijk kan sturen, waardoor één-op-veel-communicatie niet kan worden bereikt.
Betrouwbaar:De betrouwbaarheid van TCP zorgt ervoor dat pakketten op betrouwbare wijze bij de ontvanger worden afgeleverd, ongeacht wijzigingen in de netwerkverbinding. Hierdoor is het protocolpakketformaat van TCP complexer dan dat van UDP.
Byte-stream-gebaseerd:Doordat TCP gebaseerd is op bytestreams kunnen berichten van elke grootte worden verzonden en wordt de volgorde van de berichten gegarandeerd: zelfs als het vorige bericht nog niet volledig is ontvangen en zelfs als de daaropvolgende bytes wel zijn ontvangen, zal TCP deze niet ter verwerking aan de applicatielaag afleveren en dubbele pakketten automatisch laten vallen.
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, wat de gegevensoverdracht waarborgt. Het TCP-protocol is verantwoordelijk voor het regelen van taken zoals het tot stand brengen, verbreken en vasthouden van de verbinding. Hierbij moet worden opgemerkt dat de virtuele lijn hier alleen betekent dat er een verbinding tot stand wordt gebracht. De TCP-protocolverbinding geeft alleen aan dat beide partijen gegevens kunnen verzenden en de betrouwbaarheid van de gegevens kunnen garanderen. De routing- en transportknooppunten worden beheerd door de netwerkapparaten; het TCP-protocol zelf houdt zich hier niet mee bezig.
Een TCP-verbinding is een full-duplex service, wat betekent dat host A en host B gegevens in beide richtingen 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 three-way handshake wordt aangemaakt. Vervolgens verzendt 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 hier weergegeven:
De verzendbuffer is een geheugengebied dat wordt beheerd door de TCP-implementatie aan de verzendzijde en dat wordt gebruikt om tijdelijk te verzenden gegevens op te slaan. Wanneer de three-way handshake wordt uitgevoerd om een verbinding tot stand te brengen, wordt de verzendcache 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 geheugengebied dat door de TCP-implementatie aan de ontvangende kant wordt beheerd en dat 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 verzend- en ontvangstcache beperkt is. Wanneer de cache vol is, kan TCP bepaalde strategieën toepassen, zoals congestiecontrole, stroomcontrole, enz., om een betrouwbare gegevensoverdracht en netwerkstabiliteit te garanderen.
In computernetwerken vindt gegevensoverdracht tussen hosts plaats via segmenten. Wat is een pakketsegment?
TCP creëert een TCP-segment, of pakketsegment, door de inkomende stroom in delen te splitsen en aan elk deel TCP-headers toe te voegen. Elk segment kan slechts een beperkte tijd worden verzonden en mag de maximale segmentgrootte (MSS) niet overschrijden. Onderweg passeert een pakketsegment de datalinklaag. De datalinklaag heeft een Maximum Transmission Unit (MTU), de maximale pakketgrootte die de datalinklaag kan passeren. De maximale transmissie-eenheid is meestal gerelateerd aan de communicatie-interface.
Wat is 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 transportlaagconcept is dat verwijst naar de maximale hoeveelheid gegevens die per TCP-pakket tegelijk kan worden verzonden.
Houd er rekening mee dat wanneer de maximale segmentgrootte (MSS) groter is dan de maximale transmissie-eenheid (MTU), IP-fragmentatie plaatsvindt op de netwerklaag en TCP de grotere data niet opsplitst in segmenten die geschikt zijn voor de MTU-grootte. Er is een sectie op de netwerklaag speciaal voor de IP-laag.
TCP-pakketsegmentstructuur
Laten we de opmaak en inhoud van TCP-headers eens bekijken.
Volgnummer: Een willekeurig getal dat door de computer wordt gegenereerd wanneer de verbinding tot stand wordt gebracht als beginwaarde wanneer de TCP-verbinding tot stand wordt gebracht. Het volgnummer wordt via het SYN-pakket naar de ontvanger verzonden. Tijdens de gegevensoverdracht verhoogt de verzender het volgnummer op basis van de hoeveelheid verzonden gegevens. De ontvanger beoordeelt de volgorde van de gegevens op basis van het ontvangen volgnummer. Als de gegevens niet in de juiste volgorde staan, zal de ontvanger de volgorde van de gegevens aanpassen om de juiste volgorde te garanderen.
Bevestigingsnummer:Dit 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 verzender verwacht te ontvangen. In een TCP-verbinding bepaalt de ontvanger welke gegevens succesvol zijn ontvangen op basis van het volgnummer van het ontvangen datapakketsegment. Wanneer de ontvanger de gegevens succesvol ontvangt, stuurt hij een ACK-pakket naar de verzender, met daarin het bevestigingsnummer. Na ontvangst van het ACK-pakket kan de verzender bevestigen dat de gegevens succesvol zijn ontvangen voordat hij het antwoordnummer bevestigt.
De controlebits van een TCP-segment omvatten het volgende:
ACK-bit: Als deze bit 1 is, betekent dit dat het bevestigingsantwoordveld geldig is. TCP specificeert dat deze bit op 1 moet worden gezet, behalve voor SYN-pakketten wanneer de verbinding voor het eerst tot stand wordt gebracht.
RST-bit: Wanneer deze bit 1 is, betekent dit dat er een uitzondering is 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 wordt 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 verschillende functies en kenmerken van TCP worden belichaamd door de structuur van TCP-pakketsegmenten.
Wat is UDP? (Mylinking'sNetwerktapEnNetwerkpakketmakelaarkan zowel TCP- als UDP-pakketten verwerken)
User Datagram Protocol (UDP) is een verbindingsloos communicatieprotocol. Vergeleken 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 het IP-adres.
De volledige naam van het UDP-protocol is User Datagram Protocol en de header is slechts acht bytes (64 bits), wat zeer beknopt is. De opmaak van de UDP-header is als volgt:
Bestemmings- en bronpoorten:Het belangrijkste doel hiervan is om aan te geven naar welk proces UDP pakketten moet sturen.
Pakketgrootte:Het veld pakketgrootte bevat de grootte van de UDP-header plus de grootte van de gegevens
Controlesom: Ontworpen om 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 overdracht van een UDP-pakket, om de integriteit van de gegevens te garanderen.
Verschillen tussen TCP en UDP in Mylinking'sNetwerktapEnNetwerkpakketmakelaarkan 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 tweepuntsservice, wat betekent dat een verbinding slechts twee eindpunten heeft om met elkaar te communiceren. UDP ondersteunt echter interactieve één-op-één-, één-op-veel- en veel-op-veel-communicatie, die met meerdere hosts tegelijk kan communiceren.
BetrouwbaarheidTCP biedt de service om gegevens betrouwbaar te leveren, waarbij wordt gegarandeerd dat de gegevens foutloos, verliesvrij, niet-duplicaat zijn en op afroep worden geleverd. UDP daarentegen doet zijn uiterste best en garandeert geen betrouwbare levering. UDP kan tijdens de overdracht te maken krijgen met gegevensverlies en andere problemen.
Congestiecontrole, stroomregelingTCP beschikt over congestiecontrole- en stroomcontrolemechanismen, die de gegevensoverdrachtssnelheid kunnen aanpassen aan de netwerkomstandigheden om de veiligheid en stabiliteit van de gegevensoverdracht te garanderen. UDP beschikt niet over congestiecontrole- en stroomcontrolemechanismen; zelfs bij een zeer overbelast netwerk zal het de UDP-verzendsnelheid niet aanpassen.
Koptekst overheadTCP heeft een lange headerlengte, meestal 20 bytes, die toeneemt wanneer optievelden worden gebruikt. UDP daarentegen heeft een vaste headerlengte van slechts 8 bytes, waardoor UDP een lagere headeroverhead heeft.
TCP- en UDP-toepassingsscenario's:
TCP en UDP zijn twee verschillende transportlaagprotocollen met enkele verschillen in toepassingsscenario's.
Omdat TCP een verbindingsgericht protocol is, wordt het voornamelijk gebruikt in scenario's waar betrouwbare gegevenslevering vereist is. Enkele veelvoorkomende use cases zijn:
FTP-bestandsoverdracht:TCP kan ervoor zorgen dat bestanden niet verloren gaan of beschadigd raken tijdens de overdracht.
HTTP/HTTPS:TCP zorgt voor de integriteit en juistheid van webinhoud.
Omdat UDP een verbindingsloos protocol is, biedt het geen betrouwbaarheidsgarantie, maar het heeft wel de kenmerken van efficiëntie en realtime. UDP is geschikt voor de volgende scenario's:
Laagpakketverkeer, zoals DNS (Domain Name System):DNS-query's zijn meestal korte pakketten en UDP kan ze sneller verwerken.
Multimediacommunicatie zoals video en audio:Voor multimediatransmissie met hoge real-timevereisten kan UDP een lagere latentie bieden om ervoor te zorgen dat gegevens tijdig kunnen worden verzonden.
Omroepcommunicatie:UDP ondersteunt één-op-veel- en veel-op-veel-communicatie en kan worden gebruikt voor de overdracht van broadcast-berichten.
Samenvatting
Vandaag hebben we het gehad over TCP. TCP is een verbindingsgericht, betrouwbaar, bytestream-gebaseerd transportlaagcommunicatieprotocol. Het zorgt voor een betrouwbare transmissie en ordelijke ontvangst van gegevens door verbinding, handshake en bevestiging tot stand te brengen. 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, wat gelijktijdige bidirectionele gegevensoverdracht mogelijk maakt. UDP daarentegen is een verbindingsloos communicatieprotocol dat geen betrouwbaarheidsgaranties biedt en geschikt is voor sommige scenario's met hoge realtime-vereisten. TCP en UDP verschillen in verbindingsmodus, serviceobject, betrouwbaarheid, congestiecontrole, datastroomcontrole en andere aspecten, en hun applicatiescenario's zijn ook verschillend.
Plaatsingstijd: 3 dec. 2024