Sujet : Question théorique sur le TCP |
d'ho |
Vinny_the_true a écrit :
Je n'ai pas tout compris là :??: Arrête-moi si je me trompe, mais le client ne peux pas acquitter le message FIN puisque sa séquence est bien plus élevée que ne l'est sa valeur d'accusé à ce moment-là. Donc deux options, soit il attend les 26 octets manquant, sans rien faire, puis envoi ACK+FIN dans un message, soit il envoi le ACK que j'ai mis sur le dessin (le même qu'auparavant à priori, puisqu'incrémenter l'accusé pour signifier la réception du FIN semble peu judicieux). Du coup, s'il envoi ce ACK, le serveur renvoi ses données parce-qu'il reçoit ce message ? Ou plutôt parce-que son timeout expire :??: Mon problème exact concerne le comportement du client lorsqu'il reçoit un message de FIN à séquence supérieure à son accusé.
En tout cas merci de ton aide, tu t'es même documenté pour moi, il ne fallait pas :sweat:
|
Il y a une erreur que je n'avais pas vu, d'ou ton probleme de comprehension ;)
En effet, le SYN envoyé par le serveur doit être SYN(b+27;a+2)("j'envoie le segment n°a+1 et j'attend de recevoir le segment n°a+2" ); car le serveur a envoyé un segment DATA[26](b+1;a+1) avant mais ne sais pas encore que le segment a été perdu (pas d'expiration encore du timeout associé à ce segment).
Alors le client doit envoyer un ACK(a+2;b+28) et sait donc qu'il lui manque le segment a+1.
Enfin, le serveur ferme la connexion client ->serveur par un ACK(b+28;a+3).
Ensuite, la question d'une fermeture de connexion, alors qu'un segment manque me turlupine du coup. Je me renseigne ;)
PS: j'espere pas trop m'etre embrouille ou t'avoir embrouille :D |