[PYTHON][RESEAU] Taille limite des paquets TCP ?
Fermé
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
-
24 mai 2018 à 17:30
yg_be Messages postés 23476 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 février 2025 - 24 mai 2018 à 23:38
yg_be Messages postés 23476 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 février 2025 - 24 mai 2018 à 23:38
A voir également:
- [PYTHON][RESEAU] Taille limite des paquets TCP ?
- Comment réduire la taille d'un fichier - Guide
- Udp vs tcp - Guide
- Tcp optimizer - Télécharger - Optimisation
- Entrer les informations d'identification reseau - Guide
- Citizen code python avis - Accueil - Outils
3 réponses
Utilisateur anonyme
24 mai 2018 à 18:31
24 mai 2018 à 18:31
Bonjour
Que les messages trop longs soient fragmentés, c'est normal et c'est lié aux limitations, techniques ou normatives, de certains moyens de transmissions le long de la chaîne. Regarde ces articles sur le MTU :
https://fr.wikipedia.org/wiki/Maximum_transmission_unit
https://www.commentcamarche.net/faq/7185-introduction-au-mtu
https://www.commentcamarche.net/contents/530-le-protocole-ip
Mais je pensais (je me rappelle peut-être mal, c'était il y a longtemps et j'y ai peu touché) que TCP réassemblait les morceaux, et que cette fragmentation était transparente pour l'utilisateur moyen, qui ne descend pas si bas dans l'implémentation des protocoles.
Si tu peux maîtriser le découpage au départ, en envoyant plusieurs petits datagrammes au lieu d'un seul long, ce sera peut-être plus simple pour toi de réassembler. Sinon, pas de miracle : il faudra bien gérer le réassemblage d'après les champs prévus par TCP/IP. Bon courage.
Que les messages trop longs soient fragmentés, c'est normal et c'est lié aux limitations, techniques ou normatives, de certains moyens de transmissions le long de la chaîne. Regarde ces articles sur le MTU :
https://fr.wikipedia.org/wiki/Maximum_transmission_unit
https://www.commentcamarche.net/faq/7185-introduction-au-mtu
https://www.commentcamarche.net/contents/530-le-protocole-ip
Mais je pensais (je me rappelle peut-être mal, c'était il y a longtemps et j'y ai peu touché) que TCP réassemblait les morceaux, et que cette fragmentation était transparente pour l'utilisateur moyen, qui ne descend pas si bas dans l'implémentation des protocoles.
Si tu peux maîtriser le découpage au départ, en envoyant plusieurs petits datagrammes au lieu d'un seul long, ce sera peut-être plus simple pour toi de réassembler. Sinon, pas de miracle : il faudra bien gérer le réassemblage d'après les champs prévus par TCP/IP. Bon courage.
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
1
24 mai 2018 à 18:52
24 mai 2018 à 18:52
Merci beaucoup pour ta réponse rapide ! Je regarde les articles que tu m'as donné et je vais réfléchir à comment je peux palier au problème, je posterai quelque chose si j'y arrive et sinon je redemanderai de l'aide. Encore mille fois merci,
Victor Josso
Victor Josso
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
Ambassadeur
1 568
24 mai 2018 à 20:20
24 mai 2018 à 20:20
bonjour, tout cela me semble très normal. je pense que le serveur doit simplement continuer à lire les données reçues. TCP n'a pas le concept de messages, il traite les données comme un flux continu. le récepteur doit donc simplement lire toutes les données, et les traiter au fur-et-à-mesure. le réassemblage est simple à faire, comme les données se suivent simplement dans le flux TCP.
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
1
24 mai 2018 à 20:48
24 mai 2018 à 20:48
Bonsoir et merci de me répondre,
J'ai compris pour le mode de fonctionnement du TCP mais ce qui reste étrange c'est que lorsque le client se connecte à un serveur qui se situe sur la même machine, cela fonctionne très bien... Après en python pour recevoir des données il y a la fonction recv() et donc qui devrait s'occuper du reassemblage... J'ai quelques idées je vais faire des tests pour voir ce que cela donne.
J'ai compris pour le mode de fonctionnement du TCP mais ce qui reste étrange c'est que lorsque le client se connecte à un serveur qui se situe sur la même machine, cela fonctionne très bien... Après en python pour recevoir des données il y a la fonction recv() et donc qui devrait s'occuper du reassemblage... J'ai quelques idées je vais faire des tests pour voir ce que cela donne.
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
>
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
24 mai 2018 à 21:18
24 mai 2018 à 21:18
pour moi ce n'est pas étrange: TCP offre un service de flux de caractères, pas un service orienté messages. donc les programmes ne doivent pas s'attendre à un comportement consistant. des variation de comportement n'ont donc rien d'étrange.
recv devrait te donner chaque fois un morceau du message, à toi de l'appeler jusqu'à ce que tu aies le tout.
recv devrait te donner chaque fois un morceau du message, à toi de l'appeler jusqu'à ce que tu aies le tout.
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
1
24 mai 2018 à 21:48
24 mai 2018 à 21:48
oui mais pourquoi en communiquant sur la même machine on n'obtient pas le même résultat qu'avec un serveur sur une machine distante... Quoi qu'il en soit je suis en train de faire des test en ajoutant un caractère à la fin de chaque message qui permet au serveur de savoir que la fin du message a été atteinte (un ; ou un @ par exemple) je vais voir avec de grandes quantités de données.
--
--
yg_be
Messages postés
23476
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 février 2025
1 568
>
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
Modifié le 24 mai 2018 à 21:55
Modifié le 24 mai 2018 à 21:55
le résultat peut varier d'un endroit à l'autre ou d'un moment à l'autre, puisque le découpage en messages n'est pas garanti par TCP.
tu pourrais aussi envoyer la taille de ton message au début.
tu pourrais aussi envoyer la taille de ton message au début.
victor1507
Messages postés
43
Date d'inscription
lundi 15 février 2016
Statut
Membre
Dernière intervention
24 mai 2018
1
Modifié le 24 mai 2018 à 21:59
Modifié le 24 mai 2018 à 21:59
Ahhh ok super merci !
Oui effectivement ça pourrait être une très bonne idée ! je vais me pencher là dessus mais du coup il faudrait appeler plusieurs fois la fonction
Oui effectivement ça pourrait être une très bonne idée ! je vais me pencher là dessus mais du coup il faudrait appeler plusieurs fois la fonction
connexion.recv()?
24 mai 2018 à 18:50
Victor Josso