Heim  >  Artikel  >  Java  >  Eine kurze Einführung in das UDP-Protokoll in Java

Eine kurze Einführung in das UDP-Protokoll in Java

黄舟
黄舟Original
2017-07-24 15:30:551367Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zur Einführung des UDP-Protokolls vorgestellt, die einen gewissen Referenzwert haben

Kurze Einführung in UDP

UDP ist ein Transportschichtprotokoll und befindet sich in derselben Schicht wie das TCP-Protokoll. Im Gegensatz zum TCP-Protokoll bietet das UDP-Protokoll jedoch keine Timeout-Neuübertragung, Fehler-Neuübertragung usw., was bedeutet, dass dies der Fall ist ist ein unzuverlässiges Protokoll.

2.UDP-Protokoll-Header

UDP-Portnummer

Da viele Softwareprogramme das UDP-Protokoll verwenden müssen, muss das UDP-Protokoll ein bestimmtes Flag verwenden, um die von verschiedenen Programmen benötigten Datenpakete zu unterscheiden. Dies ist die Funktion der Portnummer. Wenn beispielsweise ein bestimmtes UDP-Programm A den Port 3000 im System registriert, werden alle von außen eingehenden UDP-Pakete mit der Zielportnummer 3000 an dieses Programm übergeben. Theoretisch kann die Portnummer bis zu 2^16 betragen. Da seine Länge 16 Bit beträgt

UDP-Prüfsumme

Dies ist eine optionale Option und nicht alle Systeme führen Prüfsummen durch UDP-Pakete (im Vergleich zu den Anforderungen des TCP-Protokolls), der Standard im RFC verlangt jedoch, dass der Absender die Prüfsumme berechnen soll.

Die UDP-Prüfsumme deckt den UDP-Protokoll-Header und die Daten ab, was sich von der IP-Prüfsumme unterscheidet. Die IP-Protokoll-Prüfsumme deckt nur den IP-Daten-Header ab, nicht alle Daten. Sowohl UDP als auch TCP enthalten einen Pseudo-Header, der zur Berechnung der Prüfsumme gefilmt wird. Der Pseudo-Header enthält sogar Informationen, die im IP-Protokoll enthalten sind, wie z. B. die IP-Adresse. Der Zweck besteht darin, dass UDP zweimal überprüfen kann, ob die Daten das Ziel korrekt erreicht haben. Wenn der Absender die Prüfsummenoption nicht aktiviert und der Empfänger bei der Berechnung der Prüfsumme einen Fehler macht, werden die UDP-Daten stillschweigend verworfen (die Zustellung ist nicht garantiert), ohne dass Fehlermeldungen generiert werden.

UDP-Länge

UDP kann sehr lang sein, bis zu 65535 Bytes. Wenn das allgemeine Netzwerk jedoch sendet, kann es im Allgemeinen nicht ein so langes Protokoll auf einmal übertragen (was MTU-Probleme mit sich bringt), sodass die Daten fragmentiert werden müssen. Diese sind natürlich für Protokolle der oberen Ebene wie UDP transparent UDP muss sich nicht um die IP-Protokollschicht kümmern. Im nächsten Kapitel werden einige Sharding-Strategien kurz erläutert.

IP-Fragmentierung

Nachdem IP Daten von der oberen Schicht empfängt, muss es anhand der Daten ermitteln, von welchen Daten es stammt über die IP-Adresse sendet die Schnittstelle Daten (durch Routing) und fragt die MTU ab. Wenn die Datengröße die MTU überschreitet, werden die Daten fragmentiert. Die Fragmentierung der Daten ist für die oberen und unteren Schichten transparent und die Daten werden erst dann wieder zusammengesetzt, wenn sie das Ziel erreichen. Aber keine Sorge, die IP-Schicht stellt genügend Informationen für die Wiederzusammenführung der Daten bereit.

Im IP-Header zeichnet die 16-Bit-Identifikationsnummer eindeutig die ID eines IP-Pakets auf, und IP-Slices mit derselben ID werden wieder zusammengesetzt, während der 13-Bit-Slice-Offset eine bestimmte aufzeichnet IP Die Position des Fragments relativ zum gesamten Paket und die beiden 3-Bit-Flags in der Mitte zeigen an, ob nach dem Fragment neue Fragmente vorhanden sind. Diese drei Indikatoren stellen alle Informationen zur IP-Fragmentierung dar, und der Empfänger kann diese Informationen verwenden, um die IP-Daten neu zu organisieren (auch wenn die späteren Fragmente vor den vorherigen Fragmenten eintreffen, reichen diese Informationen aus).
Da Fragmentierungstechnologie im Internet häufig eingesetzt wird, gibt es unzählige Software und Leute, die IP-Fragmentierungspakete fälschen, um betrügerische Angriffe durchzuführen.

Sie können das Trancdroute-Programm zur einfachen MTU-Erkennung verwenden. Bitte beachten Sie das Lehrbuch.

Interaktion zwischen UDP und ARP

Dies wird nicht häufig verwendet. Ein Detail, das Menschen kennen Ich habe bemerkt, dass dies für einige Systemimplementierungen gilt. Wenn der ARP-Cache noch leer ist. Bevor UDP gesendet wird, muss eine ARP-Anfrage gesendet werden, um die MAC-Adresse des Zielhosts zu erhalten. Wenn das UDP-Datenpaket groß genug ist und die IP-Schicht es fragmentieren muss, stellen Sie sich vor, dass das UDP-Datenpaket ein ARP ausgibt Abfrageanforderung, und alle Fragmente warten, bis die Abfrage abgeschlossen ist, bevor sie sie senden. Ist das tatsächlich der Fall?
Das Ergebnis ist, dass einige Systeme dazu führen, dass jedes Fragment eine ARP-Anfrage sendet und alle Fragmente warten. Beim Empfang der ersten Antwort sendet der Host jedoch nur das letzte Datenfragment und verwirft es unglaublich. Da die fragmentierten Daten nicht rechtzeitig zusammengestellt werden können, verwirft der empfangende Host auf diese Weise die IP-Datenpakete, die innerhalb eines bestimmten Zeitraums nie zusammengestellt werden können, und sendet eine ICMP-Nachricht mit einem Zusammenstellungszeitlimit (tatsächlich ist dies bei vielen Systemen der Fall). generiert diesen Fehler nicht), um sicherzustellen, dass der Senkenpuffer des empfangenden Hosts nicht mit Fragmenten gefüllt ist, die nie zusammengesetzt werden.

ICMP-Quellenunterdrückungsfehler

Wenn die Verarbeitungsgeschwindigkeit des Zielhosts nicht mit der Datengeschwindigkeit mithalten kann Empfang, da der IP-Layer-Cache des empfangenden Hosts voll ist, sodass der Host eine ICMP-Nachricht „Ich kann es nicht ertragen“ sendet.

UDP-Serverdesign

Einige Funktionen des UDP-Protokolls wirken sich auf das Design unseres Serverprogramms aus, eine grobe Zusammenfassung folgt:

1. Bezüglich Client-IP und -Adresse: Der Server muss anhand der IP-Adresse und Portnummer des Clients feststellen können, ob das Datenpaket legal ist (dies scheint von jedem Server erforderlich zu sein)
2 Zieladresse: Der Server muss die Möglichkeit haben, Broadcast-Adressen zu filtern.
3. Bezüglich der Dateneingabe: Normalerweise entspricht jede Portnummer des Serversystems einem Eingabepuffer, der nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ auf die Verarbeitung wartet, sodass es zwangsläufig zu Pufferüberlaufproblemen kommt. In diesem Fall können UDP-Pakete verworfen werden, ohne dass das Anwendungsserverprogramm selbst Kenntnis von dem Problem hat.
4. Der Server sollte die lokale IP-Adresse einschränken, was bedeutet, dass er sich an einen bestimmten Port einer bestimmten Netzwerkschnittstelle binden kann.

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in das UDP-Protokoll in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn