Taille maximal d'une trame dans une session TCP - C++ - Programmation
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.
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) ???
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 |
Marsh Posté le 05-03-2003 à 21:57:19
Mordock a écrit : Merci |
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.
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)
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 ?
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
Marsh Posté le 05-03-2003 à 22:26:53
C'est la taille d'un paquet, ou la taille du buffer de réception
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)
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.
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