2016-04-04 5 views
0

Wie funktioniert die TCP-Neuübertragung? Welche Formel hängt davon ab, wie viele Pakete erneut gesendet werden? Ich verstehe, dass es irgendwo im kubischen tcp festgelegt ist, aber wo?TCP-Neuübertragung: Wie viele Pakete werden erneut gesendet?

Interessiert, wie es in Linux funktioniert. Ich benutze Debian 8 und schaue nur auf Dumps. Ich habe eine Verbindung mit Netcat zu 27000 Port eingerichtet. Normalerweise mache ich auf dem Server, der iptables alle Pakete auf Port 27000 fallen lässt und ein Paket sendet (Und schau, wie oft das Paket erneut gesendet wurde.).

+0

Dies ist ein * sehr * breite Frage (siehe meine Antwort). ** Vielleicht möchten Sie genauer sein. ** Ihre Frage kann sehr gut als "zu breit" oder nicht-thematisch (weil nicht direkt programmierend) markiert und in die Warteschleife gesetzt werden. – jbm

Antwort

0

Dies ist eine sehr breite Frage.

Nein, das ist im Grunde nicht unbedingt CUBIC.

Die Neuübertragung wird zuerst in TCP "Basic" RFC 793 (1981), Abschnitt 3.7 Datenkommunikation, Abschnitt "Retransmission Timeout" angegeben.

Seitdem gab es viele (wirklich viele [*]) Erweiterungen. Ein sehr auffälliges ist "Slow-Start", zuletzt spezifiziert durch RFC 5681, aber die Wurzeln gehen zurück bis 1997 RFC 2001, "TCP Langsamer Start, Congestion Avoidance, Fast Retransmit und Fast Recovery Algorithms".

Es gibt keine Einheitsgröße in dieser Domäne, es gibt immer einen Kompromiss. Plus "intelligente" Algorithmen haben mehr Platz (Software + CPU-Nutzung), so dass sie je nach Anwendung verwendet werden können oder auch nicht oder sogar einfach verfügbar sind (denken Sie an Embedded-Geräte). Und da diese Dinge in der Implementierung sind (d. H. Nicht in den ausgetauschten Daten zwischen Host gesehen), können Sie nie sicher wissen, welche Host welche verwenden. Sie sehen zum Beispiel die TCP-Fenstergröße und -skalierung in den Segmenten, aber Sie werden nicht wissen, mit welchem ​​Algorithmus sie verwaltet wird.

Wie für Linux, es ist Standard zu PRR seit 3.2. Davor war CUBIC und vorheriger BIC.

Obwohl Standard nicht bedeutet, dass es der einzige verfügbare ist. Auf meinen debian Lager 4.4.0 Kernel, es ist CUBIC: Abschnitt: "erweiterte Staukontrolle TCP"

[email protected]:~$ cat /proc/sys/net/ipv4/tcp_allowed_congestion_control 
cubic reno 

... und es gibt ein Dutzend in der:

[email protected]:~$ cat /proc/sys/net/ipv4/tcp_congestion_control 
cubic 

Obwohl Reno auch verfügbar ist der Kernel-Konfiguration.

*: https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm

+0

Ich benutze auch Debian (ich benutze nur Netcat und Dumps). Es ist wirklich eine schwierige Frage, ich verstehe jetzt, was als rto angesehen wird, aber ich habe keine total rto (oder totale Retransmission-Pakete) gefunden. Ich verstehe nicht, warum die Option/proc/sys/net/ipv4/tcp_retries2. Ich werde weiterhin RFC schauen. –

+0

Also natürlich hast du https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt und vielleicht den (122 Seiten langen) RFC 1122 gelesen. Das ist ein _huge_ Thema an sich, Linux Netzwerkimplementierung ist ein _humongous_ Stapel von Code. 2 Ratschläge: 1/Denken Sie daran, dass Linux nicht "alleine" ist: Ich habe 15 Jahre lang an Embedded Linux gearbeitet, hauptsächlich an der Netzwerk-Middleware, und meistens rede ich mit anderen TCP/IP-Implementierungen , von Windows CE zu proprietären Avionik-Stacks zu was nicht.Was Sie also von Linux lernen, übersetzt sich nicht in "die reale Welt". – jbm

+0

(... und zweiter Ratschlag) 2/Es kann eine einfachere TCP/IP-Lösung zur Handhabung von Überlastungen geben, um zu studieren, schauen Sie sich eCos, RTEMS, FreeRTOS etc. an. Aber wenn Sie sich auf CUBIC konzentrieren wollen, sei es und vielleicht OK mit Linux-Implementierung. Was mich betrifft, weiß ich nicht einmal (noch muss ich es nicht wissen), ob '/ proc/sys/net/ipv4/tcp_retries2' in irgendeiner Weise mit CUBIC in Verbindung steht. Beispiel: Nur für den Test bin ich zu Reno gewechselt, und es ist immer noch mit dem gleichen '15' Wert da. – jbm

Verwandte Themen