web-dev-qa-db-fra.com

Quelle est la plus grande taille de paquet UDP sécurisé sur Internet?

J'ai lu un certain nombre d'articles sur la taille des paquets UDP, mais je suis incapable de conclure sur ce qui est correct.

Un certain nombre de services limitent le plus grand paquet UDP à 512 octets (comme dns)

Étant donné que le minimum MTU sur Internet est de 576, la taille de l'en-tête IPv4 est de 20 octets et l'en-tête UDP de 8 octets. Cela laisse 548 octets disponibles pour les données utilisateur

Serais-je capable d'utiliser des paquets jusqu'à la taille de 548 sans fragmentation de paquets? Ou est-ce que les créateurs de DNS savaient quelque chose et c'est pourquoi ils l'ont limité à 512 octets.

Pourrais-je même aller plus haut que 548 octets en toute sécurité?

192
Kingsley

Il est vrai qu'un en-tête IPv4 typique est de 20 octets et l'en-tête UDP de 8 octets. Cependant, il est possible d'inclure des options IP pouvant augmenter la taille de l'en-tête IP jusqu'à 60 octets. De plus, il est parfois nécessaire que les nœuds intermédiaires encapsulent des datagrammes à l’intérieur d’un autre protocole tel que IPsec (utilisé pour les VPN et autres) afin de router le paquet vers sa destination. Par conséquent, si vous ne connaissez pas le MTU sur votre chemin réseau, il est préférable de laisser une marge raisonnable pour d'autres informations d'en-tête que vous n'auriez peut-être pas anticipées. Une charge utile UDP de 512 octets est généralement considérée comme le cas, même si cela ne laisse pas assez de place pour un en-tête IP de taille maximale.

120
mark4o

La limite théorique (sous Windows) de la taille maximale d'un paquet UDP est de 65 507 octets. Ceci est documenté ici :

La taille de message UDP maximale correcte est 65507, comme déterminé par la formule suivante: 0xffff - (sizeof (en-tête IP) + sizeof (en-tête UDP))) = 65535- (20 + 8) = 65507

Cela dit, la plupart des protocoles se limitent à une taille beaucoup plus petite (généralement 512 ou 8192). Vous pouvez souvent dépasser 548 en toute sécurité si vous êtes sur un réseau fiable. Toutefois, si vous diffusez sur Internet en général, le plus grand plus vous risquez de rencontrer des problèmes de transmission de paquets et des pertes.

56
Reed Copsey

La charge utile UDP sécurisée maximale est de 508 octets. Il s’agit d’une taille de paquet de 576, moins l’en-tête IP à 60 octets et l’en-tête UDP à 8 octets. Toute charge UDP de cette taille ou de taille inférieure peut être livrée sur IP (bien que la livraison ne soit pas garantie). Tout ce qui est plus gros est autorisé à être carrément abandonné par n'importe quel routeur pour quelque raison que ce soit. Sauf sur une route uniquement IPv6, où la charge utile maximale est de 1 212 octets. Comme d'autres l'ont mentionné, des en-têtes de protocole supplémentaires pourraient être ajoutés dans certaines circonstances. Une valeur plus conservatrice d'environ 300 à 400 octets peut être préférée à la place.

Tout paquet UDP peut être fragmenté. Mais ce n'est pas trop important, car perdre un fragment a le même effet que perdre un paquet non fragmenté: tout le paquet est abandonné. Avec UDP, cela va se produire de toute façon.

Il est intéressant de noter que la taille maximale théorique du paquet est d’environ 30 Mo (1 500 Ethernet MTU - 60 en-tête IP x 65 536 maximum de fragments), bien que la probabilité de son acheminement serait infinitésimale.

Sources: RFC 791, RFC 2460

44
Beejor

576 est la taille maximale maximale de la mémoire tampon de réassemblage , c’est-à-dire que chaque implémentation doit pouvoir réassembler les paquets de au moins cette taille. Voir IETF RFC 1122 pour plus de détails.

43
user607811

Cet article décrit l'unité de transmission maximale (MTU) http://en.wikipedia.org/wiki/Maximum_transmission_unit . Il indique que les hôtes IP doivent pouvoir traiter 576 octets pour un paquet IP. RFC 791: "Chaque module Internet doit pouvoir transmettre un datagramme de 68 octets sans fragmentation supplémentaire. En effet, un en-tête Internet peut comporter jusqu'à 60 octets et le fragment minimal est de 8 octets. . "

Ainsi, une taille de paquet sécurisée de 508 = 576 - 60 (en-tête IP) - 8 (en-tête udp) est raisonnable.

Comme mentionné par l'utilisateur607811, la fragmentation par d'autres couches réseau doit être réassemblée. https://tools.ietf.org/html/rfc1122#page-56 3.3.2 Réassemblage La couche IP DOIT mettre en œuvre le réassemblage des datagrammes IP. Nous désignons la plus grande taille de datagramme pouvant être réassemblée par EMTU_R ("Effective MTU to receive"); c'est ce qu'on appelle parfois la "taille du tampon de réassemblage". EMTU_R DOIT être supérieur ou égal à 576

14
edW

IPv4 taille minimale du tampon de réassemblage est 576, IPv6 en a 1500. Soustrayez les tailles d'en-tête à partir d'ici. Voir Programmation réseau UNIX de W. Richard Stevens :)

10
Nikolai Fetissov

Étant donné que l'IPV6 a une taille de 1 500, j'affirmerais que les opérateurs ne fourniraient pas de chemins séparés pour IPV4 et IPV6 (ils sont tous deux IP avec des types différents), ce qui les obligerait à utiliser un équipement pour ipv4 qui serait vieux, redondant, plus coûteux à maintenir. et moins fiable. Cela n'aurait aucun sens. En outre, cela pourrait facilement être considéré comme offrant un traitement préférentiel à certains types de trafic - un non non en vertu de règles qui ne les intéressent probablement pas beaucoup (à moins qu’ils ne soient pris au piège).

Donc, 1472 devrait être sûr pour une utilisation externe (bien que cela ne signifie pas qu'une application comme DNS qui ne connaît pas EDNS l'acceptera), et si vous parlez de réseaux internes, vous pouvez plus probablement connaître la configuration de votre réseau, auquel cas Les tailles de paquets jumbo s'appliquent pour les paquets non fragmentés, donc pour 4096 - 4068 octets, et pour les cartes Intel avec des tampons de 9014 octets, une taille de paquet de ... attendez ... 8086 octets, serait le maximum ... coïncidence? snicker

****MISE À JOUR****

Diverses réponses donnent les valeurs maximales autorisées par un fournisseur de logiciel ou diverses réponses en supposant une encapsulation. L'utilisateur n'a pas demandé la valeur la plus basse possible (telle que "0" pour une taille UDP sécurisée), mais la taille de paquet sécurisée la plus grande.

Les valeurs d'encapsulation pour différentes couches peuvent être incluses plusieurs fois. Une fois que vous avez encapsulé un flux, rien n’interdit, par exemple, une couche VPN en dessous et une duplication complète des couches d’encapsulation au-dessus.

Comme la question portait sur les valeurs sûres maximales, je suppose qu’ils parlent de la valeur sécurisée maximale pour un paquet UDP pouvant être reçu. Comme aucun paquet UDP n'est garanti, si vous recevez un paquet UDP, la plus grande taille de sécurité sera 1 paquet sur IPv4 ou 1472 octets.

Remarque - Si vous utilisez IPv6, la taille maximale serait de 1452 octets, car la taille de l'en-tête IPv6 est de 40 octets par rapport à la taille de 20 octets d'IPv4 (et dans tous les cas, vous devez toujours autoriser 8 octets pour l'en-tête UDP).

6
Astara

J'ai lu de bonnes réponses ici; Cependant, il y a quelques erreurs mineures. Certains ont répondu que le champ Longueur du message dans l'en-tête UDP avait un maximum de 65 535 (0xFFFF); c'est techniquement vrai. Certains ont répondu que le maximum actuel est (65535 - IPHL - UDPHL = 65507). L'erreur est que le champ Longueur du message dans l'en-tête UDP inclut toutes les données utiles (couches 5 à 7), plus la longueur de l'en-tête UDP (8 octets). Cela signifie que si le champ de longueur du message est de 200 octets (0x00C8), la charge utile est en réalité de 192 octets (0x00C0).

Ce qui est difficile et rapide, c'est que la taille maximale d'un datagramme IP est de 65 535 octets. Ce nombre est arrivé à la somme des en-têtes L3 et L4, plus la charge utile des couches 5-7. En-tête IP + En-tête UDP + Calques 5-7 = 65535 (Max).

La réponse la plus correcte pour déterminer la taille maximale d'un datagam UDP est 65515 octets (0xFFEB), car un datagramme UDP inclut l'en-tête UDP. La réponse la plus correcte pour déterminer la taille maximale d'une charge UDP est 65507 octets, une charge UDP n'incluant pas l'en-tête UDP.

6
Hog

512 est votre meilleur pari. Il est utilisé ailleurs et est un nombre pair de Nice (la moitié de 1024).

6
Justin Niessner