www.wikidata.de-de.nina.az
TCP Transmission Control Protocol Familie InternetprotokollfamilieEinsatzgebiet Zuverlassiger bidirektionaler DatentransportTCP im TCP IP Protokollstapel Anwendung HTTP SMTP Transport TCPInternet IP IPv4 IPv6 Netzzugang Ethernet TokenBus TokenRing FDDI Standards RFC 9293 2022 1 RFC 7323 2014 2 Das Transmission Control Protocol TCP englisch fur Ubertragungssteuerungsprotokoll ist ein Netzwerkprotokoll das definiert auf welche Art und Weise Daten zwischen Netzwerkkomponenten ausgetauscht werden sollen Nahezu samtliche aktuelle Betriebssysteme moderner Computer beherrschen TCP und nutzen es fur den Datenaustausch mit anderen Rechnern Das Protokoll ist ein zuverlassiges verbindungsorientiertes paketvermitteltes 3 Transportprotokoll in Computernetzwerken Es ist Teil der Internetprotokollfamilie der Grundlage des Internets Entwickelt wurde TCP von Robert E Kahn und Vinton G Cerf Ihre Forschungsarbeit die sie im Jahr 1973 begannen dauerte mehrere Jahre Die erste Standardisierung von TCP erfolgte deshalb erst im Jahr 1981 als RFC 793 4 Danach gab es viele Erweiterungen die bis heute in neuen RFCs einer Reihe von technischen und organisatorischen Dokumenten zum Internet spezifiziert werden RFC 9293 1 bundelt die ursprungliche Fassung und alle ihre Erweiterungen in ein einziges Dokument Im Unterschied zum verbindungslosen UDP englisch User Datagram Protocol stellt TCP eine Verbindung zwischen zwei Endpunkten einer Netzverbindung Sockets her Auf dieser Verbindung konnen in beide Richtungen Daten ubertragen werden TCP setzt in den meisten Fallen auf das IP Internet Protokoll auf weshalb haufig und oft nicht ganz korrekt auch vom TCP IP Protokoll die Rede ist In Protokollstapeln wie dem OSI Modell sind TCP und IP nicht auf derselben Schicht angesiedelt TCP ist eine Implementierung der Transportschicht Aufgrund seiner vielen positiven Eigenschaften Datenverluste werden erkannt und automatisch behoben Datenubertragung ist in beiden Richtungen moglich Netzuberlastung wird verhindert usw ist TCP ein sehr weit verbreitetes Protokoll zur Datenubertragung Beispielsweise wurde TCP lange Zeit als fast ausschliessliches Transportprotokoll fur das WWW E Mail und viele andere populare Netzdienste verwendet Im WWW bekommt TCP Konkurrenz durch das verschlusselte Transportprotokoll QUIC das im Jahr 2021 standardisiert wurde Inhaltsverzeichnis 1 Allgemeines 2 Verbindungsaufbau und abbau 2 1 Halb geschlossene Verbindungen 2 2 Halb offene Verbindungen 2 3 Verbindungsaufbau 2 4 Verbindungsabbau 2 5 Puffer 2 6 Drei Wege Handschlag 3 Aufbau des TCP Headers 3 1 Allgemeines 3 2 Erlauterung 4 Datenubertragung 4 1 TCP IP Segment Grosse 4 2 Aufteilen der Anwendungsdaten auf TCP IP Segmente 4 3 Beispiel einer TCP IP Datenubertragung 4 4 Retransmission Timer 4 5 Zusammenhang von Flusssteuerung und Staukontrolle 4 6 Flusssteuerung 4 7 Uberlaststeuerung Staukontrolle Congestion Control 4 7 1 Algorithmus zur Uberlaststeuerung 4 7 2 Slow Start und Congestion Avoidance 4 7 3 Fast Retransmit und Fast Recovery 4 7 4 Selective ACKs SACK 4 7 5 TCP Tahoe und TCP Reno 4 8 Uberlaststeuerung als Forschungsfeld 5 TCP Prufsumme und TCP Pseudo Header 6 Datenintegritat und Zuverlassigkeit 7 Bestatigungen 8 Siehe auch 9 Literatur 10 Weblinks 11 EinzelnachweiseAllgemeines BearbeitenTCP ist im Prinzip eine Ende zu Ende Verbindung in Vollduplex welche die Ubertragung der Informationen in beide Richtungen zulasst analog zu einem Telefongesprach Diese Verbindung kann auch als zwei Halbduplexverbindungen bei denen Informationen in beide Richtungen allerdings nicht gleichzeitig fliessen konnen betrachtet werden Die Daten in Gegenrichtung konnen dabei zusatzliche Steuerungsinformationen enthalten Die Verwaltung dieser Verbindung sowie die Datenubertragung werden von der TCP Software ubernommen Die TCP Software ist ublicherweise im Netz Protokollstack des Betriebssystems angesiedelt Anwendungsprogramme benutzen eine Schnittstelle dazu meist Sockets die sich je nach Betriebssystem unterschiedlich beispielsweise bei Microsoft Windows in extra einzubindenden Programmbibliotheken Winsock dll bzw wsock32 dll befinden Linux und viele andere unixoide Betriebssysteme enthalten einen Socketlayer im Betriebssystemkern Auf den Socketlayer wird uber Systemaufrufe zugegriffen Anwendungen die TCP haufig nutzen sind zum Beispiel Webbrowser und Webserver Jede TCP Verbindung wird eindeutig durch zwei Endpunkte identifiziert Ein Endpunkt stellt ein geordnetes Paar dar bestehend aus IP Adresse und Port Ein solches Paar bildet eine bidirektionale Software Schnittstelle und wird auch als Socket bezeichnet Somit wird eine TCP Verbindung durch vier Werte einem Quadrupel identifiziert Lokaler Rechner Lokaler Port Entfernter Rechner Entfernter Port Dabei kommt es auf das gesamte Quadrupel an Beispielsweise konnen zwei verschiedene Prozesse auf demselben Rechner denselben lokalen Port benutzen und dabei sogar mit demselben Rechner auf der gegenuberliegenden Seite kommunizieren sofern die beteiligten Prozesse auf der anderen Seite unterschiedliche Ports benutzen In einem solchen Fall wurde es sich um zwei verschiedene Verbindungen handeln deren Quadrupel sich nur in einem von vier Werten unterscheidet dem Port auf der gegenuberliegenden Seite Verbindung 1 Lokaler Rechner Port x Entfernter Rechner Port y Verbindung 2 Lokaler Rechner Port x Entfernter Rechner Port z Ein Serverprozess erzeugt beispielsweise einen Socket socket bind auf Port 80 markiert diesen fur eingehende Verbindungen listen und fordert vom Betriebssystem die nachste anstehende Verbindung an accept Diese Anforderung blockiert den Serverprozess zunachst da noch keine Verbindung existiert Kommt dann die erste Verbindungsanfrage durch einen Client an wird sie vom Betriebssystem angenommen so dass die Verbindung zustande kommt Ab jetzt wird diese Verbindung durch das oben beschriebene Quadrupel identifiziert Schliesslich wird der Serverprozess aufgeweckt und ihm ein Handle fur diese Verbindung uberreicht Ublicherweise startet der Serverprozess anschliessend einen Kindprozess zu dem er die Behandlung der Verbindung delegiert Er selbst setzt dann seine Arbeit mit einer weiteren Accept Anforderung an das Betriebssystem fort Dadurch ist es moglich dass ein Webserver mehrere Verbindungen von verschiedenen Rechnern annehmen kann Mehrfaches listen auf demselben Port ist nicht moglich Ublicherweise bestimmt das Programm auf der Clientseite den Port nicht selbst sondern lasst ihn sich vom Betriebssystem zuweisen Ports sind 16 Bit Zahlen Portnummern und reichen von 0 bis 65535 Ports von 0 bis 1023 sind reserviert 5 und werden von der IANA vergeben z B ist Port 80 fur das im WWW verwendete HTTP reserviert Das Benutzen der vordefinierten Ports ist nicht bindend So kann jeder Administrator beispielsweise einen FTP Server normalerweise Port 21 auch auf einem beliebigen anderen Port laufen lassen Verbindungsaufbau und abbau Bearbeiten nbsp Verwaltung der TCP Verbindungen als endlicher AutomatEin Server der seinen Dienst anbietet erzeugt einen Endpunkt Socket mit der Portnummer und seiner IP Adresse Dies wird als passive open 6 oder auch als listen 7 bezeichnet Will ein Client eine Verbindung aufbauen erzeugt er einen eigenen Socket aus seiner Rechneradresse und einer eigenen noch freien Portnummer Mit Hilfe eines ihm bekannten Ports und der Adresse des Servers kann dann eine Verbindung aufgebaut werden Eine TCP Verbindung ist durch folgende 4 Werte eindeutig identifiziert Quell IP Adresse Quell Port Ziel IP Adresse Ziel PortWahrend der Datenubertragungsphase active open sind die Rollen von Client und Server aus TCP Sicht vollkommen symmetrisch Insbesondere kann jeder der beiden beteiligten Rechner einen Verbindungsabbau einleiten Halb geschlossene Verbindungen Bearbeiten Der Verbindungsabbau kann auf zwei Arten erfolgen beidseitig oder schrittweise einseitig Bei letzterer Variante spricht man von einer halb geschlossenen Verbindung nicht zu verwechseln mit halb offenen Verbindungen siehe unten Sie erlaubt der Gegenseite nach der einseitigen Trennung noch Daten zu ubertragen Halb geschlossene Verbindungen sind ein Erbe des Betriebssystems Unix in dessen Umfeld TCP entstanden ist Entsprechend dem Grundsatz everything is a file deutsch Alles ist eine Datei unterstutzt Unix bei TCP Verbindungen eine zu Pipes vollig analoge Interaktion zweier Prozesse fur ein Programm soll es schlichtweg irrelevant sein ob es von einer TCP Verbindung oder einer Datei liest Ein Unix Programm liest typischerweise bis zum Ende der Standardeingabe und schreibt anschliessend das Verarbeitungsergebnis in die Standardausgabe Die Standard Datenstrome werden vor Ausfuhrung des Programms mit Dateien verbunden Die Hin und Ruckkanale einer TCP Verbindung werden mit Standardein und ausgabe verbunden und somit logisch als je eine Datei reprasentiert Eine geschlossene Verbindung wird dem lesenden Prozess als erreichtes Dateiende ubersetzt Das angesprochene typische Unix Verarbeitungsschema setzt voraus dass die Verbindung in Ruckrichtung nach dem Lesen des Dateiendes noch zum Schreiben bereitsteht woraus der Bedarf fur halb geschlossene Verbindungen resultiert 8 Halb offene Verbindungen Bearbeiten Eine Verbindung ist halb offen wenn eine Seite absturzt ohne dass die verbleibende Seite dies erfahrt Dies hat den unerwunschten Effekt dass Betriebssystemressourcen nicht freigegeben werden Halb offene Verbindungen konnen entstehen weil TCP Verbindungen von Protokollseite solange bestehen bis sie abgebaut werden Haufig werden jedoch von Anwendungsseite entsprechende Vorkehrungen getroffen Verbindungsaufbau Bearbeiten nbsp TCP HandshakeDer Client der eine Verbindung aufbauen will sendet dem Server ein SYN Paket von englisch synchronize mit einer Sequenznummer x Die Sequenznummern sind dabei fur die Sicherstellung einer vollstandigen Ubertragung in der richtigen Reihenfolge und ohne Duplikate wichtig Es handelt sich also um ein Paket dessen SYN Bit im Paketkopf gesetzt ist siehe TCP Header Die Start Sequenznummer auch Initial Sequence Number ISN genannt ist eine beliebige Zahl deren Generierung von der jeweiligen TCP Implementierung abhangig ist Sie sollte jedoch moglichst zufallig sein um Sicherheitsrisiken zu vermeiden 9 Der Server siehe Skizze empfangt das Paket Ist der Port geschlossen antwortet er mit einem TCP RST um zu signalisieren dass keine Verbindung aufgebaut werden kann Ist der Port geoffnet bestatigt er den Erhalt des ersten SYN Pakets und stimmt dem Verbindungsaufbau zu indem er ein SYN ACK Paket zuruckschickt ACK von engl acknowledgement Bestatigung Das gesetzte ACK Flag im TCP Header kennzeichnet diese Pakete welche die Sequenznummer x 1 des SYN Pakets im Header enthalten Zusatzlich sendet er im Gegenzug seine Start Sequenznummer y die ebenfalls beliebig und unabhangig von der Start Sequenznummer des Clients ist Der Client bestatigt zuletzt den Erhalt des SYN ACK Pakets durch das Senden eines eigenen ACK Pakets mit der Sequenznummer x 1 Dieser Vorgang wird auch als Forward Acknowledgement bezeichnet Aus Sicherheitsgrunden sendet der Client den Wert y 1 die Sequenznummer des Servers 1 im ACK Segment zuruck Die Verbindung ist damit aufgebaut Im folgenden Beispiel wird der Vorgang abstrakt dargestellt 1 SYN SENT lt SEQ 100 gt lt CTL SYN gt SYN RECEIVED2 SYN ACK RECEIVED lt SEQ 300 gt lt ACK 101 gt lt CTL SYN ACK gt SYN ACK SENT3 ACK SENT lt SEQ 101 gt lt ACK 301 gt lt CTL ACK gt ESTABLISHEDEinmal aufgebaut ist die Verbindung fur beide Kommunikationspartner gleichberechtigt man kann einer bestehenden Verbindung auf TCP Ebene nicht ansehen wer der Server und wer der Client ist Daher hat eine Unterscheidung dieser beiden Rollen in der weiteren Betrachtung keine Bedeutung mehr Verbindungsabbau Bearbeiten nbsp TCP TeardownDer geregelte Verbindungsabbau erfolgt ahnlich Statt des SYN Bits kommt das FIN Bit von englisch finish Ende Abschluss zum Einsatz welches anzeigt dass keine Daten mehr vom Sender kommen werden Der Erhalt des Pakets wird wiederum mittels ACK bestatigt Der Empfanger des FIN Pakets sendet zuletzt seinerseits ein FIN Paket das ihm ebenfalls bestatigt wird Zudem ist ein verkurztes Verfahren moglich bei dem FIN und ACK genau wie beim Verbindungsaufbau im selben Paket untergebracht werden Die maximum segment lifetime MSL ist die maximale Zeit die ein Segment im Netzwerk verbringen kann bevor es verworfen wird Nach dem Senden des letzten ACKs wechselt der Client in einen zwei MSL andauernden Wartezustand wait state in dem alle verspateten Segmente verworfen werden Dadurch wird sichergestellt dass keine verspateten Segmente fehlinterpretiert werden konnen als Teil einer neuen Verbindung die zufallig den gleichen Port benutzt Ausserdem wird eine korrekte Verbindungsterminierung sichergestellt Geht ACK y 1 verloren lauft beim Server der Timer ab und das LAST ACK Segment wird erneut ubertragen Puffer Bearbeiten Beim Versenden von Daten uber das TCP werden zwei Puffer verwendet Senderseitig ubermittelt die Applikation die zu sendenden Daten an das TCP und dieses puffert die Daten um mehrere kleine Ubertragungen effizienter in Form einer einzigen grossen zu senden Nachdem die Daten dann an den Empfanger ubermittelt wurden landen sie im empfangerseitigen Puffer Dieser verfolgt ahnliche Ziele Wenn vom TCP mehrere einzelne Pakete empfangen wurden ist es besser diese zusammengefugt an die Applikation weiterzugeben Drei Wege Handschlag Bearbeiten Sowohl beim Verbindungsaufbau als auch beim Verbindungsabbau werden die Antworten auf das erste SYN bzw FIN Paket typischerweise zu einem einzelnen Paket SYN ACK bzw FIN ACK zusammengefasst theoretisch ware auch das Versenden zweier separater Pakete denkbar Da in diesem Fall nur noch drei Pakete versendet werden mussen spricht man auch haufig vom sogenannten Drei Wege Handschlag Das Zusammenfassen des FIN Pakets und des ACK Pakets ist allerdings problematisch da das Senden eines FIN Pakets die Bedeutung hat es folgen keine weiteren Daten mehr Allerdings kann der Sender des FIN Pakets weiterhin Daten empfangen wollen man spricht von einer halb geschlossenen Verbindung die Empfangsrichtung ist weiterhin offen wahrend die Senderichtung geschlossen wurde Es ware z B denkbar den Beginn einer HTTP Anfrage HTTP Request direkt im SYN Paket mitzuschicken weitere Daten sobald die Verbindung aufgebaut wurde und im letzten HTTP Request Paket die Senderichtung der Verbindung gleich mittels FIN zu schliessen In der Praxis wird dieses Verfahren allerdings nicht angewendet Wurde der Browser die Verbindung auf diese Art sofort schliessen wurde moglicherweise auch der Server die Verbindung schliessen anstatt die Anfrage vollstandig zu beantworten Aufbau des TCP Headers BearbeitenAllgemeines Bearbeiten Das TCP Segment besteht immer aus zwei Teilen dem Header und der Nutzlast englisch payload Die Nutzlast enthalt die zu ubertragenden Daten die wiederum Protokollinformationen der Anwendungsschicht wie HTTP oder FTP entsprechen konnen Der Header enthalt fur die Kommunikation erforderliche Daten sowie die Dateiformat beschreibende Information Den schematischen Aufbau des TCP Headers kann man in Abbildung 5 sehen Da das Options Feld in der Regel nicht genutzt wird hat ein typischer Header eine Grosse von 20 Byte Die Werte werden in der Byte Reihenfolge Big Endian angegeben Erlauterung Bearbeiten nbsp Aufbau des TCP HeadersSource Port Quellport 2 Byte Gibt die Portnummer auf der Senderseite an Destination Port Zielport 2 Byte Gibt die Portnummer auf der Empfangerseite an Sequence Number 4 Byte Sequenznummer des ersten Daten Oktetts Byte dieses TCP Pakets oder die Initialisierungs Sequenznummer falls das SYN Flag gesetzt ist Nach der Datenubertragung dient sie zur Sortierung der TCP Segmente da diese in unterschiedlicher Reihenfolge beim Empfanger ankommen konnen Acknowledgement Number Quittierungsnummer 4 Byte Sie gibt die Sequenznummer an die der Absender dieses TCP Segmentes als Nachstes erwartet Sie ist nur gultig falls das ACK Flag gesetzt ist Data Offset 4 Bit Lange des TCP Headers in 32 Bit Blocken ohne die Nutzdaten Payload Hiermit wird die Startadresse der Nutzdaten angezeigt Reserved 4 Bit Das Reserved Feld ist fur zukunftige Verwendungen reserviert Alle Bits mussen null sein Control Flags 8 Bit Sind zweiwertige Variablen mit den moglichen Zustanden gesetzt und nicht gesetzt die zur Kennzeichnung bestimmter fur die Kommunikation und Weiterverarbeitung der Daten wichtiger Zustande benotigt werden Im Folgenden werden die Flags des TCP Headers und die von ihrem Zustand abhangigen auszufuhrenden Aktionen beschrieben CWR und ECE sind zwei Flags die fur Explicit Congestion Notification ECN benotigt werden Mit gesetztem ECE Bit ECN Echo teilt der Empfanger dem Sender mit dass das Netzwerk uberlastet ist und die Senderate reduziert werden muss Hat der Sender das getan teilt er dies dem Empfanger durch Setzen des CWR Bit Congestion Window Reduced mit URG Ist das Urgent Flag urgent dringend gesetzt so werden die Daten nach dem Header sofort von der Anwendung bearbeitet Dabei unterbricht die Anwendung die Verarbeitung der Daten des aktuellen TCP Segments und liest alle Bytes nach dem Header bis zu dem Byte auf das das Urgent Pointer Feld zeigt aus Dieses Verfahren ist fern verwandt mit einem Software Interrupt Dieses Flag kann zum Beispiel verwendet werden um eine Anwendung auf dem Empfanger abzubrechen Das Verfahren wird nur ausserst selten benutzt Beispiele sind die bevorzugte Behandlung von CTRL C Abbruch bei einer Terminalverbindung uber rlogin oder telnet In der Regel wird dieses Flag nicht ausgewertet ACK Das Acknowledgment Flag hat in Verbindung mit der Acknowledgment Nummer die Aufgabe den Empfang von TCP Segmenten beim Datentransfer zu bestatigen Die Acknowledgment Nummer ist nur gultig wenn das Flag gesetzt ist PSH RFC 1122 10 und RFC 793 4 spezifizieren das Push Flag so dass bei gesetztem Flag sowohl der ausgehende als auch der eingehende Puffer ubergangen wird Da man bei TCP keine Datagramme versendet sondern einen Datenstrom hat hilft das PSH Flag den Strom effizienter zu verarbeiten da die empfangende Applikation so gezielter aufgeweckt werden kann und nicht bei jedem eintreffenden Datensegment feststellen muss dass Teile der Daten noch nicht empfangen wurden die aber notig waren um uberhaupt weitermachen zu konnen Hilfreich ist dies wenn man zum Beispiel bei einer Telnet Sitzung einen Befehl an den Empfanger senden will Wurde dieser Befehl erst im Puffer zwischengespeichert werden so wurde dieser stark verzogert abgearbeitet werden Das PSH Flag kann abhangig von der TCP Implementation im Verhalten zu obiger Erklarung abweichen RST Das Reset Flag wird verwendet wenn eine Verbindung abgebrochen werden soll Dies geschieht zum Beispiel bei technischen Problemen oder zur Abweisung unerwunschter Verbindungen wie etwa nicht geoffneten Ports hier wird anders als bei UDP kein ICMP Paket mit Port Unreachable verschickt SYN Pakete mit gesetztem SYN Flag initiieren eine Verbindung Der Server antwortet normalerweise entweder mit SYN ACK wenn er bereit ist die Verbindung anzunehmen andernfalls mit RST Dient der Synchronisation von Sequenznummern beim Verbindungsaufbau daher die Bezeichnung SYN FIN Dieses Schlussflag finish dient zur Freigabe der Verbindung und zeigt an dass keine weiteren Daten mehr vom Sender kommen Die FIN und SYN Flags haben Sequenznummern damit diese in der richtigen Reihenfolge abgearbeitet werden dd Receive Window 2 Byte Ist nach Multiplikation mit dem Fensterskalierungsfaktor die Anzahl der Daten Oktetts Bytes beginnend bei dem durch das Acknowledgementfeld indizierten Daten Oktett die der Sender dieses TCP Pakets bereit ist zu empfangen Checksum 2 Byte Die Prufsumme dient zur Erkennung von Ubertragungsfehlern und wird uber den TCP Header die Daten und einen Pseudo Header berechnet Dieser Header besteht aus der Ziel IP der Quell IP der TCP Protokollkennung 0x0006 und der Lange des TCP Headers inkl Nutzdaten in Bytes Urgent Pointer 2 Byte Zusammen mit der Sequenz Nummer gibt dieser Wert die Position des ersten Bytes nach den Urgent Daten im Datenstrom an Die Urgent Daten beginnen sofort nach dem Header Der Wert ist nur gultig wenn das URG Flag gesetzt ist Options 0 40 Byte Das Options Feld ist unterschiedlich gross und enthalt Zusatzinformationen Die Optionen mussen ein Vielfaches von 32 Bit lang sein Sind sie das nicht muss mit Nullbits aufgefullt werden Padding Dieses Feld ermoglicht Verbindungsdaten auszuhandeln die nicht im TCP Header enthalten sind wie zum Beispiel die Maximalgrosse des Nutzdatenfeldes Datenubertragung Bearbeiten nbsp Segmentierung der NutzdatenTCP IP Segment Grosse Bearbeiten Ein TCP Segment hat typischerweise eine Grosse von maximal 1500 Bytes Ein TCP Segment muss jedoch in die darunter liegende Ubertragungsschicht passen das Internetprotokoll IP siehe hierzu auch Maximum Transmission Unit MTU IP Pakete wiederum sind zwar theoretisch bis 65 535 Bytes 64 KiB spezifiziert werden aber selbst meist uber Ethernet ubertragen und bei Ethernet ist die Grosse der Layer 3 Nutzdaten wenn man von Jumbo Frames absieht auf 64 ggf inklusive Padding bis 1500 Bytes festgelegt TCP und IP Protokoll definieren jeweils einen Header von 20 Bytes Grosse Fur die Applikations Nutzdaten bleiben in einem TCP IP Paket also 1460 Bytes 1500 Bytes Ethernet Nutzdaten 20 Bytes Headerdaten TCP 20 Bytes Headerdaten IP ubrig Da die meisten Internet Anschlusse DSL verwenden kommt dort zusatzlich noch das Point to Point Protocol PPP zwischen IP und Ethernet zur Anwendung was weitere 8 Bytes fur den PPP Rahmen verbraucht Die Nutzdaten reduzieren sich also auf insgesamt 1500 20 20 8 1452 Bytes MSS Maximum Segment Size Dies entspricht einer maximalen Nutzdatenrate von 96 8 Aufteilen der Anwendungsdaten auf TCP IP Segmente Bearbeiten Empfanger und Sender einigen sich vor dem Datenaustausch uber das Options Feld auf die Grosse der MSS Die Anwendung die Daten versenden mochte etwa ein Webserver legt zum Beispiel einen 7 Kilobyte grossen Datenblock im Puffer ab Um mit einem 1460 Byte grossen Nutzdatenfeld 7 Kilobyte Daten zu versenden teilt die TCP Software die Daten auf mehrere Pakete auf fugt einen TCP Header hinzu und versendet die TCP Segmente Dieser Vorgang wird Segmentierung genannt Der Datenblock im Puffer wird in funf Segmente aufgeteilt siehe Abb Segmentierung Jedes Segment erhalt durch die TCP Software einen TCP Header Die TCP Segmente werden nacheinander abgeschickt Diese kommen beim Empfanger nicht notwendigerweise in derselben Reihenfolge an in der sie versendet wurden da im Internet unter Umstanden jedes TCP Segment einen anderen Weg nimmt Damit die TCP Software im Empfanger die Segmente wieder sortieren kann ist jedes Segment nummeriert Bei der Zuordnung der Segmente im Empfanger wird die Sequenznummer herangezogen nbsp Beispiel eines DatentransfersDie TCP Software des Empfangers bestatigt diejenigen TCP Segmente die einwandfrei das heisst mit korrekter Prufsumme angekommen sind Andernfalls werden die Pakete neu angefordert Beispiel einer TCP IP Datenubertragung Bearbeiten Der Sender schickt sein erstes TCP Segment mit einer Sequenznummer SEQ 1 variiert und einer Nutzdatenlange von 1460 Bytes an den Empfanger Der Empfanger bestatigt es mit einem TCP Header ohne Daten mit ACK 1461 und fordert damit das zweite TCP Segment ab dem Byte Nummer 1461 beim Sender an Dieser schickt es dann mit einem TCP Segment und SEQ 1461 an den Empfanger Dieser bestatigt es wieder mit einem ACK 2921 und so weiter Der Empfanger braucht nicht jedes TCP Segment zu bestatigen wenn diese zusammenhangend sind Empfangt er die TCP Segmente 1 5 so braucht er nur das letzte TCP Segment zu bestatigen Fehlt zum Beispiel das TCP Segment 3 weil es verlorengegangen ist so kann er nur die 1 und die 2 bestatigen 4 und 5 jedoch noch nicht Da der Sender keine Bestatigung fur die 3 bekommt lauft sein Timer ab und er verschickt die 3 noch einmal Kommt die 3 beim Empfanger an so bestatigt er alle funf TCP Segmente sofern beide Seiten die TCP Option SACK Selective ACK unterstutzen Der Sender startet fur jedes TCP Segment welches er auf die Reise schickt einen Retransmission Timer Retransmission Timer Bearbeiten Zur Feststellung wann ein Paket im Netzwerk verloren gegangen ist wird vom Sender ein Timeout verwendet bis zu dem das ACK der Gegenseite eingetroffen sein muss Ein zu niedriger Timeout bewirkt dass Pakete die eigentlich korrekt angekommen sind wiederholt werden ein zu hoher Timeout bewirkt dass bei tatsachlichen Verlusten das zu wiederholende Paket unnotig spat gesendet wird Aufgrund unterschiedlicher Laufzeiten der zugrundeliegenden IP Pakete ist nur ein dynamisch an die Verbindung angepasster Timer sinnvoll Die Details werden in RFC 6298 11 wie folgt festgelegt Der Timeout RTO Retransmission Timeout berechnet sich aus zwei beim Sender mitgefuhrten Statusvariablen der geschatzten Round Trip Time SRTT Smoothed RTT sowie deren Varianz RTTVAR Initial wird geschatzt dass RTO 1s um die Kompatibilitat mit der alteren Version des Dokuments zu schaffen sind auch Werte gt 1s moglich Nach der Messung der RTT des ersten gesendeten Pakets wird gesetzt SRTT RTT RTTVAR 0 5 RTT RTO RTT 4 RTTVAR Sollte 4 RTTVAR kleiner sein als die Messgenauigkeit des Timers wird stattdessen diese addiert Bei jeder weiteren Messung der RTT werden die Werte aktualisiert hierbei muss RTTVAR vor SRTT berechnet werden RTTVAR 1 b RTTVAR b SRTT RTT Auch die Varianz wird mit einem Faktor b geglattet da die Varianz eine durchschnittliche Abweichung angibt welche immer positiv ist wird hier der Betrag der Abweichung von geschatzter und tatsachlicher RTT verwendet nicht die einfache Differenz Es wird empfohlen b 1 4 zu wahlen SRTT 1 a SRTT a RTT Es wird somit nicht einfach die neue RTT gesetzt sondern diese mit einem Faktor a geglattet Es wird empfohlen a 1 8 zu wahlen RTO SRTT 4 RTTVAR Sollte 4 RTTVAR kleiner sein als die Messgenauigkeit des Timers wird stattdessen diese addiert Fur den RTO gilt unabhangig von der Berechnung ein Minimalwert von 1 s es darf auch ein Maximalwert vergeben werden sofern dieser mindestens 60 s betragt Durch die Wahl von 2er Potenzen 4 bzw 1 2 1 4 etc als Faktoren konnen die Berechnungen in der Implementierung durch einfache Shift Operationen realisiert werden Zur Messung der RTT muss der Karn Algorithmus von Phil Karn verwendet werden d h es werden nur diejenigen Pakete zur Messung verwendet deren Bestatigung eintrifft ohne dass das Paket zwischendurch erneut gesendet wurde Der Grund dafur ist dass bei einer erneuten Ubertragung nicht klar ware welches der wiederholt gesendeten Pakete tatsachlich bestatigt wurde so dass eine Aussage uber die RTT eigentlich nicht moglich ist Wurde ein Paket nicht innerhalb des Timeouts bestatigt so wird der RTO verdoppelt sofern er noch nicht die optionale obere Schranke erreicht hat In diesem Fall durfen ebenfalls optional die fur SRTT und RTTVAR gefundenen Werte auf ihren Anfangswert zuruckgesetzt werden da sie moglicherweise die Neuberechnung der RTO storen konnten Zusammenhang von Flusssteuerung und Staukontrolle Bearbeiten In den folgenden zwei Abschnitten werden die TCP Konzepte zur Flusssteuerung und Staukontrolle oder Uberlaststeuerung erlautert Dabei werden das Sliding Window und das Congestion Window eingefuhrt Der Sender wahlt als tatsachliche Sendefenstergrosse das Minimum aus beiden Fenstern Um eine zuverlassige Datenubertragung durch Sendewiederholungen zu gewahrleisten werden sogenannte ARQ Protokolle englisch Automatic Repeat reQuest deutsch Automatische Wiederholungsanfrage eingesetzt Flusssteuerung Bearbeiten nbsp Sliding WindowDa die Anwendung Daten aus dem Puffer liest andert sich der Fullstand des Puffers standig Deshalb ist es notwendig den Datenfluss dem Fullstand entsprechend zu steuern Dies geschieht mit dem Sliding Window und dessen Grosse Den Puffer des Senders erweitern wir wie in der nebenstehenden Abbildung zu sehen auf 10 Segmente Im Teilbild a werden gerade die Segmente 1 5 ubertragen Die Ubertragung ist vergleichbar mit dem Beispiel Datentransfer Obwohl der Puffer des Empfangers am Ende voll ist fordert er mit ACK 7301 die nachsten Daten ab dem Byte 7301 beim Sender an Dies hat zur Folge dass das nachste TCP Segment vom Empfanger nicht mehr verarbeitet werden kann Ausnahmen sind jedoch TCP Segmente mit gesetztem URG Flag Mit dem Window Feld kann er dem Sender mitteilen dass er keine Daten mehr verschicken soll Dies geschieht indem er im Window Feld den Wert Null eintragt Zero Window Der Wert Null entspricht dem freien Speicherplatz im Puffer Die Anwendung des Empfangers liest nun die Segmente 1 5 aus dem Puffer womit wieder ein Speicherplatz von 7300 Byte frei ist Damit kann er die restlichen Segmente 6 10 mit einem TCP Header der die Werte SEQ 1 ACK 7301 und Window 7300 enthalt beim Sender anfordern Der Sender weiss nun dass er maximal funf TCP Segmente an den Empfanger schicken kann und verschiebt das Window um funf Segmente nach rechts siehe Teilbild b Die Segmente 6 10 werden nun alle zusammen als Burst verschickt Kommen alle TCP Segmente beim Empfanger an so quittiert er sie mit SEQ 1 und ACK 14601 und fordert die nachsten Daten an Silly Window Syndrome Der Empfanger sendet ein Zero Window an den Sender da sein Puffer voll ist Die Anwendung beim Empfanger liest allerdings nur zwei Byte aus dem Puffer Der Empfanger schickt einen TCP Header mit Window 2 Window Update an den Sender und fordert gleichzeitig die zwei Byte an Der Sender kommt der Aufforderung nach und schickt die zwei Byte in einem 42 Byte grossen Paket mit IP Header und TCP Header an den Empfanger Damit ist der Puffer des Empfangers wieder voll und er schickt wieder ein Zero Window an den Sender Die Anwendung liest jetzt zum Beispiel hundert Byte aus dem Puffer Der Empfanger schickt wieder einen TCP Header mit einem kleinen Window Wert an den Sender Dieses Spiel setzt sich immer wieder fort und verschwendet Bandbreite da nur sehr kleine Pakete versandt werden Clarks Losung ist dass der Empfanger ein Zero Window sendet und so lange mit dem Window Update warten soll bis die Anwendung mindestens die maximale Segmentgrosse maximum segment size in unseren bisherigen Beispielen 1460 Byte aus dem Puffer gelesen hat oder der Puffer halbleer ist je nachdem was zuerst eintritt Dave Clark 1982 Auch der Sender kann zu kleine Pakete abschicken und dadurch Bandbreite verschwenden Dieser Umstand wird mit dem Nagle Algorithmus beseitigt Deswegen erganzt er sich mit Clarks Losung Uberlaststeuerung Staukontrolle Congestion Control Bearbeiten Im Internet in dem viele Netze mit unterschiedlichen Eigenschaften verbunden werden ist Datenverlust einzelner Pakete durchaus normal Wird eine Verbindung stark belastet werden immer mehr Pakete verworfen die entsprechend wiederholt werden mussen Durch die Wiederholung steigt wiederum die Belastung ohne geeignete Massnahmen kommt es zu einem Datenstau Die Verlustrate wird von einem IP Netzwerk standig beobachtet Abhangig von der Verlustrate wird die Senderate durch geeignete Algorithmen beeinflusst Normalerweise wird eine TCP IP Verbindung langsam gestartet Slow Start und die Senderate schrittweise erhoht bis es zum Datenverlust kommt Ein Datenverlust verringert die Senderate ohne Verlust wird sie wiederum erhoht Insgesamt nahert sich die Datenrate so zunachst dem jeweiligen zur Verfugung stehenden Maximum und bleibt dann ungefahr dort Eine Uberbelastung wird vermieden Algorithmus zur Uberlaststeuerung Bearbeiten Gehen bei einer bestimmten Fenstergrosse Pakete verloren kann das festgestellt werden wenn der Sender innerhalb einer bestimmten Zeit Timeout keine Bestatigung ACK erhalt Man muss davon ausgehen dass das Paket aufgrund zu hoher Netzlast von einem Router im Netz verworfen wurde Das heisst der Puffer eines Routers ist vollgelaufen es handelt sich hier sozusagen um einen Stau im Netz Um den Stau aufzulosen mussen alle beteiligten Sender ihre Netzlast reduzieren Dazu werden im RFC 2581 12 vier Algorithmen definiert slow start congestion avoidance fast retransmit und fast recovery wobei slow start und congestion avoidance zusammen verwendet werden Die zwei Algorithmen fast retransmit und fast recovery werden auch zusammen verwendet und sind eine Erweiterung der Algorithmen slow start und congestion avoidance Slow Start und Congestion Avoidance Bearbeiten nbsp Grafische Darstellung des Slow Start AlgorithmusZu Beginn einer Datenubertragung dient der Slow Start Algorithmus zur Bestimmung des congestion window wortlich Uberlastfenster um einer moglichen Uberlastsituation vorzubeugen Man mochte Staus vermeiden und da die momentane Auslastung des Netzes nicht bekannt ist wird mit zunachst kleinen Datenmengen begonnen Der Algorithmus startet mit einem kleinen Fenster von einer MSS Maximum Segment Size in dem Datenpakete vom Sender zum Empfanger ubertragen werden Der Empfanger sendet nun eine Bestatigung ACK an den Sender zuruck Fur jedes empfangene ACK wird die Grosse des congestion window um eine MSS erhoht Da fur jedes versandte Paket bei erfolgreicher Ubertragung ein ACK geschickt wird fuhrt dies innerhalb einer Roundtrip Zeit zu einer Verdopplung des Congestion Windows In dieser Phase gibt es also ein exponentielles Wachstum Wenn das Fenster beispielsweise das Versenden von zwei Paketen gestattet so erhalt der Sender auch zwei ACKs und erhoht das Fenster daher um 2 auf 4 Dieses exponentielle Wachstum wird so lange fortgesetzt bis der sogenannte Slow Start Threshold erreicht wird englisch threshold Schwelle Die Phase des exponentiellen Wachstums wird auch Slow Start Phase genannt Danach wird das Congestion Window nur noch um ein Segment erhoht wenn alle Pakete aus dem Fenster erfolgreich ubertragen wurden Es wachst also pro Roundtrip Zeit nur noch um ein Segment also nur noch linear Diese Phase wird als Congestion Avoidance Phase bezeichnet Das Wachstum wird beendet wenn das vom Empfanger festgelegte Empfangsfenster erreicht worden ist siehe Fluss Steuerung Kommt es zu einem Timeout wird das congestion window wieder auf 1 zuruckgesetzt und der slow start threshold wird auf die Halfte der Flight Size Flight Size ist die Anzahl an Paketen die verschickt aber noch nicht quittiert wurden 12 herabgesetzt Die Phase des exponentiellen Wachstums wird also verkurzt so dass das Fenster bei haufigen Paketverlusten nur langsam wachst Fast Retransmit und Fast Recovery Bearbeiten Fast Retransmit und Fast Recovery schnelles Erholen werden eingesetzt um nach einem Paketverlust schneller auf die Stau Situation zu reagieren Dazu informiert ein Empfanger den Sender wenn Pakete ausser der Reihe ankommen und somit dazwischen ein Paketverlust vorliegt Hierfur bestatigt der Empfanger das letzte korrekte Paket erneut fur jedes weitere ankommende Paket ausser der Reihe Man spricht dabei von Dup Acks duplicate acknowledgments also mehrere aufeinanderfolgende Nachrichten welche dasselbe Datensegment ACKen Der Sender bemerkt die duplizierten Bestatigungen und nach dem dritten Duplikat sendet er sofort vor Ablauf des Timers das verlorene Paket erneut Weil nicht auf den Ablauf des Timers gewartet werden muss heisst das Prinzip Fast Retransmit Die Dup Acks sind auch Hinweise darauf dass zwar ein Paketverlust stattfand aber doch die folgenden Pakete angekommen sind Deshalb wird das Sendefenster nach dem Fehler nur halbiert und nicht wie beim Timeout wieder mit Slow Start begonnen Zusatzlich kann das Sendefenster noch um die Anzahl der Dup Acks erhoht werden denn jedes steht fur ein weiteres Paket welches den Empfanger erreicht hat wenn auch ausser der Reihe Da dadurch nach dem Fehler schneller wieder die volle Sendeleistung erreicht wird nennt man das Prinzip Fast Recovery Selective ACKs SACK Bearbeiten Selective ACKs werden genutzt um noch mehr Kontrollinformationen uber den Datenfluss vom Empfanger an den Sender zuruckzuschicken Dabei wird nach einem Paketverlust vom Empfanger im TCP Optionsfeld ein zusatzlicher Header eingefugt aus welchem der Sender genau ersehen kann welche Pakete bereits angekommen sind und welche fehlen im Gegensatz zu den standardmassigen kumulativen ACKs von TCP s o Als bestatigt gelten die Pakete auch weiterhin erst dann wenn der Empfanger dem Sender ein ACK fur die Pakete ubermittelt hat TCP Tahoe und TCP Reno Bearbeiten Bei den nach Orten in Nevada benannten TCP Congestion Control Varianten Tahoe und Reno handelt es sich um zwei verschiedene Verfahren wie TCP auf ein Uberlast Ereignis in Form von Timeouts oder Dup Acks reagiert Das inzwischen nicht mehr verwendete TCP Tahoe reduziert sobald ein Timeout vorliegt das Congestion Window fur die nachste Ubertragungseinheit auf 1 Anschliessend startet wieder der TCP Slow Start Prozess mit verringertem Threshold s u bis ein neues Timeout oder DUP Acks Ereignis stattfindet oder aber der Schwellwert Threshold zum Ubergang in die Congestion Avoidance Phase erreicht wird Dieser Schwellwert wurde nach dem Auftreten des Uberlast Ereignisses auf die Halfte der Grosse des derzeitigen Congestion Window gesetzt Der Nachteil dieses Verfahrens ist zum einen dass ein Paketverlust nur durch einen Timeout festgestellt wird mitunter also recht lange dauert und zum anderen die starke Reduktion des Congestion Windows auf 1 Die Weiterentwicklung von Tahoe ist TCP Reno Hierbei wird zwischen auftretenden Timeout und Dup Acks Ereignissen unterschieden Wahrend TCP Reno beim Auftreten eines Timeout genauso verfahrt wie TCP Tahoe wendet es beim Auftreten von drei doppelten Acks eine andere Variante fur die Festlegung des nachfolgenden Congestion Windows an Die grundlegende Idee dabei ist dass der Verlust eines Segments auf dem Weg zum Empfanger nicht nur durch einen Timeout erkannt werden kann sondern auch dadurch dass der Empfanger mehrfach dieselben ACKs fur das unmittelbar vor dem verlorengegangenen Segment zuruckschickt und zwar jedes Mal wenn er ein weiteres Segment nach der Lucke empfangt Daher wird das nachfolgende Congestion Window auf die Halfte des Wertes des Congestion Windows zum Zeitpunkt des Uberlast Ereignisses gesetzt anschliessend wird wieder in die Congestion Avoidance Phase ubergegangen Dieses Verhalten wird wie oben im Artikel erwahnt als Fast Recovery beschrieben Uberlaststeuerung als Forschungsfeld Bearbeiten nbsp Teile dieses Artikels scheinen seit 2008 nicht mehr aktuell zu sein Bitte hilf uns dabei die fehlenden Informationen zu recherchieren und einzufugen Wikipedia WikiProjekt Ereignisse Vergangenheit 2008 Die genaue Gestaltung der TCP Uberlaststeuerung war und ist ein uberaus aktives Forschungsfeld mit zahlreichen wissenschaftlichen Publikationen Auch heute arbeiten weltweit viele Wissenschaftler an Verbesserungen der TCP Uberlaststeuerung oder versuchen sie an bestimmte aussere Gegebenheiten anzupassen In diesem Zusammenhang sind insbesondere die speziellen Bedingungen der diversen drahtlosen Ubertragungstechniken zu erwahnen welche oft zu hohen oder stark schwankenden Laufzeitverzogerungen oder zu hohen Paketverlusten fuhren TCP geht standardmassig bei Paketverlusten davon aus dass der Ubertragungsweg an irgendeiner Stelle ausgelastet ist Datenstau Dies ist bei drahtgebundenen Netzen auch meistens der Fall da dort nur selten Pakete auf der Leitung verlorengehen sondern nicht angekommene Pakete fast immer von einem uberlasteten Router verworfen wurden Die richtige Reaktion auf so einen Datenstau ist daher die Reduktion der Senderate Bei drahtlosen Netzen trifft diese Annahme jedoch nicht mehr zu Aufgrund des wesentlich unzuverlassigeren Ubertragungsmediums treten Paketverluste oft auf ohne dass einer der Router uberlastet ist In diesem Szenario ist das Reduzieren der Senderate jedoch nicht sinnvoll Im Gegenteil eine Erhohung der Senderate etwa durch Mehrfachsenden von Paketen konnte die Zuverlassigkeit der Verbindung erhohen Haufig basieren diese Anderungen bzw Erweiterungen der Uberlastkontrolle auf komplexen mathematischen bzw regelungstechnischen Fundamenten Der Entwurf entsprechender Verbesserungen ist alles andere als einfach da im Allgemeinen gefordert wird dass TCP Verbindungen mit alteren Uberlastkontrollmechanismen durch die neuen Verfahren nicht wesentlich benachteiligt werden durfen wenn beispielsweise mehrere TCP Verbindungen um Bandbreite auf einem gemeinsam genutzten Medium kampfen Aus all diesen Grunden ist die in der Realitat verwendete TCP Uberlaststeuerung auch wesentlich komplizierter gestaltet als es weiter oben im Artikel beschrieben wird Aufgrund der zahlreichen Forschungen zur TCP Uberlaststeuerung setzten sich im Laufe der Zeit verschiedene Uberlaststeuerungsmechanismen als Quasi Standards durch Hier sind insbesondere TCP Reno TCP Tahoe und TCP Vegas zu nennen In modernen Betriebssystemen wird TCP CUBIC als Standard Uberlastalgorithmus eingesetzt Im Folgenden sollen exemplarisch einige neuere bzw experimentellere Ansatze grob umrissen werden Ein Ansatz ist beispielsweise RCF Router Congestion Feedback Hierbei werden durch die Router entlang dem Pfad umfangreichere Informationen an die TCP Sender oder Empfanger geschickt damit diese ihre Ende zu Ende Uberlaststeuerung besser abstimmen konnen Hierdurch sind erwiesenermassen betrachtliche Durchsatzsteigerungen moglich Beispiele dafur finden sich in der Literatur unter den Stichworten XCP explicit control protocol EWA explicit window adaptation FEWA fuzzy EWA FXCP fuzzy XCP und ETCP enhanced TCP Stand Mitte 2004 Weiterhin ist die Explicit Congestion Notification ECN eine Implementierung einer RFC Vereinfacht gesagt bilden diese Verfahren eine Uberlaststeuerung nach Art von ATM nach Andere Ansatze verfolgen die logische Trennung der Regelschleife einer TCP Verbindung in zwei oder mehr Regelschleifen an den entscheidenden Stellen im Netz z B beim sogenannten Split TCP Weiterhin gibt es das Verfahren der logischen Bundelung mehrerer TCP Verbindungen in einem TCP Sender damit diese Verbindungen ihre Informationen uber den momentanen Zustand des Netzes austauschen und schneller reagieren konnen Hier ist insbesondere das Verfahren EFCM Ensemble Flow Congestion Management zu nennen All diese Verfahren konnen unter dem Begriff Network Information Sharing zusammengefasst werden TCP Prufsumme und TCP Pseudo Header BearbeitenDer Pseudo Header ist eine Zusammenstellung von Header Teilen eines TCP Segments und Teilen des Headers des einkapselnden IP Pakets Es ist ein Modell an dem sich die Berechnung der TCP Prufsumme englisch checksum anschaulich beschreiben lasst Falls IP mit TCP eingesetzt wird ist es wunschenswert den Header des IP Pakets mit in die Sicherung von TCP aufzunehmen Dadurch ist die Zuverlassigkeit seiner Ubertragung garantiert Darum bildet man den IP Pseudo Header Er besteht aus IP Absender und Empfangeradresse einem Null Byte einem Byte das angibt zu welchem Protokoll die Nutzdaten des IP Pakets gehoren und der Lange des TCP Segments mit TCP Header Da es sich im Fall des Pseudo Headers immer um IP Pakete handelt die TCP Segmente transportieren ist dieses Byte auf den Wert 6 gesetzt Der Pseudo Header wird fur die Berechnung der Prufsumme vor den TCP Header gelegt Anschliessend berechnet man die Prufsumme Die Summe wird im Feld checksum abgelegt und das Fragment versendet Kein Pseudo Header wird je versendet TCP Pseudo Header IPv4 Bit offset Bits 0 3 4 7 8 15 16 310 IP Absenderadresse32 IP Empfangeradresse64 00000000 6 TCP TCP Lange96 Quellport Zielport128 Sequenznummer160 ACK Nummer192 Datenoffset Reserviert Flags Window224 Prufsumme Urgent pointer256 Options optional 256 288 Daten Die Berechnung der Prufsumme fur IPv4 ist in RFC 793 definiert 4 Die Prufsumme ist das 16 Bit Einerkomplement der Einerkomplement Summe aller 16 Bit Worter im Header und der Nutzdaten des unterliegenden Protokolls Wenn ein Segment eine ungerade Anzahl Bytes enthalt wird ein Padding Byte angehangt Das Padding wird nicht ubertragen Wahrend der Berechnung der Prufsumme wird das Prufsummenfeld selbst mit Nullen gefullt Abweichend hiervon sieht bei IPv6 der Pseudo Header gemass RFC 2460 wie folgt aus 13 Any transport or other upper layer protocol that includes the addresses from the IP header in its checksum computation must be modified for use over IPv6 to include the 128 bit IPv6 addresses instead of 32 bit IPv4 addresses TCP Pseudo Header fur IPv6 Bit offset 0 7 8 15 16 23 24 310 Quelladresse326496128 Zieladresse160192224256 TCP Lange288 Nullwerte Nachster Header320 Quellport Zielport352 Sequenznummer384 ACK Nummer416 Datenoffset Reserviert Flags Window448 Prufsumme Urgent pointer480 Options optional 480 512 Daten Der Empfanger erstellt ebenfalls den Pseudo Header und fuhrt anschliessend dieselbe Berechnung aus ohne das Checksum Feld auf Null zu setzen Dadurch sollte das Ergebnis FFFF Hexadezimal sein Ist dies nicht der Fall so wird das TCP Segment ohne Nachricht verworfen Dies hat zur Folge dass der RTT Timer beim Absender ablauft und das TCP Segment noch einmal abgeschickt wird Der Grund fur dieses komplizierte Verfahren liegt darin dass sich Teile des IP Headers wahrend des Routings im IP Netz verandern Das TTL Feld wird bei jedem IP Hop um eins dekrementiert Wurde das TTL Feld in die Prufsummenberechnung einfliessen wurde IP die Sicherung des Transports durch TCP zunichtemachen Deshalb wird nur ein Teil des IP Headers in die Prufsummenberechnung einbezogen Die Prufsumme ist zum einen wegen ihrer Lange von nur 16 Bit und wegen der einfachen Berechnungsvorschrift anfallig fur nicht erkennbare Fehler Bessere Verfahren wie CRC 32 wurden zur Zeit der Definition als zu aufwendig angesehen Datenintegritat und Zuverlassigkeit BearbeitenIm Gegensatz zum verbindungslosen UDP implementiert TCP einen bidirektionalen byte orientierten zuverlassigen Datenstrom zwischen zwei Endpunkten Das darunterliegende Protokoll IP ist paketorientiert wobei Datenpakete verlorengehen konnen in verkehrter Reihenfolge ankommen durfen und sogar doppelt empfangen werden konnen TCP wurde entwickelt um mit der Unsicherheit der darunterliegenden Schichten umzugehen Es pruft daher die Integritat der Daten mittels der Prufsumme im Paketkopf und stellt die Reihenfolge durch Sequenznummern sicher Der Sender wiederholt das Senden von Paketen falls keine Bestatigung innerhalb einer bestimmten Zeitspanne Timeout eintrifft Die Daten der Pakete werden beim Empfanger in einem Puffer in der richtigen Reihenfolge zu einem Datenstrom zusammengefugt und doppelte Pakete verworfen Der Datentransfer kann selbstverstandlich jederzeit nach dem Aufbau einer Verbindung gestort verzogert oder ganz unterbrochen werden Das Ubertragungssystem lauft dann in einen Timeout Der vorab getatigte Verbindungsaufbau stellt also keinerlei Gewahr fur eine nachfolgende dauerhaft gesicherte Ubertragung dar Bestatigungen BearbeitenDie jeweilige Lange des Puffers bis zu der keine Lucke im Datenstrom existiert wird bestatigt windowing Dadurch ist das Ausnutzen der Netz Bandbreite auch bei grossen Strecken moglich Bei einer Ubersee oder Satellitenverbindung dauert das Eintreffen des ersten ACK Signals aus technischen Grunden bisweilen mehrere 100 Millisekunden in dieser Zeit konnen unter Umstanden mehrere hundert Pakete gesendet werden Der Sender kann den Empfangerpuffer fullen bevor die erste Bestatigung eintrifft Alle Pakete im Puffer konnen gemeinsam bestatigt werden Bestatigungen konnen zusatzlich zu den Daten in den TCP Header des entgegengesetzten Datenstroms eingefugt werden piggybacking falls der Empfanger ebenfalls Daten fur den Sender bereithalt Siehe auch BearbeitenCYCLADES Das Vorbild fur TCP mit seinem Datagramm CIGALE Liste der standardisierten Ports Stream Control Transmission Protocol SCTP Keepalive Eine Netzwerkverbindung aufrechterhalten Literatur BearbeitenDouglas Comer Internetworking with TCP IP Principles Protocols and Architectures Prentice Hall 2000 ISBN 0 13 018380 6 Craig Hunt TCP IP Netzwerk Administration O Reilly Bejing 2003 ISBN 3 89721 179 3 Richard Stevens TCP IP Illustrated Volume 1 The Protocols Addison Wesley Boston 1994 2004 ISBN 0 201 63346 9 Richard Stevens TCP IP Illustrated Volume 2 The Implementation Addison Wesley Boston 1994 ISBN 0 201 63354 X Andrew S Tanenbaum Computernetzwerke 4 Auflage Pearson Studium Munchen 2003 ISBN 978 3 8273 7046 4 S 580 ff James F Kurose Keith W Ross Computernetze Ein Top Down Ansatz mit Schwerpunkt Internet Bafog Ausgabe Pearson Studium Munchen 2004 ISBN 3 8273 7150 3 Michael Tischer Bruno Jennrich Internet Intern Technik amp Programmierung Data Becker Dusseldorf 1997 ISBN 3 8158 1160 0 Weblinks BearbeitenRFCs RFC 793 Transmission Control Protocol 1981 englisch RFC 1071 Berechnen der Prufsumme fur IP UDP und TCP englisch RFC 1122 Fehlerbehebungen bei TCP englisch RFC 1323 Erweiterungen bei TCP englisch RFC 2018 TCP SACK Selective Acknowledgment Options englisch RFC 3168 Explicit Congestion Notification englisch RFC 5482 TCP User Timeout Option englisch RFC 5681 TCP Congestion Control TCP Uberlastkontrolle englisch RFC 7414 Ubersicht zu TCP RFCs englisch Sonstige Congestion Avoidance and Control PDF 220 kB TCP Meilenstein 1988 Warriors of the net Film zu TCP Einzelnachweise Bearbeiten a b RFC 9293 Transmission Control Protocol TCP August 2022 englisch RFC 7323 TCP Extensions for High Performance September 2014 englisch Nicht zu verwechseln mit paketvermittelnd Die Aufgabe von TCP ist es nicht Pakete zu ubertragen sondern die Bytes eines Datenstroms Die Paketvermittlung wird durch das Internetprotokoll IP bereitgestellt Daher ist IP paketvermittelnd aber TCP paketvermittelt a b c RFC 793 Transmission Control Protocol 1981 englisch Port numbers Internet Assigned Numbers Authority IANA 18 Juni 2010 abgerufen am 7 August 2014 englisch RFC 793 Transmission Control Protocol 1981 S 11 englisch A passive OPEN request means that the process wants to accept incoming connection requests rather than attempting to initiate a connection RFC 793 Transmission Control Protocol 1981 S 21 englisch Briefly the meanings of the states are LISTEN represents waiting for a connection request from any remote TCP and port W Richard Stevens TCP IP Illustrated Vol 1 The Protocols Addison Wesley Kapitel 18 Steven M Bellovin RFC 1948 Defending Against Sequence Number Attacks 1996 englisch RFC 1122 Requirements for Internet Hosts Communication Layers Oktober 1989 englisch RFC 6298 Computing TCP s Retransmission Timer englisch a b W Richard Stevens Mark Allman Vern Paxson RFC 2581 TCP Congestion Control englisch RFC 2460 Internet Protocol Version 6 IPv6 Specification Dezember 1998 englisch Abgerufen von https de wikipedia org w index php title Transmission Control Protocol amp oldid 235859267