TCP vs. UDP: Entmystifizierung der Debatte „Zuverlässigkeit vs. Effizienz“

Heute konzentrieren wir uns zunächst auf TCP. Zuvor haben wir im Kapitel über die Schichtung einen wichtigen Punkt erwähnt. Auf der Netzwerkebene und darunter geht es eher um Host-zu-Host-Verbindungen. Das bedeutet, dass Ihr Computer wissen muss, wo sich ein anderer Computer befindet, um sich mit ihm verbinden zu können. Kommunikation in einem Netzwerk erfolgt jedoch häufig zwischen Prozessen und nicht zwischen Maschinen. Daher führt das TCP-Protokoll das Konzept des Ports ein. Ein Port kann nur von einem Prozess belegt werden, was die direkte Kommunikation zwischen Anwendungsprozessen auf verschiedenen Hosts ermöglicht.

Die Aufgabe der Transportschicht besteht darin, direkte Kommunikationsdienste zwischen Anwendungsprozessen auf verschiedenen Hosts bereitzustellen. Daher wird sie auch als End-to-End-Protokoll bezeichnet. Die Transportschicht verbirgt die Kerndetails des Netzwerks, sodass der Anwendungsprozess einen logischen End-to-End-Kommunikationskanal zwischen den beiden Transportschichteinheiten sieht.

TCP steht für Transmission Control Protocol und ist ein verbindungsorientiertes Protokoll. Das bedeutet, dass die beiden Prozesse einen Handshake durchführen müssen, bevor eine Anwendung Daten an die andere senden kann. Ein Handshake ist ein logisch verknüpfter Prozess, der eine zuverlässige Übertragung und einen ordnungsgemäßen Empfang von Daten gewährleistet. Während des Handshakes wird eine Verbindung zwischen Quell- und Zielhost hergestellt, indem eine Reihe von Steuerpaketen ausgetauscht und einige Parameter und Regeln vereinbart werden, um eine erfolgreiche Datenübertragung zu gewährleisten.

Was ist TCP? (MylinkingsNetzwerk-TapUndNetzwerkpaketbrokerkönnte sowohl TCP- als auch UDP-Pakete verarbeiten)
TCP (Transmission Control Protocol) ist ein verbindungsorientiertes, zuverlässiges, bytestrombasiertes Kommunikationsprotokoll der Transportschicht.

Verbindungsorientiert: Verbindungsorientiert bedeutet, dass die TCP-Kommunikation eins zu eins erfolgt, also eine Punkt-zu-Punkt-End-zu-Ende-Kommunikation. Im Gegensatz zu UDP, das Nachrichten gleichzeitig an mehrere Hosts senden kann, ist eine Eins-zu-viele-Kommunikation nicht möglich.
Zuverlässig: Die Zuverlässigkeit von TCP stellt sicher, dass Pakete unabhängig von Änderungen der Netzwerkverbindung zuverlässig an den Empfänger zugestellt werden, wodurch das Protokollpaketformat von TCP komplexer ist als das von UDP.
Byte-Stream-basiert: Die bytestreambasierte Natur von TCP ermöglicht die Übertragung von Nachrichten jeder Größe und garantiert die Nachrichtenreihenfolge: Auch wenn die vorherige Nachricht nicht vollständig empfangen wurde und auch wenn die nachfolgenden Bytes empfangen wurden, übergibt TCP sie nicht an die Anwendungsschicht zur Verarbeitung und verwirft doppelte Pakete automatisch.
Sobald Host A und Host B eine Verbindung hergestellt haben, muss die Anwendung lediglich die virtuelle Kommunikationsleitung zum Senden und Empfangen von Daten nutzen, um die Datenübertragung sicherzustellen. Das TCP-Protokoll ist für die Steuerung von Aufgaben wie Verbindungsaufbau, -trennung und -haltung verantwortlich. Es ist zu beachten, dass die virtuelle Leitung hier nur den Verbindungsaufbau bezeichnet. Die TCP-Protokollverbindung hingegen bedeutet lediglich, dass beide Seiten mit der Datenübertragung beginnen können und die Zuverlässigkeit der Daten gewährleistet ist. Die Routing- und Transportknoten werden von den Netzwerkgeräten verwaltet; das TCP-Protokoll selbst befasst sich nicht mit diesen Details.

Eine TCP-Verbindung ist ein Vollduplex-Dienst. Das bedeutet, dass Host A und Host B in einer TCP-Verbindung Daten in beide Richtungen übertragen können. Das heißt, Daten können in einem bidirektionalen Fluss zwischen Host A und Host B übertragen werden.

TCP speichert Daten vorübergehend im Sendepuffer der Verbindung. Dieser Sendepuffer ist einer der Caches, die während des Drei-Wege-Handshakes eingerichtet werden. Anschließend sendet TCP die Daten im Sendepuffer zum entsprechenden Zeitpunkt an den Empfangspuffer des Zielhosts. In der Praxis verfügt jeder Peer über einen Sendepuffer und einen Empfangspuffer, wie hier dargestellt:

TCP-UDP

Der Sendepuffer ist ein Speicherbereich, der von der TCP-Implementierung auf der Senderseite verwaltet wird und zum temporären Speichern zu sendender Daten dient. Beim Drei-Wege-Handshake zum Herstellen einer Verbindung wird der Sendecache eingerichtet und zum Speichern der Daten verwendet. Der Sendepuffer wird dynamisch an die Netzwerkauslastung und das Feedback des Empfängers angepasst.

Ein Empfangspuffer ist ein Speicherbereich, der von der TCP-Implementierung auf der Empfangsseite verwaltet wird und zum temporären Speichern empfangener Daten dient. TCP speichert die empfangenen Daten im Empfangscache und wartet darauf, dass die übergeordnete Anwendung sie liest.

Beachten Sie, dass die Größe des Sende- und Empfangscache begrenzt ist. Wenn der Cache voll ist, kann TCP bestimmte Strategien anwenden, wie z. B. Überlastungskontrolle, Flusskontrolle usw., um eine zuverlässige Datenübertragung und Netzwerkstabilität sicherzustellen.

In Computernetzwerken erfolgt die Datenübertragung zwischen Hosts über Segmente. Was ist also ein Paketsegment?

TCP erstellt ein TCP-Segment (Paketsegment), indem der eingehende Datenstrom in Blöcke aufgeteilt und jedem Block TCP-Header hinzugefügt werden. Jedes Segment kann nur für eine begrenzte Zeit übertragen werden und darf die maximale Segmentgröße (MSS) nicht überschreiten. Auf dem Weg nach unten durchläuft ein Paketsegment die Verbindungsschicht. Die Verbindungsschicht verfügt über eine maximale Übertragungseinheit (MTU), die die maximale Paketgröße angibt, die die Datenverbindungsschicht passieren kann. Die maximale Übertragungseinheit bezieht sich in der Regel auf die Kommunikationsschnittstelle.

Was ist also der Unterschied zwischen MSS und MTU?

In Computernetzwerken ist die hierarchische Architektur sehr wichtig, da sie die Unterschiede zwischen den verschiedenen Ebenen berücksichtigt. Jede Schicht hat einen anderen Namen; in der Transportschicht werden die Daten als Segmente und in der Netzwerkschicht als IP-Pakete bezeichnet. Daher kann die Maximum Transmission Unit (MTU) als die maximale IP-Paketgröße betrachtet werden, die von der Netzwerkschicht übertragen werden kann, während die Maximum Segment Size (MSS) ein Konzept der Transportschicht ist, das sich auf die maximale Datenmenge bezieht, die gleichzeitig von einem TCP-Paket übertragen werden kann.

Beachten Sie: Wenn die maximale Segmentgröße (MSS) größer als die maximale Übertragungseinheit (MTU) ist, erfolgt die IP-Fragmentierung auf der Netzwerkebene. TCP teilt die größeren Daten nicht in Segmente auf, die der MTU-Größe entsprechen. Auf der Netzwerkebene wird ein eigener Abschnitt für die IP-Ebene eingerichtet.

TCP-Paketsegmentstruktur
Lassen Sie uns das Format und den Inhalt von TCP-Headern untersuchen.

TCP-Segment

Sequenznummer: Eine Zufallszahl, die vom Computer beim Verbindungsaufbau als Anfangswert generiert wird, wenn die TCP-Verbindung hergestellt wird. Die Sequenznummer wird über das SYN-Paket an den Empfänger gesendet. Während der Datenübertragung erhöht der Sender die Sequenznummer entsprechend der gesendeten Datenmenge. Der Empfänger beurteilt die Reihenfolge der Daten anhand der empfangenen Sequenznummer. Wenn die Daten nicht in der richtigen Reihenfolge sind, ordnet der Empfänger sie neu an, um die Reihenfolge der Daten sicherzustellen.

Bestätigungsnummer: Dies ist eine Sequenznummer, die in TCP verwendet wird, um den Empfang von Daten zu bestätigen. Sie gibt die Sequenznummer der nächsten Daten an, die der Absender erwartet. Bei einer TCP-Verbindung ermittelt der Empfänger anhand der Sequenznummer des empfangenen Datenpaketsegments, welche Daten erfolgreich empfangen wurden. Nach erfolgreichem Empfang sendet der Empfänger ein ACK-Paket mit der Bestätigungsnummer an den Absender. Nach Erhalt des ACK-Pakets kann der Absender den erfolgreichen Empfang der Daten bestätigen, bevor er die Antwortnummer bestätigt.

Zu den Steuerbits eines TCP-Segments gehören die folgenden:

ACK-Bit: Wenn dieses Bit 1 ist, bedeutet dies, dass das Bestätigungsantwortfeld gültig ist. TCP gibt an, dass dieses Bit außer bei SYN-Paketen beim ersten Verbindungsaufbau auf 1 gesetzt sein muss.
RST-Bit: Wenn dieses Bit 1 ist, zeigt dies an, dass eine Ausnahme in der TCP-Verbindung vorliegt und die Trennung der Verbindung erzwungen werden muss.
SYN-Bit: Wenn dieses Bit auf 1 gesetzt ist, bedeutet dies, dass die Verbindung hergestellt werden soll und der Anfangswert der Sequenznummer im Sequenznummernfeld festgelegt ist.
FIN-Bit: Wenn dieses Bit 1 ist, bedeutet dies, dass in Zukunft keine Daten mehr gesendet werden und die Verbindung gewünscht ist.
Die verschiedenen Funktionen und Eigenschaften von TCP werden durch die Struktur der TCP-Paketsegmente verkörpert.

Was ist UDP? (Mylinking'sNetzwerk-TapUndNetzwerkpaketbrokerkönnte sowohl TCP- als auch UDP-Pakete verarbeiten)
Das User Datagram Protocol (UDP) ist ein verbindungsloses Kommunikationsprotokoll. Im Vergleich zu TCP bietet UDP keine komplexen Steuerungsmechanismen. Das UDP-Protokoll ermöglicht Anwendungen das direkte Senden gekapselter IP-Pakete ohne Verbindungsaufbau. Wählt der Entwickler UDP anstelle von TCP, kommuniziert die Anwendung direkt mit dem IP.

Der vollständige Name des UDP-Protokolls lautet User Datagram Protocol. Sein Header ist nur acht Bytes (64 Bit) lang und somit sehr prägnant. Das Format des UDP-Headers lautet wie folgt:

UDP-Segment

Ziel- und Quellports: Ihr Hauptzweck besteht darin, anzugeben, an welchen Prozess UDP Pakete senden soll.
Paketgröße: Das Feld Paketgröße enthält die Größe des UDP-Headers plus die Größe der Daten
Prüfsumme: Entwickelt, um eine zuverlässige Übermittlung von UDP-Headern und -Daten sicherzustellen. Die Aufgabe der Prüfsumme besteht darin, festzustellen, ob während der Übertragung eines UDP-Pakets ein Fehler oder eine Beschädigung aufgetreten ist, um die Integrität der Daten sicherzustellen.

Unterschiede zwischen TCP und UDP in Mylinking'sNetzwerk-TapUndNetzwerkpaketbrokerkönnte sowohl TCP- als auch UDP-Pakete verarbeiten
TCP und UDP unterscheiden sich in folgenden Aspekten:

TCP vs. UDP

Verbindung: TCP ist ein verbindungsorientiertes Transportprotokoll, das den Aufbau einer Verbindung erfordert, bevor Daten übertragen werden können. UDP hingegen benötigt keine Verbindung und kann Daten sofort übertragen.

Serviceobjekt: TCP ist ein Eins-zu-Eins-Zweipunktdienst, d. h. eine Verbindung verfügt nur über zwei Endpunkte, die miteinander kommunizieren. UDP unterstützt jedoch die interaktive Eins-zu-Eins-, Eins-zu-Viele- und Viele-zu-Viele-Kommunikation, sodass mit mehreren Hosts gleichzeitig kommuniziert werden kann.

ZuverlässigkeitTCP bietet die zuverlässige Datenübertragung und stellt sicher, dass die Daten fehlerfrei, verlustfrei und nicht dupliziert sind und bei Bedarf eintreffen. UDP hingegen bemüht sich nach Kräften und garantiert keine zuverlässige Übertragung. Bei UDP kann es während der Übertragung zu Datenverlusten und anderen Problemen kommen.

Überlastungskontrolle, Flusskontrolle: TCP verfügt über Mechanismen zur Überlastungs- und Flusskontrolle, die die Datenübertragungsrate entsprechend den Netzwerkbedingungen anpassen können, um die Sicherheit und Stabilität der Datenübertragung zu gewährleisten. UDP verfügt nicht über Mechanismen zur Überlastungs- und Flusskontrolle. Selbst wenn das Netzwerk stark überlastet ist, werden keine Anpassungen an der UDP-Senderate vorgenommen.

Kopfzeilenüberhang: TCP hat eine lange Headerlänge, typischerweise 20 Bytes, die sich durch die Verwendung von Optionsfeldern erhöht. UDP hingegen hat einen festen Header von nur 8 Bytes, sodass UDP einen geringeren Header-Overhead hat.

TCP vs. UDP

TCP- und UDP-Anwendungsszenarien:
TCP und UDP sind zwei verschiedene Transportschichtprotokolle und weisen einige Unterschiede in den Anwendungsszenarien auf.

Da TCP ein verbindungsorientiertes Protokoll ist, wird es hauptsächlich in Szenarien eingesetzt, in denen eine zuverlässige Datenübertragung erforderlich ist. Einige gängige Anwendungsfälle sind:

FTP-Dateiübertragung: TCP kann sicherstellen, dass Dateien während der Übertragung nicht verloren gehen oder beschädigt werden.
HTTP/HTTPS: TCP gewährleistet die Integrität und Richtigkeit von Webinhalten.
Da UDP ein verbindungsloses Protokoll ist, bietet es keine Zuverlässigkeitsgarantie, zeichnet sich jedoch durch Effizienz und Echtzeit aus. UDP eignet sich für die folgenden Szenarien:

Datenverkehr mit geringem Paketvolumen, wie etwa DNS (Domain Name System): DNS-Abfragen sind normalerweise kurze Pakete und UDP kann sie schneller abschließen.
Multimediale Kommunikation wie Video und Audio: Bei Multimediaübertragungen mit hohen Echtzeitanforderungen kann UDP eine geringere Latenz bieten, um sicherzustellen, dass Daten rechtzeitig übertragen werden können.
Broadcast-Kommunikation: UDP unterstützt Eins-zu-viele- und Viele-zu-viele-Kommunikation und kann für die Übertragung von Broadcast-Nachrichten verwendet werden.

Zusammenfassung
Heute haben wir TCP kennengelernt. TCP ist ein verbindungsorientiertes, zuverlässiges, bytestrombasiertes Transportschicht-Kommunikationsprotokoll. Es gewährleistet die zuverlässige Übertragung und den ordnungsgemäßen Empfang von Daten durch Verbindungsaufbau, Handshake und Bestätigung. Das TCP-Protokoll nutzt Ports für die Kommunikation zwischen Prozessen und bietet direkte Kommunikationsdienste für Anwendungsprozesse auf verschiedenen Hosts. TCP-Verbindungen sind vollduplex und ermöglichen gleichzeitige bidirektionale Datenübertragungen. Im Gegensatz dazu ist UDP ein verbindungsorientiertes Kommunikationsprotokoll, das keine Zuverlässigkeitsgarantien bietet und sich für einige Szenarien mit hohen Echtzeitanforderungen eignet. TCP und UDP unterscheiden sich in Verbindungsmodus, Serviceobjekt, Zuverlässigkeit, Überlastungskontrolle, Flusskontrolle und anderen Aspekten sowie in ihren Anwendungsszenarien.


Veröffentlichungszeit: 03.12.2024