Comment trouver le plus grand paquet UDP que je puisse envoyer sans fragmenter?

J’ai besoin de savoir quel est le plus gros paquet UDP que je peux envoyer à un autre ordinateur sans fragmentation.

Cette taille est communément appelée MTU (Maximum Transmission Unit). Entre deux ordinateurs, de nombreux routeurs et modems pourraient avoir des MTU différents.

J’ai lu que l’implémentation TCP dans Windows trouve automatiquement le MTU maximal dans un chemin.

J’étais également en train d’expérimenter et j’ai découvert que le MTU maximum de mon ordinateur vers un serveur était de 57712 octets + en-tête. Tout ce qui précède a été rejeté. Mon ordinateur est sur un LAN, le MTU n’est-il pas censé être d’environ 1500 octets?

Ce qui suit ne répond pas directement à votre question mais vous pourriez trouver cela intéressant. il indique que les paquets IP peuvent être désassemblés / réassemblés, et donc supérieurs aux limites du support sous-jacent (Ethernet 1500 octets, par exemple): Résoudre les problèmes de fragmentation IP, MTU, MSS et PMTUD avec GRE et IPSEC


Plus sur ce sujet:

  • Re: la fragmentation UDP dit que vous devez utiliser ICMP au lieu de UDP pour découvrir MTU
  • Path MTU Discovery indique qu’une connexion TCP peut inclure une négociation MTU implicite via ICMP

Je ne sais pas sur la génération d’ICMP via une API sous Windows: à une époque, une telle API était proposée et controversée car les gens pensaient que cela faciliterait l’écriture de logiciels implémentant une fonctionnalité de déni de service en générant un flot de Messages ICMP.

Non, il semble qu’il soit implémenté: voir par exemple la FAQ de Winsock Programmer Exemples: Ping: Méthode Raw Sockets .

Donc, pour découvrir MTU, générez des paquets de ping avec le drapeau «Ne pas fragmenter».

Peut-être qu’il y a une API plus facile que cela, je ne sais pas; mais j’espère que je vous ai donné de comprendre le protocole sous-jacent.

En plus de toutes les réponses précédentes, citant le classique :

IPv4 et IPv6 définissent la taille minimale de la mémoire tampon de réassemblage , la taille minimale de datagramme dont nous garantissons que toute implémentation doit prendre en charge. Pour IPv4, il s’agit de 576 octets. IPv6 augmente ce nombre à 1 280 octets.

Cela signifie que vous souhaitez limiter votre taille de datagramme à moins de 576 si vous travaillez sur Internet public et que vous ne contrôlez qu’un seul côté de l’échange – c’est ce que font la plupart des protocoles UDP standard.

Notez également que PMTU est une propriété dynamic du chemin. C’est l’une des choses que TCP traite pour vous. À moins que vous ne soyez prêt à réimplémenter beaucoup de logique de séquençage, de synchronisation et de retransmission, utilisez le protocole TCP pour toute mise en réseau critique. Benchmark, test, profile, c’est-à-dire prouver que TCP est votre goulot d’étranglement, alors seulement, considérez UDP.

C’est un sujet intéressant pour moi. Certains résultats pratiques pourraient être intéressants lors de la diffusion de données UDP volumineuses sur Internet via UDP, et avec un taux de transmission de 1 paquet par seconde, les données continuent à apparaître avec une perte de paquets minimale d’environ 2K. Sur ce point et vous commencez à vous heurter à des problèmes, mais régulièrement nous avons fourni plus de 1600 octets de paquets sans détresse – ceci se fait sur les réseaux mobiles GPRS ainsi que dans le monde WAN. À ~ 1K, en supposant que le signal est stable (ce n’est pas le cas!), Vous obtenez une perte de paquets faible.

Il est intéressant de noter que ce n’est pas le paquet impair, mais souvent un grain de paquets pendant quelques secondes – ce qui est probablement la raison pour laquelle les appels VoIP s’effondrent de temps en temps.

Votre propre MTU est disponible dans le registre , mais dans la pratique, le MTU va au plus petit MTU du chemin entre votre machine et la destination. Ses deux variables et ne peuvent être déterminées que de manière empirique. Un certain nombre de RFC montrent comment le déterminer.

Les LAN peuvent en interne avoir de très grandes valeurs MTU, puisque le matériel réseau est généralement homogène ou au moins administré de manière centralisée.