de la capture de paquets éthreal, je vois le comportement suivant qui apparaît assez étrange pour moi:
Client --> Server [SYN] Server --> Client [SYN, ACK] Client --> Server [ACK] Server --> Client [FIN, ACK] Client --> Server [ACK] Client --> Server [TCP Segment of a reassembled PDU] (I don't know what this means) Server --> Client [RST]
6 Réponses :
semble être que les appels de serveur arrêt code> très peu après avoir accepté la connexion. P>
Fin signifie généralement l'autre côté appelé arrêt (..) code> sur la prise. P>
Voulez-vous dire que l'appel à «accepter» aurait sûrement revenu avec succès dans ce cas?
Oui. Sans accepter () Vous verriez simplement le silence et éventuellement les délais d'attente.
Ok, mais il n'y a pas moyen d'accepter une ailette droite? Je veux dire en cas de conditions d'erreur, est-ce possible?
Pas que je sache, certainement.
Hmm? Non, la connexion est configurée avant accepter () code> est appelée - le paramètre Backlog sur écoute () code> Spécifie le nombre de connexions dans cet état (connecté, mais accepter () code> pas encore appelé).
Je suppose que la connexion est acceptée par inetd code> ou un démon similaire, qui tente ensuite de Fork code> et exec code> un autre programme à Manipulez la connexion et que le Fork code> est en échec (en raison de l'épuisement des ressources) ou du EXEC code> échoue (en raison du fichier inexistant, une erreur d'autorisations, etc.). < / p>
pourrait être wrappers TCP . Si le processus de serveur a été construit avec la prise en charge de libewrap, il acceptera la connexion, vérifie Il est facile de voir si le serveur utilise libulège: p> /etc/hosts.allow code> et /etc/hosts.deny code>, puis ferme immédiatement le connexion si elle est refusée par la politique.
En cas d'analyse approfondie, il a été jugé ci-après la raison du problème: p>
Lorsqu'un client essaie TCP Connect, même si le serveur n'appelle pas actuellement accepter, la connexion passera. Cela se produira si le serveur a appelé la fonction «Écouter» et il continuera d'accepter les connexions jusqu'à ce que la limite d'arriéré soit atteinte. P>
Mais, si le processus d'application dépasse la limite des descripteurs de fichier MAX, il peut utiliser, alors lorsque les appels de serveur acceptent, il se rend compte qu'il n'y a pas de descripteurs de fichier disponibles à être attribué pour la prise et échoue à l'appel d'acceptation et au TCP. Connexion Envoi d'une ailette de l'autre côté. P>
Je viens de poster cette découverte ici. Je quitte toujours la réponse acceptée comme celle de Habbie. P>
Merci à tous ceux qui ont répondu à cette question. P>
Je pense que la fin a été envoyée en appelant près () au lieu d'arrêter (). p>
La connexion est en file d'attente d'arriéré; Après accepté (), le serveur décide de le terminer pour une raison quelconque (par exemple, des descripteurs CLACE TCP Wrapper ou des descripteurs de fichiers). Dans ce cas, une limite de clôture () diminue le nombre de descripteur de fichier (FD) de 1 à 0, la FD pour cette connexion est entièrement détruite. Ensuite, le client envoie des données à une prise non existante du point de vue du serveur, le serveur doit répondre à une TVD. P>
Si c'était un arrêt (), le serveur peut toujours relancer les données envoyées par le client et attendre l'aileron du client pour fermer la connexion gracieusement. Aucun RST n'est renvoyé. P>
P.s. Fermer () vs Shutdown () P>
Est la télécommande du serveur ou local? Est-il possible d'un ISP abusif insérant des body paquets?
Le serveur est à distance. Comment puis-je savoir si des paquets faux sont insérés?
@Jay environ 1. S'il vous plaît voir publiib.boulder.ibm.com/infocenter/tpfhelp/Current/...