60 votes

Comment trouver le plus gros paquet UDP que je peux envoyer sans fragmentation?

J'ai besoin de savoir ce que le plus grand paquet UDP je peux envoyer à un autre ordinateur sans la fragmentation.

Cette taille est communément connu comme le MTU (Maximum Transmission Unit). Soi-disant, entre 2 ordinateurs, il y aura beaucoup de routeurs et les modems qui peuvent avoir différentes Mtu.

J'ai lu que l'implémentation TCP de windows détecte automatiquement le maximum de la MTU d'un chemin.

J'ai aussi été à l'expérimentation, et j'ai trouvé que le MTU maximum à partir de mon ordinateur vers un serveur a été 57712 octets+ - tête. Rien au-dessus de qui a été écartée. Mon ordinateur est sur un réseau local, n'est pas le MTU censé être autour de 1500 octets?

29voto

ChrisW Points 37322

La suite de ne pas répondre directement à votre question, mais vous trouverez peut-être intéressant; il est dit que les paquets IP peut être démonté/remonté, et donc plus grand que la limite sur le sous-fifre de médias (par exemple 1500 octets Ethernet): Résoudre la Fragmentation IP, MTU, MSS, et PMTUD Problèmes avec GRE et IPSEC


Plus sur ce sujet:

Je ne sais pas à propos de la génération ICMP via une API Windows: à la fois une API a été proposé, et a été controversée parce que les gens ont soutenu que ferait-il facile d'écrire un logiciel qui implémente le déni-de-service de la fonctionnalité de génération d'un flot de messages ICMP.

Non, on dirait qu'il est mis en œuvre: voir, par exemple, Winsock du Programmeur FAQ Exemples: Ping: les Sockets Raw Méthode.

Donc, à découvrir MTU, de générer des paquets ping avec le "ne pas fragmenter" drapeau.

Peut-être qu'il est plus facile de l'API que cela, je ne sais pas; mais j'espère que je vous ai donné de comprendre le protocole sous-jacent[s].

16voto

Nikolai N Fetissov Points 52093

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

IPv4 et IPv6 définir minimum remontage taille de la mémoire tampon, le minimum de la taille du datagramme qui nous sont garantis à toute mise en œuvre doit prendre en charge. Pour IPv4, c'est de 576 octets. IPv6 soulève à 1 500 octets. ...


Ce joli beaucoup signifie que vous souhaitez limiter votre taille du datagramme à moins de 576 si vous travaillez en public sur internet et vous ne contrôler qu'un seul côté de l'échange - c'est ce que la plupart de la norme UDP basé sur les protocoles.

Notez également que PMTU est une propriété dynamique de la trajectoire. C'est l'une des choses TCP traite pour vous. Sauf si vous êtes prêt à re-mettre en œuvre beaucoup de séquençage, le calendrier, et la retransmission de la logique, de l'utilisation de TCP pour toute critique de la mise en réseau. Test, test, de profil, c'est à dire prouver que le protocole TCP est votre goulot d'étranglement, de n'envisager d'UDP.

3voto

Alexp Points 113

C'est un sujet intéressant pour moi. Peut-être quelques résultats pratiques pourraient être d'intérêt lors de la livraison de chunky de données UDP autour du monde réel sur internet via UDP, et avec une vitesse de transmission de 1 paquet de seconde, de données continue de tourner avec un minimum de perte de paquets jusqu'à environ 2K. Au cours de cette et vous commencez à courir dans les questions, mais régulièrement, nous avons livré plus de 1 600 octets des paquets sans détresse - c'est sur le GPRS mobile les réseaux WAN dans le monde entier. À ~1K en supposant que le signal est stable, (ne l'est pas!) vous êtes faible perte de paquets.

Il est intéressant de noter ses pas l'étrange paquet, mais souvent un grain de paquets pendant quelques secondes - qui est sans doute pourquoi les appels VoIP tombent de temps en temps.

2voto

Jherico Points 12554

Votre propre MTU est disponible dans le registre, mais le MTU dans la pratique va de la plus petite MTU dans le chemin entre votre machine et la destination. De son à la fois variable et ne peut être déterminé de façon empirique. Il y a un certain nombre de Rfc montrant comment le déterminer.

LAN peuvent en interne ont de très grandes valeurs MTU, depuis le matériel réseau est généralement homogène, ou au moins centralisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X