Taille maximal d'une trame dans une session TCP

Taille maximal d'une trame dans une session TCP - C++ - Programmation

Marsh Posté le 05-03-2003 à 21:34:18    

J'utilise une session TCP avec la classe CAsyncSocket de MFC
1) Quel est la taille maximal d'un paquet que je peut envoyer avec send ?
2) J'ai lut que 2 send envoyé peuvent arriver dans un meme receive esceque un meme send peut etre eclater en 2 receive ?
 
Merci d'avance  
Mordock

Reply

Marsh Posté le 05-03-2003 à 21:34:18   

Reply

Marsh Posté le 05-03-2003 à 21:41:17    

TCP permet d'échanger un flux d'octets.
Tout ce qui est garantit, c'est que les octets envoyés seront reçus (c'est déja bien :) ), et dans le même ordre.
Mais il n'y a aucune notion de limites de paquets. Tu peux envoyer 10 octets, puis 20, et l'autre machine recevra 7, puis 14, puis 19 octets.


Message édité par mrbebert le 05-03-2003 à 21:41:58
Reply

Marsh Posté le 05-03-2003 à 21:49:13    

Merci  
Pour pallier a ce probleme il faut bien utiliser un protocole TLV (Type longuer valeur) ???
 

Reply

Marsh Posté le 05-03-2003 à 21:51:52    

65535 octets puisque codage sur 2 octets des datagrammes IP
 
ce datagramme IP étant ensuite fragmenté suivant les sous-réseaux traversés, des sous-réseaux peuvent n'autoriser que des paquets de qqs kos.
 
MAIS C AU NIVEAU IP ;-) pas TCP puisque IP décharge TCP des considérations Réseaux! TCP=couche transport.
 

Mordock a écrit :

J'utilise une session TCP avec la classe CAsyncSocket de MFC
1) Quel est la taille maximal d'un paquet que je peut envoyer avec send ?
2) J'ai lut que 2 send envoyé peuvent arriver dans un meme receive esceque un meme send peut etre eclater en 2 receive ?
 
Merci d'avance  
Mordock


Message édité par einstein2 le 05-03-2003 à 21:56:55
Reply

Marsh Posté le 05-03-2003 à 21:57:19    

Mordock a écrit :

Merci  
Pour pallier a ce probleme il faut bien utiliser un protocole TLV (Type longuer valeur) ???

connais pas :??:  
Non, il faut savoir ce qui est échangé (définir un protocole en quelque sorte).
Ou rien ne t'empêche de définir tes propres paquets, en précédant chacun d'eux d'un entier indiquant sa taille.

Reply

Marsh Posté le 05-03-2003 à 21:57:24    

Merci

Reply

Marsh Posté le 05-03-2003 à 21:58:49    

Si vraiment tu veux des paquets, tu peux utiliser UDP.
Mais tu perds la fiabilité (rien ne te garantis que les paquets envoyés sont bien reçus, il n'y a pas de confirmation), et les paquets sont de taille assez réduite (de l'orde de 1,5 ko je crois)

Reply

Marsh Posté le 05-03-2003 à 22:00:56    

Je veut utiliser TCP je veut pas que mes paquet se perde ...
vous me conseiller quoi comme longeur de trame maximal pour faire un chat ?

Reply

Marsh Posté le 05-03-2003 à 22:05:05    

Une dizaine de ko devrait largement suffire :)

Reply

Marsh Posté le 05-03-2003 à 22:07:17    

Thx ;)

Reply

Marsh Posté le 05-03-2003 à 22:07:17   

Reply

Marsh Posté le 05-03-2003 à 22:24:03    

sous win32 qd on demande a un socket tcp la taille maximum d'un packet, il repond 8192


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 05-03-2003 à 22:26:53    

C'est la taille d'un paquet, ou la taille du buffer de réception:??:

Reply

Marsh Posté le 05-03-2003 à 22:30:23    

SO_RCVBUF, ca doit etre la taille du buffer de reception en effet (il me semble que si il y a des données en plus elles sont perdues)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 05-03-2003 à 22:37:44    

Elles sont pas réellement perdues (faut pas qu'il y ait de perte de données en TCP).
Mais si le buffer est plein (car ton programme ne l'a pas vidé en récupérant les données par un rec()), l'ordi ne pourra plus mémoriser les données qu'il reçoit. Du coup, il n'indiquera pas à l'émetteur qu'il les as reçus, et celui ci devra les ré-émettre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed