
Ich arbeite an einer C#-Anwendung zur Handhabung von TCP-Sockets.
Ich habe eine Serveranwendung (Herkules) auf dem Remote-Computer und versuche, einen Socket offen zu halten.
Ich habe meine Anwendung auf meinem Computer und abonniere diesen offenen Socket.
Ich benutzeTCPViewer von Microsoftum zu verfolgen, was passiert.
Nach einigen Minuten sehe ich, wie der Socket vom Zustand „Hergestellt“ in den Zustand „Wartezeit“ wechselt und dann die Socket-Verbindung abbricht.
Ich habe in der Ereignisanzeige beider Computer an allen allgemeinen Stellen (Windows-Protokolle/Anwendung, /Sicherheit, /Setup, /System und /Weitergeleitete Ereignisse) nach der Ereignis-ID 4227 gesucht, aber nichts gefunden.
Was muss ich tun, um herauszufinden, welche Maschine den TCP-Socket tatsächlich schließt und warum?
Antwort1
Was muss ich tun, um zu wissen, welche Maschine den TCP-Socket tatsächlich schließt?
Um herauszufinden, welche Seite die Verbindung schließt, müssen Sie eine Paketerfassung durchführen. Siehehttps://wiki.wireshark.org/TCP-4-times-close.mdSo sieht das Schließen einer Verbindung in Wireshark aus. Die Partei, die das ursprüngliche FIN sendet, ist diejenige, die die Verbindung geschlossen hat.
... und warum?
Dies lässt sich nicht allein anhand des Datenverkehrs sagen. Eine Verbindung kann geschlossen werden, weil das Protokoll der Anwendungsschicht dies erwartet oder zulässt. Sie kann geschlossen werden, weil entweder der Client oder der Server abstürzt. Sie kann von einer Partei aufgrund einer Verletzung des Protokolls geschlossen werden, d. h. wenn sich die andere Seite anders verhält als erwartet ... Um den Grund herauszufinden, müssen Sie also das Anwendungsprotokoll verstehen, Protokolldateien prüfen, überprüfen, ob Prozesse ausgeführt werden usw.