2 votes

Utilisation de TCP FIN et TCP RST

Je me suis récemment documenté sur le protocole TCP car j'étais un peu curieux de savoir comment et pourquoi certains drapeaux étaient utilisés.

Dans les informations que j'ai trouvées, il est question d'une fermeture normale TCP FIN qui doit être utilisée pour fermer une connexion, mais il est également question de TCP RST qui peut être utilisé pour une fermeture avortée sur une connexion active.

Ma question est la suivante : pourquoi utiliser un RST pour interrompre/fermer une connexion active plutôt que d'utiliser TCP FIN ?

(Par connexion active, on entend une connexion où les deux points d'extrémité ont envoyé et reçu des données après la poignée de main standard à trois voies. Je sais qu'un RST peut être utilisé par le serveur lorsqu'un client envoie un SYN pour un port de serveur qui n'est pas à l'écoute).

5voto

joeqwerty Points 106914

Vous ne verriez pas normalement un TCP RST. Je suppose qu'une application de la couche 7 qui abandonne pourrait générer un RST, mais je pense que vous trouverez qu'un RST est le plus souvent généré par un pare-feu entre les deux hôtes. Voici une liste de raisons possibles, tirée du site Web de la Commission européenne. Guide TCP/IP :

Réception de tout segment TCP en provenance d'un dispositif avec lequel le dispositif recevant le segment n'a pas actuellement de connexion (autre qu'un SYN demandant une nouvelle connexion).

Réception d'un message avec un champ de numéro de séquence ou de numéro d'accusé de réception invalide ou incorrect, indiquant que le message peut appartenir à une connexion antérieure ou qu'il est parasite d'une autre manière.

Réception d'un message SYN sur un port où aucun processus n'écoute les connexions.

5voto

Tom Panning Points 189

Certains serveurs web utilisent RST au lieu de FIN pour fermer les connexions (persistantes). Ceci est considéré comme une "optimisation", parce qu'il évite l'état "semi-fermé" et contourne certains des problèmes liés aux paquets FIN manqués (toute transmission supplémentaire produira simplement un autre RST), qui nécessiteraient autrement de se souvenir de l'état (2xMaximum segment time IIRC) pendant plus longtemps du côté du serveur.

Voir : cet article y wikipedia sur la terminaison de connexion . (Je vais essayer de trouver des références plus intéressantes).

Vous pouvez également voir RST si l'application avec le socket s'est écrasée (segfault ?), si l'hôte a redémarré, ou si les entrées de la table NAT ont expiré avant la connexion elle-même !

3voto

Kyle Brandt Points 81077

C'est un cas limite mais je le trouve intéressant :

Certains logiciels de filtrage comme web sense (ab)utilisent les paquets RST. Ce qui se passe, c'est qu'au lieu de se placer entre tous les trafics, Websense renifle le trafic sur le fil. S'il voit un site bloqué, il envoie un paquet RST au client (et peut-être aussi au serveur).

Il s'agit plus d'une astuce que d'une utilisation prévue.

1voto

Rajesh Points 11

TCP est un protocole fiable. Ainsi, dans tous les cas, le message ne devrait pas être perdu dans quelque direction que ce soit, pendant tout le cycle de vie d'une connexion TCP. La fin de la connexion est la dernière partie. TCP doit donc s'assurer que tous les paquets ont été délivrés avant de fermer la connexion. FIN est utilisé pour fermer gracieusement les connexions TCP dans chaque direction, tandis que TCP RST est utilisé dans un scénario où les connexions TCP ne peuvent pas se remettre des erreurs et où la connexion doit être réinitialisée de force. Selon cette article de terminaison de connexion tcp , RSET est utilisé dans des conditions anormales.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X