Transmission Control Protocol




Het Transmission Control Protocol (TCP) is een verbindingsgeoriënteerd protocol dat veel gebruikt wordt voor gegevensoverdracht over netwerkverbindingen op het internet en op computernetwerken zoals local area networks en thuisnetwerken.


TCP/IP is een IP-netwerkprotocol voor stabiele, betrouwbare netwerkverbindingen en geen verbindingsloos protocol zoals UDP en GRE. TCP heeft als kenmerken dat het gegevens in een datastroom 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.




Inhoud






  • 1 TCP versus UDP


  • 2 TCP-header


    • 2.1 Pseudoheaders


      • 2.1.1 TCP/IPv4-pseudoheader


      • 2.1.2 TCP/IPv6-pseudoheader






  • 3 Netwerkverbindingen


  • 4 Poorten





TCP versus UDP


TCP gebruikt men dus primair als de overdracht zeker en compleet moet zijn (onder andere bij bestandsoverdracht); UDP gebruikt men als de overdracht vooral snel moet zijn (telefoon, video).



TCP-header


De volgende velden zijn gedefinieerd voor headers van TCP-segmenten.
De hoeveelheid ruimte die voor ieder onderdeel gereserveerd is, is tussen haakjes opgegeven.



  • Bronpoort (16 bits)

  • Bestemmingspoort (of doelpoort) (16 bits)

  • Sequentienummer (of volgnummer) (32 bits). Een willekeurig getal dat door de client voor de eerste stap van de TCP-handshake gegenereerd wordt, waarna het door de server bij elke transactie verhoogd wordt om gedurende de rest van de TCP-sessie de volgorde van de verstuurde en ontvangen pakketten te ordenen.

  • Bevestigingsnummer (32 bits). Een getal dat door de client bij elke transactie verhoogd wordt en aangeeft welk TCP-segment door de client het laatst ontvangen is.

  • Headerlengte (4 bits). De lengte van extra ruimte voor optionele headers wordt door de headerlengte bepaald. De optionele headers worden onder andere gebruikt om verlies te controleren en om aan te geven waar de data precies begint. De headerlengte heeft een minimumlengte van 5 en maximumlengte van 15. Dit bepaalt het aantal 32-bit woorden. (Een woord = een rij). Aangezien het aantal 32 bits woorden met optionele headers 0 kan zijn, is het minimum 5 en kan het maximum 15 zijn.

  • Gereserveerd (3 bits). Dit veld is gereserveerd voor eventuele uitbreidingen in de toekomst.

  • Vlaggen (9 bits van links naar rechts):

    • NS: Robuuste ECN-signalering met protectie (Experimenteel, zie: RFC 3540[1]

    • CWR: Congestion Window Reduced parameter. Speelt een rol bij Explicit Congestion Notification.

    • ECE: Explicit Congestion Notification Echo. Speelt ook een rol bij ECN. Zie RFC 3168[2] 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 (16 bits): De grootte van het leesvenster dat over de verbinding "schuift", dit dient voor de Flow Control. De ontvanger kan aangeven hoeveel bytes hij wil ontvangen. Dit dient om overbelasting te voorkomen.


  • Controlesom (16 bits): Een getal dat afhangt van het hele pakket, om de inhoud van het hele pakket te kunnen controleren.

  • Extra opties (variabel aantal 32 bits woorden, daarom is bekendmaking van de headerlengte nodig): Allerlei aanvullende opties, zoals timestamping.

  • Data (variabel): de daadwerkelijke gegevens (ingecapsuleerde applicatie protocol data).














































































TCP Header
Bit offset  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31
0 Bronpoort Bestemmingspoort
32 Sequentienummer
64 Bevestigingsnummer
96 Headerlengte/data offset Gereser-
veerd
N
S
C
W
R
E
C
E
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
Window-grootte
128 Controlesom Verwijzing naar urgente gegevens

160
...
Opties (if Headerlengte > 5)
...


Pseudoheaders



TCP/IPv4-pseudoheader




























































TCP pseudoheader (IPv4)
Bit offset
Bits 0–3
4–7
8–15
16–31
0
Bronadres
32
Doeladres
64
Nullen
Protocol
TCP-lengte
96
Bronpoort
Doelpoort
128
Volgnummer
160
Bevestigingsnummer
192
Header lengte/data offset
Gereserveerd
Indicators
Window
224
Controlesom
Urgentie
256
Opties (optioneel)
256/288+
 
Data
 


TCP/IPv6-pseudoheader





































































TCP pseudoheader (IPv6)
Bit offset
Bits 0 - 7
8–15
16–23
24–31
0
Bronadres
32
64
96
128
Doeladres
160
192
224
256
TCP-lengte
288
Nullen
Volgende header
320
Bronpoort
Doelpoort
352
Volgnummer
384
Bevestigingsnumber
416
Header lengte/data offset
Gereserveerd
Vlaggen
Window
448
Controlesum
Urgentie
480
Opties (optioneel)
480/512+
 
Data
 


Netwerkverbindingen


Tcp-handshake.svg

De netwerkverbindingen worden door middel van TCP-handshakes gemaakt en aan het eind van een TCP-sessie verbroken met een handshake voor het beëindigen van een sessie. 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.




Diagram van het verloop van een TCP-verbinding


Een aantal vaak gebruikte 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

  • 5222 XMPP














Popular posts from this blog

Knooppunt Holsloot

Altaar (religie)

Gregoriusmis