TCP-Pakete enthalten, ähnlich wie bei IP, einen Header sowie Nutzdaten. Die wichtigsten Felder des im Abbildung dargestellten Headers sind die folgenden:
Die Port-Nummer ist eine 16-Bit Adresse, mit deren Hilfe das Betriebssystem entscheiden kann, für welchen Prozeß ein eintreffendes Paket bestimmt ist. Aufgrund der Informationen source adress, destination adress, source port sowie destination port ist eine TCP-Verbindung zwischen zwei Prozessen auf zwei evtl. verschiedenen Rechnern eindeutig bestimmt. Die Ports im Bereich von 0 bis 1023 werden als privilegierte Ports bezeichnet, da sie auf UNIX-Maschinen üblicherweise nur von Prozessen benutzt werden können, die über root-Privilegien verfügen. Die meisten server, d.h. Prozesse, die über das Netz Dienste an die Benutzer anbieten, 'hören' auf einem privilegierten Port, ob ein Verbindungswunsch eintrifft. Die Standard-server, die im folgenden noch einzeln beschrieben werden, verwenden meist einem Port, der sich im gesamten Internet als der übliche Port für diesen Server durchgesetzt hat, man spricht von sogenannten well-known-ports.
Jedes Paket enthält eine 32-Bit-sequence number, die bei Verbindungsaufbau zufällig gewählt wird und dann bei jedem übertragenen Paket um eins erhöht wird. Somit kann sichergestellt werden, daß die Reihenfolge des Abschickens wieder eingenommen werden kann, da Übertragung mittels IP dies ja nicht gewährleistet.
Diese Nummer gibt die sequence number des als nächstes erwarteten Paketes an. Hierdurch werden alle Pakete mit niedrigerer sequence number als korrekt empfangen bestätigt. Dies ermöglicht es zu erkennen, ob einzelne Pakete auf dem Transport verlorengegangen sind.
Dieses Flag zeigt an, ob die Daten im acknowledgement number-Feld gültig sind oder nicht. Dies ist immer der Fall, außer es handelt sich um das allererste Paket einer Verbindung. Somit ist es möglich zu entscheiden, ob ein Paket Teil einer bestehenden Verbindung ist oder zur Initiierung einer neuen Verbindung dient. Dies kann von Bedeutung sein, wenn man nur internen Benutzern den Aufbau einer Verbindung gestatten möchte.
Das SYN-Flag wird beim Verbindungsaufbau gesetzt, um dem Partner anzuzeigen, daß die übertragene sequence number als neue gültige Nummer zu betrachten ist. Der Empfänger schickt nun seinerseits ein Paket mit dem SYN-Flag sowie seiner sequence number, worauf wiederum eine Bestätigung erfolgt. Dieser sogenannte three-way handshake ist in Tabelle [Lynch93] genauer dargestellt.
TCP A State | TCP B State | |
closed | listen | |
SYN-sent | <SEQ=100> <CTL=SYN> | SYN-received |
established | <SEQ=300> <ACK=101> <CTL=SYN,ACK> | SYN-received |
established | <SEQ=101> <ACK=301> <CTL=ACK> | established |