Transmission Control Protocol (TCP) is a transport layer network protocol defined in RFC 9293 that provides reliable, ordered, error-checked delivery of byte streams between applications on IP hosts through a three-way handshake, byte numbering, and retransmission of lost data. TCP establishes connections, acknowledges every byte, and implements flow control and congestion management, making it essential for enterprise application traffic including web, email, database sessions, and core network services like DNS zone transfers and large DNS responses. Understanding TCP's behavior, including its connection state overhead, recovery mechanisms, and observability signals like retransmissions and resets, is critical for diagnosing network failures and preventing intermittent outages caused by misconfiguration such as firewalls blocking TCP port 53 for DNS.
So funktioniert TCP
TCP bietet Anwendungen einen zuverlässigen Byte-Strom auf IP-Basis, das Pakete überträgt, ohne deren Ankunft oder Reihenfolge zu garantieren. Dies geschieht durch den Aufbau einer Verbindung und die Verfolgung jedes gesendeten Bytes.
- Verbindung herstellen: Der Client sendet ein SYN-Segment mit einer anfänglichen Sequenznummer. Der Server antwortet mit SYN-ACK, und der Client antwortet mit ACK. Dies ist der Drei-Wege-Handshake.
- Datenübertragung: Jede Seite unterteilt die Daten in Segmente und nummeriert diese nach Byte-Position. Der Empfänger sendet Bestätigungen zurück, die das nächste erwartete Byte bestätigen.
- Kontrollfluss und Überlastung: Der Empfänger gibt ein Fenster bekannt, das begrenzt, wie viele unbestätigte Daten der Sender gleichzeitig übertragen darf. Der Sender verlangsamt zudem seine Übertragung, wenn er Verluste feststellt, die auf eine Netzwerküberlastung hindeuten.
- Wiederherstellung nach Datenverlust: Wenn eine Bestätigung nicht rechtzeitig eintrifft oder wiederholte Bestätigungen auf eine Lücke hinweisen, sendet der Absender die fehlenden Daten erneut. Der Empfänger ordnet die Segmente neu und verwirft Duplikate, bevor er die Daten an die Anwendung weiterleitet.
- Verbindung schließen: Jede Seite sendet ein FIN-Segment, sobald sie das Senden beendet hat, und die andere Seite bestätigt dies. Ein RST-Segment bricht eine Verbindung sofort ab.
Eine Prüfsumme in jedem Segment ermöglicht es dem Empfänger, Datenbeschädigungen zu erkennen. TCP überträgt einen Byte-Strom ohne Nachrichtengrenzen, sodass Anwendungen ihre eigenen Nachrichten in Frames einteilen müssen. Aufgrund des Handshakes und der Bestätigungen verursacht TCP im Vergleich zu UDP zusätzliche Latenz und einen höheren Statusaufwand pro Verbindung.
Häufige Missverständnisse bezüglich TCP
Viele Menschen gehen davon aus, dass DNS niemals TCP verwendet. RFC 7766 schreibt vor, dass DNS-Implementierungen TCP unterstützen müssen, und es wird für abgeschnittene Antworten, Zonentransfers und umfangreiche Antworten verwendet. Eine Firewall, die nur den UDP-Port 53 zulässt, kann bei umfangreichen Antworten zu zeitweiligen Ausfällen führen.
TCP/IP ist eine Protokollfamilie, kein einzelnes Protokoll. IP übernimmt die Adressierung und das Routing von Paketen, während TCP zusätzlich zu IP für Zuverlässigkeit sorgt. Andere Transportprotokolle, wie beispielsweise UDP, laufen ebenfalls über IP.
Die DHCP-Adresszuweisung erfolgt über die UDP-Ports 67 und 68, nicht über TCP. Das Öffnen eines TCP-Ports für DHCP-Clients behebt keine Lease-Fehler; überprüfen Sie stattdessen die UDP-Erreichbarkeit und die Relay-Konfiguration.
TCP garantiert die Zustellung, nicht jedoch eine geringe Latenz. Paketverluste lösen eine erneute Übertragung und Überlastungskontrolle aus, was den Durchsatz verringern und Verzögerungen verursachen kann, sodass sich eine zuverlässige Verbindung über eine verlustbehaftete Leitung dennoch langsam anfühlen kann.
Ein erfolgreicher TCP-Handshake zeigt lediglich an, dass etwas auf Verbindungen wartet und der Pfad die Verbindung zulässt. Die hinter dem Port liegende Anwendung kann dennoch ausfallen, sodass ein Handshake-Test nicht beweist, dass der Dienst korrekt reagiert.