it-swarm.com.de

Wie finde ich das größte UDP-Paket, das ich ohne Fragmentierung senden kann?

Ich muss wissen, welches das größte UDP-Paket, das ich an einen anderen Computer senden kann, ohne Fragmentierung ist.

Diese Größe wird allgemein als MTU (Maximum Transmission Unit) bezeichnet. Angeblich werden sich zwischen zwei Computern viele Router und Modems befinden, die unterschiedliche MTUs haben können. 

Ich habe gelesen, dass die TCP -Implementierung in Windows automatisch die maximale MTU in einem Pfad findet.

Ich experimentierte auch und fand heraus, dass die maximale MTU von meinem Computer zu einem Server 57712 Bytes + Header betrug. Alles darüber wurde verworfen. Mein Computer ist in einem LAN, soll die MTU nicht etwa 1500 Byte groß sein?

52
Unknown

Das Folgende beantwortet Ihre Frage nicht direkt, aber Sie könnten es interessant finden; es besagt, dass IP-Pakete zerlegt/neu zusammengesetzt werden können und daher auf den unterlagerten Medien (z. B. 1500-Byte-Ethernet) über dem Grenzwert liegen: IP-Fragmentierung lösen, MTU-, MSS- und PMTUD-Probleme mit GRE und IPSEC


Mehr zu diesem Thema:

  • Re: UDP Fragmentation sagt, Sie sollten ICMP anstelle von UDP verwenden, um MTU zu ermitteln
  • Pfad MTU Discovery besagt, dass eine TCP -Verbindung implizite MTU-Aushandlung über ICMP beinhalten kann

Ich weiß nicht, wie man ICMP über eine API unter Windows generiert: Zu einem Zeitpunkt wurde eine solche API vorgeschlagen und war umstritten, weil die Leute argumentierten, dass es einfach wäre, Software zu schreiben, die eine Denial-of-Service-Funktionalität implementiert, indem eine Flut von erzeugt wird ICMP-Nachrichten.

Nein, es sieht so aus, als ob implementiert ist: siehe zum Beispiel Winsock Programmer's FAQ Beispiele: Ping: Raw Sockets-Methode .

Um MTU zu entdecken, generieren Sie Ping-Pakete mit dem Flag "Nicht fragmentieren".

Vielleicht gibt es eine einfachere API als diese, ich weiß es nicht. aber ich hoffe, ich habe Ihnen gegeben, das zugrunde liegende Protokoll zu verstehen.

23
ChrisW

Zusätzlich zu allen vorherigen Antworten, zitiere ich den classic :

minimale Größe des Wiederzusammensetzungspuffers


Dies bedeutet praktisch, dass Sie Ihre Datagrammgröße auf unter 576 begrenzen möchten, wenn Sie über das öffentliche Internet arbeiten und nur eine Seite des Austauschs steuern.

Beachten Sie auch, dass PMTU eine dynamische Eigenschaft des Pfads ist. Dies ist eines der Dinge, mit denen TCP sich für Sie beschäftigt. Wenn Sie nicht in der Lage sind, zahlreiche Sequenzierungs-, Timing- und Übertragungsübertragungslogiken erneut zu implementieren, verwenden Sie TCP für alle kritischen Netzwerke. Benchmark, Test, Profil, d.h. beweisen dass TCP Ihr Engpass ist, berücksichtigen Sie nur UDP.

12

Dies ist ein interessantes Thema für mich. Möglicherweise sind einige praktische Ergebnisse von Interesse, wenn über UDP UDP-Daten im realen Internet bereitgestellt werden. Bei einer Übertragungsrate von 1 Paket pro Sekunde treten die Daten weiterhin mit einem minimalen Paketverlust von bis zu etwa 2K auf. Währenddessen beginnen Sie mit Problemen, aber wir haben regelmäßig Pakete mit über 1600 Bytes ohne Stress geliefert - dies gilt für GPRS-Mobilfunknetze sowie WAN weltweit. Bei ~ 1K wird angenommen, dass das Signal stabil ist (es ist nicht!), Und es treten geringe Paketverluste auf. 

Interessanterweise ist es nicht das seltsame Paket, sondern oft ein paar Sekunden lang ein Böen von Paketen - was vermutlich dazu führt, dass VoIP-Anrufe nur gelegentlich zusammenbrechen.

3
Alexp

Ihre eigene MTU ist in der Datei registry verfügbar, aber die MTU geht in der Praxis an die kleinste MTU im Pfad zwischen Ihrem Computer und dem Ziel. Beide sind variabel und können nur empirisch bestimmt werden. Es gibt eine Reihe von RFCs , die zeigen, wie dies ermittelt werden kann.

LANs können intern sehr hohe MTU-Werte aufweisen, da die Netzwerkhardware normalerweise homogen ist oder zumindest zentral verwaltet wird.

2
Jherico

Bei UDP-Anwendungen müssen Sie die End-to-End-MTU selbst handhaben, wenn Sie eine IP-Fragmentierung oder verworfene Pakete vermeiden möchten. Der empfohlene Ansatz für jede Anwendung ist, PMTU zur Auswahl des maximalen Datagramms zu verwenden oder Datagramme <minimale PMTU zu senden

https://tools.ietf.org/html/rfc5405#section-3.2

Unicast UDP-Verwendungsrichtlinien für Anwendungsentwickler "SOLLTE NICHT Datagramme senden, die die PMTU überschreiten, SOLLTEN PMTU ermitteln oder Datagramme senden <Minimum PMTU

Windows erscheint den Einstellungen und dem Zugriff auf PMTU-Informationen über die grundlegende Socket-Optionsschnittstelle:

Sie können sicherstellen, dass die PMTU-Erkennung über IP_MTU_DISCOVER aktiviert ist, und Sie können die MTU über IP_MTU lesen.

https://docs.Microsoft.com/en-us/windows/desktop/winsock/ipproto-ip-socket-options

0
bockmabe