TCP vs UDP: Funktionen, Verwendungen und Unterschiede

tcp-vs-udpTCP und UDP sind zwei grundlegende Protokolle für die Kommunikation über das Internet, da sich diese beiden Protokolle im Internet befinden Transportschicht des TCP / IP-Modells und es ist die erste Schicht, auf der Ursprung und Ziel direkt kommunizieren, da die unteren Schichten (Netzwerkschicht und mittlere Zugriffsschicht) diese Funktion nicht ausführen. Heute werden wir das erklären Hauptmerkmale des TCP-Protokolls und dem UDP-Protokoll , wenn jeder verwendet wird, Unterschiede und Hauptverwendungen.

TCP-Protokoll: Was ist das und wie funktioniert es?

Das TCP (Übertragungskontrollprotokoll) protocol ist eines der grundlegenden Protokolle im Internet und ermöglicht es Anwendungen, mit Garantien zu kommunizieren, unabhängig von den unteren Schichten des TCP / IP-Modells. Dies bedeutet, dass die Router (Netzwerkschicht im TCP / IP-Modell) nur die Segmente (Maßeinheit in TCP) senden müssen, ohne sich darum zu kümmern, ob diese Daten korrekt ankommen oder nicht. TCP unterstützt mehrere Protokolle der Anwendungsschicht B. HTTP (Web), HTTPS (sicheres Web), POP3 (eingehende Mail) und SMTP (ausgehende Mail) sowie deren sichere Versionen unter Verwendung von TLS. TCP wird auch in so wichtigen Protokollen wie FTP, FTPES und SFTP verwendet, um Dateien von einer Quelle zu einem Ziel zu übertragen, und sogar das SSH-Protokoll, um Computer lokal und remote sicher zu verwalten, verwendet das TCP-Protokoll.

Merkmale

Da TCP eine große Anzahl von Protokollen der Anwendungsschicht bedient, ist dies der Fall Es ist wichtig, dass die Daten (Segmente) den Empfänger korrekt erreichen , ohne Fehler und, um. Wenn bei der Übertragung der Segmente diese beschädigt werden oder verloren gehen, wird automatisch die TCP Protokoll Startet die erneute Übertragung , ohne Eingreifen der Applikationsschicht. Auf diese Weise ist gewährleistet, dass die Daten fehlerfrei beim Empfänger ankommen, da dieses Protokoll für die Lösung von Problemen jeglicher Art zuständig ist.

Die MSS (Maximum Segment Size) ist die maximale Größe in Byte, die TCP in einem einzelnen Segment empfangen kann. Sie ähnelt der MTU, befindet sich jedoch auf der Ebene der Transportschicht. Um die beste Leistung zu erzielen, muss der MSS klein genug sein, um eine IP-Fragmentierung zu vermeiden. Das MSS wird normalerweise auf jeder Seite des Kommunikationskanals über den TCP-Header selbst angekündigt. Normalerweise ist die Größe des MSS die MTU (normalerweise 1500 Bytes) abzüglich des TCP-Headers (der eine variable Länge von mindestens 20 Bytes hat) abzüglich des IP-Headers (der eine variable Länge von mindestens 20 Bytes hat). MSS = MTU (1,500 Byte) - 20 Byte TCP-Header - 20 Byte IP-Header

TCP hat ein komplexer Fehlerkontrollmechanismus wird eine Schiebefenstertechnik verwendet, damit alle Segmente korrekt ankommen. Diese Funktion verwendet verschiedene Methoden, um mögliche Fehler zu erkennen:



  • Checksum
  • Nummerierung aller zu steuernden Segmente
  • Selektive ACK-Bestätigungen, obwohl Sie damit auch Segmente „akkumulieren“ können, sodass Sie mit einer einzigen ACK mehrere bestätigen können.
  • Zeitgeber: Wenn viel Zeit vergeht, überträgt TCP das Segment, das "verloren" gegangen ist, automatisch erneut.
  • Doppelte Segmente werden verworfen: Wenn ein doppeltes Segment eintrifft (weil es länger als normal gedauert hat und erneut gesendet wurde), wird es gelöscht.

Wenn TCP einen Fehler erkennt, wird die erneute Übertragung automatisch gestartet, ohne dass die Anwendungsebene etwas unternehmen muss.

Ein weiteres sehr wichtiges Merkmal der Informationen, die von einem Ursprung zu einem Ziel gelangen, ist das Folgende Die Daten kommen in der richtigen Reihenfolge an Das heißt, in der gleichen Reihenfolge, in der sie ausgegeben wurden, da das IP-Protokoll ein Best-Effort-Protokoll ist, macht es alles Möglicherweise kommen die Pakete in der richtigen Reihenfolge an, aber es ist nicht zuverlässig, da es nichts garantiert . TCP hat ein Schiebefenster auf dem Sender und dem Empfänger, so dass, wenn wir ein Segment empfangen, das nicht in Ordnung ist, es automatisch "wartet", bis das fehlende Segment eintrifft, oder sonst nur eine erneute Übertragung des fehlenden Segments anfordert . Mit jedem vom Empfänger empfangenen Segment wird eine ACK gesendet, die dem Absender anzeigt, dass alles korrekt ankommt. In realen TCP-Implementierungen kann jedoch eine ACK gesendet werden, um den Empfang mehrerer Segmente gleichzeitig zu bestätigen, mit dem Ziel, dies nicht zu tun Sättigung des Netzwerks mit so vielen Bestätigungen.

Das TCP-Protokoll ermöglicht Ablaufsteuerung Dies bedeutet, dass die mögliche Sättigung des Netzwerks oder des Remote-Hosts verringert werden kann. Für den Fall, dass ein Gerät mit einer Geschwindigkeit von 500 Mbit / s sendet und das Zielgerät nur Informationen mit 100 Mbit / s empfangen kann, wird das TCP-Protokoll dynamisch angepasst. Auf diese Weise versucht das TCP-Protokoll immer, die verfügbare Bandbreite zwischen Quelle und Ziel zu maximieren. Die Bedienung dieses Schiebefensters ist aufwendig, funktioniert aber grundsätzlich dadurch, dass dem Empfänger ein TCP-Fenster mit einer Anzahl von Bytes zur Verfügung steht, die in einem Puffer gespeichert werden können, der Sender kann Daten senden, bis diese Menge gefüllt ist. Damit der Absender mehr Daten senden kann, muss der Empfänger eine ACK senden, die angibt, dass alles korrekt ist, und diese dann in die Anwendungsebene „hochlädt“.



TCP hat auch Staukontrolle Dadurch können wir keine Pakete im Internet verlieren, da die Router überlastet sind. Wenn der Router Pakete nicht mit der Rate verarbeiten oder weiterleiten kann, mit der sie empfangen wurden, werden sie vom Router selbst verworfen und gehen verloren, da der Puffer voll ist. Wir sollten die Flusskontrolle (die wir oben erklärt haben) nicht mit der Überlastungskontrolle verwechseln. Das Überlastungsfenster (komplementär zum Empfangsfenster) wird zum Verwalten der Überlastungssteuerung in TCP verwendet. In einer Situation ohne Überlastung ist der Überlastungsvorteil derselbe wie das Empfangsfenster. Wenn eine Überlastung auftritt, wird die Größe des Überlastungsvorteils verringert, und wenn er verschwindet, nimmt er zu. Die maximale Anzahl von Bytes, die der Absender senden kann, ist die minimale der beiden Fenstergrößen (wenn das Überlastungsfenster 1500 Bytes und das Empfangsfenster 2000 Bytes beträgt, werden 1500 Bytes gesendet, die kleinste).

Um eine Überlastung zu vermeiden und die maximal verfügbare Bandbreite zwischen Ursprung und Ziel auszulasten, gibt es insgesamt drei Phasen. Das langsamer Start Die Phase (langsamer Start) ist für das exponentielle Wachstum verantwortlich (daher kann sie nicht wirklich als langsamer Start betrachtet werden). Das Überlastungsfenster, dann die Überlastung Vermeidung Phase, die für das lineare Anwachsen des Überlastungsfensters verantwortlich ist, und schließlich die konstante Phase Dabei ist das Empfangsfenster dasselbe wie das Überlastungsfenster.

TCP verfügt derzeit über verschiedene Algorithmen zur effizienten Verwaltung von Überlastungen. Die ersten waren TCP Tahoe und Reno, obwohl wir auch andere wie TCP Vegas haben. Im Laufe der Jahre sind jedoch mit den neuen TCP / IP-Datennetzen andere Algorithmen aufgetaucht effizienter. Zum Beispiel haben wir TCP-BRR Dadurch können wir Informationen so schnell wie möglich senden, da sie viel effizienter sind als das ursprüngliche TCP-Protokoll (wir werden eine höhere Geschwindigkeit haben). Wir haben auch TCP Cubic, die Überlastungskontrolle, die von der Linux und Unix-Betriebssysteme.



Schließlich ist ein weiteres interessantes Merkmal von TCP, dass es uns ermöglicht, Multiplex-Daten , damit wir gleichzeitig Informationen von verschiedenen Hosts erhalten können. Es ermöglicht auch Vollduplex, da wir Daten gleichzeitig über denselben Kommunikationskanal senden und empfangen können.

Aufbau der Verbindung zwischen Client und Server und Trennung in TCP

Das Hauptmerkmal des TCP-Protokolls ist, dass es sich um ein verbindungsorientiertes Protokoll Um eine Verbindung zwischen Client und Server herzustellen, ist es unbedingt erforderlich, eine vorherige Verbindung zu diesem Server herzustellen.

Diese vorherige Verbindung wird aufgerufen 3-Handshake und es besteht im Wesentlichen darin, dass der Client (derjenige, der die Verbindung initiiert) eine SYN-Nachricht an den Server sendet (derjenige, der die Verbindung empfängt). Anschließend sendet der Server eine Nachricht vom Typ SYN-ACK, die angibt, dass er mit dem Senden von Informationen beginnen kann. Schließlich sendet der Client eine ACK, die angibt, dass er sie korrekt empfangen hat, und alle Informationen zwischen Client und Server werden bereits gesendet. bidirektionaler Weg. Ein sehr wichtiges Detail von TCP ist, dass es auf jeder Seite Sequenznummern generiert, wodurch falsche Verbindungen zwischen ihnen nicht hergestellt werden können. Wenn sich der Angreifer jedoch „in der Mitte“ befindet, ist eine ARMMitM-Angriffe vom Typ "Spoofing" oder ähnliches können durchgeführt werden, jedoch nicht über das Internet.



Eine der Schwachstellen von TCP ist das Senden einer großen Anzahl von TCP-SYN-Segmenten mit dem Ziel, die Verbindungen zum Empfänger zu „sättigen“. Einige mögliche Lösungen zur Abschwächung dieses Denial-of-Service-Angriffs sind:

  • Begrenzen Sie die Anzahl der Verbindungen, entweder globale oder IP-Verbindungen.
  • Akzeptieren Sie nur Verbindungen zu vertrauenswürdigen IP-Adressen.
  • Verzögern Sie die Zuweisung von Ressourcen mithilfe von „Cookies“ oder auch SYN-Cookies.

Zu Verbindung beenden Wenn derjenige, der die Verbindung beenden möchte, eine FIN-Nachricht sendet und der Host, der sie empfängt, eine ACK-Nachricht zusammen mit einer anderen FIN-Nachricht sendet, sendet das Team, das den Verbindungsabbau initiiert hat, eine letzte ACK und der offene Socket schließen. Ein wichtiges Detail ist, dass wir eine „halboffene“ Verbindung haben können, wenn ein Host die Verbindung beendet und der andere nicht, kann die Seite, die die Verbindung beendet hat, keine weiteren Daten senden, die andere jedoch nicht closed kann weiter Informationen senden.



TCP-Header

TCP fügt hinzu mindestens 20 Byte Header in jedem Segment, da wir ein "optionales" Feld haben. In diesem TCP-Header finden Sie den Quell- und Zielport der Verbindung (Socket), die Sequenznummer, die ACK-Nummer und die verschiedenen TCP-FLAGS wie SYN, ACK, RST, FIN, URG und andere. In dieser Kopfzeile haben wir auch einen sehr wichtigen Teil für den Betrieb des Schiebefensters, und wir werden ein 16-Bit-Feld haben, das die Größe des Empfangsfensters angibt, das wir zuvor erklärt haben.

Das ports (Quellport und Zielport) sind für das reibungslose Funktionieren von TCP unerlässlich. TCP verwendet diese Portnummern, um einen Socket zu identifizieren, dh eine Anwendung, die Daten sendet oder empfängt. TCP-Ports reichen von 0 bis 65535, es gibt jedoch drei verschiedene Arten von Ports:

  • Bekannte Ports : von 0 bis 1023. Diese Ports werden von IANA für bestimmte Anwendungen reserviert, z. B. HTTP-Server, FTP, SSH und viele andere bekannte Ports.
  • Registrierte Häfen : 1024 bis 49151. Diese Ports sind für bestimmte Anwendungen reserviert, z. B. für Datenbankverwaltungssysteme, BitTorrent und viele andere Anwendungen.
  • Private Häfen : von 49152 bis 65535. Diese Ports werden von keiner Anwendung reserviert, und Sie können sie frei verwenden, ohne ein anderes Protokoll zu beeinflussen.

UDP-Protokoll: Was ist das und wie funktioniert es?

Das UDP-Protokoll (User Datagram Protocol) ist eines der grundlegenden Protokolle im Internet und ermöglicht es Anwendungen, unabhängig von den unteren Schichten des TCP / IP-Modells mit Garantien zu kommunizieren. Dies bedeutet, dass Router (Netzwerkschicht im TCP / IP-Modell) nur die Datagramme (Maßeinheit in UDP) senden müssen. UDP unterstützt mehrere Protokolle auf Anwendungsebene, z. B. das beliebte DNS und sogar das DHCP-Protokoll, um IP-Adressierung automatisch zu erhalten (und bereitzustellen).

Merkmale

Das UDP-Protokoll ermöglicht das Senden von Datagrammen, ohne dass eine Verbindung hergestellt werden muss. Es muss lediglich ein Socket am Ziel geöffnet sein, um die Datagramme der Quelle zu akzeptieren. UDP ist ein nicht verbindungsorientiertes Protokoll, dh es kommt nicht wie bei TCP vor, wo sich eine Phase des Verbindungsaufbaus befindet, hier werden sie direkt ohne vorherige „Warnung“ des Aufbaus gesendet.

Dieses Protokoll bietet keine Flusskontrolle Wenn ein Gerät schneller als ein anderes ist und Informationen sendet, ist es sehr wahrscheinlich, dass Informationen verloren gehen, da sie am langsamsten zusammenbrechen und wir mit der Weiterleitung der Informationen fortfahren müssen. Ein wichtiges Detail ist, dass die Verwaltung der Datagrammweiterleitung von der Transportschicht durchgeführt wird, da UDP sehr einfach ist und keine Kontrollmechanismen für die Datagrammweiterleitung besitzt, da es verloren gegangen ist.

UDP bietet auch keine jede Art von Kontrolle über Stauung Wenn das Netzwerk überlastet ist, können Pakete verloren gehen, und es wird natürlich nicht dafür verantwortlich sein, sie erneut zu senden, wie dies bei TCP der Fall ist. Daher verfügt UDP nicht über eine Überlastungs-, Fluss- oder Fehlerkontrolle. Man könnte sagen, dass UDP ein unzuverlässiges Protokoll ist. Darüber hinaus werden in den gesendeten Datagrammen weder Bestellungen noch Informationen darüber bereitgestellt, ob ein Datagramm korrekt eingetroffen ist, da keine Liefer- oder Empfangsbestätigung vorliegt. Jegliche Art von Garantien für die Übermittlung von Informationen muss in höheren Schichten implementiert werden.



Dieses Protokoll wird hauptsächlich in DHCP und DNS verwendet, wo Geschwindigkeit wichtiger ist als Zuverlässigkeit. UDP wird häufig zur Steuerung von Audio- und Videoübertragungen über ein Netzwerk eingesetzt. UDP fügt nur das Multiplexen von Anwendungen und das Hinzufügen von Prüfsummen zum Header und zur Nutzlast hinzu.

UDP-Header

UDP fügt 8-Byte-Header hinzu in jedem Datagramm. In diesem UDP-Header finden wir den Quell- und Zielport der Verbindung (Socket), die Länge des Datagramms und die Prüfsumme des Datagramms, um sicherzustellen, dass weder der Header noch die Datagrammdaten fehlerfrei sind. Das ports (Quellport und Zielport) sind für das reibungslose Funktionieren von UDP unerlässlich. UDP verwendet diese Portnummern, um einen Socket zu identifizieren, dh eine Anwendung, die Daten sendet oder empfängt.

TCP vs UDP in den verschiedenen VPN-Protokollen wie OpenVPN

OpenVPN ist ein Protokoll zum Erstellen virtueller privater Netzwerke, mit dem wir die Punkt-zu-Punkt-Kommunikation sicherstellen können, da der gesamte Tunnelverkehr verschlüsselt und authentifiziert wird. In RedesZone haben Sie ein vollständiges Tutorial über So konfigurieren Sie einen OpenVPN-Server und verbinden Sie sich einfach.

OpenVPN Secure

OpenVPN ermöglicht es uns, sowohl das TCP- als auch das UDP-Protokoll zu verwenden Wie Sie gesehen haben, sind TCP und UDP für den Datentunnel sehr unterschiedlich, und es ist immer ratsam, TCP zu verwenden, da es über Flusskontrolle, Überlastungskontrolle, Fehlerkontrolle und viele andere Funktionen verfügt, die eine Verbindung zuverlässig machen. Wenn Sie OpenVPN verwenden möchten, wird standardmäßig UDP verwendet. Dies liegt daran, dass bei Problemen die Protokolle der Anwendungsebene (z. B. HTTP, das im Folgenden TCP verwendet) für die Durchführung von erneuten Übertragungen verantwortlich sind, sofern dies erforderlich ist wäre zuverlässig (Flusskontrolle, Überlastung, Fehler usw.), selbst wenn der Punkt-zu-Punkt-verschlüsselte Tunnel UDP verwendet.

Ein sehr wichtiger Aspekt ist, dass ein OpenVPN-Server mit UDP mehr eingehende Verbindungen gleichzeitig akzeptieren kann, wenn Sie UDP verwenden, als wenn Sie TCP verwenden. Außerdem verfügen wir über eine größere Bandbreite, da keine zusätzliche „Last“ hinzugefügt wird , weil UDP viel "leichter" ist.

Wie Sie gesehen haben, handelt es sich bei TCP und UDP um zwei grundlegende Internetprotokolle, die jeweils unterschiedliche Protokolle der Anwendungsschicht verarbeiten.