IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Discussion :

Taille des paquets en TCP


Sujet :

Développement

  1. #1
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut Taille des paquets en TCP
    Bonjour,

    sachant que j'ai des paquets à envoyer,

    est-ce que ça pose un problème si j'envoie un paquet de quelques kilo-octets d'un coup, ou vaut-il mieux fragmenter?

    Y'a-t-il un inconvénient à ne pas fragmenter l'envoi?

    J'ai la même question pour la réception

    Si je ne suis pas clair dites-le.

    Merci!

  2. #2
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par coyotte507 Voir le message
    est-ce que ça pose un problème si j'envoie un paquet de quelques kilo-octets d'un coup, ou vaut-il mieux fragmenter?
    Salut,

    Pour l'émission: Les couches réseau successives s'occupent toutes seules de fragmenter elle-même les paquets pour qu'ils puissent traverser le réseau comme il faut. en effet, pour une même salve de paquets, et suivant le 'chemin' du réseau qu'elle empruntera, la fragmentation ne sera pas effectuée de la même manière, en fonction des capacités de chaque noeud du réseau, de leur congestion, ...

    L'opération inverse est également parfois effectuée: si tu envoies plusieurs paquets de quelques octets à la suite, la pile TCP pourra très bien les réassembler elle-même pour éviter d'avoir trop de surcharge par des données 'non utiles' (cf algorithme de Nagle)

    Il est donc plus que recommandé de laisser les couches réseaux faire leur petite sauce dans leur coin et de ne pas s'en préoccuper. Envoie donc tout d'un coup pour leur laisser l'opportunité d'optimiser au mieux.


    Pour la réception, tu ne choisis pas la fragmentation puisque c'est la façon dont l'émetteur aura envoyé ses données qui conditionnera la réception (en admettant que les noeuds intermédiaires n'aient rien sous-fragmenté / regroupé, ce qui reste purement théorique)

    La seule chose à surveiller est la taille du buffer interne à ta socket. En fonction de lui, il faut se débrouiller pour éviter qu'à tout moment celui-ci ne soit complètement rempli et ainsi ne pas perdre de données en cours de route. Pour cela, rien de bien incroyable à implémenter: toujours s'assurer que lorsque ton applicatif reçoit une notification qu'il a reçu de nouvelles données sur la socket, il ne mettre pas trois plombes à lire la totalité des données disponibles (quitte à lui même les stocker dans son propre buffer en attendant de les traiter).

    A ne pas oublier: Lorsqu'on débute avec TCP, on voit que TCP garantit l'ordre de réception des données, leur 'non-perte' et leur intégrité. On a souvent tendance à comprendre implicitement que leur fragmentation est également préservée, ce qui n'est pas le cas. Par exemple, lorsqu'un émetteur envoie les données ABC puis DEF puis GHI, le récepteur peut:
    - recevoir effectivement ABC puis DEF puis GHI
    - recevoir tout en une seule fois ABCDEFGHI
    - recevoir A puis BCDEFG puis HI
    - recevoir A puis B puis C puis DEFGHI
    - etc...

    En conséquence, c'est à l'applicatif de gérer ces différents cas de figure de d'implémenter son propre mécanisme de framentation du flux de données. Par exemple, si ton flux fonctionne sur un système de messages de tailles variable (un message ne pouvant être traité que lorsque l'intégralité de celui-ci est reçue), il te faudra:

    - ajouter à chaque début de message un 'champ d'en-tête - ou header en Anglais' (genre un entier sur 4 octets) pour indiquer la taille en octet su message lui-même.

    - à chaque fois que le récepteur reçoit des données de la socket, il les stocke dans son buffer applicatif.

    - lorsque le buffer contient au moins l'en-tête (les 4 octets), il peut déterminer la taille du prochain message

    - lorsque le buffer contient au moins la taille de la totalité du message, il peut extraire celui-ci et le traiter.

  3. #3
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Merci beaucoup,

    je n'en demandais pas tant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche norme sur la taille des paquets Ethernet
    Par boboss123 dans le forum Protocoles
    Réponses: 10
    Dernier message: 13/02/2015, 14h50
  2. Réponses: 2
    Dernier message: 06/05/2011, 21h55
  3. Réponses: 8
    Dernier message: 30/09/2010, 22h25
  4. Echange des paquets TCP
    Par passkok dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 15/04/2009, 01h14
  5. Réponses: 0
    Dernier message: 29/11/2007, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo