Ich habe einen TCP-Server, der auf einem Computer ("der Server") mit Ubuntu 12.04.3 (Kernel 3.8.0-31-generic) lauscht. Es empfängt Verbindungen von 2 verschiedenen Client-Computern. Auf Maschine A wird Ubuntu 12.04.4 (3.11.0-17-generic) und auf Maschine B Ubuntu 11.10 (3.0.0-32-Server) ausgeführt.
Wenn TCP-Zeitstempel auf dem Server aktiviert sind (sysctl net.ipv4.tcp_timestamps = 1), werden manchmal SYN-Pakete von Computer A "ignoriert". Wenn ich tcpdump auf dem Server verwende (im nicht promiskuitiven Modus), kann ich sehen, dass die SYNs in Ordnung und mit korrekten Prüfsummen ankommen - es gibt nur keine Antwort - kein SYN / ACK und kein RST. Maschine A überträgt das SYN mehrmals erneut, bevor es aufgibt. Die Client-Software, die auf Computer A (in diesem Fall wget) ausgeführt wird, versucht sofort, eine neue Verbindung herzustellen, und ist erfolgreich. Sie erhält sofort eine SYN / ACK.
Maschine B hat keine Probleme mit demselben Server und der Datenverkehr sieht normal aus - er verwendet auch dieselben TCP-Optionen wie Maschine A (wie aus den Erfassungsdateien hervorgeht). Durch Deaktivieren der TCP-Zeitstempel auf dem Server funktioniert alles ordnungsgemäß.
Die Zeitstempel in den ignorierten SYN-Paketen scheinen mir jedoch gültig zu sein, daher bin ich mir nicht sicher, warum sie Probleme verursachen oder ob sie überhaupt die zugrunde liegende Ursache sind.
Ich habe hier ein anonymisiertes pcap https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap platziert . Es wurde auf dem Server (10.76.0.74) aufgenommen, auf dem Computer A (10.4.0.76) erfolgreich ein HTTP-GET ausführt (Pakete 1 bis 10) und dann 1 Sekunde später versucht, dieselbe URL erneut abzurufen (Pakete 11 bis 17), aber stattdessen hat seine SYNs ignoriert. Die Pakete 18 bis 27 sind ein weiterer Erfolg.
Ich vermute, dass dies ein ähnliches Problem ist wie das unter " Warum sollte ein Server kein SYN / ACK-Paket als Antwort auf ein SYN-Paket senden " beschrieben, und während das Deaktivieren von Zeitstempeln eine Problemumgehung darstellt, möchte ich verstehen, was vor sich geht. Ist das nur ein Fehler?
Es wird keine lokale Firewall ausgeführt. Der Server verarbeitet einige TCP-Verbindungen (jeweils ca. 32 KB), verfügt jedoch über ausreichend freien Speicher / CPU. Zum Zeitpunkt des in der PCAP angezeigten Tests gab es keine weiteren TCP-Verbindungen zwischen Computer A und dem Server. Es gibt kein Anzeichen dafür, dass sich die Akzeptanzwarteschlange der Serveranwendung plötzlich füllt (außerdem sollte dies vermutlich beide Clients betreffen). Da die Pakete in einem auf dem Server aufgenommenen PCAP in Ordnung aussehen, scheint es nicht so, als ob ein dazwischenliegendes Netzwerkgerät die Dinge kaputt macht.
Ich habe dies ursprünglich in den Ubuntu-Foren gepostet, aber im Nachhinein ist dies möglicherweise ein geeigneterer Ort. Ich hoffe auf die Ausleihe eines Hinweises.