Das Transmission Control Protocol (TCP) ist ein **verbindungsorientiertes** [[netzwerkprotokolle|Protokoll]] in Layer 4 (Transportschicht) des [[osi#transportschicht|OSI Modell]]. TCP basiert auf [[ip|IP]]. Verbindungsorientiert bedeutet das auf gesendete Pakete immer Antwort Pakete zurück kommen die den Empfang bestätigen. [[udp|UDP]] ist das verbindungslose Pendant. [[https://de.wikipedia.org/wiki/SYN-Cookies|SYN Cookies]] wurden gegen SYN-Flooding Attacken entwickelt. Anwendungen übergeben ihren Datenstrom an den TCP/IP-Stack und nehmen ihn von dort auch wieder entgegen. Mit der für die Übertragung nötige TCP-Paketstruktur sowie die Parameter der ausgehandelten Verbindung haben die Anwendungen nichts zu tun. {{tcp_packet_header.gif}} * Source Port (Quellport): 16 Bits * Destination Port (Zielport): 16 Bits * Sequence Number (Sequenznummer): 32 Bits * Acknowledgment Number (Bestätigungsnummer): 32 Bits * Data Offset (Datensegment-Offset): 4 Bits * Reserved (Reserviert): 6 Bits * Control Flags (Steuerungsflags): * URG (Dringlich): 1 Bit * ACK (Bestätigung): 1 Bit * PSH (Dringlich): 1 Bit * RST (Zurücksetzen): 1 Bit * SYN (Synchronisieren): 1 Bit * FIN (Beenden): 1 Bit * Window Size (Fenstergröße): 16 Bits * Checksum (Prüfsumme): 16 Bits * Urgent Pointer (Dringlichkeitszeiger): 16 Bits (optional) * Options (Optionen): Variabel (kann 0 bis 320 Bits sein) * Padding (Auffüllung): Variabel (so viel wie nötig, um das Paket auf das erforderliche Mindestgröße aufzufüllen) =====3 Way Handshake===== Der TCP-Verbindungsaufbau erfolgt in einem sogenannten "Three-Way Handshake". Der Client sendet eine SYN-Anforderung (Synchronize) an den Server. Der Server antwortet mit einem SYN-ACK (Synchronize-Acknowledgment). Schließlich sendet der Client eine ACK-Antwort (Acknowledgment) an den Server. Dadurch wird eine zuverlässige Verbindung zwischen Client und Server hergestellt. =====Segmentierung===== Die Daten, die über TCP übertragen werden sollen, werden in kleinere Einheiten namens Segmente aufgeteilt. Jedes Segment enthält eine Sequenznummer, die die Reihenfolge der Segmente festlegt. =====Zuverlässige Übertragung===== TCP gewährleistet die zuverlässige Übertragung der Segmente durch verschiedene Mechanismen: * Bestätigung (Acknowledgment): Der Empfänger sendet eine Bestätigung (ACK) zurück, um den erfolgreichen Empfang der Segmente zu bestätigen. * Sequenznummern: Die Segmente werden mit Sequenznummern versehen, um sicherzustellen, dass sie in der richtigen Reihenfolge ankommen. * Timeout und Wiederholung: Wenn der Sender keine Bestätigung für ein Segment erhält, wird es erneut gesendet, um sicherzustellen, dass alle Daten erfolgreich übertragen werden. =====Flusskontrolle===== TCP verfügt über Mechanismen zur Flusskontrolle, um sicherzustellen, dass der Sender nicht zu viele Daten auf einmal an den Empfänger sendet. Der Empfänger gibt über sogenannte Fensteranzeigen (Window) an, wie viele Daten er empfangen kann. Der Sender passt dann die Datenübertragung entsprechend an. =====Zuverlässige Zustellung===== TCP stellt sicher, dass alle Datenpakete in der richtigen Reihenfolge und ohne Fehler beim Empfänger ankommen. Dazu werden Prüfsummen verwendet, um die Integrität der Daten zu überprüfen. =====TCP Fast Open===== Aktuell wird an [[https://de.wikipedia.org/wiki/TCP_Fast_Open|TCP Fast Open]], einer TCP Erweiterung gearbeitet die nicht mehr auf SYN - ACK - SYNACK basiert sondern sozusagen alles in einem Schritt erledigt was die Reaktionszeit von Webservices signifikant verbessern wird. Siehe [[https://www.youtube.com/watch?v=cdb7M37o9sU]] {{tcp_fast_open.png}}