/ / UDP Networking Fundamentals - mise en réseau, udp

Principes de base de la mise en réseau UDP - networking, udp

J'ai travaillé avec le réseau C # en utilisant UDP. Je vais bien mais j'ai besoin de la réponse à quelques questions fondamentales que j'ai des problèmes à tester:

  • Actuellement, j'envoie des données dans un ~ 16 000 octetsdatagrammes, qui selon Wirehark est divisé en plusieurs paquets de 1 500 octets (en raison de la taille maximale des paquets), puis réassemblé à l'autre extrémité.

Ai-je raison de comprendre que le datagramme serareçu complet à l'autre bout OU pas du tout. IE, c'est une chose tout ou rien. Il n'y a aucune chance de se retrouver avec un datagramme fragmenté en raison de la perte de paquets?

Par conséquent, je dois seulement ACK par datagramme, plutôt que de m'assurer que mes datagrammes sont <1500 octets et ACK chacun?

"J'ai regardé dans beaucoup d'endroits mais il semble y avoir beaucoup de confusion entre les différences entre les datagrammes et les paquets sous-jacents ...

Merci pour ton aide!

Réponses:

2 pour la réponse № 1

Il n'y a aucune chance de se retrouver avec un datagramme fragmenté en raison de la perte de paquets?

Je pense que c'est vrai: que la fragmentation et le réassemblage des fragments sont gérés par la couche de protocole sous UDP, c'est-à-dire qu'ils sont gérés par la couche "IP", qui commettra une erreur si elle ne parvient pas à réassembler les paquets-fragments dans un datagramme (par exemple, recherchez "fragment" " dans RFC 792).

http://www.pcvr.nl/tcpip/udp_user.htm#11_5 dit,

"La couche IP à la destination effectue laremontage. L'objectif est de rendre la fragmentation et le réassemblage transparents pour la couche transport (TCP et UDP), ce qui est le cas, à l'exception d'une éventuelle dégradation des performances. "


1 pour la réponse № 2

Comme vous pouvez maintenant, le champ de longueur UDP 16 bits indique que vous pouvez envoyer un total de 65 535 octets. Cependant, les données peuvent être théoriquement (sizeof (en-tête IP) + sizeof (en-tête UDP)) = 65535- (20 + 8) = 65507 octets.

Mais cela ne signifie pas que toutes les applicationsutilisez UDP enverra cette quantité de données comme exemple de limites de paquets DNS à 512 octets. Cela est dû au fait que vous n'obtenez aucun paquet ACK du serveur. C'est une des raisons pour lesquelles les paquets peuvent être perdus dans le réseau (problèmes de transmission de paquets et perte). Deuxièmement, les nœuds intermédiaires peuvent encapsuler des datagrammes à l'intérieur d'un autre protocole, comme un exemple IPSEC ou d'autres protocoles le font.

Pour UDP, il n'y a pas de paquets ACK, donc dans votre cassi l'application sous-jacente utilise UDP, vous ne devriez voir aucun paquet ACK. Deuxièmement, certains serveurs limitent leur taille au maximum de paquets UDP en fonction de l'application, donc si vous avez un transfert de données du client vers le serveur, vous devriez voir les mêmes octets, par exemple 512 octets. aller et revenir dans wirehark. Généralement, la source fait la demande et la destination renvoie les datagrammes UDP de X octets.

Ces liens peuvent être utiles pour vos questions:

  1. Analyse Uires de Wireshark
  2. RFC 1122 (indique que 576 est la taille de tampon de réassemblage maximale minimale)

-1 pour la réponse № 3

Ai-je raison de comprendre que le datagramme serareçu complet à l'autre bout OU pas du tout. IE c'est une chose tout ou rien. Il n'y a aucune chance de se retrouver avec un datagramme fragmenté en raison de la perte de paquets?

C'est correct.

Par conséquent, je dois seulement ACK par datagramme, plutôt que de m'assurer que mes datagrammes sont <1500 octets et ACK chacun?

Je ne comprends pas cette question. Vous devez ACK chaque datagramme quelle que soit sa taille, et vous devez les faire <1500 octets pour qu'ils ne gagnent pas "tse fragmenter. Sinon, vous ne pourrez peut-être jamais transmettre de datagrammes spécifiques, s'il se fragmente à plusieurs reprises et qu'un fragment se perd à plusieurs reprises.