# TCP/IP-pakket

Een TCP/IP-pakket, TCP-pakket of TCP/IP-datagram is een IPv4- of een IPv6-datagram waarmee een TCP-segment over een IP-netwerk verstuurd wordt. Een client en een server kunnen elkaar met TCP/IP-pakketten via de netwerklaag gegevens toesturen. TCP/IP-pakketten moeten flexibel zijn omdat het Transmission Control Protocol voor een breed scala aan netwerktoepassingen gebruikt wordt. Omdat TCP/IP-pakketten over praktisch alle soorten computernetwerken getransporteerd worden, moeten de eigenschappen van de pakketten aangepast kunnen worden aan de eisen die de datalinklaag stelt aan een netwerkverbinding.

## Structuur

Een TCP/IP-pakket bestaat uit een IP-header met een lengte van vijf of tien 32 bits woorden en een TCP-segment. Het TCP-segment bestaat uit een TCP-header en een gegevensblok met een variabele lengte. In de informatica wordt het TCP-segment de payload van het IP-pakket of IP-datagram genoemd. In de TCP-header staan metadata over het TCP-segment, zoals de bronpoort en de bestemmingspoort, een checksum en de lengte van het blok met de gegevens.
Structuur van een TCP/IP-pakket :
| Naam | Lengte (32 bits woorden) | Lengte (32 bits woorden) | Lengte (32 bits woorden) |
| Naam | 5 (IPv4) 10 (IPv6) | 5 tot 15 | variabele lengte |
| IP-datagram | IP-header | IP-payload | IP-payload |
| TCP/IP-datagram | IP-header | TCP-segment | TCP-segment |
| TCP/IP-datagram | IP-header | TCP-header | TCP-payload |
Een TCP/IPv4-datagram is dus minimaal 10 woorden (van 32 bit), 40 byte of 320 bit lang en de lengte van een TCP/IPv6-datagram is minstens 15 woorden, 60 byte of 480 bit.

## TCP-segment

Een TCP-segment bestaat uit een TCP-header met een lengte van 5 tot 15 (32 bits) woorden, die wordt gevolgd door een payload van variabele lengte.

### MSS, MTU en fragmentatie

De maximale lengte van een pakket dat over een netwerkverbinding verstuurd kan worden wordt de maximale transmissie-eenheid (MTU) van de netwerkverbinding genoemd. Als een pakket groter is dan de MTU dan kan de netwerkapparatuur door middel van fragmentatie te grote pakketten soms toch, met een verhoogd risico op congestie en gegevensverlies, over een netwerkverbinding met een kleinere MTU versturen.
Helaas kunnen niet alle netwerken en hosts IPv4-datagrammen met de maximale lengte van 65.535 byte (64 kB) verwerken zodat de maximale lengte van een TCP-segment, de Maximum Segment Size (MSS), in de praktijk door de eigenschappen van de datalinklaag bepaald wordt. Omdat de lengte van een TCP-header 20 byte is, is de maximale lengte van een TCP-segment 20 byte kleiner dan de maximale lengte van de payload van een IP-pakket. De maximale lengte van een IPv4-pakket is 65.535 bytes zodat de MSS van een TCP-segment in een IPv4-pakket in theorie 65.515 byte is. De maximale lengte van een IPv6-pakket is in 4 GB zodat de MSS van een TCPv6-segment tot ongeveer 4 GB kan oplopen.

### IPv4, IPv6 en jumbogrammen

De lengte van IPv4-datagrammen die een netwerk, een host of een router naar een subnet nog kan verwerken moet minstens 576 byte zijn. Met een IPv4-pakket moet dus altijd een TCP-segment met een payload van 536 byte verstuurd kunnen worden. Internetverbindingen hebben een MTU die kan variëren van 68 byte tot 64 kB voor IPv4 en van 1,28 kB tot 64 kB voor IPv6. Voor jumbogrammen kan de MTU in theorie oplopen tot 4 GB. Ethernetverbindingen hebben meestal een MTU van 1500 bytes.
Een jumbogram is een IPv6-datagram met een maximale lengte van (2$^{32}$ - 1) = 4.294.967.295 byte of 4 GB. In de praktijk zal de MTU met het gebruik van jumbo frames en Path MTU Discovery kunnen oplopen tot (iets boven de) 7 kB tot 9 kB.