it-swarm.com.de

Was ist die größte sichere UDP-Paketgröße im Internet?

Ich habe eine Reihe von Artikeln über UDP-Paketgrößen gelesen, konnte jedoch keine Schlussfolgerung darüber ziehen, was richtig ist.

Eine Reihe von Diensten beschränkt das größte UDP-Paket auf 512 Byte (wie DNS).

Unter Berücksichtigung des Minimums von MTU im Internet beträgt die Größe 576, der IPv4-Header 20 Byte und der UDP-Header 8 Byte. Damit stehen 548 Byte für Nutzdaten zur Verfügung

Kann ich Pakete bis zu einer Größe von 548 ohne Paketfragmentierung verwenden? Oder gibt es etwas, von dem die DNS-Ersteller wussten und weshalb sie es auf 512 Bytes beschränkten.

Könnte ich sogar sicher höher als 548 Bytes gehen?

192
Kingsley

Es ist richtig, dass ein typischer IPv4-Header 20 Byte und der UDP-Header 8 Byte umfasst. Es ist jedoch möglich, IP-Optionen einzuschließen, mit denen die Größe des IP-Headers auf bis zu 60 Byte erhöht werden kann. Außerdem ist es manchmal erforderlich, dass Zwischenknoten Datagramme in einem anderen Protokoll wie IPsec (verwendet für VPNs und dergleichen) einkapseln, um das Paket an sein Ziel weiterzuleiten. Wenn Sie also das MTU in Ihrem bestimmten Netzwerkpfad nicht kennen, sollten Sie einen angemessenen Spielraum für andere Header-Informationen lassen, die Sie möglicherweise nicht erwartet haben. Eine UDP-Nutzlast von 512 Byte wird im Allgemeinen dafür in Betracht gezogen, obwohl selbst dadurch nicht genügend Platz für einen IP-Header mit maximaler Größe verbleibt.

120
mark4o

Die theoretische Grenze (unter Windows) für die maximale Größe eines UDP-Pakets beträgt 65507 Byte. Dies ist hier dokumentiert :

Die korrekte maximale UDP-Nachrichtengröße beträgt 65507, wie durch die folgende Formel bestimmt: 0xffff - (sizeof (IP-Header) + sizeof (UDP-Header)) = 65535- (20 + 8) = 65507

Abgesehen davon beschränken sich die meisten Protokolle auf eine viel kleinere Größe - normalerweise 512 oder gelegentlich 8192. Wenn Sie sich in einem zuverlässigen Netzwerk befinden, können Sie häufig sicher über 548 hinausgehen - aber wenn Sie über das Internet senden, desto größer Je weiter Sie gehen, desto wahrscheinlicher werden Sie auf Probleme und Verluste bei der Paketübertragung stoßen.

56
Reed Copsey

Die maximale sichere UDP-Nutzlast beträgt 508 Byte. Dies ist eine Paketgröße von 576 abzüglich des maximalen IP-Headers von 60 Byte und des UDP-Headers von 8 Byte. Für UDP-Payloads dieser Größe oder darunter wird eine Zustellung über IP garantiert (jedoch keine Zustellung garantiert). Alles, was größer ist, darf aus irgendeinem Grund von einem Router direkt fallen gelassen werden. Ausgenommen auf einer IPv6-only-Route, bei der die maximale Nutzlast 1.212 Byte beträgt. Wie bereits erwähnt, können unter bestimmten Umständen zusätzliche Protokollheader hinzugefügt werden. Ein konservativerer Wert von ungefähr 300-400 Bytes kann stattdessen bevorzugt werden.

Jedes UDP-Paket kann fragmentiert sein. Dies ist jedoch nicht so wichtig, da der Verlust eines Fragments den gleichen Effekt hat wie der Verlust eines nicht fragmentierten Pakets: Das gesamte Paket wird verworfen. Bei UDP wird dies so oder so passieren.

Interessanterweise liegt die maximale theoretische Paketgröße bei 30 MB (1.500 Ethernet-MTU - 60 IP-Header x 65.536 maximale Anzahl von Fragmenten), obwohl die Wahrscheinlichkeit, dass es durchkommt, unendlich gering ist.

Quellen: RFC 791, RFC 2460

44
Beejor

576 ist die minimale maximale Größe des Wiederzusammensetzungspuffers, d. H. Jede Implementierung muss in der Lage sein, Pakete mit mindestens dieser Größe wieder zusammenzusetzen. Siehe IETF RFC 1122 für Details.

43
user607811

Dieser Artikel beschreibt die maximale Übertragungseinheit (MTU) http://en.wikipedia.org/wiki/Maximum_transmission_unit . Es besagt, dass IP-Hosts 576 Bytes für ein IP-Paket verarbeiten können müssen. Es wird jedoch darauf hingewiesen, dass das Minimum 68 ist. RFC 791: "Jedes Internetmodul muss in der Lage sein, ein Datagramm mit 68 Oktetten ohne weitere Fragmentierung weiterzuleiten. Dies liegt daran, dass ein Internet-Header aus bis zu 60 Oktetten bestehen kann und das minimale Fragment aus 8 Oktetten besteht . "

Daher ist eine sichere Paketgröße von 508 = 576 - 60 (IP-Header) - 8 (UDP-Header) angemessen.

Wie von user607811 erwähnt, muss die Fragmentierung durch andere Netzwerkschichten wieder zusammengesetzt werden. https://tools.ietf.org/html/rfc1122#page-56 3.3.2 Zusammenbau Die IP-Schicht MUSS den Zusammenbau von IP-Datagrammen implementieren. Wir bezeichnen die größte Datagrammgröße, die von EMTU_R wieder zusammengesetzt werden kann ("Effektive MTU zum Empfangen"). Dies wird manchmal als "Größe des Wiederzusammensetzungspuffers" bezeichnet. EMTU_R MUSS größer oder gleich 576 sein

14
edW

IPv4 minimale Größe des Wiederzusammensetzungspuffers ist 576, IPv6 hat es bei 1500. Subtrahieren Sie die Header-Größen von hier. Siehe NIX Network Programming von W. Richard Stevens :)

10

Unter der Annahme, dass IPV6 eine Größe von 1500 hat, würde ich behaupten, dass Netzbetreiber keine getrennten Pfade für IPV4 und IPV6 bereitstellen (beide sind IP mit unterschiedlichen Typen), und sie zu Geräten für IPv4 zwingen, deren Wartung alt, redundant und kostspieliger wäre und weniger zuverlässig. Es würde keinen Sinn ergeben. Außerdem kann dies leicht in Betracht gezogen werden, um bestimmten Verkehr zu bevorzugen - ein Nein Nein unter Regeln, die sie wahrscheinlich nicht besonders interessieren (es sei denn, sie werden erwischt).

1472 sollte also für die externe Verwendung sicher sein (obwohl dies nicht bedeutet, dass eine App wie DNS, die nichts über EDNS weiß, dies akzeptiert). Wenn Sie interne Netze verwenden, können Sie mit größerer Wahrscheinlichkeit Ihr Netzwerklayout in diesem Fall ermitteln Jumbo-Paketgrößen gelten für nicht fragmentierte Pakete, also für 4096 - 4068 Bytes, und für Intel-Karten mit 9014-Byte-Puffern wäre eine Paketgröße von ... warte ... 8086 Bytes der maximale Zufall? kichern

****AKTUALISIEREN****

Verschiedene Antworten geben die von einem SW-Anbieter zugelassenen Maximalwerte an oder verschiedene Antworten unter der Annahme einer Verkapselung. Der Benutzer hat nicht nach dem niedrigstmöglichen Wert (wie "0" für eine sichere UDP-Größe) gefragt, sondern nach der größten sicheren Paketgröße.

Verkapselungswerte für verschiedene Schichten können mehrfach angegeben werden. Seitdem Sie einen Stream einmal gekapselt haben, steht beispielsweise einer darunter liegenden VPN-Schicht nichts mehr im Wege und einer vollständigen Verdoppelung der darüber liegenden Verkapselungsschichten.

Da es sich um maximale sichere Werte handelte, gehe ich davon aus, dass es sich um den maximalen sicheren Wert für ein UDP-Paket handelt, das empfangen werden kann. Da kein UDP-Paket garantiert ist, beträgt die größte sichere Größe beim Empfang eines UDP-Pakets 1 Paket über IPv4 oder 1472 Byte.

Hinweis - Wenn Sie IPv6 verwenden, beträgt die maximale Größe 1452 Byte, da die Größe des IPv6-Headers 40 Byte gegenüber 20 Byte bei IPv4 beträgt (und in beiden Fällen müssen immer noch 8 Byte für den UDP-Header zulässig sein).

6
Astara

Ich habe hier einige gute Antworten gelesen. Es gibt jedoch einige kleinere Fehler. Einige haben geantwortet, dass das Feld Nachrichtenlänge im UDP-Header maximal 65535 (0xFFFF) beträgt. das ist technisch wahr. Einige haben geantwortet, dass das tatsächliche Maximum (65535 - IPHL - UDPHL = 65507) ist. Der Fehler besteht darin, dass das Feld Nachrichtenlänge im UDP-Header alle Nutzdaten (Layer 5-7) sowie die Länge des UDP-Headers (8 Bytes) enthält. Dies bedeutet, dass bei einem Nachrichtenlängenfeld von 200 Bytes (0x00C8) die Nutzlast tatsächlich 192 Bytes (0x00C0) beträgt.

Was schwierig und schnell ist, ist, dass die maximale Größe eines IP-Datagramms 65535 Bytes beträgt. Diese Zahl ergibt sich aus der Summe der Header L3 und L4 sowie der Nutzlast der Layer 5-7. IP-Header + UDP-Header + Ebenen 5-7 = 65535 (max.).

Die korrekteste Antwort für die maximale Größe eines UDP-Datagramms lautet 65515 Bytes (0xFFEB), da ein UDP-Datagramm den UDP-Header enthält. Die korrekteste Antwort für die maximale Größe einer UDP-Payload ist 65507 Byte, da eine UDP-Payload den UDP-Header nicht enthält.

6
Hog

512 ist die beste Wahl. Es wird an anderer Stelle verwendet und ist eine gerade Zahl in Nizza (die Hälfte von 1024).

6
Justin Niessner