Watch, netstat, tcp, CLOSE_WAIT, FIN_WAIT

Guten Morgen

Auf einem Linuxrechner (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) läuft eine Applikation, welche aus drei Programmen besteht die per Sockets (tcp) miteinander kommunizieren.

Mit # watch -n 1 ‚netstat -npat‘ habe ich herausgefunden, dass es teilweise Probleme gibt beim Verbindungsabbau.

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 1 0 192.168.0.86:8001 192.168.0.86:33653 CLOSE\_WAIT 13462/prog1
tcp 0 0 192.168.0.86:33653 192.168.0.86:8001 FIN\_WAIT2 -

FIN_WAIT2 verschwindet nach einiger Zeit, CLOSE_WAIT bleibt aber. Gemäss folgernder Auflistung schickt also Station(1) kein ACK und Station(2) wartet vergebens im CLOSE_WAIT Status.

Station(1): Station(2):
---------- ----------- 
LISTEN ----FIN---\> FIN\_WAIT\_1

TIME\_WAIT

\> TIME\_WAIT
\> 2xMSL (Maximum Segment Lifetime)
\> Waitstate to discard late tcp segments

Mein Problem ist nun zu detektieren, welches der drei Programme kein ACK sendet, da es anscheinend schon beendet ist (Annahme aufgrund des „-“(PID/Program name) hinter FIN_WAIT2). Kann die Ausgabe von # watch -n 1 ‚netstat -npat‘ irgendwie aufgezeichnet werden? z.B. alle 100ms (watch -n 0.1)?

Besten Dank und Gruss
Olli

Servus.

Hab dir ein kleines Shellscript zusammengebastelt:

#!/bin/bash

#File to write output of $CMD
LOGFILE=nestat.txt
#Command to execute
CMD="netstat -npat"

#Number of times to execute CMD per Second
TICK=0.1
#Duration of logging
DURATION=10


SEQ=$(echo "$DURATION / $TICK" | bc )

echo $SEQ

for i in `seq 1 $SEQ`;
do
 $CMD | tee -a $LOGFILE
 sleep $TICK
done

mfg.

Das Script funktioniert. Vielen Dank!
Jetzt liegt es an mir den Fehler zu finden.

Grüsse
Olli