Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1325 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] Envoi de plusieurs trames sans attendre l'ACK

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Envoi de plusieurs trames sans attendre l'ACK

n°1451736
29Atao29
Posté le 03-10-2006 à 20:00:45  profilanswer
 

Bonjour  
 
Voici mon problême :  
 
Si j'envoie successivement par l'intermédiare de la méthode send() 2 trames, la première trame est bien envoyé immédiatement mais la deuxième est envoyée seulement après réception de l'ACK correspondant à la première trame ce qui peut prendre un certain temps.
 
Est-il possible d'envoyer ces deux messages d'affiler sans attendre l'ACK?
 
En espérant avoir été clair.
 
Merci d'avance


Message édité par 29Atao29 le 04-10-2006 à 15:51:22
mood
Publicité
Posté le 03-10-2006 à 20:00:45  profilanswer
 

n°1451743
Taz
bisounours-codeur
Posté le 03-10-2006 à 20:35:53  profilanswer
 

il n'y pas de notion de trames au niveau API de TCP. Seulement (et c'est sans doute configurable et dépendant du système), chaque send faire transmettre un nouveau segment. Pour s'en sortir, c'est simple : il suffit de regarder sa documentation, tu auras sans doute un flags MSG_MORE pour ton send. Ça donnera la possibilité d'envoyer un seul segment pour deux appels.
 
Mais ce que tu décris est sans doute faux. J'y connais rien à Windows, mais si sa pile IP vaut quelqu'un chose, alors TCP ne fonctionne pas comme ça. Il est capable d'envoyer plusieurs segments sans attendre d'ACK. Ce que tu vois n'est que ponctuelle, sauf sous certaines conditions, TCP ne va pas attendre un ACK pour expédier un nouveau segment.
 
Bref, oublie. Documente toi sur ta fonction send.
 
send('G', 0)
send('E', 0)
send('T', 0)
 
-> sans doute 3 segments
 
send('G', MSG_MORE)
send('E', MSG_MORE)
send('T', 0)
 
-> sans doute 1 seul segment
 
(tout cela dépend de beaucoup de paramètres, mais ça devrait tendre vers ce comportement)

n°1451746
Taz
bisounours-codeur
Posté le 03-10-2006 à 20:37:22  profilanswer
 

sinon tu n'a qu'à juste aggréger tes messages en un seul.

n°1451770
jagstang
Pa Capona ಠ_ಠ
Posté le 03-10-2006 à 21:21:01  profilanswer
 

+1
c'est le windowing ou sliding window ce dont tu parles.
 
edit : TCP fourni une manière sûre de transmettre des données bout en bout sur un canal. le windowing se fait en couche 3, tu ne peux donc pas y accéder comme celà (pense au nombre de routeurs/switch que ton segment va traverser...)

Message cité 2 fois
Message édité par jagstang le 03-10-2006 à 21:22:52

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1451778
29Atao29
Posté le 03-10-2006 à 21:29:33  profilanswer
 

jagstang a écrit :

+1
c'est le windowing ou sliding window ce dont tu parles.
 
edit : TCP fourni une manière sûre de transmettre des données bout en bout sur un canal. le windowing se fait en couche 3, tu ne peux donc pas y accéder comme celà (pense au nombre de routeurs/switch que ton segment va traverser...)


 
Effectivement j'ai vu que dans la couche TCP il y avait le champ "Fenêtre". Mais même si ce champ est supérieur à 1 dans mon cas, le deuxième send est transmis seulement après la réception de l'ACK, donc y a-t-il un lien entre ce champ et mon problême?

n°1451779
jagstang
Pa Capona ಠ_ಠ
Posté le 03-10-2006 à 21:34:01  profilanswer
 

c'est le récepteur qui fournit la taille de la fenêtre, en octet, de la quantité d'info qu'il est d'accord de recevoir. pour éviter la congestion, cette fenêtre part de 1, puis double jusqu'à atteindre la seuil critique.
 
bref, tu ne peux pas agir là dessus


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1451785
Taz
bisounours-codeur
Posté le 03-10-2006 à 21:45:59  profilanswer
 

jagstang a écrit :

TCP fourni une manière sûre de transmettre des données bout en bout sur un canal. le windowing se fait en couche 3, tu ne peux donc pas y accéder comme celà (pense au nombre de routeurs/switch que ton segment va traverser...)


non 4.
 
Et ce n'est pas un problème de fenêtre ici, c'est juste ce qui se passe entre l'applicatif et TCP qui n'est pas ce qui est souhaité. Avec un MSG_MORE ou un gros send, on a ce qu'on veut exactement. Pas la peine de mettre les mains dans le cambouis, ça n'est pas la solution.

n°1451786
29Atao29
Posté le 03-10-2006 à 21:46:10  profilanswer
 

jagstang a écrit :

c'est le récepteur qui fournit la taille de la fenêtre, en octet, de la quantité d'info qu'il est d'accord de recevoir. pour éviter la congestion, cette fenêtre part de 1, puis double jusqu'à atteindre la seuil critique.
 
bref, tu ne peux pas agir là dessus


oui mais dans mon cas la fenêtre du récepteur est égale à 20000...????

n°1451789
29Atao29
Posté le 03-10-2006 à 21:48:09  profilanswer
 

Taz a écrit :

non 4.
 
Et ce n'est pas un problème de fenêtre ici, c'est juste ce qui se passe entre l'applicatif et TCP qui n'est pas ce qui est souhaité. Avec un MSG_MORE ou un gros send, on a ce qu'on veut exactement. Pas la peine de mettre les mains dans le cambouis, ça n'est pas la solution.


OK je regroupe mes messages et je les envoie en une fois, comme ca je ne rencontre plus le problème auquel je suis confronté. Mais il n'y a pas un autre moyen qui me permette d'envoyer des messages sans attendre forcément l'ACK?

n°1451797
29Atao29
Posté le 03-10-2006 à 21:50:50  profilanswer
 

Taz a écrit :

non 4.
 
Et ce n'est pas un problème de fenêtre ici, c'est juste ce qui se passe entre l'applicatif et TCP qui n'est pas ce qui est souhaité. Avec un MSG_MORE ou un gros send, on a ce qu'on veut exactement. Pas la peine de mettre les mains dans le cambouis, ça n'est pas la solution.


 
Pour info et pour culture personnelle, la fenêtre est utilisé dans le cas ou l'on envoie un message important et que celui-ci nécessite d'être découpé, c'est ca ?

mood
Publicité
Posté le 03-10-2006 à 21:50:50  profilanswer
 

n°1451804
jagstang
Pa Capona ಠ_ಠ
Posté le 03-10-2006 à 21:57:00  profilanswer
 

oui 4 pardon.  
 
non pour les problèmes de congestion / gestion de flux


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1451805
29Atao29
Posté le 03-10-2006 à 21:59:50  profilanswer
 

jagstang a écrit :

oui 4 pardon.  
 
non pour les problèmes de congestion / gestion de flux


Ba mon problême s'apparente à un problème de gestion de flux, non?

Message cité 1 fois
Message édité par 29Atao29 le 03-10-2006 à 22:00:40
n°1451811
Taz
bisounours-codeur
Posté le 03-10-2006 à 22:06:33  profilanswer
 

mais arrêtez putain ! ça n'a rien à voir ! si TCP tu lui dit d'envoyer dès que possible, il le fait. Et donc il va pas aggréger tes send.  Documentes toi sur MSG_MORE et arrêtez vos conneries sur les windows et autres gestions de flux. Le problème est applicatif.

n°1451815
jagstang
Pa Capona ಠ_ಠ
Posté le 03-10-2006 à 22:09:12  profilanswer
 

29Atao29 a écrit :

Ba mon problême s'apparente à un problème de gestion de flux, non?


pas vraiment non. c'est pas ce qu'on entend habituellement par congestion ou régulation de flux...


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1451816
Taz
bisounours-codeur
Posté le 03-10-2006 à 22:09:58  profilanswer
 

29Atao29 a écrit :

Pour info et pour culture personnelle, la fenêtre est utilisé dans le cas ou l'on envoie un message important et que celui-ci nécessite d'être découpé, c'est ca ?


non. tout le temps. parce que justement TCP n'est pas un ping-pong  1 send = 1 ack. C'est trop long à expliquer, documente toi.

n°1451834
Taz
bisounours-codeur
Posté le 03-10-2006 à 23:10:15  profilanswer
 

et sans t'offenser : tu devrais peut-être complètement ignorer tout ça, car ça n'est certainement pas un problème dans ton application. Vue ta connaissance limitée de TCP, j'aimerais savoir ce qui te fais lui jeter la pierre. Les implémentations TCP même de Windows sont correctes. Bref, ça ressemble un peu à de la branlette intellectuel ton truc :)
 
Fais des send tous bêtes, sans te préoccuper du reste, et ça fonctionnera de manière quasi-optimale. Envoie tes paquets de données sans trop de poser de questions. Du moment que tu ne fais pas du char par char ... et même si tu le faisais, ta pile TCP s'en accomoderait sans problème et optimiserait ça au point que tu n'y verrais pas la différence.
 
Mais si tu as un proto par dessus TCP, c'est certain que c'est meilleur si au lieu de faire :
send(header)
send(body)
 
tu fais send(header + body)
 
mais ça n'est certainement pas critique dans ton cas à priori.

n°1452236
29Atao29
Posté le 04-10-2006 à 15:49:59  profilanswer
 

Taz a écrit :

et sans t'offenser : tu devrais peut-être complètement ignorer tout ça, car ça n'est certainement pas un problème dans ton application. Vue ta connaissance limitée de TCP, j'aimerais savoir ce qui te fais lui jeter la pierre. Les implémentations TCP même de Windows sont correctes. Bref, ça ressemble un peu à de la branlette intellectuel ton truc :)
 
Fais des send tous bêtes, sans te préoccuper du reste, et ça fonctionnera de manière quasi-optimale. Envoie tes paquets de données sans trop de poser de questions. Du moment que tu ne fais pas du char par char ... et même si tu le faisais, ta pile TCP s'en accomoderait sans problème et optimiserait ça au point que tu n'y verrais pas la différence.
 
Mais si tu as un proto par dessus TCP, c'est certain que c'est meilleur si au lieu de faire :
send(header)
send(body)
 
tu fais send(header + body)
 
mais ça n'est certainement pas critique dans ton cas à priori.


 
Au lieu de prendre les autres pour des cons, tu ferais de leur expliquer toi qui a l'air si fort...
 
Concernant mon problème il s'agissait du "Nagle Agorithm" à désactiver pour pouvoir envoyer des trames sans attante de l'ACK
 
sur ce  :hello:  

n°1452438
Taz
bisounours-codeur
Posté le 04-10-2006 à 21:01:36  profilanswer
 

Va paître. Je crois que j'ai pas arrêté d'expliquer sur tout ce topic. Nagle c'est pas du tout le problème. C'est d'ailleurs complètement l'inverse. L'algorithme a justement pour but d'éviter les petits paquets. Alors quand tu parles de le désactiver, c'est du foutage de gueule. Tu sais même ce qu'est Nagle, t'as juste googler un peu et lu en diagonal. Alors documente toi un peu bordel. T'y connais rien en TCP, et quand on te dit que le problème n'est pas TCP, tu n'en fais rien. Tout un topic pour continuer à te branler avec TCP alors que le problème est applicatif. C'est pas la peine de demander de l'aide pour ne rien en faire.
Mais bon, si ça te satisfait une solution mytho ...

n°1452691
29Atao29
Posté le 05-10-2006 à 11:45:50  profilanswer
 

Taz a écrit :

Va paître. Je crois que j'ai pas arrêté d'expliquer sur tout ce topic. Nagle c'est pas du tout le problème. C'est d'ailleurs complètement l'inverse. L'algorithme a justement pour but d'éviter les petits paquets. Alors quand tu parles de le désactiver, c'est du foutage de gueule. Tu sais même ce qu'est Nagle, t'as juste googler un peu et lu en diagonal. Alors documente toi un peu bordel. T'y connais rien en TCP, et quand on te dit que le problème n'est pas TCP, tu n'en fais rien. Tout un topic pour continuer à te branler avec TCP alors que le problème est applicatif. C'est pas la peine de demander de l'aide pour ne rien en faire.
Mais bon, si ça te satisfait une solution mytho ...


 
 
Y a pas a dire tu es un vrai champion. mais si ca te fais plaisir de dire que tu as raison je ne vais pas te contredire, normal tu es le big-boss du réseau. Maintenant mon probleme c'était bien Nagle que tu le veuille ou non et si  je préfere les performances au détriment de l'optimisation de la bande passante, cela ne regarde que moi.
 
Continue à prendre les autres pour des cons, t'as raison, tu es le seul a détenir la vérité.
Allez @+ champion

n°1452868
straffo
Posté le 05-10-2006 à 16:19:47  profilanswer
 

Perso je dirais que si tu veux du TCP sans TCP t'es mal barré.
 
Par contre l'UDP ne correspondrais pas plus à ton besoin ?

n°1452973
jagstang
Pa Capona ಠ_ಠ
Posté le 05-10-2006 à 17:55:29  profilanswer
 

rien à voir


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1453035
29Atao29
Posté le 05-10-2006 à 19:24:37  profilanswer
 

straffo a écrit :

Perso je dirais que si tu veux du TCP sans TCP t'es mal barré.
 
Par contre l'UDP ne correspondrais pas plus à ton besoin ?


 
1-L'application host fonctionne en TCP, donc j'utilise tCP pour mon appli.
2-mes paquets transmis sont assurés de bien arriver à destination, donc pour moi c'est bien du tcp non?
3-j'ai des contraintes de performances qui m'obligent à transférer immédiatement les messages dès la commande SEND appliquée
 
c'est tout


Message édité par 29Atao29 le 05-10-2006 à 19:28:17
n°1453116
straffo
Posté le 05-10-2006 à 22:31:10  profilanswer
 

1 Dommage Éliane !  
Par curiosité c'est qule type d'équipement ?
 
2 vi
 
3 c'est pour ça que je te parle d'UDP car pour simplifier :
UDP : pas fiable/rapide
TCP : fiable/lent
 
il ya toujours un prix à payer !

n°1453131
jagstang
Pa Capona ಠ_ಠ
Posté le 05-10-2006 à 22:52:44  profilanswer
 

lent, lent. t'es dur là. le débit utile est de 90% pour UDP 70-80 pour TCP (de mémoire)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
n°1453207
straffo
Posté le 06-10-2006 à 09:42:44  profilanswer
 

ok je corrige :)
 
c'est relatif :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] Envoi de plusieurs trames sans attendre l'ACK

 

Sujets relatifs
[résolu] Supprimer toutes les lignes d'une feuille [RESOLU] version insensible à la casse
[Résolu] Api win 32, quelque question de débutant....[RESOLU] Lire un JS sans permettre son téléchargement
[Résolu] Filtrer les fichiers d'un répertoire[Résolu] S'envoyer un formulaire sur sa boîte mail
[RESOLU] Extraire en xlsOuvrir des fenêtres sous plusieurs liens
[Résolu]Client/serveur qui marche qu'en local[résolu]Problèmes rencontrés pour la mise en page
Plus de sujets relatifs à : [Resolu] Envoi de plusieurs trames sans attendre l'ACK


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR