User Datagram Protocol
Im Computernetzwerk, das User Datagram Protocol (UDP) ist eines der Kernmitglieder der Internet -Protokollsuite. Mit UDP können Computeranwendungen Nachrichten senden, in diesem Fall als als bezeichnet als als Datagramme, an andere Gastgeber auf einem Internetprotokoll (IP) Netzwerk. Vorherige Kommunikation ist nicht erforderlich, um einzurichten Kommunikationskanäle oder Datenpfade.
UDP verwendet ein einfaches Verbindungslose Kommunikation Modell mit einem Minimum an Protokollmechanismen. UDP bietet Überprüfungen für die Datenintegrität und Portnummern Für die Behandlung verschiedener Funktionen an der Quelle und dem Ziel des Datagramms. Es hat keine Handschütteln Dialoge und setzt so das Programm des Benutzers jeder vor Unzuverlässigkeit des zugrunde liegenden Netzwerks; Es gibt keine Garantie für die Lieferung, Bestellung oder einen doppelten Schutz. Wenn auf Netzwerkschnittstellenebene Fehlerkorrektureinrichtungen benötigt werden, kann stattdessen eine Anwendung verwendet werden Transmissionskontrollprotokoll (TCP) oder Stream Control Transmission Protocol (SCTP), die für diesen Zweck ausgelegt sind.
UDP ist für Zwecke geeignet, wenn Fehlerprüfung und Korrektur entweder nicht erforderlich sind oder in der Anwendung durchgeführt werden. UDP vermeidet den Overhead einer solchen Verarbeitung in der Protokollstapel. Zeitempfindliche Anwendungen verwenden häufig UDP Übertragung, was möglicherweise keine Option in a ist Echtzeitsystem.[1]
Das Protokoll wurde von entworfen von David P. Reed 1980 und formal definiert in RFC 768.
Attribute
UDP ist eine einfache meldungsorientierte Transportschicht Protokoll, das in dokumentiert ist RFC768. Obwohl UDP Integritätsüberprüfung (via "liefert Überprüfung) des Kopfballs und der Nutzlast,[2] Es bietet keine Garantien für die Oberschichtprotokoll Für die Bereitstellung von Nachrichten und die UDP -Ebene behält nach dem Versenden keinen Status von UDP -Nachrichten. Aus diesem Grund wird UDP manchmal als bezeichnet Unzuverlässig Datagrammprotokoll.[3] Wenn die Übertragungszuverlässigkeit gewünscht wird, muss sie in der Anwendung des Benutzers implementiert werden.
Eine Reihe von UDP -Attributen eignet sich besonders für bestimmte Anwendungen.
- es ist Transaktionsorientiert, geeignet für einfache Abfrage-Wirkungs-Protokolle wie die Domainnamensystem oder der Netzwerkzeitprotokoll.
- Es bietet Datagramme, geeignet für die Modellierung anderer Protokolle wie z. IP -Tunneling oder Remote -Verfahrensanruf und die Netzwerkdateisystem.
- es ist einfach, passend für Bootstrapping oder andere Zwecke ohne vollen Protokollstapel, so wie die DHCP und Triviales Dateiübertragungsprotokoll.
- es ist staatenlos, geeignet für eine sehr große Anzahl von Kunden, wie in Streaming Medien Anwendungen wie Iptv.
- Das Verzögerte mangelnde Neuvermittlung macht es für Echtzeitanwendungen wie z. B. geeignet Voice over IP, Onlinespieleund viele Protokolle verwenden Echtzeit -Streaming -Protokoll.
- Weil es unterstützt MulticastEs ist für Sendungsinformationen wie in vielen Arten von geeignet Service -Entdeckung und gemeinsam genutzte Informationen wie z. Präzisionszeitprotokoll und Routing -Informationsprotokoll.
Häfen
Anwendungen können verwenden Datagramm -Sockeln Einrichtung von Host-to-Host-Kommunikation. Eine Anwendung bindet einen Socket an ihren Endpunkt der Datenübertragung, was eine Kombination von einem ist IP Adresse und ein Hafen. Auf diese Weise bietet UDP Anwendung Multiplexing. Ein Port ist eine Softwarestruktur, die durch die identifiziert wird Port-Nummer, ein 16-Bit-Ganzzahlwert, der die Portnummern zwischen 0 und 65535 ermöglicht. Port 0 ist reserviert, ist jedoch ein zulässiger Quellportwert, wenn der Sendeprozess keine Nachrichten als Antwort erwartet.
Das Internet zugewiesene Zahlen Autorität (IANA) hat die Hafennummern in drei Bereiche unterteilt.[4] Die Portnummern 0 bis 1023 werden für gemeinsame, bekannte Dienste verwendet. An Unix-wie BetriebssystemeDie Verwendung eines dieser Ports erfordert Superuser Betriebsgenehmigung. Die Portnummern 1024 bis 49151 sind die Registrierte Ports Wird für IANA-registrierte Dienste verwendet. Die Ports 49152 bis 65535 sind dynamische Anschlüsse, die für keinen bestimmten Service offiziell benannt werden und für jeden Zweck verwendet werden können. Diese können auch als verwendet werden als kurzlebige Ports, mit welcher Software, die auf dem Host ausgeführt wird, kann nach Bedarf Kommunikationsendpunkte dynamisch erstellen.[4]
UDP -Datagrammstruktur
Offsets | Oktett | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktett | Bisschen | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Quellport | Zielhafen | ||||||||||||||||||||||||||||||
4 | 32 | Länge | Überprüfung |
Ein UDP -Datagramm besteht aus einem Datagramm Header und ein Daten Sektion. Der UDP -Datagrammheader besteht aus 4 Feldern, von denen jeweils 2 Bytes (16 Bit) sind.[1] Der Datenabschnitt folgt dem Header und ist die Nutzlastdaten für die Anwendung.
Die Verwendung der Verwendung der Überprüfung und Quellport Fields ist in IPv4 optional (rosa Hintergrund in der Tabelle). In IPv6 nur die Quellport Feld ist optional.
- Quellportnummer
- Dieses Feld identifiziert den Port des Absenders, wenn es verwendet wird, und sollte als der Port angenommen werden, auf den sie bei Bedarf antworten sollten. Wenn nicht verwendet, sollte es Null sein. Wenn der Quellhost der Client ist, ist die Portnummer wahrscheinlich eine kurzlebige Portnummer. Wenn der Quellhost der Server ist, ist die Portnummer wahrscheinlich a Bekannter Port Nummer.[4]
- Zielportnummer
- Dieses Feld identifiziert den Port des Empfängers und ist erforderlich. Ähnlich wie bei der Quellportnummer ist die Portnummer wahrscheinlich eine kurzlebige Portnummer, wenn der Zielhost der Ports ist und wenn der Zielhost der Server ist, ist die Portnummer wahrscheinlich eine bekannte Portnummer.[4]
- Länge
- Dieses Feld gibt die Länge in Bytes des UDP -Headers und der UDP -Daten an. Die minimale Länge beträgt 8 Bytes, die Länge des Headers. Die Feldgröße legt für ein UDP-Datagramm eine theoretische Grenze von 65.535 Bytes (8-Byte-Header + 65.527 Bytes) fest. Die tatsächliche Grenze für die Datenlänge, die durch die zugrunde liegenden auferlegt wird IPv4 Protokoll ist 65.507 Bytes (65.535 Bytes-8-Byte-UDP-Header-20-Byte IP -Header).[5]
- Mit IPv6 Jumbogramme Es ist möglich, UDP -Datagramme mit einer Größe von mehr als 65.535 Bytes zu haben.[6] RFC2675 Gibt an, dass das Längenfeld auf Null gesetzt ist, wenn die Länge des UDP -Headers plus UDP -Daten größer als 65.535 ist.
- Überprüfung
- Das Überprüfung Das Feld kann zur Fehlerprüfung des Headers und der Daten verwendet werden. Dieses Feld ist in IPv4 optional und in IPv6 obligatorisch.[7] Das Feld trägt All-Zeros, wenn sie nicht genutzt werden.[8]
Prüfsummenberechnung
Die Methode zur Berechnung der Prüfsumme ist in definiert in RFC768und eine effiziente Berechnung wird in erörtert RFC1071:
Prüfsumme ist der 16-Bit Ergänzung Von der Komplementsumme eines Pseudo -Informationen aus dem IP -Header, dem UDP -Header und den Daten, die am Ende (falls erforderlich) mit Null Oktetten gepolstert werden, um ein Vielfaches von zwei Oktetten herzustellen.[8]
Mit anderen Worten, alle 16-Bit-Wörter werden unter Verwendung der eigenen Komplementarithmetik summiert. Fügen Sie die 16-Bit-Werte hinzu. Wenn bei jeder Zugabe ein Durchführung (17. Bit) erzeugt wird, schwingen Sie das 17. Bitbit und fügen sie zum am wenigsten signifikanten Bit der Laufzeit hinzu.[9] Schließlich wird die Summe dann ergänzt, um den Wert des UDP -Prüfsummenfelds zu erhalten.
Wenn die Prüfsummenberechnung in den Wert Null (alle 16 Bits 0) führt, sollte sie als Komplement (alle 1s) gesendet werden, da eine Überprüfung der Nullwerte angibt, dass keine Prüfsummen berechnet wurden.[8] In diesem Fall ist keine spezifische Verarbeitung am Empfänger erforderlich, da alle 0s und alle 1s in der Komplementarithmetik von 1 Null gleich Null sind.
Die Unterschiede zwischen IPv4 und IPv6 befinden sich im Pseudo -Header, der zur Berechnung der Prüfsummen verwendet wird und dass die Prüfsumme in IPv6 nicht optional ist.[10]
IPv4 Pseudo -Header
Wenn UDP über IPv4 ausgeführt wird, wird die Prüfsumme mit einem "Pseudo -Header" berechnet, der einige der gleichen Informationen aus dem Real enthält IPv4 -Header.[8]: 2 Der Pseudo -Header ist nicht der reale IPv4 -Header, der zum Senden eines IP -Pakets verwendet wird, sondern wird nur für die Prüfsummenberechnung verwendet.
Offsets | Oktett | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktett | Bisschen | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Quelle IPv4 -Adresse | |||||||||||||||||||||||||||||||
4 | 32 | Ziel IPv4 -Adresse | |||||||||||||||||||||||||||||||
8 | 64 | Nullen | Protokoll | UDP -Länge | |||||||||||||||||||||||||||||
12 | 96 | Quellport | Zielhafen | ||||||||||||||||||||||||||||||
16 | 128 | UDP -Länge | Überprüfung | ||||||||||||||||||||||||||||||
20 | 160+ | Daten |
Die Quell- und Zieladressen sind die im IPv4 -Header. Das Protokoll ist das für UDP (siehe Liste der IP -Protokollnummern): 17 (0x11). Das Feld der UDP -Länge ist die Länge des UDP -Headers und der Daten. Die Felddaten stehen für die übertragenen Daten.
Die UDP -Prüfsummenberechnung ist für IPv4 optional. Wenn keine Prüfsumme verwendet wird, sollte sie auf den Wert Null eingestellt werden.
IPv6 Pseudo -Header
Wenn UDP über IPv6 ausgeführt wird, ist die Prüfsumme obligatorisch. Die zum Berechnen verwendete Methode wird geändert, wie in dokumentiert RFC2460:
Jedes Transport oder ein anderes Protokoll der oberen Schicht, das die Adressen des IP-Headers in der Prüfsummenberechnung enthält, muss für die Verwendung über IPv6 geändert werden, um die 128-Bit-IPv6-Adressen einzuschließen.[7]
Beim Berechnen der Prüfsumme wird erneut ein Pseudo -Header verwendet, der die Realität nachahmt IPv6 -Header:
Offsets | Oktett | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Oktett | Bisschen | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | Quelle IPv6 -Adresse | |||||||||||||||||||||||||||||||
4 | 32 | ||||||||||||||||||||||||||||||||
8 | 64 | ||||||||||||||||||||||||||||||||
12 | 96 | ||||||||||||||||||||||||||||||||
16 | 128 | Ziel IPv6 -Adresse | |||||||||||||||||||||||||||||||
20 | 160 | ||||||||||||||||||||||||||||||||
24 | 192 | ||||||||||||||||||||||||||||||||
28 | 224 | ||||||||||||||||||||||||||||||||
32 | 256 | UDP -Länge | |||||||||||||||||||||||||||||||
36 | 288 | Nullen | Nächster Header = Protokoll[11] | ||||||||||||||||||||||||||||||
40 | 320 | Quellport | Zielhafen | ||||||||||||||||||||||||||||||
44 | 352 | Länge | Überprüfung | ||||||||||||||||||||||||||||||
48 | 384+ | Daten |
Die Quelladresse ist die im IPv6 -Header. Die Zieladresse ist das endgültige Ziel. Wenn das IPv6 -Paket keinen Routing -Header enthält, ist dies die Zieladresse im IPv6 -Header. Andernfalls ist es beim Ursprungsknoten die Adresse im letzten Element des Routing -Headers und am empfangenden Knoten die Zieladresse im IPv6 -Header. Der Wert des nächsten Headerfeldes ist der Protokollwert für UDP: 17. Das Feld UDP -Länge ist die Länge des UDP -Headers und der UDP -Daten.
Zuverlässigkeits- und Überlastungskontrolle
Ohne Zuverlässigkeit kann UDP -Anwendungen auf einen Paketverlust, eine Neuordnung, Fehler oder eine Duplikation stoßen. Bei Verwendung von UDP müssen die Endbenutzeranwendungen alle erforderlichen Handschütteln wie Echtzeit bestätigen, dass die Nachricht empfangen wurde. Anwendungen wie z. TFTP, kann bei Bedarf rudimentäre Zuverlässigkeitsmechanismen in die Anwendungsschicht hinzufügen.[4] Wenn eine Anwendung ein hohes Maß an Zuverlässigkeit erfordert, ist ein Protokoll wie das Transmissionskontrollprotokoll kann stattdessen verwendet werden.
Meistens verwenden UDP -Anwendungen keine Zuverlässigkeitsmechanismen und können sogar von ihnen behindert werden. Streaming Medien, Echtzeit-Multiplayer-Spiele und Voice over IP (VoIP) sind Beispiele für Anwendungen, die häufig UDP verwenden. In diesen speziellen Anwendungen ist der Verlust der Pakete normalerweise kein tödliches Problem. In VoIP sind beispielsweise Latenz und Jitter die Hauptanliegen. Die Verwendung von TCP würde Jitter verursachen, wenn Pakete verloren gehen, da TCP der Anwendung keine nachfolgenden Daten zur Verfügung stellt, während sie die erneuten Sende der fehlenden Daten beantragt.
Anwendungen
Zahlreiche wichtige Internetanwendungen verwenden UDP, darunter: die Domainnamensystem (DNS), die Einfaches Netzwerkmanagementprotokoll (SNMP), die Routing -Informationsprotokoll (RUHE IN FRIEDEN)[1] und die Dynamisches Hostkonfigurationsprotokoll (DHCP).
Sprach- und Videoverkehr wird im Allgemeinen mit UDP übertragen. Echtzeit Video und Audio -Streaming -Protokolle sind für gelegentliche verlorene Pakete ausgelegt, sodass nur geringfügige Qualitätsverschlechterungen auftreten, anstatt große Verzögerungen, wenn verlorene Pakete erneut übertragen wurden. Da sowohl TCP als auch UDP über dasselbe Netzwerk laufen, stellten einige Unternehmen Mitte der 2000er Jahre fest Kasse, Buchhaltung, und Datenbank Systeme (wenn TCP den Paketverlust erkennt, wird es seine Datenrate -Nutzung zurückschulen).[12]
Etwas VPN Systeme wie OpenVPN Kann UDP verwenden und bei der Implementierung zuverlässiger Verbindungen auf Anwendungsebene Fehlerprüfung durchführen.
Quic ist ein Transportprotokoll auf UDP. Quic bietet eine zuverlässige und sichere Verbindung. Http/3 Verwendet Quic im Gegensatz zu früheren Versionen von Https die eine Kombination aus verwenden TCP und Tls Zuverlässigkeit bzw. Sicherheit gewährleisten. Dies bedeutet, dass HTTP/3 mit einem einzigen Handshake eine Verbindung herstellt, anstatt zwei separate Handshakes für TCP und TLS zu haben, was bedeutet, dass die Gesamtzeit für die Herstellung einer Verbindung verringert wird.[13]
Vergleich von UDP und TCP
Transmissionskontrollprotokoll ist ein verbindungsorientiertes Protokoll und erfordert Handschütteln, um End-to-End-Kommunikation einzurichten. Sobald eine Verbindung eingerichtet ist, können Benutzerdaten bidirektional über die Verbindung gesendet werden.
- Zuverlässig - TCP verwaltet Nachrichtenbestätigung, -übertragung und Zeitüberschreitungen. Mehrere Versuche, die Nachricht zu übermitteln, werden durchgeführt. Wenn Daten auf dem Weg verloren gehen, werden die Daten erneut eingestellt. In TCP fehlt entweder keine fehlenden Daten oder bei mehreren Timeouts wird die Verbindung fallen gelassen.
- Bestellt - Wenn zwei Nachrichten über eine Verbindung in Sequenz gesendet werden, erreicht die erste Nachricht zuerst die empfangende Anwendung. Wenn Datensegmente in der falschen Reihenfolge ankommen, puffert TCP die Daten außerhalb der Reihenfolge, bis alle Daten ordnungsgemäß neu angeordnet und an die Anwendung geliefert werden können.
- Schwergewicht - TCP benötigt drei Pakete, um eine Socket -Verbindung herzustellen, bevor Benutzerdaten gesendet werden können. TCP behandelt die Zuverlässigkeit und Überlastungskontrolle.
- Streaming - Daten werden als gelesen Byte Stream, keine Unterscheidungsanzeigen werden an Signalnachricht (Segment) Grenzen übertragen.
Das Benutzer-Datagrammprotokoll ist ein einfacheres Nachrichtenbasierter Verbindungsloser Protokoll. Verbindungslose Protokolle stellen keine dedizierte End-to-End-Verbindung auf. Die Kommunikation wird erreicht, indem Informationen in eine Richtung von Quelle zu Ziel übertragen werden, ohne die Bereitschaft oder den Zustand des Empfängers zu überprüfen.
- Unzuverlässig - Wenn eine UDP -Nachricht gesendet wird, kann sie nicht wissen, ob sie ihr Ziel erreicht. Es könnte sich auf dem Weg verlaufen. Es gibt kein Konzept der Anerkennung, Übertragung oder Auszeit.
- Nicht bestellt - Wenn zwei Nachrichten an denselben Empfänger gesendet werden, kann die Reihenfolge, in der sie ankommen, nicht garantiert werden.
- Leicht - Es gibt keine Bestellung von Nachrichten, keine Tracking -Verbindungen usw. Es ist eine sehr einfache Transportschicht, die auf der IP entwickelt wurde.
- Datagramme - Pakete werden einzeln gesendet und bei der Ankunft auf Integrität überprüft. Pakete haben eindeutige Grenzen, die nach Erhalt geehrt werden; Ein Lesevorgang in der Empfängerbuchse liefert eine gesamte Nachricht, wie sie ursprünglich gesendet wurde.
- Keine Überlastungskontrolle - UDP selbst vermeidet keine Überlastung. Überlastungskontrollmaßnahmen müssen auf Anwendungsebene oder im Netzwerk implementiert werden.
- Sendungen - Wenn UDP mit verbindungslosem Umfang ausgestrahlt wird - können gesendete Pakete von allen Geräten auf dem Subnetz behandelt werden.
- Multicast - Ein Multicast -Betriebsmodus wird unterstützt, wobei ein einzelnes Datagrammpaket automatisch ohne Verdoppelung an eine Gruppe von Abonnenten weitergeleitet werden kann.
Standards
- RFC768 - User Datagram Protocol
- RFC2460 - Internetprotokoll, Version 6 (IPv6) Spezifikation
- RFC2675 - IPv6 -Jumbogramme
- RFC4113 - Verwaltungsinformationsbasis für die UDP
- RFC8085 - UDP -Nutzungsrichtlinien
Siehe auch
- Vergleich der Transportschichtprotokolle
- Datagramm Transportschichtsicherheit (DTLS)
- Liste der TCP- und UDP -Portnummern
- Mikrotransportprotokoll (μTP)
- Zuverlässiger Datenprotokoll (RDP)
- Zuverlässiges Benutzerdatagrammprotokoll (RUDP)
- UDP-basierter Datenübertragungsprotokoll
- UDP -Flutangriff
- UDP -Helferadresse
- UDP-Lite - Eine Variante, die Pakete liefert, auch wenn sie missgebildet sind
Verweise
- ^ a b c Kurose, J. F.; Ross, K. W. (2010). Computernetzwerk: Ein Top-Down-Ansatz (5. Aufl.). Boston, MA: Pearson Education. ISBN 978-0-13-136548-3.
- ^ Clark, M.P. (2003). Datennetzwerke IP und das Internet, 1. Aufl.. West Sussex, England: John Wiley & Sons Ltd.
- ^ [email protected] (15. August 2006). "UDP -Protokollübersicht". Ipv6.com. Abgerufen 17. August 2011.
- ^ a b c d e Forouzan, B.A. (2000). TCP/IP: Protokollsuite, 1. Aufl.. Neu-Delhi, Indien: Tata McGraw-Hill Publishing Company Limited.
- ^ Stevens, W. Richard (1994). TCP/IP illustriert: die Protokolle. Vol. 1 (2 ed.). Addison-Wesley. ISBN 978-0-20-163346-7.
- ^ RFC2675
- ^ a b Deering S. & Hinden R. (Dezember 1998). "Internetprotokoll, Version 6 (IPv6) Spezifikation". Internettechnik-Arbeitsgruppe. RFC 2460.
- ^ a b c d Postel, J. (August 1980). User Datagram Protocol. Internettechnik-Arbeitsgruppe. doi:10.17487/rfc0768. RFC 768.
- ^ "16-Bit-Komplementsumme berechnen". mathforum.org. John. 20. März 2002. archiviert von das Original (Email) am 17. November 2020. Abgerufen 5. November 2014.
- ^ Internetprotokoll, Version 6 (IPv6) Spezifikation. p. 27-28. doi:10.17487/rfc8200. RFC 8200.
- ^ Der Wert des nächsten Headerfelds ist der Protokollwert für UDP
- ^ "Die Auswirkungen von UDP auf Datenanwendungen". NetworkPerformancedaily.com. Archiviert von das Original am 31. Juli 2007. Abgerufen 17. August 2011.
- ^ "Quic, ein Multiplex -Stream -Transport über UDP". chromium.org. Abgerufen 17. Februar 2021.