Hallo Liste,
ich bräuchte mal einen Tip...
Ich habe eine Liste, bestehend aus Wertepaaren (x<TAB>y). Diese Liste ist mit mehr als 1 Million Zeilen recht groß. Nun gibt es eine weitere, kleinere Liste (mehr als 100'000 Wertepaare) mit gleichem Aufbau (a<TAB>b). In der linken Spalte der kleineren Liste können Werte vorkommen, die auch schon in der großen Liste stehen. a kann also auch schon als x oder y, ggf. mehrfach, vorkommen, muss es aber nicht. Ich muss die Listen so verarbeiten, dass am Ende alle möglichen Kombinationen für die Wertepaare enthalten sind. Für den Fall, dass ich mich unklar ausgedrückt habe ein Beispiel: Liste1: x y x z y x y z z x z y Liste2: z a r s Ergebnisliste: x y x z x a y x y z y a z a z x z y r s s r
Könnte a) Perl hierfür ein geeigneter Ansatz sein (wollte schon lange mal hineinschauen) und b) wie würden die Wissenden unter Euch vorgehen? Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Herzlichen Dank schon mal.
am 03.05.2005, um 17:13:37 +0200 mailte Uwe Beger folgendes:
Könnte a) Perl hierfür ein geeigneter Ansatz sein (wollte schon lange mal
Vielleicht liest Heiko ja noch mit...
hineinschauen) und b) wie würden die Wissenden unter Euch vorgehen? Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Ich würde es in PostgreSQL verarbeiten...
Andreas
Andreas Kretschmer andreas.kretschmer@schollglas.com (Di 03 Mai 2005 19:19:40 CEST):
am 03.05.2005, um 17:13:37 +0200 mailte Uwe Beger folgendes:
Könnte a) Perl hierfür ein geeigneter Ansatz sein (wollte schon lange mal
Vielleicht liest Heiko ja noch mit...
Ja :)
hineinschauen) und b) wie würden die Wissenden unter Euch vorgehen? Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Ich würde es in PostgreSQL verarbeiten...
Na - ich in Perl, ich versuche gerade, die (korrigierte) Version zu verstehen :)
Heiko
On Tuesday 03 May 2005 17:13, Uwe Beger wrote:
Könnte a) Perl hierfür ein geeigneter Ansatz sein (wollte schon lange mal hineinschauen) und b) wie würden die Wissenden unter Euch vorgehen? Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Eigentlich eigenet sich jede Sprache dafür. Aber was sind eigentlich die Regeln hinter Deiner Ergebnisliste?
Konrad
Hallo Konrad, Am 03.05.2005 um 19:25 schrieb Konrad Rosenbaum:
On Tuesday 03 May 2005 17:13, Uwe Beger wrote:
Könnte a) Perl hierfür ein geeigneter Ansatz sein (wollte schon lange mal hineinschauen) und b) wie würden die Wissenden unter Euch vorgehen? Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Eigentlich eigenet sich jede Sprache dafür.
Perl wäre schon bevorzugt, ich mache damit schon ein wenig mehr im Umfeld dessen, was weiter unten beschrieben wird.
Aber was sind eigentlich die Regeln hinter Deiner Ergebnisliste?
So eine Frage hatte ich fast schon erwartet ;-)
Ich verwalte in einer Chemie-Datenbank mehrere Millionen organische Strukturen. Jede Struktur hat auch eine eindeutige ID. Aus historisch zu nennenden Gründen ist das ein String. Eine ganze Menge der Strukturen sind nun zueinander als Struktur identisch und ich benötige dieses sich permanent verändernde Wissen um diese Duplikate. Die Wertepaare stellen also Verweise auf chemisch identische Strukturen aus verschiedenen Quellen dar. Pro Jahr kommen vielleicht 300'000 Strukturen dazu, einige wenige fallen auch aus. Ungefähr 20% der "neuen" Strukturen sind duplikat zu bereits bekannten Strukturen. An unsere Kunden (www.labotest.com) möchten wir nur Strukturen weitergeben, die nicht duplikat zu anderen sind. Darüber hinaus spielt auch noch die Verfügbarkeit der Duplikate, die aus ziemlich unterschiedlichen Quellen stammen können, eine Rolle.
Die Spiegelung der beiden Seiten der Duplikatliste sollte ich vermutlich als erstes obsolet machen. Aber das ist eine ganz andere Baustelle (Borland Paradox 7).
Beste Grüße, Uwe.
On Tuesday 03 May 2005 20:37, Uwe Beger wrote:
Am 03.05.2005 um 19:25 schrieb Konrad Rosenbaum:
Aber was sind eigentlich die Regeln hinter Deiner Ergebnisliste?
So eine Frage hatte ich fast schon erwartet ;-)
Ich verwalte in einer Chemie-Datenbank mehrere Millionen organische Strukturen. Jede Struktur hat auch eine eindeutige ID. Aus historisch zu nennenden Gründen ist das ein String. Eine ganze Menge der Strukturen sind nun zueinander als Struktur identisch und ich benötige dieses sich permanent verändernde Wissen um diese Duplikate. Die Wertepaare stellen also Verweise auf chemisch identische Strukturen aus verschiedenen Quellen dar. Pro Jahr kommen vielleicht 300'000 Strukturen dazu, einige wenige fallen auch aus. Ungefähr 20% der "neuen" Strukturen sind duplikat zu bereits bekannten Strukturen. An unsere Kunden (www.labotest.com) möchten wir nur Strukturen weitergeben, die nicht duplikat zu anderen sind. Darüber hinaus spielt auch noch die Verfügbarkeit der Duplikate, die aus ziemlich unterschiedlichen Quellen stammen können, eine Rolle.
Die Spiegelung der beiden Seiten der Duplikatliste sollte ich vermutlich als erstes obsolet machen. Aber das ist eine ganz andere Baustelle (Borland Paradox 7).
Irgendwo auf Wikipedia habe ich was von einer "Sprache" gelesen, die solche Formeln eindeutig abbildet - es gibt damit nur noch wenige Möglichkeiten Duplikate zu erzeugen (die Regeln der Sprache legen z.B. fest wo man an einem Ring anfängt zu zählen).
http://en.wikipedia.org/wiki/Simplified_molecular_input_line_entry_specifica...
Ich würde also als erstes mal alle Formeln in diese Form giessen und dann entweder ein vorhandenes Produkt darauf ansetzen oder in Perl/whatever die verbliebenen Regeln abbilden (der aufwändigste Teil wird wohl sein alle Permutationen einer Formel zu generieren). Du brauchst auf jeden Fall sehr fortgeschrittenes String-Parsing, also ist Perl nicht die falscheste Wahl.
...den Rest überlasse dem Diplomanten als Beschäftigung für den Rest des Semesters... ;-)
Konrad
Am Dienstag, 3. Mai 2005 22:42 schrieb Konrad Rosenbaum:
On Tuesday 03 May 2005 20:37, Uwe Beger wrote:
Am 03.05.2005 um 19:25 schrieb Konrad Rosenbaum:
Aber was sind eigentlich die Regeln hinter Deiner Ergebnisliste?
Irgendwo auf Wikipedia habe ich was von einer "Sprache" gelesen, die solche Formeln eindeutig abbildet - es gibt damit nur noch wenige Möglichkeiten Duplikate zu erzeugen (die Regeln der Sprache legen z.B. fest wo man an einem Ring anfängt zu zählen).
http://en.wikipedia.org/wiki/Simplified_molecular_input_line_entry_specific ation
Ich würde also als erstes mal alle Formeln in diese Form giessen und dann entweder ein vorhandenes Produkt darauf ansetzen oder in Perl/whatever die verbliebenen Regeln abbilden (der aufwändigste Teil wird wohl sein alle Permutationen einer Formel zu generieren). Du brauchst auf jeden Fall sehr fortgeschrittenes String-Parsing, also ist Perl nicht die falscheste Wahl.
Zum Glück sind meine ID's "nur" wirklich einfache Strings und keine SMILES-Daten. Die Strukturgleichheit ermittle ich mit einer proprietären Chemiedatenbank. Die Listen stellen also schon das Ergebnis dar. x=z, x=y sind bereits bekannt und dann, nach Import weiterer x-tausend Strukturen in die große Chemiedatenbank, x=a. a wurde neu importiert und hat sich als Duplikat zu x und damit logischerweise auch zu y und z erwiesen. x, y, z und a verkörpern keine Summenformeln, sondern unique ID's.
...den Rest überlasse dem Diplomanten als Beschäftigung für den Rest des Semesters... ;-)
Das waren noch Zeiten, als ich Diplomand war *g*. Aber jetzt is' auch schön.
On Tuesday 03 May 2005 23:15, Uwe Beger wrote:
Zum Glück sind meine ID's "nur" wirklich einfache Strings und keine SMILES-Daten. Die Strukturgleichheit ermittle ich mit einer proprietären Chemiedatenbank. Die Listen stellen also schon das Ergebnis dar. x=z, x=y sind bereits bekannt und dann, nach Import weiterer x-tausend Strukturen in die große Chemiedatenbank, x=a. a wurde neu importiert und hat sich als Duplikat zu x und damit logischerweise auch zu y und z erwiesen. x, y, z und a verkörpern keine Summenformeln, sondern unique ID's.
Aha. Dann würde ich sogar noch anders herangehen:
Hol Dir aus der DB die Datensätze und die x=y Beziehungen, dann bau solche Listen auf:
b c d x y z a
Die Zeilen entstehen, indem Du durch die Liste durchgehst und suchst, ob das linke oder rechte Element schon vorhanden ist, dann fügst Du das Fehlende einfach hinzu.
Dann hast Du in jeder Zeile nur identische Formeln stehen und kannst beim Export einfach aus jeder Zeile die erste nehmen.
Der Füll- und Such-algorithmus ist bei dieser Vorgehensweise suboptimal, dafür geht die eigentliche Zieloperation (Export) schön schnell. Wenn Du optimieren willst baust Du Dir noch eine Hashliste als Index in der Du x/y als Key und die Zeilennummer in der Primärtabelle als Value nimmst.
Konrad
Guten Morgen Konrad, Am 04.05.2005 um 07:41 schrieb Konrad Rosenbaum:
On Tuesday 03 May 2005 23:15, Uwe Beger wrote:
Zum Glück sind meine ID's "nur" wirklich einfache Strings und keine SMILES-Daten. Die Strukturgleichheit ermittle ich mit einer proprietären Chemiedatenbank. Die Listen stellen also schon das Ergebnis dar. x=z, x=y sind bereits bekannt und dann, nach Import weiterer x-tausend Strukturen in die große Chemiedatenbank, x=a. a wurde neu importiert und hat sich als Duplikat zu x und damit logischerweise auch zu y und z erwiesen. x, y, z und a verkörpern keine Summenformeln, sondern unique ID's.
Aha. Dann würde ich sogar noch anders herangehen:
Hol Dir aus der DB die Datensätze und die x=y Beziehungen, dann bau solche Listen auf:
b c d x y z a
Die Zeilen entstehen, indem Du durch die Liste durchgehst und suchst, ob das linke oder rechte Element schon vorhanden ist, dann fügst Du das Fehlende einfach hinzu.
Dann hast Du in jeder Zeile nur identische Formeln stehen und kannst beim Export einfach aus jeder Zeile die erste nehmen.
Der Füll- und Such-algorithmus ist bei dieser Vorgehensweise suboptimal, dafür geht die eigentliche Zieloperation (Export) schön schnell. Wenn Du optimieren willst baust Du Dir noch eine Hashliste als Index in der Du x/y als Key und die Zeilennummer in der Primärtabelle als Value nimmst.
Konrad
Herzlichen Dank. Kurz vor dem Einschlafen hatte mich ein sehr ähnlicher Gedankenblitz erreicht ;-) Wenn das Stück Software steht werde ich mich noch einmal über die Performance äußern.
Schöne Feiertage, Uwe.
Uwe Beger Uwe.Beger@unixprojekt.de:
Hallo Liste,
ich bräuchte mal einen Tip...
Ich habe eine Liste, bestehend aus Wertepaaren (x<TAB>y). Diese Liste ist mit mehr als 1 Million Zeilen recht groß. Nun gibt es eine weitere, kleinere Liste (mehr als 100'000 Wertepaare) mit gleichem Aufbau (a<TAB>b). In der linken Spalte der kleineren Liste können Werte vorkommen, die auch schon in der großen Liste stehen. a kann also auch schon als x oder y, ggf. mehrfach, vorkommen, muss es aber nicht. Ich muss die Listen so verarbeiten, dass am Ende alle möglichen Kombinationen für die Wertepaare enthalten sind. Für den Fall, dass ich mich unklar ausgedrückt habe
Ja.
ein Beispiel: Liste1: x y x z y x y z z x z y Liste2: z a r s Ergebnisliste: x y x z x a y x y z y a z a z x z y r s s r
Wenn ich dich richtig verstanden habe, fehlt in deiner Ergebnisliste noch: a z
Wie entsteht "x a"? Durch Transition "x z" -> "z a"? Und diese Transition darf nur in der Reihenfolge Liste1 -> Liste2 auftreten?
Freundlich grüßend,
Erik
Jetzt habe ich auch noch nicht richtig aufgepaßt bei meinem Beispiel. Entschuldigung. Das korrekte Beispiel steht unten... Am Dienstag, 3. Mai 2005 21:30 schrieb Erik Schanze:
Uwe Beger Uwe.Beger@unixprojekt.de:
ich bräuchte mal einen Tip...
Ich habe eine Liste, bestehend aus Wertepaaren (x<TAB>y). Diese Liste ist mit mehr als 1 Million Zeilen recht groß. Nun gibt es eine weitere, kleinere Liste (mehr als 100'000 Wertepaare) mit gleichem Aufbau (a<TAB>b). In der linken Spalte der kleineren Liste können Werte vorkommen, die auch schon in der großen Liste stehen. a kann also auch schon als x oder y, ggf. mehrfach, vorkommen, muss es aber nicht. Ich muss die Listen so verarbeiten, dass am Ende alle möglichen Kombinationen für die Wertepaare enthalten sind. Für den Fall, dass ich mich unklar ausgedrückt habe ein Beispiel:
Liste1: x y x z y z y x z y z x Liste2: z a r s Ergebnisliste: x y x z x a y a y x y z z a z x z y a x a y a z r s s r
Wenn ich dich richtig verstanden habe, fehlt in deiner Ergebnisliste noch: a z
Es fehlte leider sogar noch mehr a x a y a z
Wie entsteht "x a"? Durch Transition "x z" -> "z a"?
Ja.
Und diese Transition darf nur in der Reihenfolge Liste1 -> Liste2 auftreten?
Nur in Liste 2 tauchen bisher nicht dagewesene ID's auf, die aber zu mindestens einer bereits bekannten ID duplikat sind. Diese ID taucht aber nicht notwendigerweise bereits in Liste 1 auf (z.B.: "r s"). Dagegen sind zu z bereits die Duplikate x und y bekannt. a ist demnach zu x, y und z duplikat.
Die bereits erwähnte Paradox-Datenbank greift an sehr vielen Stellen auf diese Wertepaare mit den Duplikaten zu. Jeder Lösungsansatz sollte also weiterhin von der Listenstruktur ausgehen.
Ich habe mehrere Millionen Strukturen. Ein TEIL davon ist zu MINDESTENS einer anderen Struktur duplikat. Das Wissen über die Duplikate verwalte ich in Duplikatlisten mit den IDs der Strukturen. Durch "Neuzugänge" von Strukturen ergeben sich neue Duplikate, die ich in die bisherige Duplikatliste integrieren muss.
Uwe Beger schrieb:
Möglicherweise gibt es ja c) auch noch ganz andere Ideen hierfür?
Ja, zum Beispiel Ruby in Verbindung mit der GNU Scientific Library
http://ruby-gsl.sourceforge.net/samples.html
Damit lassen sich Sachen wie Permutationen sehr elegant und kurz darstellen:
begin print "reading from file..." f = File.new("dump", "r") perm = Permutation.new(10) perm.fread(f) f.close puts "ok" perm.dump puts "\nread/write: ok" rescue IOError STDERR.print "Caught exception: #{$!}\n" end
puts "\n testing each:" perm = Permutation.new(4) perm.each {|p| p.dump; printf "\n"}
Mit freundlichen Grüßen Konrad Riedel
-- Ingenieurbüro Riedel Datenbanken und Systementwicklung Loschwitzer Str. 31 01309 Dresden Tel.: 0351 - 31 30 292 www.ibr-oss.de
Hallo
Seit kurzem hab ich ein kleines Problem mit ftp. Ich nutze normalerweise gftp aber mit dem Konsolen-ftp tritt das gleiche Problem auf. OS: Gentoo Linux, Kernel 2.6.8.1
Also:
wenn ich in ein Unterverzeichnis gehe und dort ein "ls" ausführe, bleibt ftp mitten drin stehen, aber immer bei der gleichen Datei. Die Datei zu löschen bringt nix, da bleibt er bei ner anderen Datei stehen. In anderen Verzeichnissen gehts aber, ich hab nur in ein paar wenigen Verzeichnissen Probleme. Wenn ich versuche eine kleine Datei runterzuladen geht es, versuch ich es mit einem Bild geht es nicht. Es funktioniert weder im passiven noch im aktiven Betrieb. Versuch ich das selbe auf nem anderen Rechner (der an dem selben Router hängt wie der Rechner wo das Problem besteht, also an einem falsch konfigurierten Router sollte es nicht liegen) auf dem FreeBSD läuft klappt alles einwandfrei.
Firewall ist auf dem Client selbst keine installiert.
Hat jemand ne Idee, woran das liegen kann?
Mfg. Erisch
Hi Erik,
On Wed, May 04, 2005 at 13:04:54 +0200, Erik Trauschke wrote:
Wenn ich versuche eine kleine Datei runterzuladen geht es, versuch ich es mit einem Bild geht es nicht. Es funktioniert weder im passiven noch im aktiven Betrieb. Versuch ich das selbe auf nem anderen Rechner (der an dem selben Router haengt wie der Rechner wo das Problem besteht, also an einem falsch konfigurierten Router sollte es nicht liegen) auf dem FreeBSD laeuft klappt alles einwandfrei.
Hoert sich nach zu grosser MTU an, in Kombination mit verworfenen ICMP fragmentation needed Paketen. Bist Du sicher, dass nirgends ICMP weggeworfen wird? Ansonsten setze probehalber die MTU auf dem Ethernet-Interface des Gentoo-Rechners herunter.
bye, Chris
am 04.05.2005, um 13:04:54 +0200 mailte Erik Trauschke folgendes:
wenn ich in ein Unterverzeichnis gehe und dort ein "ls" ausführe, bleibt ftp mitten drin stehen, aber immer bei der gleichen Datei. Die Datei zu ... Wenn ich versuche eine kleine Datei runterzuladen geht es, versuch ich es mit einem Bild geht es nicht. Es funktioniert weder im passiven noch im aktiven Betrieb.
MTU?
Hat jemand ne Idee, woran das liegen kann?
Es klingt stark nach einem MTU-Problem. Vergleich mal die Werte zwischen demRechner, wo geht, und den Rechner, wo nicht geht.
Andreas
Hallo
Noch paar Infos zum Netzwerk die MTU betreffend. Die NAT Funktion des Routers benutzt ein MSS-Clamp um die MTU für geNATete Pakete herunterzusetzen und zwar auf 1452. Das funktionierte bisher reibungslos. Auf dem BSD Rechner beträgt die MTU des realen IF 1500:
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
Das selbe gilt für den Linux Rechner:
eth0 [...] UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
Ich hab ein wenig herumexperimentiert, und die MTU auf der Linux-Kiste schrittweise bis 100 gesenkt. Wenn ich ein ls im ftp mache, wurde immer mehr angezeigt, aber nie wurde alles angezeigt. Mal davon abgesehen, dass mit MTU = 100 alles extrem lahm wurde.
Mfg. Erisch
Am Mi, den 04.05.2005 schrieb Andreas Kretschmer um 14:03:
am 04.05.2005, um 13:04:54 +0200 mailte Erik Trauschke folgendes:
wenn ich in ein Unterverzeichnis gehe und dort ein "ls" ausführe, bleibt ftp mitten drin stehen, aber immer bei der gleichen Datei. Die Datei zu ... Wenn ich versuche eine kleine Datei runterzuladen geht es, versuch ich es mit einem Bild geht es nicht. Es funktioniert weder im passiven noch im aktiven Betrieb.
MTU?
Hat jemand ne Idee, woran das liegen kann?
Es klingt stark nach einem MTU-Problem. Vergleich mal die Werte zwischen demRechner, wo geht, und den Rechner, wo nicht geht.
Andreas
Erik Trauschke erik.trauschke@freenet.de (Mi 04 Mai 2005 20:06:43 CEST):
Noch paar Infos zum Netzwerk die MTU betreffend. Die NAT Funktion des Routers benutzt ein MSS-Clamp um die MTU für geNATete Pakete herunterzusetzen und zwar auf 1452. Das funktionierte bisher reibungslos. Auf dem BSD Rechner beträgt die MTU des realen IF 1500:
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
Das selbe gilt für den Linux Rechner:
eth0 [...] UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
Ich hab ein wenig herumexperimentiert, und die MTU auf der Linux-Kiste schrittweise bis 100 gesenkt. Wenn ich ein ls im ftp mache, wurde immer mehr angezeigt, aber nie wurde alles angezeigt. Mal davon abgesehen, dass mit MTU = 100 alles extrem lahm wurde.
tcpdump hast Du schon benutzt, um zu sehen, was passiert, wenn nichts mehr passiert? Oder um zu sehen, wie sich beide Seiten versuchen, zu einigen?
Es gibt da noch etwas: PMTU-Discovery. Mit solchen Dingen hatte ich mal Probleme. Man kann das dem Kernel ausschalten.
Heiko
So, jetzt bin ich langsam am wahnsinnig werden.
Ich hab spasseshalber mal von ner alten Fedora Install-CD, die ich noch gefunden habe, gebootet, den NIC mittels DHCP konfigurieren lassen (wie das beim Gentoo System auch gemacht wird) und dann ftp benutzt - siehe da es geht. Dann hab ich paar Experimente mit Ethereal und snoop gemacht um zu sehen was eigentlich los ist. Mit Ethereal auf dem Client stell ich fest, dass das Letzte was gesendet wurde ein ACK auf ein FTP-Datenpaket ist. Danach ist Ruhe. Ein snoop auf dem Router am DSL-Interface (sppp0) zeigt mir, dass der FTP Server nach dem ACK meines Clients mehrfach weiter versucht, das nächste FTP-Datenpaket zuzustellen. Das kommt aber nicht am Client an. Schalte ich die Firewall ganz ab, gehts. Die Firewall (IPFilter) unterstützt stateful filtering und hat auch bisher einwandfrei funktioniert. Aber jetzt werden ab einem bestimmten Zeitpunkt die FTP-Pakete einfach nicht mehr weitergeleitet.
Und jetzt habe ich ein Problem: Warum gehts es an dem anderen Rechner und mit der Fedora Install-CD. Der Client hat doch keinen Einfluss auf die Firewall (oder sehe ich das falsch), für ihn ist sie ja quasi unsichtbar.
So, jetzt bin ich gespannt was euch noch einfällt, mir nämlich nix mehr.
Achso: das mit dem PMTU-Discovery abschalten hab ich versucht: keine Änderung.
Mfg. Erisch
Am Mi, den 04.05.2005 schrieb Heiko Schlittermann um 22:42:
Erik Trauschke erik.trauschke@freenet.de (Mi 04 Mai 2005 20:06:43 CEST):
Noch paar Infos zum Netzwerk die MTU betreffend. Die NAT Funktion des Routers benutzt ein MSS-Clamp um die MTU für geNATete Pakete herunterzusetzen und zwar auf 1452. Das funktionierte bisher reibungslos. Auf dem BSD Rechner beträgt die MTU des realen IF 1500:
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
Das selbe gilt für den Linux Rechner:
eth0 [...] UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
Ich hab ein wenig herumexperimentiert, und die MTU auf der Linux-Kiste schrittweise bis 100 gesenkt. Wenn ich ein ls im ftp mache, wurde immer mehr angezeigt, aber nie wurde alles angezeigt. Mal davon abgesehen, dass mit MTU = 100 alles extrem lahm wurde.
tcpdump hast Du schon benutzt, um zu sehen, was passiert, wenn nichts mehr passiert? Oder um zu sehen, wie sich beide Seiten versuchen, zu einigen?
Es gibt da noch etwas: PMTU-Discovery. Mit solchen Dingen hatte ich mal Probleme. Man kann das dem Kernel ausschalten.
Heiko
Lug-dd maillist - Lug-dd@schlittermann.de http://mailman.schlittermann.de/mailman/listinfo/lug-dd
On Thursday 05 May 2005 17:00, Erik Trauschke wrote:
So, jetzt bin ich langsam am wahnsinnig werden.
Drink lieber ein Bier und geniesse den Männertag... ;-)
Dann hab ich paar Experimente mit Ethereal und snoop gemacht um zu sehen was eigentlich los ist. Mit Ethereal auf dem Client stell ich fest, dass das Letzte was gesendet wurde ein ACK auf ein FTP-Datenpaket ist. Danach ist Ruhe. Ein snoop auf dem Router am DSL-Interface (sppp0) zeigt mir, dass der FTP Server nach dem ACK meines Clients mehrfach weiter versucht, das nächste FTP-Datenpaket zuzustellen. Das kommt aber nicht am Client an. Schalte ich die Firewall ganz ab, gehts.
Ganz blöde Vermutung: der eine Client benutzt active FTP (geht net), der andere passive FTP (geht).
Der Unterschied ist einfach der, dass bei active FTP jede Datenübertragung (put, get, dir, etc.pp.) eine neue Verbindung aufmacht, die vom Server initiiert wird. Bei passive FTP läuft alles über die vom Client gestartete Verbindung.
Versuch mal auf dem System, wo nix geht, "passive" in den FTP-Client einzuhacken, bevor Du das erste Mal Daten holst.
Konrad
Am Do, den 05.05.2005 schrieb Konrad Rosenbaum um 18:27:
On Thursday 05 May 2005 17:00, Erik Trauschke wrote:
So, jetzt bin ich langsam am wahnsinnig werden.
Drink lieber ein Bier und geniesse den Männertag... ;-)
Dann hab ich paar Experimente mit Ethereal und snoop gemacht um zu sehen was eigentlich los ist. Mit Ethereal auf dem Client stell ich fest, dass das Letzte was gesendet wurde ein ACK auf ein FTP-Datenpaket ist. Danach ist Ruhe. Ein snoop auf dem Router am DSL-Interface (sppp0) zeigt mir, dass der FTP Server nach dem ACK meines Clients mehrfach weiter versucht, das nächste FTP-Datenpaket zuzustellen. Das kommt aber nicht am Client an. Schalte ich die Firewall ganz ab, gehts.
Ganz blöde Vermutung: der eine Client benutzt active FTP (geht net), der andere passive FTP (geht).
Ne, daran liegts nicht, das hab ich alles schon ausprobiert.
Der Unterschied ist einfach der, dass bei active FTP jede Datenübertragung (put, get, dir, etc.pp.) eine neue Verbindung aufmacht, die vom Server initiiert wird. Bei passive FTP läuft alles über die vom Client gestartete Verbindung.
Versuch mal auf dem System, wo nix geht, "passive" in den FTP-Client einzuhacken, bevor Du das erste Mal Daten holst.
Wie gesagt, geht weder aktiv noch passiv
Mfg. Erisch
So Problem gelöst.
Wie?
Ganz einfach nen neuen Kernel kompiliert (war eh mal wieder fällig)
Trotzdem vielen Dank.
Mfg. Erisch
Am Donnerstag, 5. Mai 2005 17:00 schrieb Erik Trauschke:
So, jetzt bin ich langsam am wahnsinnig werden.
Immer schön ruhig. Es gibt für jeden Bug einen Workaround
Schalte ich die Firewall ganz ab, gehts.
Du hast ihn gefunden :-)
Die Firewall (IPFilter) unterstützt stateful filtering und hat auch bisher einwandfrei funktioniert.
Das Problem ist zu 99% in deiner Firewall auf dem FreeBSD zu suchen. Unter NetBSD gab/gibt es im IPF auch so einen Bug, das manche Pakete einfach nicht ordentlich behandelt werden. Matthias hatte mal so ein Problem. Er hatte eine redundante Firewallregel am Ende stehen und eigentlich hätten die vorherstehenden Regeln matchen müssen. Nachdem die redundate Regel entfernt war, lief es wieder.
So, jetzt bin ich gespannt was euch noch einfällt, mir nämlich nix mehr.
1. s.o. 2. Wahrsagen (Glaskugel, Teeblätter...) 3. totes Huhn über der Rechner halten 4. Firewall abschalten 5. "Mit Linux statt FreeBSD wäre das nicht passiert". ;-) 6. .... .oO(Hmm muss erstmal reichen)
Jens
PS: In geschilderter Situtation war /me nur "Opfer". Ich kann dir aber die Mail-Addresse vom Firewallbetreiber ausgraben.
Jens Weisse jens.weisse@gmx.net schrieb:
Immer schön ruhig. Es gibt für jeden Bug einen Workaround
Schalte ich die Firewall ganz ab, gehts.
Du hast ihn gefunden :-)
;-)
So, jetzt bin ich gespannt was euch noch einfällt, mir nämlich nix mehr.
- s.o.
- Wahrsagen (Glaskugel, Teeblätter...)
- totes Huhn über der Rechner halten
- Firewall abschalten
- "Mit Linux statt FreeBSD wäre das nicht passiert". ;-)
- .... .oO(Hmm muss erstmal reichen)
5. ;-)
SCNR ;-)
And *FTP, sowohl active/passive, auf geNATteten Rechnern machend* reas
Am Sa, den 07.05.2005 schrieb Jens Weisse um 20:53:
Am Donnerstag, 5. Mai 2005 17:00 schrieb Erik Trauschke:
So, jetzt bin ich langsam am wahnsinnig werden.
Immer schön ruhig. Es gibt für jeden Bug einen Workaround
Schalte ich die Firewall ganz ab, gehts.
Du hast ihn gefunden :-)
Die Firewall (IPFilter) unterstützt stateful filtering und hat auch bisher einwandfrei funktioniert.
Das Problem ist zu 99% in deiner Firewall auf dem FreeBSD zu suchen. Unter NetBSD gab/gibt es im IPF auch so einen Bug, das manche Pakete einfach nicht ordentlich behandelt werden. Matthias hatte mal so ein Problem. Er hatte eine redundante Firewallregel am Ende stehen und eigentlich hätten die vorherstehenden Regeln matchen müssen. Nachdem die redundate Regel entfernt war, lief es wieder.
Ne, da haste was nicht ganz richtig verstanden: Der FreeBSD Rechner ist auch Client. Er und die Linux-Kiste hängen beide an einem Router auf dem die Firewall installiert ist:
--------- ___ |FreeBSD|------>| | --------- | H | ------------------- | U |<-----|Router + Firewall|-------->>>>> Internet --------- | B | ------------------- | Linux |------>|___| ---------
Egal, geht ja jetzt. Und an der Firewall liegts nicht.
Mfg. Erisch
Am Samstag, 7. Mai 2005 21:59 schrieb Erik Trauschke:
Ne, da haste was nicht ganz richtig verstanden: Der FreeBSD Rechner ist auch Client. Er und die Linux-Kiste hängen beide an einem Router auf dem die Firewall installiert ist:
Upps. Sorry. Hab deinen Satz:
Die Firewall (IPFilter) unterstützt stateful filtering und hat auch bisher einwandfrei funktioniert.
wohl falsch verstanden. Man sollte doch keine 100 Listenmails am Stück lesen. :o
Jens
lug-dd@mailman.schlittermann.de