TCP-Socket-Puffer für jeden Fluss

918
amer m

Erstellt der Linux-Kernel einen Puffer für jede TCP-Verbindung. Wenn wir beispielsweise 1000 TCP-Verbindungen haben, erstellt der Kernel 1000 Socket-Puffer und speichert die Pakete des einzelnen Flusses in seinem Socket-Puffer. ODER alle TCP-Flüsse teilen sich einen einzigen großen TCP-Socketpuffer. Dies bedeutet, dass alle Pakete im gemeinsam genutzten TCP-Socketpuffer gespeichert werden.

Danke, Amer

0

1 Antwort auf die Frage

1
David Schwartz

Empfangene Pakete werden in einem Puffer gespeichert, bis sie verarbeitet werden können. Sobald sie jedoch verarbeitet wurden, werden sie verworfen. Übertragene Pakete werden in einem Puffer gespeichert, bis sie übertragen werden können. Dann werden sie jedoch verworfen.

Für jede TCP-Verbindung gibt es Statusinformationen, die die grundlegenden Informationen zur TCP-Verbindung enthalten. Es gibt auch einen Puffer für ausgehende Daten auf Anwendungsebene, der noch nicht von der anderen Seite bestätigt wurde, und einen Puffer für Daten, die empfangen, aber noch nicht von der lokalen Anwendung gelesen wurden. Diese enthalten jedoch Datenbytes auf Anwendungsebene, keine Pakete.

Vielen Dank für diese hilfreichen Informationen. Hat der Puffer für ausgehende Anwendungsebenen für alle ausgehenden Datenflüsse dieser Anwendung oder jeder Datenstrom seinen eigenen Puffer. Basierend auf dem Beispiel werden wir 1000 tcp-Socket-Puffer oder einen einzelnen gemeinsam genutzten tcp-Socket-Puffer haben, vorausgesetzt, die Anwendung ist tcp-basiert. amer m vor 7 Jahren 0
Die Anwendung selbst kann gemeinsam genutzte Puffer verwenden, der Kernel verfügt jedoch über einen separaten Ausgangspuffer für jede Verbindung, die nicht bestätigte Daten enthält. Wenn der Speicher knapp ist, können Sie die Pufferung des Kernels verkleinern und die Pufferung in der Anwendung, in der Sie die Pufferfreigabe implementieren können, durchführen. Der TCP-Durchsatz kann ein wenig leiden, aber das ist je nach Anwendungsfall möglicherweise nicht so wichtig. David Schwartz vor 7 Jahren 0
Aus Ihrer Erklärung geht hervor, dass das TCP-Überlastungsfenster im TCP-Puffer auf Anwendungsebene ausgeführt wird, wenn dieser Puffer von allen Flows gemeinsam genutzt wird, die von derselben Anwendung initiiert wurden, z. B. dass alle FTP-Flows den gleichen ausgehenden TCP-Puffer verwenden. Scheint dies einen Konflikt zu haben mit dem Konzept, dass der Kernel für jede TCP-Verbindung einen TCP-Socketpuffer erstellt !!? Vielen Dank amer m vor 7 Jahren 0
Nein nein Nein. Du hast mich völlig falsch verstanden. Der Kernel führt das TCP-Überlastungsfenster nur mit seinem Puffer aus, der nicht gemeinsam genutzt werden kann. Eine Anwendung kann gemeinsam genutzte Puffer verwenden, wenn dies gewünscht wird, die meisten jedoch nicht. David Schwartz vor 7 Jahren 0
Im Journal des Linux-Netzwerkstapels gibt es IP-Stapel, Qdisc-Puffer und Ringpuffer. Ich habe ein Missverständnis zwischen dem TCP-Puffer, in dem das Überlastungsfenster ausgeführt wird, und der TCP-Socket-Warteschlange (Puffer) oder der TCP-Socket-Empfangswarteschlange, in der der Kernel eine Warteschlange pro TCP-Verbindung erstellt. Könntest du mir das bitte erklären? Vielen Dank amer m vor 7 Jahren 0
Es gibt eine Kernel-Sende- und Empfangswarteschlange pro TCP-Verbindung. Es enthält Anwendungsdaten, keine Pakete. Die Sendewarteschlange enthält Daten, die von der anderen Seite noch nicht bestätigt wurden. Die Empfangswarteschlange enthält Daten, die von der lokalen Anwendung noch nicht akzeptiert wurden. Die TCP-Überlastungsalgorithmen und solche verwenden diese Warteschlangen. David Schwartz vor 7 Jahren 0