2010-12-27 9 views
1

Ich habe diesen einfachen Skript auf meinem lokalen Rechner einzurichten:Das Löschen von TCP-Verbindungen ist das normal?

#!/usr/bin/python 

import socket 
from datetime import datetime 

print "Connecting to test server" 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect(("mydomain.com", 9090)) 

start = datetime.now() 

totalbytes = 0 

try: 
    while True: 
     data = s.recv(512) 
     totalbytes += len(data) 
     print "Got %d bytes of data" % (len(data)) 
except Exception as e: 
    print "ERROR", e 
    pass 

end = datetime.now() 

print "Lasted for", end - start, "with a total of", totalbytes/1000/1000, "megabytes" 

Und dieses Skript auf meinem lokalen Server (auf dem gleiche Netzwerk ausgeführt wird, aber beachten Sie, dass ich durch die externe IP-Adresse hier werde)

#!/usr/bin/python 

import socket 
from datetime import datetime 

print "Listening for test client" 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind(("192.168.2.100", 9090)) 
s.listen(5) 

start = datetime.now() 

try: 
    while True: 
     clientsocket, address = s.accept() 

     # Start sending infinite data until I can't 
     while True: 
      clientsocket.send("*" * 511 + "+") 
except: 
    pass 

end = datetime.now() 

print "This lasted", end - start 

Auf mein Problem: Die Verbindung wird nach ein paar Minuten abgebrochen. Zum Beispiel beim letzten Ausführen dieses Skripts hat der Server gerade gestoppt und gemeldet: "Dies dauerte 0: 02: 27.517715", die Zeit, bevor der Client Daten für ungefähr 7 Minuten erhalten konnte, bevor er die Verbindung abbrach. Nun, ich habe in meinen Tagen nicht viel Netzwerkprogrammierung gemacht, also weiß ich nicht, ob es vernünftig ist zu erwarten, dass sie länger miteinander verbunden bleiben. Wie lange kann man eine aktive TCP Verbindung erwarten? Wie häufig sind Trennungen wie diese?

Ich habe diese Tests durchgeführt, um mein eigenes lokales Netzwerk zu testen, da ich Probleme mit der MSN-Abmeldung einmal pro Stunde habe, Downloads, die nach ein paar Minuten und anderem merkwürdigem Verhalten aufhören. Meine Frage ist nicht, wie ich das beheben kann, sondern nur, ob die Ergebnisse meiner Tests vernünftig sind oder auf Probleme mit meinem Netzwerk hinweisen.

Antwort

0

Eine TCP-Verbindung kann jahrelang bestehen * und eine unbegrenzte Menge an Daten weitergeben. Was sind die Fehler, die Sie vom Client und vom Server erhalten, wenn sie getrennt werden? Dies wäre der erste Schritt, um das Problem aufzuspüren.

[*] Ich würde theoretisch unendlich sagen, aber ich habe nur "Jahre" persönlich beobachtet.

+0

Der Fehler, den ich bekomme (dieses Mal vom Server) ist [Errno 104] Verbindung zurückgesetzt von Peer. Ich bin mir ziemlich sicher, dass das mit meinem Netzwerk oder dem beschissenen Internet zu tun hat. – ErikPerik

+1

Wenn Daten normal fließen und der Server plötzlich eine 'RST' bekommt, würde ich vermuten, dass eine Art Firewall involviert ist. Wenn diese "RST" vom tatsächlichen Client stammt, bedeutet dies, dass der TCP-Stack überhaupt nichts über die Verbindung weiß, was nicht vor einem mehrminütigen Timeout geschehen sollte. Um ein "schnelles" 'RST' zu erhalten, würde es einen speziellen Agenten erfordern, der es spezifisch einspeist. –

+0

Gibt es ein Programm, wo ich das sehen kann? Und der Client ist ein Mac ohne Firewall und der Server läuft Ubuntu Server ohne Firewall. Das verlässt den Router (noch etwas? Das Modem?), Aber ich (angeblich, es ist ein Belkin, also weiß man nie) hat die Firewall auf dem Router deaktiviert. Hat das Modem eine Firewall? Könnte der ISP hier etwas tun? – ErikPerik