Wie kann ich langlebige Verbindungen erkennen und für die Gestaltung markieren?

1162
joeytwiddle

Ich möchte TCP-Verbindungen erkennen, die länger als eine Minute geöffnet waren (oder für mehr als N Bytes oder M Pakete), sodass ich sie als Massenverkehr klassifizieren ("downloads") und sie als "Prioritäten" klassifizieren kann.

Kann ich mit iptables / netfilter / conntrack lange laufende Streams erkennen und sie mit tc für die Formgebung markieren?

Ich dachte, ich könnte die TCP-Sequenznummer als ein Maß für die Länge eines Streams verwenden, aber leider fängt es nicht bei Null an! Möglicherweise könnte die Verbindungsverfolgung mit netfilter / conntrack die korrekte Sequenznummer oder die Gesamtanzahl der Bytes und die Dauer der Verbindung bestimmen und entscheiden, ob das Paket markiert werden soll.

(Ich könnte auch erwähnen, dass ich dies beim Eindringen mit einer virtuellen Schnittstelle von ifb0 mache. Derzeit verwende ich tbf-Warteschlangen (mit sfq), um Daten mit niedriger Priorität einzuschränken. Unabhängig davon kann jede Lösung auch für Egress verwendet werden, zum Beispiel für eine Webserver mit einer eingeschränkten Verbindung, der Downloads depriorisieren möchte, um kleine Anfragen zu beschleunigen.)


Update: Mit conntrackd kann ich eine Liste der Verbindungen sehen und wie lange es her ist, dass eine Verbindung hergestellt wurde. Ich habe mit dieser Liste begonnen, IP / Port-Paare zu erkennen, die ich begrenzen möchte (nach 60 Sekunden). Es gibt jedoch eine Reihe von Problemen:

  • conntrack (d) scheint Verbindungen nicht sofort aus der Liste zu löschen, wenn sie geschlossen wurden! Am Ende markiere ich alle Verbindungen für die Begrenzung, auch für die, die fertig sind.
  • Das Setzen von Markierungen in conntrack scheint keine Markierungen in den Paketen (soweit von tc sichtbar) zu setzen. (Dies liegt nicht nur daran, dass conntrack die Pakete nach ifb0 sieht: Ich kann auch keine Markierungen auf Egress-Paketen sehen.) Daher habe ich nur neue Filter zur Begrenzung von tc hinzugefügt, was auf lange Sicht alles andere als ideal ist.
  • conntrack (d) sagt mir nicht, wie viel Bandbreite jede Verbindung verbraucht hat. Daher kann ich zeitweilige Sitzungen (z. B. iosocket) nicht von umfangreichen Downloads unterscheiden. (In jedem Fall ist dies ein schwieriges Problem: Wenn wir bereits 5 Downloads haben und ein neuer Download beginnt, wie können wir dann feststellen, dass er versucht, zu überschwemmen? Er erreicht nicht annähernd die maximale Rate.)

Irgendwelche Vorschläge mit den oben genannten würden gebeten.

(Auch wenn ich die Downloads nicht richtig klassifizieren kann, hat die Verwendung von tfb zur Begrenzung der eingehenden Daten auf 80% meiner maximalen Downrate ein Überfluten der Verbindung verhindert und das Herstellen neuer Verbindungen viel einfacher als zuvor ermöglicht.)

1
Ok, ich habe eine Reihe von Tools gefunden, die detaillierte Informationen über den Netzwerkverkehr anzeigen können (z. B. zeigt jnettop einige Informationen, die von conntrackd nicht angezeigt werden). http://www.debianhelp.co.uk/networktools2.htm Ich kann meinen Klassifiziererdämon möglicherweise mit einem von ihnen verbessern. joeytwiddle vor 11 Jahren 0

1 Antwort auf die Frage

2
killermist

Die Lebenserwartung und die tatsächliche Lebensdauer einer Verbindung hat NULL, je nachdem, ob eine Verbindung speziell geformt werden soll oder nicht.

Einige Beispiele:

SSH, möglicherweise langlebig, Minuten, Stunden, Tage, Wochen, sogar Monate. Immer noch hohe Priorität, um auf Benutzerinteraktion reagieren zu können.

Bittorrent (oder ähnliche Protokolle), zufällig gelebt, einige für Sekunden, dann getrennt, andere für Minuten oder Stunden, dann getrennt. Nur wenige halten mehr als einen Tag auf einmal.

Zusammenfassung: Die Länge einer Verbindung hat NICHTS damit zu tun, ob die Verbindung "bulk" ist oder nicht und ob die Verbindung als bulk behandelt werden soll oder nicht.

Nicht unbedingt direkt verwandt, aber nützlich:

Ist die Begrenzung des Download-Verkehrs mithilfe von Traffic Shaping hilfreich oder schädlich?

Ich wünschte, ich könnte Ihnen zustimmen, aber wenn ich die Langlebigkeit mit der Gesamtzahl der über diese Verbindung übertragenen Bytes * kombiniere, dann kenne ich die Rate und kann langlebige Downloads von kurzlebigen HTTP-Anforderungen und langlebigen unterscheiden SSH-Sitzungen. Meine endgültige Lösung verwendet eine modifizierte Version von jnettop und hat in den letzten 9 Monaten gut genug für mich funktioniert, aber ich fürchte, ich bin noch nicht dazu gekommen, sie zu veröffentlichen! joeytwiddle vor 10 Jahren 0