Wikisage is op 1 na de grootste internet-encyclopedie in het Nederlands. Iedereen kan de hier verzamelde kennis gratis gebruiken, zonder storende advertenties. De Koninklijke Bibliotheek van Nederland heeft Wikisage in 2018 aangemerkt als digitaal erfgoed.
- Wilt u meehelpen om Wikisage te laten groeien? Maak dan een account aan. U bent van harte welkom. Zie: Portaal:Gebruikers.
- Bent u blij met Wikisage, of wilt u juist meer? Dan stellen we een bescheiden donatie om de kosten te bestrijden zeer op prijs. Zie: Portaal:Donaties.
Transmission Control Protocol
Het Transmission Control Protocol oftewel TCP is een connectie-georiënteerd protocol dat veel gebruikt wordt op het Internet.
TCP werkt bovenop het IP en is connectie-georiënteerd. Dit in tegenstelling tot verbindingsloze protocollen zoals UDP, GRE, ... TCP heeft als kenmerken dat het gegevens in een stream kan versturen, waarbij de garantie wordt geleverd dat de gegevens aankomen zoals ze verstuurd werden, en eventuele communicatiefouten, zowel in de gegevens zelf als in de volgorde van de gegevens kunnen worden opgevangen. Hierdoor hoeft een clientapplicatie die TCP als transmissieprotocol gebruikt geen rekening te houden met de onderliggende netwerkarchitectuur en eventuele fouten in de communicatie.
TCP wordt beschreven in het RFC (Request For Comment) 793.
Structuur
De volgende headers zijn nodig voor een TCP-pakket (IPv4). (Later werd een nieuwe standaard, IPv6, gedefinieerd.) De hoeveelheid ruimte die voor ieder onderdeel gereserveerd is, is tussen haakjes opgegeven.
- Bronpoort (2 bytes)
- Bestemmingspoort (2 bytes)
- Sequentienummer(4 bytes). Een getal dat door een partij bij het maken van de verbinding vrijwel willekeurig gegenereerd wordt, waarna het door die partij de rest van de sessie gebruikt wordt om aan te geven dat het om diezelfde sessie gaat.
- Bevestigingsnummer (4 bytes). Een getal dat aangeeft welk segment van het laatste ontvangen pakket ontvangen is.
- Headerlengte (1 byte). De lengte van de headers om verlies te controleren en om aan te geven waar de data precies begint.
- Vlaggen (8 bits van links naar rechts in een byte):
- CWR: Congestion Window Reduced parameter Speelt een rol bij Explicit Congestion Notification
- ECN: Explicit Congestion Notification Echo. Speelt ook een rol bij ECN. Zie RFC 3168 voor meer informatie hierover.
- URG: URGent. Dit pakket heeft haast
- ACK: ACKnowledge receipt: Bevestiging. Er is al eerder een pakket verstuurd en dit is onderdeel van een sessie
- PSH: PuSH. "Duw" de eventuele buffer meteen door naar de ontvanger.
- RST: ReSeT. Verbinding opnieuw opstarten (fout opgetreden).
- SYN: SYNchroniseer sequentienummers, oftewel: nieuwe verbinding.
- FIN: FINished: Einde verbinding.
- Window-grootte (2 bytes): De grootte van het leesvenster dat over de verbinding "schuift"
- Controlesom (2 bytes): Een getal dat afhangt van het hele pakket, om dat te kunnen controleren.
- Extra opties (variabel aantal bytes, daarom is bekendmaking van de headerlengte nodig): Allerlei aanvullende opties, zoals timestamping.
- Data (variabel): de daadwerkelijke gegevens (ingecapsuleerde applicatie protocol data).
Bit offset | Bits 0–3 | 4–7 | 8–15 | 16–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Source address | |||||||||||||||||||||||||||||||
32 | Destination address | |||||||||||||||||||||||||||||||
64 | Zeros | Protocol | TCP length | |||||||||||||||||||||||||||||
96 | Source port | Destination port | ||||||||||||||||||||||||||||||
128 | Sequence number | |||||||||||||||||||||||||||||||
160 | Acknowledgement number | |||||||||||||||||||||||||||||||
192 | Data offset | Reserved | Flags | Window | ||||||||||||||||||||||||||||
224 | Checksum | Urgent pointer | ||||||||||||||||||||||||||||||
256 | Options (optional) | |||||||||||||||||||||||||||||||
256/288+ | Data |
Bit offset | Bits 0 - 7 | 8–15 | 16–23 | 24–31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Source address | |||||||||||||||||||||||||||||||
32 | ||||||||||||||||||||||||||||||||
64 | ||||||||||||||||||||||||||||||||
96 | ||||||||||||||||||||||||||||||||
128 | Destination address | |||||||||||||||||||||||||||||||
160 | ||||||||||||||||||||||||||||||||
192 | ||||||||||||||||||||||||||||||||
224 | ||||||||||||||||||||||||||||||||
256 | TCP length | |||||||||||||||||||||||||||||||
288 | Zeros | Next header | ||||||||||||||||||||||||||||||
320 | Source port | Destination port | ||||||||||||||||||||||||||||||
352 | Sequence number | |||||||||||||||||||||||||||||||
384 | Acknowledgement number | |||||||||||||||||||||||||||||||
416 | Data offset | Reserved | Flags | Window | ||||||||||||||||||||||||||||
448 | Checksum | Urgent pointer | ||||||||||||||||||||||||||||||
480 | Options (optional) | |||||||||||||||||||||||||||||||
480/512+ | Data |
Basisprincipe
Om een TCP-verbinding op te bouwen stuurt de client een TCP-pakket naar de server met de zogenaamde SYN-vlag. Als de server de verbinding accepteert, wordt een pakket teruggestuurd met zowel een SYN- als ACK-vlag. Als de client vervolgens de server accepteert, stuurt deze een pakketje met de ACK-vlag naar de server. Hierna kunnen pakketjes met de juiste identificatienummers vrij uitgewisseld worden tussen client en server. Iedere keer wordt de checksum van zo'n pakketje gecontroleerd en het pakketje wordt opnieuw opgevraagd indien er een fout in zit. Als er een heel pakket verdwijnt, is dit te merken aan het ack-nummer. Zodra de verbinding gesloten wordt, stuurt de server of client een pakket met de FIN-vlag, waarna de andere kant antwoordt met een ACK-vlag en dit vervolgens in de omgekeerde richting gebeurt, zodat beide partijen op de hoogte zijn dat de connectie werd opgeheven.
Poorten
De poortnummers worden toegewezen door het IANA en onderverdeeld in:
- well-known (poorten 0 tot 1023),
- registered (poorten 1024 tot 49151) en
- dynamic/private (poorten 49152-65535).
De toewijzing is een richtlijn en geen regel.
Een aantal vaakgebruikte poortnummers en hun toepassingsprotocol zijn:
- 7 echo (stuurt terug wat ontvangen werd)
- 13 daytime (geeft huidige datum en tijd)
- 20 FTP (dataconnectie)
- 21 FTP (commandoconnectie)
- 22 SSH
- 23 Telnet
- 25 SMTP
- 53 DNS
- 80 World Wide Web HTTP
- 88 Kerberos
- 110 POP3
- 137 NetBIOS Name Service
- 143 IMAP
- 389 LDAP
- 443 HTTPS
Zie ook : De Lijst van TCP- en UDP-poorten, voor het volledige overzicht