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

Réseau/Web Python Discussion :

Taille limite des paquets TCP ?


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Taille limite des paquets TCP ?
    Bonjour à tous,

    Je bosse actuellement sur un petit projet perso de messagerie instantanée (en python). Mon but est que cette messagerie soit le plus confidentielle possible, puisque je me suis débrouillé pour que la personne qui possède le serveur ne puisse pas accéder aux messages, via des systèmes de chiffrements symétrique/asymétrique. Bref je ne vais pas poster le code ici, il y a deux mille lignes ça ferai un peu trop (mais si quelqu'un y tiens je peux le faire)

    Mon problème vient du fait que lors de la création d'un compte sur la messagerie, le client doit envoyer de grandes quantités de données au serveur (notamment les clés RSA, publique en clair et privée chiffrée avec le mot de passe de l'utilisateur) allant jusqu'à plus de sept mille caractères. Lorsque je lance le serveur sur la même machine que le client, tout passe impec et les données sont correctement récupérées. Mais lorsque le serveur s’exécute sur une machine distante, cela ne fonctionne plus. J'ai investigué un peu de mon côté et j'ai fini par voir que le serveur n'avait pas l'air de traiter toute la demande, comme si il tronquait le message que le client lui fait parvenir. Pour savoir si cela venait du client ou du serveur, j'ai lancé Wireshark et là j'ai obtenu ça :

    Nom : Wireshark.PNG
Affichages : 473
Taille : 56,1 Ko

    Comme vous pouvez le voir, le gros message de 7 000 caractère n'est pas envoyé par le client, il est décomposé en plusieurs paquets contenant tous 1460 bytes de données. Or le serveur lui, n'analyse que le premier paquet qu'il reçoit, ce qu'il veut dire qu'il ne traite que 1/6 des données. Du coup il plante...

    Alors voila ma question : Quelqu'un pourrait-il m'expliquer pourquoi les données sont fragmentées, et quelqu'un aurait-il une solution pour moi, que ce soit du côté serveur ou client, cela me serai d'une grande aide...

    Voila merci d'avoir pris le temps de me lire et j'espère que quelqu'un sera en mesure de me répondre,

    Victor Josso

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par victor1507 Voir le message
    Alors voila ma question : Quelqu'un pourrait-il m'expliquer pourquoi les données sont fragmentées, et quelqu'un aurait-il une solution pour moi, que ce soit du côté serveur ou client, cela me serai d'une grande aide..
    Parce que TCP/IP a été écrit pour fragmenter les messages en blocs de taille compatible avec le matériel qui va le transférer et 1460 bytes est en gros la taille d'une trame qu'on peut écrire sur un "câble" Ethernet.
    Sachant cela, si vous devez transférer un message de 7000 bytes, il faut définir ce que sera un message et faire en sorte que le récepteur "attende" d'avoir reçu tous les octets avant de passer au message suivant.
    Les différentes techniques à utiliser pour faire çà sont décrites dans le Python How to sur les sockets (mais ce n'est pas un problème Python, juste une implication de ce qu'est TCP/IP).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse rapide !

    J'ai fait quelques recherches de mon côté et c'est également ce que j'avais cru comprendre. Je suis en train de faire des tests en ajoutant un caractère à la fin de chaque message (un ; ou un @ par exemple) qui permettrai au serveur de savoir qu'il a atteint la fin du message.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par victor1507 Voir le message
    (un ; ou un @ par exemple) qui permettrai au serveur de savoir qu'il a atteint la fin du message.
    Le caractère de fin ne doit pas être inclus dans le corps du message.
    Il est plus fiable d'expédier d'abord la taille du message suivie par le corps du message. Si vous codez la taille du message sur 2 octets, çà fait des messages d'une taille de 32737 (signé) ou 65535 (non signé).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous codez la taille du message sur 2 octets, çà fait des messages d'une taille de 32737 (signé) ou 65535 (non signé).
    D'accord mais comment je fais ça ? Cela doit être transmis avec les données ou faut-il modifier le paquet ? Si c'est cela, comment le faire ?

    Victor

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par victor1507 Voir le message
    D'accord mais comment je fais ça ? Cela doit être transmis avec les données ou faut-il modifier le paquet ? Si c'est cela, comment le faire ?
    Il y des choses à comprendre et je vous ai déjà indiqué le how-to Python qui explique tout çà.
    Pour le reste, ce sont des chaînes de caractères (ou plutôt des bytes)... donc vous devriez sinon savoir faire au moins écrire tout ou partie et poster ce que vous avez fait en cas de difficultés.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Il ne faut pas penser en terme de "paquets" quand on est au niveau applicatif et qu'on travaille avec des sockets TCP. Les paquets ne sont qu'un détail d'implémentation. Une socket doit être vu comme un flux, un tuyau, dans lequel tu écris en continu sans te poser de questions. Le client lors de la réception ne voit pas de début ou de fin de paquet. ll faut que les données transmises contiennent des marqueurs de fin de messages.

Discussions similaires

  1. Taille limite des items dans une liste
    Par lesanglier dans le forum Configuration
    Réponses: 2
    Dernier message: 06/11/2009, 13h26
  2. Echange des paquets TCP
    Par passkok dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 15/04/2009, 00h14
  3. Réponses: 1
    Dernier message: 18/08/2008, 05h28
  4. [SQL-Server] Taille limite des résultats d'une requête
    Par AllezTFC dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/05/2008, 21h03
  5. [MySQL] Taille limite des données passées par POST
    Par FoxLeRenard dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/03/2006, 17h46

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