Macht UDP überhaupt etwas?

Sep 15 2020

Nach meinem Verständnis verfügt TCP über eine Logik zur Gewährleistung einer zuverlässigen Kommunikation, aber UDP sendet nur naiv Informationen über den dafür eingerichteten Kanal unter Verwendung von IP und anderen Elementen in niedrigeren Schichten.

Tut UDP tatsächlich etwas? Ich bin irgendwie verwirrt darüber, warum es überhaupt einen Namen hat.

Antworten

60 JeffWheeler Sep 15 2020 at 07:10

Interessante Perspektive und Frage!

Ja, UDP bietet hauptsächlich ein Standardmittel für die gleichzeitige Existenz mehrerer Anwendungen unter Verwendung derselben IP-Adresse, indem das Konzept der UDP-Ports definiert wird .

Das Spannende an UDP ist nicht so sehr das Netzwerkprotokoll, sondern die von Betriebssystemen und Socket-Bibliotheken implementierte API. Obwohl dies nicht Teil der UDP-Spezifikationen selbst ist, ist die Möglichkeit, Abstraktionen wie die POSIX-Socket-API zu verwenden, um auf einfache Weise Software auf Protokollen wie UDP zu entwickeln, der Schlüssel zum Erfolg des Internetprotokollstapels.

45 RonMaupin Sep 15 2020 at 06:11

UDP ist ein Transportprotokoll wie TCP. Dies bedeutet, dass eine Anwendung ein Protokoll zur Verwendung von IP bereitstellt. Wie TCP verfügt UDP über Adressen (Ports), an die Anwendungen gebunden sind, sodass Datagramme für gebundene Anwendungen von UDP an die richtigen Anwendungen gesendet werden. UDP für IPv4 bietet auch eine optionale Prüfsumme, die Prüfsumme ist jedoch für IPv6 erforderlich.

UDP ist ein nachrichtenbasiertes Protokoll, wobei TCP ein Stream-basiertes Protokoll ist. UDP kann für Protokolle auf Anwendungsebene nützlich sein, um einige, aber nicht alle Funktionen von TCP bereitzustellen, und viele Anwendungen oder Protokolle auf Anwendungsebene können die Zuverlässigkeit von TCP nicht nutzen oder werden sogar durch diese beschädigt. Beispielsweise können Echtzeitprotokolle wie VoIP, Video oder sogar Spiele verlorene Datagramme nicht verwenden, nachdem sie nicht mehr nützlich sind. Daher würde ein erneutes Senden der Daten durch TCP zu einem schlechten Ergebnis führen. Wenn Sie VoIP verwenden und die andere Person antwortet, möchten Sie "Hallo" und nicht "Oh, Hölle" hören.

Andere Dinge wie Multicast sind unidirektional, aber TCP erfordert das Einrichten einer bidirektionalen Verbindung zwischen zwei Anwendungen, während eine Multicast-Anwendung Daten an viele Empfänger sendet. TCP kann das nicht wirklich, aber es ist einfach, UDP mit Multicast zu verwenden.

14 AustinHemmelgarn Sep 16 2020 at 05:27

Ich möchte Sie ermutigen, sich anzusehen, wie übergeordnete Protokolle, die UDP verwenden, es tatsächlich verwenden. Klassische und gut dokumentierte Beispiele sind DNS (in den meisten Fällen ist es zumindest möglich, DNS über TCP auszuführen, aber es ist wirklich ungewöhnlich), DHCP, NTP und PTP.

Alle diese Protokolle haben einige Gemeinsamkeiten:

  • Sie legen Wert darauf, mit anderen Diensten auf demselben System koexistieren zu können.
  • Sie kümmern sich um ein gewisses Maß an Datenintegrität ihrer Nachrichten.
  • Sie sind nachrichtenorientiert , nicht streamorientiert .
  • Sie beinhalten in erster Linie einen sehr kurzen und oft seltenen Datenaustausch.

Die ersten beiden Punkte werden trivial von jedem vernünftigen Transportschichtprotokoll (sogar exotischen Dingen wie TIPC), einschließlich TCP, abgedeckt. Für die beiden anderen Punkte ist TCP jedoch schrecklich , da Sie für nachrichtenorientierte Protokolle ein eigenes Nachrichtenrahmenprotokoll über die Streams rollen müssen. Der erhebliche Aufwand für den Start und die Wartung von Verbindungen bedeutet, dass es für einen kurzen, seltenen Datenaustausch sehr ineffizient ist .

Mit anderen Worten, das "Merkmal" von UDP, über das es sich überhaupt Sorgen zu machen lohnt, ist, dass es das absolute Minimum für diese ersten beiden Punkte bietet, ohne sich in die Quere zu kommen, wie es TCP für diese Art von Anwendungen tut. Es hat auch einen kleinen Vorteil gegenüber TCP, da es trivial istentweder rein in Hardware oder auf einem winzigen System mit weniger als 1 KB RAM und einem winzigen Speicherplatz für Code zu implementieren (dies ist ein Teil des Grundes, warum BOOTP, RARP, TFTP und andere Bootstrap-Protokolle es ursprünglich verwendeten). Der Nachteil ist die Zuverlässigkeit und Anfälligkeit für bestimmte Arten von Angriffen, wenn langlebige zustandsbehaftete "Verbindungen" ohne sehr sorgfältige Verwaltung verwendet werden. Die Protokolle, die sie verwenden und sich darum kümmern, handhaben dies jedoch selbst (siehe TFTP für ein Beispiel für den Umgang mit dem Zuverlässigkeitsproblem, wenn auch auf Kosten der Geschwindigkeit).

Jetzt gibt es Optionen, mit denen ähnliche Funktionssätze (oder sogar umfassendere Funktionssätze) wie bei TCP mit weitaus geringerem Overhead erzielt werden können und die dennoch eine nachrichtenorientierte Kommunikation ermöglichen (Hauptbeispiele sind RUDP, DCCP und SCTP) hat sich aus einer Kombination von Gründen durchgesetzt, so dass UDP nur ein bisschen herumsteht.

7 iBug Sep 15 2020 at 23:26

Es gibt einen wichtigen Punkt, für den UDP keine "Verbindung" einrichten muss .

Beispielsweise wäre es schwierig und komplex, wenn nicht unmöglich, DHCP zusätzlich zu TCP zu implementieren, wenn ein Client keine IP-Adresse und keine Kenntnis der vorhandenen Netzwerkumgebung hat. Es ist daher sinnlos, eine Verbindung herzustellen, da der Client die Zieladresse nicht kennt und keine Quelladresse hat. UDP macht dies einfach, indem eine Übertragung eine DHCP-Anforderung an das vorhandene Netzwerk zulässt und ein (und hoffentlich nur ein) DHCP-Server mit einem Angebot antwortet.

In ähnlicher Weise sind die meisten Netzwerk-Broadcast-Aktionen mit TCP * wenig sinnvoll, da Sie keine "Verbindung" mit einem "Broadcast-Ziel" haben können, bei dem jeder einzelne Host akzeptiert und antwortet. Dinge wie Sequenznummern und Prüfsummen summieren sich nicht.

* Wir reden nicht über Sachen wie MPI_Bcast(). Sie sind wirklich außerhalb des Rahmens für diese Frage.

6 PeterGreen Sep 17 2020 at 04:42

Für mich ist es wichtig, dass UDP sowohl Quell- als auch Zielportnummern bereitstellt und daher nicht nur mehrere verschiedene Anwendungsprotokolle, sondern auch mehrere Instanzen desselben Anwendungsprotokolls zulässt.

Im Prinzip können Sie Ihr Anwendungsprotokoll direkt auf IP aufbauen und eine Protokollnummer dafür erhalten. Dies funktioniert einwandfrei, wenn Sie nur eine Instanz Ihres Anwendungsprotokolls auf jedem Host haben. Es funktioniert jedoch nicht so gut, wenn Sie mehrere Instanzen desselben Anwendungsprotokolls auf jedem Host haben möchten.

Durch die getrennten Quell- und Zielportnummern und die Festlegung der Konventionen, dass Clients kurzlebige Ports verwenden, während Server bekannte Ports verwenden und dass Antworten die Portnummern austauschen, unterstützt UDP mehrere Instanzen desselben Anwendungsprotokolls auf demselben Host.

3 VictorCasado Sep 17 2020 at 22:16

Es bietet Multiplexing / Demultiplexing-Dienste für die oberen Schichten (App), sodass Daten aus verschiedenen Prozessen verarbeitet werden können. Mit der Prüfsumme erhalten Sie auch eine Fehlererkennung.

UDP ist ein so einfaches Protokoll und eignet sich für Protokolle der oberen Schicht, die eine schnelle Kommunikation bevorzugen, ohne dass eine Verbindung hergestellt oder eine zuverlässige Datenübertragung erforderlich ist.

Darüber hinaus verwenden einige Protokolle wie DNS UDP für ihre Zwecke ...

1 cybernard Sep 16 2020 at 01:51

Ich denke, es ist wichtig zu beachten, dass DHCP zu 100% auf UDP basiert und äußerst weit verbreitet ist.

Auch DNS hat in der Vergangenheit UDP verwendet und verwendet nur TCP, wenn die Antwort für ein UDP-Paket zu groß ist.